Statistics
| Branch: | Revision:

ffmpeg / libavcodec / mpegaudiotab.h @ 13b54752

History | View | Annotate | Download (15.7 KB)

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 };