Statistics
| Branch: | Revision:

ffmpeg / libavcodec / mpegaudiotab.h @ 13b54752

History | View | Annotate | Download (15.7 KB)

1 de6d9b64 Fabrice Bellard
/*
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 };