quantize_pvt.h 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128
  1. /*
  2. * quantize_pvt include file
  3. *
  4. * Copyright (c) 1999 Takehiro TOMINAGA
  5. *
  6. * This library is free software; you can redistribute it and/or
  7. * modify it under the terms of the GNU Library General Public
  8. * License as published by the Free Software Foundation; either
  9. * version 2 of the License, or (at your option) any later version.
  10. *
  11. * This library is distributed in the hope that it will be useful,
  12. * but WITHOUT ANY WARRANTY; without even the implied warranty of
  13. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
  14. * Library General Public License for more details.
  15. *
  16. * You should have received a copy of the GNU Library General Public
  17. * License along with this library; if not, write to the
  18. * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
  19. * Boston, MA 02111-1307, USA.
  20. */
  21. #ifndef LAME_QUANTIZE_PVT_H
  22. #define LAME_QUANTIZE_PVT_H
  23. #define IXMAX_VAL 8206 /* ix always <= 8191+15. see count_bits() */
  24. /* buggy Winamp decoder cannot handle values > 8191 */
  25. /* #define IXMAX_VAL 8191 */
  26. #define PRECALC_SIZE (IXMAX_VAL+2)
  27. extern const int nr_of_sfb_block[6][3][4];
  28. extern const int pretab[SBMAX_l];
  29. extern const int slen1_tab[16];
  30. extern const int slen2_tab[16];
  31. extern const scalefac_struct sfBandIndex[9];
  32. extern FLOAT pow43[PRECALC_SIZE];
  33. #ifdef TAKEHIRO_IEEE754_HACK
  34. extern FLOAT adj43asm[PRECALC_SIZE];
  35. #else
  36. extern FLOAT adj43[PRECALC_SIZE];
  37. #endif
  38. #define Q_MAX (256+1)
  39. #define Q_MAX2 116 /* minimum possible number of
  40. -cod_info->global_gain
  41. + ((scalefac[] + (cod_info->preflag ? pretab[sfb] : 0))
  42. << (cod_info->scalefac_scale + 1))
  43. + cod_info->subblock_gain[cod_info->window[sfb]] * 8;
  44. for long block, 0+((15+3)<<2) = 18*4 = 72
  45. for short block, 0+(15<<2)+7*8 = 15*4+56 = 116
  46. */
  47. extern FLOAT pow20[Q_MAX + Q_MAX2 + 1];
  48. extern FLOAT ipow20[Q_MAX];
  49. typedef struct calc_noise_result_t {
  50. FLOAT over_noise; /* sum of quantization noise > masking */
  51. FLOAT tot_noise; /* sum of all quantization noise */
  52. FLOAT max_noise; /* max quantization noise */
  53. int over_count; /* number of quantization noise > masking */
  54. int over_SSD; /* SSD-like cost of distorted bands */
  55. int bits;
  56. } calc_noise_result;
  57. /**
  58. * allows re-use of previously
  59. * computed noise values
  60. */
  61. typedef struct calc_noise_data_t {
  62. int global_gain;
  63. int sfb_count1;
  64. int step[39];
  65. FLOAT noise[39];
  66. FLOAT noise_log[39];
  67. } calc_noise_data;
  68. int on_pe(lame_internal_flags * gfc, const FLOAT pe[2][2],
  69. int targ_bits[2], int mean_bits, int gr, int cbr);
  70. void reduce_side(int targ_bits[2], FLOAT ms_ener_ratio, int mean_bits, int max_bits);
  71. void iteration_init(lame_internal_flags * gfc);
  72. int calc_xmin(lame_internal_flags const *gfc,
  73. III_psy_ratio const *const ratio, gr_info * const cod_info, FLOAT * l3_xmin);
  74. int calc_noise(const gr_info * const cod_info,
  75. const FLOAT * l3_xmin,
  76. FLOAT * distort, calc_noise_result * const res, calc_noise_data * prev_noise);
  77. void set_frame_pinfo(lame_internal_flags * gfc, const III_psy_ratio ratio[2][2]);
  78. /* takehiro.c */
  79. int count_bits(lame_internal_flags const *const gfc, const FLOAT * const xr,
  80. gr_info * const cod_info, calc_noise_data * prev_noise);
  81. int noquant_count_bits(lame_internal_flags const *const gfc,
  82. gr_info * const cod_info, calc_noise_data * prev_noise);
  83. void best_huffman_divide(const lame_internal_flags * const gfc, gr_info * const cod_info);
  84. void best_scalefac_store(const lame_internal_flags * gfc, const int gr, const int ch,
  85. III_side_info_t * const l3_side);
  86. int scale_bitcount(const lame_internal_flags * gfc, gr_info * cod_info);
  87. void huffman_init(lame_internal_flags * const gfc);
  88. void init_xrpow_core_init(lame_internal_flags * const gfc);
  89. FLOAT athAdjust(FLOAT a, FLOAT x, FLOAT athFloor, float ATHfixpoint);
  90. #define LARGE_BITS 100000
  91. #endif /* LAME_QUANTIZE_PVT_H */