comparison mpegaudiotab.h @ 0:986e461dc072 libavcodec

Initial revision
author glantau
date Sun, 22 Jul 2001 14:18:56 +0000
parents
children 608c7f964bca
comparison
equal deleted inserted replaced
-1:000000000000 0:986e461dc072
1 /*
2 * mpeg audio layer 2 tables. Most of them come from the mpeg audio
3 * specification.
4 *
5 * Copyright (c) 2000 Gerard Lantau.
6 *
7 * The licence of this code is contained in file LICENCE found in the
8 * same archive
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
18 #define SQRT2 1.41421356237309514547
19
20 static const int costab32[30] = {
21 FIX(0.54119610014619701222),
22 FIX(1.3065629648763763537),
23
24 FIX(0.50979557910415917998),
25 FIX(2.5629154477415054814),
26 FIX(0.89997622313641556513),
27 FIX(0.60134488693504528634),
28
29 FIX(0.5024192861881556782),
30 FIX(5.1011486186891552563),
31 FIX(0.78815462345125020249),
32 FIX(0.64682178335999007679),
33 FIX(0.56694403481635768927),
34 FIX(1.0606776859903470633),
35 FIX(1.7224470982383341955),
36 FIX(0.52249861493968885462),
37
38 FIX(10.19000812354803287),
39 FIX(0.674808341455005678),
40 FIX(1.1694399334328846596),
41 FIX(0.53104259108978413284),
42 FIX(2.0577810099534108446),
43 FIX(0.58293496820613388554),
44 FIX(0.83934964541552681272),
45 FIX(0.50547095989754364798),
46 FIX(3.4076084184687189804),
47 FIX(0.62250412303566482475),
48 FIX(0.97256823786196078263),
49 FIX(0.51544730992262455249),
50 FIX(1.4841646163141661852),
51 FIX(0.5531038960344445421),
52 FIX(0.74453627100229857749),
53 FIX(0.5006029982351962726),
54 };
55
56 static const int bitinv32[32] = {
57 0, 16, 8, 24, 4, 20, 12, 28,
58 2, 18, 10, 26, 6, 22, 14, 30,
59 1, 17, 9, 25, 5, 21, 13, 29,
60 3, 19, 11, 27, 7, 23, 15, 31
61 };
62
63
64 static short 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
133 static int scale_factor_table[64];
134 #ifdef USE_FLOATS
135 static float scale_factor_inv_table[64];
136 #else
137 static INT8 scale_factor_shift[64];
138 static unsigned short scale_factor_mult[64];
139 #endif
140 static unsigned char scale_diff_table[128];
141
142 static const int sblimit_table[5] = { 27 , 30 , 8, 12 , 30 };
143
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
159 /* signal to noise ratio of each quantification step (could be
160 computed from quant_steps[]). The values are dB multiplied by 10
161 */
162 static unsigned short quant_snr[17] = {
163 70, 110, 160, 208,
164 253, 316, 378, 439,
165 499, 559, 620, 680,
166 740, 800, 861, 920,
167 980
168 };
169
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'
302 project */
303 const float fixed_smr[SBLIMIT] = {
304 30, 17, 16, 10, 3, 12, 8, 2.5,
305 5, 5, 6, 6, 5, 6, 10, 6,
306 -4, -10, -21, -30, -42, -55, -68, -75,
307 -75, -75, -75, -75, -91, -107, -110, -108
308 };
309
310 const unsigned char nb_scale_factors[4] = { 3, 2, 1, 2 };