]> 4ch.mooo.com Git - 16.git/blob - src/lib/doslib/ext/lame/quantize_pvt.h
wwww
[16.git] / src / lib / doslib / ext / lame / quantize_pvt.h
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
22 #ifndef LAME_QUANTIZE_PVT_H
23 #define LAME_QUANTIZE_PVT_H
24
25 #define IXMAX_VAL 8206  /* ix always <= 8191+15.    see count_bits() */
26
27 /* buggy Winamp decoder cannot handle values > 8191 */
28 /* #define IXMAX_VAL 8191 */
29
30 #define PRECALC_SIZE (IXMAX_VAL+2)
31
32
33 extern const int nr_of_sfb_block[6][3][4];
34 extern const int pretab[SBMAX_l];
35 extern const int slen1_tab[16];
36 extern const int slen2_tab[16];
37
38 extern const scalefac_struct sfBandIndex[9];
39
40 extern FLOAT pow43[PRECALC_SIZE];
41 #ifdef TAKEHIRO_IEEE754_HACK
42 extern FLOAT adj43asm[PRECALC_SIZE];
43 #else
44 extern FLOAT adj43[PRECALC_SIZE];
45 #endif
46
47 #define Q_MAX (256+1)
48 #define Q_MAX2 116      /* minimum possible number of
49                            -cod_info->global_gain
50                            + ((scalefac[] + (cod_info->preflag ? pretab[sfb] : 0))
51                            << (cod_info->scalefac_scale + 1))
52                            + cod_info->subblock_gain[cod_info->window[sfb]] * 8;
53
54                            for long block, 0+((15+3)<<2) = 18*4 = 72
55                            for short block, 0+(15<<2)+7*8 = 15*4+56 = 116
56                          */
57
58 extern FLOAT pow20[Q_MAX + Q_MAX2 + 1];
59 extern FLOAT ipow20[Q_MAX];
60
61 typedef struct calc_noise_result_t {
62     FLOAT   over_noise;      /* sum of quantization noise > masking */
63     FLOAT   tot_noise;       /* sum of all quantization noise */
64     FLOAT   max_noise;       /* max quantization noise */
65     int     over_count;      /* number of quantization noise > masking */
66     int     over_SSD;        /* SSD-like cost of distorted bands */
67     int     bits;
68 } calc_noise_result;
69
70
71 /**
72 * allows re-use of previously
73 * computed noise values
74 */
75 typedef struct calc_noise_data_t {
76     int     global_gain;
77     int     sfb_count1;
78     int     step[39];
79     FLOAT   noise[39];
80     FLOAT   noise_log[39];
81 } calc_noise_data;
82
83
84 int     on_pe(lame_internal_flags * gfc, const FLOAT pe[2][2],
85               int targ_bits[2], int mean_bits, int gr, int cbr);
86
87 void    reduce_side(int targ_bits[2], FLOAT ms_ener_ratio, int mean_bits, int max_bits);
88
89
90 void    iteration_init(lame_internal_flags * gfc);
91
92
93 int     calc_xmin(lame_internal_flags const *gfc,
94                   III_psy_ratio const *const ratio, gr_info * const cod_info, FLOAT * l3_xmin);
95
96 int     calc_noise(const gr_info * const cod_info,
97                    const FLOAT * l3_xmin,
98                    FLOAT * distort, calc_noise_result * const res, calc_noise_data * prev_noise);
99
100 void    set_frame_pinfo(lame_internal_flags * gfc, const III_psy_ratio ratio[2][2]);
101
102
103
104
105 /* takehiro.c */
106
107 int     count_bits(lame_internal_flags const *const gfc, const FLOAT * const xr,
108                    gr_info * const cod_info, calc_noise_data * prev_noise);
109 int     noquant_count_bits(lame_internal_flags const *const gfc,
110                            gr_info * const cod_info, calc_noise_data * prev_noise);
111
112
113 void    best_huffman_divide(const lame_internal_flags * const gfc, gr_info * const cod_info);
114
115 void    best_scalefac_store(const lame_internal_flags * gfc, const int gr, const int ch,
116                             III_side_info_t * const l3_side);
117
118 int     scale_bitcount(const lame_internal_flags * gfc, gr_info * cod_info);
119
120 void    huffman_init(lame_internal_flags * const gfc);
121
122 void    init_xrpow_core_init(lame_internal_flags * const gfc);
123
124 FLOAT   athAdjust(FLOAT a, FLOAT x, FLOAT athFloor, float ATHfixpoint);
125
126 #define LARGE_BITS 100000
127
128 #endif /* LAME_QUANTIZE_PVT_H */