comparison mpegaudiotab.h @ 84:608c7f964bca libavcodec

merged code and tables between encoder and decoder
author glantau
date Sat, 15 Sep 2001 22:42:25 +0000
parents 986e461dc072
children 718a22dc121f
comparison
equal deleted inserted replaced
83:2969a96650e5 84:608c7f964bca
1 /* 1 /*
2 * mpeg audio layer 2 tables. Most of them come from the mpeg audio 2 * mpeg audio layer 2 tables. Most of them come from the mpeg audio
3 * specification. 3 * specification.
4 * 4 *
5 * Copyright (c) 2000 Gerard Lantau. 5 * Copyright (c) 2000, 2001 Gerard Lantau.
6 * 6 *
7 * The licence of this code is contained in file LICENCE found in the 7 * The licence of this code is contained in file LICENCE found in the
8 * same archive 8 * same archive
9 */ 9 */
10
11 static const unsigned short bitrate_tab[2][15] = {
12 {0,8,16,24,32,40,48,56,64,80,96,112,128,144,160}, /* mpeg2 lsf */
13 {0,32,48,56,64,80,96,112,128,160,192,224,256,320,384}, /* mpeg1 */
14 };
15
16 static const unsigned short freq_tab[3] = { 44100, 48000, 32000 };
17 10
18 #define SQRT2 1.41421356237309514547 11 #define SQRT2 1.41421356237309514547
19 12
20 static const int costab32[30] = { 13 static const int costab32[30] = {
21 FIX(0.54119610014619701222), 14 FIX(0.54119610014619701222),
59 1, 17, 9, 25, 5, 21, 13, 29, 52 1, 17, 9, 25, 5, 21, 13, 29,
60 3, 19, 11, 27, 7, 23, 15, 31 53 3, 19, 11, 27, 7, 23, 15, 31
61 }; 54 };
62 55
63 56
64 static short filter_bank[512]; 57 static INT16 filter_bank[512];
65
66 static const double enwindow[512] = {0.000000000,
67 -0.000000477, -0.000000477, -0.000000477, -0.000000477, -0.000000477, -0.000000477, -0.000000954, -0.000000954,
68 -0.000000954, -0.000000954, -0.000001431, -0.000001431, -0.000001907, -0.000001907, -0.000002384, -0.000002384,
69 -0.000002861, -0.000003338, -0.000003338, -0.000003815, -0.000004292, -0.000004768, -0.000005245, -0.000006199,
70 -0.000006676, -0.000007629, -0.000008106, -0.000009060, -0.000010014, -0.000011444, -0.000012398, -0.000013828,
71 -0.000014782, -0.000016689, -0.000018120, -0.000019550, -0.000021458, -0.000023365, -0.000025272, -0.000027657,
72 -0.000030041, -0.000032425, -0.000034809, -0.000037670, -0.000040531, -0.000043392, -0.000046253, -0.000049591,
73 -0.000052929, -0.000055790, -0.000059605, -0.000062943, -0.000066280, -0.000070095, -0.000073433, -0.000076771,
74 -0.000080585, -0.000083923, -0.000087261, -0.000090599, -0.000093460, -0.000096321, -0.000099182, 0.000101566,
75 0.000103951, 0.000105858, 0.000107288, 0.000108242, 0.000108719, 0.000108719, 0.000108242, 0.000106812,
76 0.000105381, 0.000102520, 0.000099182, 0.000095367, 0.000090122, 0.000084400, 0.000077724, 0.000069618,
77 0.000060558, 0.000050545, 0.000039577, 0.000027180, 0.000013828, -0.000000954, -0.000017166, -0.000034332,
78 -0.000052929, -0.000072956, -0.000093937, -0.000116348, -0.000140190, -0.000165462, -0.000191212, -0.000218868,
79 -0.000247478, -0.000277042, -0.000307560, -0.000339031, -0.000371456, -0.000404358, -0.000438213, -0.000472546,
80 -0.000507355, -0.000542164, -0.000576973, -0.000611782, -0.000646591, -0.000680923, -0.000714302, -0.000747204,
81 -0.000779152, -0.000809669, -0.000838757, -0.000866413, -0.000891685, -0.000915051, -0.000935555, -0.000954151,
82 -0.000968933, -0.000980854, -0.000989437, -0.000994205, -0.000995159, -0.000991821, -0.000983715, 0.000971317,
83 0.000953674, 0.000930786, 0.000902653, 0.000868797, 0.000829220, 0.000783920, 0.000731945, 0.000674248,
84 0.000610352, 0.000539303, 0.000462532, 0.000378609, 0.000288486, 0.000191689, 0.000088215, -0.000021458,
85 -0.000137329, -0.000259876, -0.000388145, -0.000522137, -0.000661850, -0.000806808, -0.000956535, -0.001111031,
86 -0.001269817, -0.001432419, -0.001597881, -0.001766682, -0.001937389, -0.002110004, -0.002283096, -0.002457142,
87 -0.002630711, -0.002803326, -0.002974033, -0.003141880, -0.003306866, -0.003467083, -0.003622532, -0.003771782,
88 -0.003914356, -0.004048824, -0.004174709, -0.004290581, -0.004395962, -0.004489899, -0.004570484, -0.004638195,
89 -0.004691124, -0.004728317, -0.004748821, -0.004752159, -0.004737377, -0.004703045, -0.004649162, -0.004573822,
90 -0.004477024, -0.004357815, -0.004215240, -0.004049301, -0.003858566, -0.003643036, -0.003401756, 0.003134727,
91 0.002841473, 0.002521515, 0.002174854, 0.001800537, 0.001399517, 0.000971317, 0.000515938, 0.000033379,
92 -0.000475883, -0.001011848, -0.001573563, -0.002161503, -0.002774239, -0.003411293, -0.004072189, -0.004756451,
93 -0.005462170, -0.006189346, -0.006937027, -0.007703304, -0.008487225, -0.009287834, -0.010103703, -0.010933399,
94 -0.011775017, -0.012627602, -0.013489246, -0.014358521, -0.015233517, -0.016112804, -0.016994476, -0.017876148,
95 -0.018756866, -0.019634247, -0.020506859, -0.021372318, -0.022228718, -0.023074150, -0.023907185, -0.024725437,
96 -0.025527000, -0.026310921, -0.027073860, -0.027815342, -0.028532982, -0.029224873, -0.029890060, -0.030526638,
97 -0.031132698, -0.031706810, -0.032248020, -0.032754898, -0.033225536, -0.033659935, -0.034055710, -0.034412861,
98 -0.034730434, -0.035007000, -0.035242081, -0.035435200, -0.035586357, -0.035694122, -0.035758972, 0.035780907,
99 0.035758972, 0.035694122, 0.035586357, 0.035435200, 0.035242081, 0.035007000, 0.034730434, 0.034412861,
100 0.034055710, 0.033659935, 0.033225536, 0.032754898, 0.032248020, 0.031706810, 0.031132698, 0.030526638,
101 0.029890060, 0.029224873, 0.028532982, 0.027815342, 0.027073860, 0.026310921, 0.025527000, 0.024725437,
102 0.023907185, 0.023074150, 0.022228718, 0.021372318, 0.020506859, 0.019634247, 0.018756866, 0.017876148,
103 0.016994476, 0.016112804, 0.015233517, 0.014358521, 0.013489246, 0.012627602, 0.011775017, 0.010933399,
104 0.010103703, 0.009287834, 0.008487225, 0.007703304, 0.006937027, 0.006189346, 0.005462170, 0.004756451,
105 0.004072189, 0.003411293, 0.002774239, 0.002161503, 0.001573563, 0.001011848, 0.000475883, -0.000033379,
106 -0.000515938, -0.000971317, -0.001399517, -0.001800537, -0.002174854, -0.002521515, -0.002841473, 0.003134727,
107 0.003401756, 0.003643036, 0.003858566, 0.004049301, 0.004215240, 0.004357815, 0.004477024, 0.004573822,
108 0.004649162, 0.004703045, 0.004737377, 0.004752159, 0.004748821, 0.004728317, 0.004691124, 0.004638195,
109 0.004570484, 0.004489899, 0.004395962, 0.004290581, 0.004174709, 0.004048824, 0.003914356, 0.003771782,
110 0.003622532, 0.003467083, 0.003306866, 0.003141880, 0.002974033, 0.002803326, 0.002630711, 0.002457142,
111 0.002283096, 0.002110004, 0.001937389, 0.001766682, 0.001597881, 0.001432419, 0.001269817, 0.001111031,
112 0.000956535, 0.000806808, 0.000661850, 0.000522137, 0.000388145, 0.000259876, 0.000137329, 0.000021458,
113 -0.000088215, -0.000191689, -0.000288486, -0.000378609, -0.000462532, -0.000539303, -0.000610352, -0.000674248,
114 -0.000731945, -0.000783920, -0.000829220, -0.000868797, -0.000902653, -0.000930786, -0.000953674, 0.000971317,
115 0.000983715, 0.000991821, 0.000995159, 0.000994205, 0.000989437, 0.000980854, 0.000968933, 0.000954151,
116 0.000935555, 0.000915051, 0.000891685, 0.000866413, 0.000838757, 0.000809669, 0.000779152, 0.000747204,
117 0.000714302, 0.000680923, 0.000646591, 0.000611782, 0.000576973, 0.000542164, 0.000507355, 0.000472546,
118 0.000438213, 0.000404358, 0.000371456, 0.000339031, 0.000307560, 0.000277042, 0.000247478, 0.000218868,
119 0.000191212, 0.000165462, 0.000140190, 0.000116348, 0.000093937, 0.000072956, 0.000052929, 0.000034332,
120 0.000017166, 0.000000954, -0.000013828, -0.000027180, -0.000039577, -0.000050545, -0.000060558, -0.000069618,
121 -0.000077724, -0.000084400, -0.000090122, -0.000095367, -0.000099182, -0.000102520, -0.000105381, -0.000106812,
122 -0.000108242, -0.000108719, -0.000108719, -0.000108242, -0.000107288, -0.000105858, -0.000103951, 0.000101566,
123 0.000099182, 0.000096321, 0.000093460, 0.000090599, 0.000087261, 0.000083923, 0.000080585, 0.000076771,
124 0.000073433, 0.000070095, 0.000066280, 0.000062943, 0.000059605, 0.000055790, 0.000052929, 0.000049591,
125 0.000046253, 0.000043392, 0.000040531, 0.000037670, 0.000034809, 0.000032425, 0.000030041, 0.000027657,
126 0.000025272, 0.000023365, 0.000021458, 0.000019550, 0.000018120, 0.000016689, 0.000014782, 0.000013828,
127 0.000012398, 0.000011444, 0.000010014, 0.000009060, 0.000008106, 0.000007629, 0.000006676, 0.000006199,
128 0.000005245, 0.000004768, 0.000004292, 0.000003815, 0.000003338, 0.000003338, 0.000002861, 0.000002384,
129 0.000002384, 0.000001907, 0.000001907, 0.000001431, 0.000001431, 0.000000954, 0.000000954, 0.000000954,
130 0.000000954, 0.000000477, 0.000000477, 0.000000477, 0.000000477, 0.000000477, 0.000000477
131 };
132 58
133 static int scale_factor_table[64]; 59 static int scale_factor_table[64];
134 #ifdef USE_FLOATS 60 #ifdef USE_FLOATS
135 static float scale_factor_inv_table[64]; 61 static float scale_factor_inv_table[64];
136 #else 62 #else
137 static INT8 scale_factor_shift[64]; 63 static INT8 scale_factor_shift[64];
138 static unsigned short scale_factor_mult[64]; 64 static unsigned short scale_factor_mult[64];
139 #endif 65 #endif
140 static unsigned char scale_diff_table[128]; 66 static unsigned char scale_diff_table[128];
141 67
142 static const int sblimit_table[5] = { 27 , 30 , 8, 12 , 30 }; 68 /* total number of bits per allocation group */
143 69 static unsigned short total_quant_bits[17];
144 static const int quant_steps[17] = {
145 3, 5, 7, 9, 15,
146 31, 63, 127, 255, 511,
147 1023, 2047, 4095, 8191, 16383,
148 32767, 65535
149 };
150
151 /* we use a negative value if grouped */
152 static const int quant_bits[17] = {
153 -5, -7, 3, -10, 4,
154 5, 6, 7, 8, 9,
155 10, 11, 12, 13, 14,
156 15, 16
157 };
158 70
159 /* signal to noise ratio of each quantification step (could be 71 /* signal to noise ratio of each quantification step (could be
160 computed from quant_steps[]). The values are dB multiplied by 10 72 computed from quant_steps[]). The values are dB multiplied by 10
161 */ 73 */
162 static unsigned short quant_snr[17] = { 74 static unsigned short quant_snr[17] = {
165 499, 559, 620, 680, 77 499, 559, 620, 680,
166 740, 800, 861, 920, 78 740, 800, 861, 920,
167 980 79 980
168 }; 80 };
169 81
170
171 /* total number of bits per allocation group */
172 static unsigned short total_quant_bits[17];
173
174 /* encoding tables which give the quantization index. Note how it is
175 possible to store them efficiently ! */
176 static const unsigned char alloc_table_0[] = {
177 4, 0, 2, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16,
178 4, 0, 2, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16,
179 4, 0, 2, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16,
180 4, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 16,
181 4, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 16,
182 4, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 16,
183 4, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 16,
184 4, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 16,
185 4, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 16,
186 4, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 16,
187 4, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 16,
188 3, 0, 1, 2, 3, 4, 5, 16,
189 3, 0, 1, 2, 3, 4, 5, 16,
190 3, 0, 1, 2, 3, 4, 5, 16,
191 3, 0, 1, 2, 3, 4, 5, 16,
192 3, 0, 1, 2, 3, 4, 5, 16,
193 3, 0, 1, 2, 3, 4, 5, 16,
194 3, 0, 1, 2, 3, 4, 5, 16,
195 3, 0, 1, 2, 3, 4, 5, 16,
196 3, 0, 1, 2, 3, 4, 5, 16,
197 3, 0, 1, 2, 3, 4, 5, 16,
198 3, 0, 1, 2, 3, 4, 5, 16,
199 3, 0, 1, 2, 3, 4, 5, 16,
200 2, 0, 1, 16,
201 2, 0, 1, 16,
202 2, 0, 1, 16,
203 2, 0, 1, 16,
204 };
205
206 static const unsigned char alloc_table_1[] = {
207 4, 0, 2, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16,
208 4, 0, 2, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16,
209 4, 0, 2, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16,
210 4, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 16,
211 4, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 16,
212 4, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 16,
213 4, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 16,
214 4, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 16,
215 4, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 16,
216 4, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 16,
217 4, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 16,
218 3, 0, 1, 2, 3, 4, 5, 16,
219 3, 0, 1, 2, 3, 4, 5, 16,
220 3, 0, 1, 2, 3, 4, 5, 16,
221 3, 0, 1, 2, 3, 4, 5, 16,
222 3, 0, 1, 2, 3, 4, 5, 16,
223 3, 0, 1, 2, 3, 4, 5, 16,
224 3, 0, 1, 2, 3, 4, 5, 16,
225 3, 0, 1, 2, 3, 4, 5, 16,
226 3, 0, 1, 2, 3, 4, 5, 16,
227 3, 0, 1, 2, 3, 4, 5, 16,
228 3, 0, 1, 2, 3, 4, 5, 16,
229 3, 0, 1, 2, 3, 4, 5, 16,
230 2, 0, 1, 16,
231 2, 0, 1, 16,
232 2, 0, 1, 16,
233 2, 0, 1, 16,
234 2, 0, 1, 16,
235 2, 0, 1, 16,
236 2, 0, 1, 16,
237 };
238
239 static const unsigned char alloc_table_2[] = {
240 4, 0, 1, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,
241 4, 0, 1, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,
242 3, 0, 1, 3, 4, 5, 6, 7,
243 3, 0, 1, 3, 4, 5, 6, 7,
244 3, 0, 1, 3, 4, 5, 6, 7,
245 3, 0, 1, 3, 4, 5, 6, 7,
246 3, 0, 1, 3, 4, 5, 6, 7,
247 3, 0, 1, 3, 4, 5, 6, 7,
248 };
249
250 static const unsigned char alloc_table_3[] = {
251 4, 0, 1, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,
252 4, 0, 1, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,
253 3, 0, 1, 3, 4, 5, 6, 7,
254 3, 0, 1, 3, 4, 5, 6, 7,
255 3, 0, 1, 3, 4, 5, 6, 7,
256 3, 0, 1, 3, 4, 5, 6, 7,
257 3, 0, 1, 3, 4, 5, 6, 7,
258 3, 0, 1, 3, 4, 5, 6, 7,
259 3, 0, 1, 3, 4, 5, 6, 7,
260 3, 0, 1, 3, 4, 5, 6, 7,
261 3, 0, 1, 3, 4, 5, 6, 7,
262 3, 0, 1, 3, 4, 5, 6, 7,
263 };
264
265 static const unsigned char alloc_table_4[] = {
266 4, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14,
267 4, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14,
268 4, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14,
269 4, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14,
270 3, 0, 1, 3, 4, 5, 6, 7,
271 3, 0, 1, 3, 4, 5, 6, 7,
272 3, 0, 1, 3, 4, 5, 6, 7,
273 3, 0, 1, 3, 4, 5, 6, 7,
274 3, 0, 1, 3, 4, 5, 6, 7,
275 3, 0, 1, 3, 4, 5, 6, 7,
276 3, 0, 1, 3, 4, 5, 6, 7,
277 2, 0, 1, 3,
278 2, 0, 1, 3,
279 2, 0, 1, 3,
280 2, 0, 1, 3,
281 2, 0, 1, 3,
282 2, 0, 1, 3,
283 2, 0, 1, 3,
284 2, 0, 1, 3,
285 2, 0, 1, 3,
286 2, 0, 1, 3,
287 2, 0, 1, 3,
288 2, 0, 1, 3,
289 2, 0, 1, 3,
290 2, 0, 1, 3,
291 2, 0, 1, 3,
292 2, 0, 1, 3,
293 2, 0, 1, 3,
294 2, 0, 1, 3,
295 2, 0, 1, 3,
296 };
297
298 const unsigned char *alloc_tables[5] =
299 { alloc_table_0, alloc_table_1, alloc_table_2, alloc_table_3, alloc_table_4, };
300
301 /* fixed psycho acoustic model. Values of SNR taken from the 'toolame' 82 /* fixed psycho acoustic model. Values of SNR taken from the 'toolame'
302 project */ 83 project */
303 const float fixed_smr[SBLIMIT] = { 84 static const float fixed_smr[SBLIMIT] = {
304 30, 17, 16, 10, 3, 12, 8, 2.5, 85 30, 17, 16, 10, 3, 12, 8, 2.5,
305 5, 5, 6, 6, 5, 6, 10, 6, 86 5, 5, 6, 6, 5, 6, 10, 6,
306 -4, -10, -21, -30, -42, -55, -68, -75, 87 -4, -10, -21, -30, -42, -55, -68, -75,
307 -75, -75, -75, -75, -91, -107, -110, -108 88 -75, -75, -75, -75, -91, -107, -110, -108
308 }; 89 };
309 90
310 const unsigned char nb_scale_factors[4] = { 3, 2, 1, 2 }; 91 static const unsigned char nb_scale_factors[4] = { 3, 2, 1, 2 };
92