summaryrefslogtreecommitdiff
path: root/core/multimedia/opieplayer/libmpeg3/audio/tables.c
Unidiff
Diffstat (limited to 'core/multimedia/opieplayer/libmpeg3/audio/tables.c') (more/less context) (ignore whitespace changes)
-rw-r--r--core/multimedia/opieplayer/libmpeg3/audio/tables.c554
1 files changed, 554 insertions, 0 deletions
diff --git a/core/multimedia/opieplayer/libmpeg3/audio/tables.c b/core/multimedia/opieplayer/libmpeg3/audio/tables.c
new file mode 100644
index 0000000..aeab335
--- a/dev/null
+++ b/core/multimedia/opieplayer/libmpeg3/audio/tables.c
@@ -0,0 +1,554 @@
1#include "mpeg3audio.h"
2#include "../libmpeg3.h"
3#include "../mpeg3protos.h"
4#include "tables.h"
5
6#include <math.h>
7
8/* Bitrate indexes */
9int mpeg3_tabsel_123[2][3][16] = {
10 { {0,32,64,96,128,160,192,224,256,288,320,352,384,416,448,},
11 {0,32,48,56, 64, 80, 96,112,128,160,192,224,256,320,384,},
12 {0,32,40,48, 56, 64, 80, 96,112,128,160,192,224,256,320,} },
13
14 { {0,32,48,56,64,80,96,112,128,144,160,176,192,224,256,},
15 {0,8,16,24,32,40,48,56,64,80,96,112,128,144,160,},
16 {0,8,16,24,32,40,48,56,64,80,96,112,128,144,160,} }
17};
18
19long mpeg3_freqs[9] = { 44100, 48000, 32000, 22050, 24000, 16000 , 11025 , 12000 , 8000 };
20
21#ifdef USE_3DNOW
22mpeg3_real_t mpeg3_decwin[2 * (512 + 32)];
23mpeg3_real_t mpeg3_cos64[32], mpeg3_cos32[16], mpeg3_cos16[8], mpeg3_cos8[4], mpeg3_cos4[2];
24#else
25mpeg3_real_t mpeg3_decwin[512 + 32];
26mpeg3_real_t mpeg3_cos64[16], mpeg3_cos32[8], mpeg3_cos16[4], mpeg3_cos8[2], mpeg3_cos4[1];
27#endif
28
29mpeg3_real_t *mpeg3_pnts[] = { mpeg3_cos64, mpeg3_cos32, mpeg3_cos16, mpeg3_cos8, mpeg3_cos4 };
30
31int mpeg3_grp_3tab[32 * 3] = { 0, }; /* used: 27 */
32int mpeg3_grp_5tab[128 * 3] = { 0, }; /* used: 125 */
33int mpeg3_grp_9tab[1024 * 3] = { 0, }; /* used: 729 */
34
35 REAL_MATRIX(mpeg3_muls, [27], [64]);/* also used by layer 1 */
36REAL_MATRIX(mpeg3_gainpow2, [256 + 118 + 4], );
37REAL_MATRIX(mpeg3_ispow, [8207], );
38REAL_MATRIX(mpeg3_aa_ca, [8], );
39REAL_MATRIX(mpeg3_aa_cs, [8], );
40REAL_MATRIX(mpeg3_win, [4], [36]);
41REAL_MATRIX(mpeg3_win1, [4], [36]);
42REAL_MATRIX(mpeg3_COS1, [12], [6]);
43REAL_MATRIX(mpeg3_COS9, [9], );
44REAL_MATRIX(mpeg3_tfcos36, [9], );
45REAL_MATRIX(mpeg3_tfcos12, [3], );
46REAL_MATRIX(mpeg3_cos9, [3], );
47REAL_MATRIX(mpeg3_cos18, [3], );
48REAL_MATRIX(mpeg3_tan1_1, [16], );
49REAL_MATRIX(mpeg3_tan2_1, [16], );
50REAL_MATRIX(mpeg3_tan1_2, [16], );
51REAL_MATRIX(mpeg3_tan2_2, [16], );
52REAL_MATRIX(mpeg3_pow1_1, [2], [16]);
53REAL_MATRIX(mpeg3_pow2_1, [2], [16]);
54REAL_MATRIX(mpeg3_pow1_2, [2], [16]);
55REAL_MATRIX(mpeg3_pow2_2, [2], [16]);
56
57mpeg3_real_t mpeg3_COS6_1, mpeg3_COS6_2;
58
59#ifdef PRINT_FIXED_POINT_TABLES
60static void print_table(const char* var, mpeg3_real_t* data, int count)
61{
62 int i;
63 printf("#ifdef USE_DATA_TABLES\n");
64 printf("static long %s_data[] = {",var);
65 for(i = 0; i < count; i++) {
66 printf("%c0x%08x,", i%8?' ':'\n', data[i].fixedPoint());
67 }
68 printf("};\n");
69 printf("#endif\n");
70}
71#endif
72
73#ifdef PRINT_FIXED_POINT_TABLES
74# define DO_TABLE(T) print_table(#T, T, sizeof(T)/sizeof(mpeg3_real_t))
75# define DO_TABLE2(T,DIM) print_table(#T, (mpeg3_real_t*)T, sizeof(T)/sizeof(mpeg3_real_t))
76#elif USE_FIXED_POINT
77# define DO_TABLE(T) T = (mpeg3_real_t*)T##_data
78 // multidimensional
79# define DO_TABLE2(T,DIM) T = (mpeg3_real_t(*)DIM)T##_data
80#else
81# define DO_TABLE(T)
82# define DO_TABLE2(T,DIM)
83#endif
84
85#if defined(USE_FIXED_POINT) && !defined(PRINT_FIXED_POINT_TABLES)
86#define USE_DATA_TABLES
87#include "fptables.h"
88#endif
89
90long mpeg3_intwinbase[] = {
91 0, -1, -1, -1, -1, -1, -1, -2, -2, -2,
92 -2, -3, -3, -4, -4, -5, -5, -6, -7, -7,
93 -8, -9, -10, -11, -13, -14, -16, -17, -19, -21,
94 -24, -26, -29, -31, -35, -38, -41, -45, -49, -53,
95 -58, -63, -68, -73, -79, -85, -91, -97, -104, -111,
96 -117, -125, -132, -139, -147, -154, -161, -169, -176, -183,
97 -190, -196, -202, -208, -213, -218, -222, -225, -227, -228,
98 -228, -227, -224, -221, -215, -208, -200, -189, -177, -163,
99 -146, -127, -106, -83, -57, -29, 2, 36, 72, 111,
100 153, 197, 244, 294, 347, 401, 459, 519, 581, 645,
101 711, 779, 848, 919, 991, 1064, 1137, 1210, 1283, 1356,
102 1428, 1498, 1567, 1634, 1698, 1759, 1817, 1870, 1919, 1962,
103 2001, 2032, 2057, 2075, 2085, 2087, 2080, 2063, 2037, 2000,
104 1952, 1893, 1822, 1739, 1644, 1535, 1414, 1280, 1131, 970,
105 794, 605, 402, 185, -45, -288, -545, -814, -1095, -1388,
106 -1692, -2006, -2330, -2663, -3004, -3351, -3705, -4063, -4425, -4788,
107 -5153, -5517, -5879, -6237, -6589, -6935, -7271, -7597, -7910, -8209,
108 -8491, -8755, -8998, -9219, -9416, -9585, -9727, -9838, -9916, -9959,
109 -9966, -9935, -9863, -9750, -9592, -9389, -9139, -8840, -8492, -8092,
110 -7640, -7134, -6574, -5959, -5288, -4561, -3776, -2935, -2037, -1082,
111 -70, 998, 2122, 3300, 4533, 5818, 7154, 8540, 9975, 11455,
112 12980, 14548, 16155, 17799, 19478, 21189, 22929, 24694, 26482, 28289,
113 30112, 31947, 33791, 35640, 37489, 39336, 41176, 43006, 44821, 46617,
114 48390, 50137, 51853, 53534, 55178, 56778, 58333, 59838, 61289, 62684,
115 64019, 65290, 66494, 67629, 68692, 69679, 70590, 71420, 72169, 72835,
116 73415, 73908, 74313, 74630, 74856, 74992, 75038 };
117
118int mpeg3_longLimit[9][23];
119int mpeg3_shortLimit[9][14];
120
121struct mpeg3_bandInfoStruct mpeg3_bandInfo[9] =
122{
123
124/* MPEG 1.0 */
125 { {0,4,8,12,16,20,24,30,36,44,52,62,74, 90,110,134,162,196,238,288,342,418,576},
126 {4,4,4,4,4,4,6,6,8, 8,10,12,16,20,24,28,34,42,50,54, 76,158},
127 {0,4*3,8*3,12*3,16*3,22*3,30*3,40*3,52*3,66*3, 84*3,106*3,136*3,192*3},
128 {4,4,4,4,6,8,10,12,14,18,22,30,56} } ,
129
130 { {0,4,8,12,16,20,24,30,36,42,50,60,72, 88,106,128,156,190,230,276,330,384,576},
131 {4,4,4,4,4,4,6,6,6, 8,10,12,16,18,22,28,34,40,46,54, 54,192},
132 {0,4*3,8*3,12*3,16*3,22*3,28*3,38*3,50*3,64*3, 80*3,100*3,126*3,192*3},
133 {4,4,4,4,6,6,10,12,14,16,20,26,66} } ,
134
135 { {0,4,8,12,16,20,24,30,36,44,54,66,82,102,126,156,194,240,296,364,448,550,576} ,
136 {4,4,4,4,4,4,6,6,8,10,12,16,20,24,30,38,46,56,68,84,102, 26} ,
137 {0,4*3,8*3,12*3,16*3,22*3,30*3,42*3,58*3,78*3,104*3,138*3,180*3,192*3} ,
138 {4,4,4,4,6,8,12,16,20,26,34,42,12} } ,
139
140/* MPEG 2.0 */
141 { {0,6,12,18,24,30,36,44,54,66,80,96,116,140,168,200,238,284,336,396,464,522,576},
142 {6,6,6,6,6,6,8,10,12,14,16,20,24,28,32,38,46,52,60,68,58,54 } ,
143 {0,4*3,8*3,12*3,18*3,24*3,32*3,42*3,56*3,74*3,100*3,132*3,174*3,192*3} ,
144 {4,4,4,6,6,8,10,14,18,26,32,42,18 } } ,
145
146 { {0,6,12,18,24,30,36,44,54,66,80,96,114,136,162,194,232,278,330,394,464,540,576},
147 {6,6,6,6,6,6,8,10,12,14,16,18,22,26,32,38,46,52,64,70,76,36 } ,
148 {0,4*3,8*3,12*3,18*3,26*3,36*3,48*3,62*3,80*3,104*3,136*3,180*3,192*3} ,
149 {4,4,4,6,8,10,12,14,18,24,32,44,12 } } ,
150
151 { {0,6,12,18,24,30,36,44,54,66,80,96,116,140,168,200,238,284,336,396,464,522,576},
152 {6,6,6,6,6,6,8,10,12,14,16,20,24,28,32,38,46,52,60,68,58,54 },
153 {0,4*3,8*3,12*3,18*3,26*3,36*3,48*3,62*3,80*3,104*3,134*3,174*3,192*3},
154 {4,4,4,6,8,10,12,14,18,24,30,40,18 } } ,
155/* MPEG 2.5 */
156 { {0,6,12,18,24,30,36,44,54,66,80,96,116,140,168,200,238,284,336,396,464,522,576} ,
157 {6,6,6,6,6,6,8,10,12,14,16,20,24,28,32,38,46,52,60,68,58,54},
158 {0,12,24,36,54,78,108,144,186,240,312,402,522,576},
159 {4,4,4,6,8,10,12,14,18,24,30,40,18} },
160 { {0,6,12,18,24,30,36,44,54,66,80,96,116,140,168,200,238,284,336,396,464,522,576} ,
161 {6,6,6,6,6,6,8,10,12,14,16,20,24,28,32,38,46,52,60,68,58,54},
162 {0,12,24,36,54,78,108,144,186,240,312,402,522,576},
163 {4,4,4,6,8,10,12,14,18,24,30,40,18} },
164 { {0,12,24,36,48,60,72,88,108,132,160,192,232,280,336,400,476,566,568,570,572,574,576},
165 {12,12,12,12,12,12,16,20,24,28,32,40,48,56,64,76,90,2,2,2,2,2},
166 {0, 24, 48, 72,108,156,216,288,372,480,486,492,498,576},
167 {8,8,8,12,16,20,24,28,36,2,2,2,26} } ,
168};
169
170int mpeg3_mapbuf0[9][152];
171int mpeg3_mapbuf1[9][156];
172int mpeg3_mapbuf2[9][44];
173int *mpeg3_map[9][3];
174int *mpeg3_mapend[9][3];
175
176unsigned int mpeg3_n_slen2[512]; /* MPEG 2.0 slen for 'normal' mode */
177unsigned int mpeg3_i_slen2[256]; /* MPEG 2.0 slen for intensity stereo */
178
179int mpeg3audio_init_layer3(mpeg3audio_t *audio);
180
181int mpeg3audio_init_layer2(mpeg3audio_t *audio)
182{
183 static double mulmul[27] =
184 {
185 0.0 , -2.0/3.0 , 2.0/3.0 ,
186 2.0/7.0 , 2.0/15.0 , 2.0/31.0, 2.0/63.0 , 2.0/127.0 , 2.0/255.0 ,
187 2.0/511.0 , 2.0/1023.0 , 2.0/2047.0 , 2.0/4095.0 , 2.0/8191.0 ,
188 2.0/16383.0 , 2.0/32767.0 , 2.0/65535.0 ,
189 -4.0/5.0 , -2.0/5.0 , 2.0/5.0, 4.0/5.0 ,
190 -8.0/9.0 , -4.0/9.0 , -2.0/9.0 , 2.0/9.0 , 4.0/9.0 , 8.0/9.0
191 };
192 static int base[3][9] =
193 {
194 { 1 , 0, 2 , } ,
195 { 17, 18, 0 , 19, 20 , } ,
196 { 21, 1, 22, 23, 0, 24, 25, 2, 26 }
197 };
198 static int tablen[3] = { 3, 5, 9 };
199 static int *itable, *tables[3] = {mpeg3_grp_3tab, mpeg3_grp_5tab, mpeg3_grp_9tab};
200 int i, j, k, l, len;
201 mpeg3_real_t *table;
202
203 for(i = 0; i < 3; i++)
204 {
205 itable = tables[i];
206 len = tablen[i];
207 for(j = 0; j < len; j++)
208 for(k = 0; k < len; k++)
209 for(l = 0; l < len; l++)
210 {
211 *itable++ = base[i][l];
212 *itable++ = base[i][k];
213 *itable++ = base[i][j];
214 }
215 }
216
217#if !defined(USE_FIXED_POINT) || defined(PRINT_FIXED_POINT_TABLES)
218#if defined(PRINT_FIXED_POINT_TABLES)
219 //mpeg3audio_init_layer3(audio); // we depend on mpeg3_muls table
220#endif
221 for(k = 0; k < 27; k++)
222 {
223 double m = mulmul[k];
224 table = mpeg3_muls[k];
225 for(j = 3, i = 0; i < 63; i++, j--)
226 *table++ = m * pow(2.0, (double)j / 3.0);
227 *table++ = 0.0;
228 }
229#endif
230 DO_TABLE2(mpeg3_muls,[64]);
231 return 0;
232}
233
234int mpeg3audio_init_layer3(mpeg3audio_t *audio)
235{
236 int i, j, k, l;
237 int down_sample_sblimit = 32;
238
239 audio->mp3_block[0][0][0] = 0;
240 audio->mp3_blc[0] = 0;
241 audio->mp3_blc[1] = 0;
242
243#if !defined(USE_FIXED_POINT) || defined(PRINT_FIXED_POINT_TABLES)
244 for(i = -256; i < 118 + 4; i++)
245 mpeg3_gainpow2[i + 256] = pow((double)2.0, -0.25 * (double)(i + 210));
246
247 for(i = 0; i < 8207; i++)
248 mpeg3_ispow[i] = pow((double)i, (double)4.0 / 3.0);
249
250 for(i = 0; i < 8; i++)
251 {
252 static double Ci[8] = {-0.6,-0.535,-0.33,-0.185,-0.095,-0.041,-0.0142,-0.0037};
253 double sq = sqrt(1.0+Ci[i]*Ci[i]);
254 mpeg3_aa_cs[i] = 1.0/sq;
255 mpeg3_aa_ca[i] = Ci[i]/sq;
256 }
257
258 for(i = 0; i < 18; i++)
259 {
260 mpeg3_win[0][i] = mpeg3_win[1][i] = 0.5 * sin( M_PI / 72.0 * (double)(2 * (i + 0) + 1) ) / cos (M_PI * (double)(2 * (i + 0) + 19) / 72.0);
261 mpeg3_win[0][i+18] = mpeg3_win[3][i+18] = 0.5 * sin( M_PI / 72.0 * (double)(2 * (i + 18) + 1) ) / cos (M_PI * (double)(2 * (i + 18) + 19) / 72.0);
262 }
263 for(i = 0; i < 6; i++)
264 {
265 mpeg3_win[1][i + 18] = 0.5 / cos ( M_PI * (double) (2*(i+18)+19) / 72.0 );
266 mpeg3_win[3][i + 12] = 0.5 / cos ( M_PI * (double) (2*(i+12)+19) / 72.0 );
267 mpeg3_win[1][i + 24] = 0.5 * sin( M_PI / 24.0 * (double)(2 * i + 13) ) / cos (M_PI * (double)(2 * (i + 24)+ 19) / 72.0 );
268 mpeg3_win[1][i + 30] = mpeg3_win[3][i] = 0.0;
269 mpeg3_win[3][i + 6 ] = 0.5 * sin( M_PI / 24.0 * (double)(2 * i + 1) ) / cos (M_PI * (double)(2 * (i + 6 )+ 19) / 72.0 );
270 }
271
272 for(i = 0; i < 9; i++)
273 mpeg3_COS9[i] = cos(M_PI / 18.0 * (double)i);
274
275 for(i = 0; i < 9; i++)
276 mpeg3_tfcos36[i] = 0.5 / cos (M_PI * (double) (i*2+1) / 36.0);
277 for(i = 0; i < 3; i++)
278 mpeg3_tfcos12[i] = 0.5 / cos (M_PI * (double) (i*2+1) / 12.0);
279
280 mpeg3_cos9[0] = cos(1.0 * M_PI / 9.0);
281 mpeg3_cos9[1] = cos(5.0 * M_PI / 9.0);
282 mpeg3_cos9[2] = cos(7.0 * M_PI / 9.0);
283 mpeg3_cos18[0] = cos(1.0 * M_PI / 18.0);
284 mpeg3_cos18[1] = cos(11.0 * M_PI / 18.0);
285 mpeg3_cos18[2] = cos(13.0 * M_PI / 18.0);
286
287 for(i = 0; i < 12; i++)
288 {
289 mpeg3_win[2][i] = 0.5 * sin(M_PI / 24.0 * (double) (2 * i + 1)) / cos(M_PI * (double)(2 * i + 7) / 24.0);
290 for(j = 0; j < 6; j++)
291 mpeg3_COS1[i][j] = cos(M_PI / 24.0 * (double) ((2 * i + 7) * (2 * j + 1)));
292 }
293
294 for(j = 0; j < 4; j++)
295 {
296 static int len[4] = {36, 36, 12, 36};
297 for(i = 0; i < len[j]; i += 2)
298 mpeg3_win1[j][i] = + mpeg3_win[j][i];
299 for(i = 1; i < len[j]; i += 2)
300 mpeg3_win1[j][i] = - mpeg3_win[j][i];
301 }
302
303 for(i = 0; i < 16; i++)
304 {
305 double t = tan( (double) i * M_PI / 12.0 );
306 mpeg3_tan1_1[i] = t / (1.0 + t);
307 mpeg3_tan2_1[i] = 1.0 / (1.0 + t);
308 mpeg3_tan1_2[i] = M_SQRT2 * t / (1.0 + t);
309 mpeg3_tan2_2[i] = M_SQRT2 / (1.0 + t);
310
311 for(j = 0; j < 2; j++)
312 {
313 double base = pow(2.0, -0.25 * (j + 1.0));
314 double p1 = 1.0,p2 = 1.0;
315 if(i > 0)
316 {
317 if( i & 1 )
318 p1 = pow(base, (i + 1.0) * 0.5);
319 else
320 p2 = pow(base, i * 0.5);
321 }
322 mpeg3_pow1_1[j][i] = p1;
323 mpeg3_pow2_1[j][i] = p2;
324 mpeg3_pow1_2[j][i] = M_SQRT2 * p1;
325 mpeg3_pow2_2[j][i] = M_SQRT2 * p2;
326 }
327 }
328
329#endif
330
331 DO_TABLE(mpeg3_gainpow2);
332 DO_TABLE(mpeg3_ispow);
333 DO_TABLE(mpeg3_aa_cs);
334 DO_TABLE(mpeg3_aa_ca);
335 DO_TABLE2(mpeg3_win,[36]);
336 DO_TABLE(mpeg3_COS9);
337 DO_TABLE(mpeg3_tfcos36);
338 DO_TABLE(mpeg3_tfcos12);
339 DO_TABLE(mpeg3_cos9);
340 DO_TABLE(mpeg3_cos18);
341 DO_TABLE2(mpeg3_COS1,[6]);
342 DO_TABLE2(mpeg3_win1,[36]);
343 DO_TABLE(mpeg3_tan1_1);
344 DO_TABLE(mpeg3_tan2_1);
345 DO_TABLE(mpeg3_tan1_2);
346 DO_TABLE(mpeg3_tan2_2);
347 DO_TABLE2(mpeg3_pow1_1,[16]);
348 DO_TABLE2(mpeg3_pow2_1,[16]);
349 DO_TABLE2(mpeg3_pow1_2,[16]);
350 DO_TABLE2(mpeg3_pow2_2,[16]);
351
352 mpeg3_COS6_1 = cos( M_PI / 6.0 * (double) 1);
353 mpeg3_COS6_2 = cos( M_PI / 6.0 * (double) 2);
354
355 for(j = 0; j < 9; j++)
356 {
357 struct mpeg3_bandInfoStruct *bi = &mpeg3_bandInfo[j];
358 int *mp;
359 int cb,lwin;
360 int *bdf;
361
362 mp = mpeg3_map[j][0] = mpeg3_mapbuf0[j];
363 bdf = bi->longDiff;
364 for(i = 0, cb = 0; cb < 8; cb++, i += *bdf++)
365 {
366 *mp++ = (*bdf) >> 1;
367 *mp++ = i;
368 *mp++ = 3;
369 *mp++ = cb;
370 }
371 bdf = bi->shortDiff + 3;
372 for(cb = 3; cb < 13; cb++)
373 {
374 int l = (*bdf++) >> 1;
375 for(lwin = 0; lwin < 3; lwin++)
376 {
377 *mp++ = l;
378 *mp++ = i + lwin;
379 *mp++ = lwin;
380 *mp++ = cb;
381 }
382 i += 6 * l;
383 }
384 mpeg3_mapend[j][0] = mp;
385
386 mp = mpeg3_map[j][1] = mpeg3_mapbuf1[j];
387 bdf = bi->shortDiff+0;
388 for(i = 0,cb = 0; cb < 13; cb++)
389 {
390 int l = (*bdf++) >> 1;
391 for(lwin = 0; lwin < 3; lwin++)
392 {
393 *mp++ = l;
394 *mp++ = i + lwin;
395 *mp++ = lwin;
396 *mp++ = cb;
397 }
398 i += 6 * l;
399 }
400 mpeg3_mapend[j][1] = mp;
401
402 mp = mpeg3_map[j][2] = mpeg3_mapbuf2[j];
403 bdf = bi->longDiff;
404 for(cb = 0; cb < 22 ; cb++)
405 {
406 *mp++ = (*bdf++) >> 1;
407 *mp++ = cb;
408 }
409 mpeg3_mapend[j][2] = mp;
410 }
411
412 for(j = 0; j < 9; j++)
413 {
414 for(i = 0; i < 23; i++)
415 {
416 mpeg3_longLimit[j][i] = (mpeg3_bandInfo[j].longIdx[i] - 1 + 8) / 18 + 1;
417 if(mpeg3_longLimit[j][i] > (down_sample_sblimit))
418 mpeg3_longLimit[j][i] = down_sample_sblimit;
419 }
420 for(i = 0; i < 14; i++)
421 {
422 mpeg3_shortLimit[j][i] = (mpeg3_bandInfo[j].shortIdx[i] - 1) / 18 + 1;
423 if(mpeg3_shortLimit[j][i] > (down_sample_sblimit) )
424 mpeg3_shortLimit[j][i] = down_sample_sblimit;
425 }
426 }
427
428 for(i = 0; i < 5; i++)
429 {
430 for(j = 0; j < 6; j++)
431 {
432 for(k = 0; k < 6; k++)
433 {
434 int n = k + j * 6 + i * 36;
435 mpeg3_i_slen2[n] = i | (j << 3) | (k << 6) | (3 << 12);
436 }
437 }
438 }
439 for(i = 0; i < 4; i++)
440 {
441 for(j = 0; j < 4; j++)
442 {
443 for(k = 0; k < 4; k++)
444 {
445 int n = k + j * 4 + i * 16;
446 mpeg3_i_slen2[n+180] = i | (j << 3) | (k << 6) | (4 << 12);
447 }
448 }
449 }
450 for(i = 0; i < 4; i++)
451 {
452 for(j = 0; j < 3; j++)
453 {
454 int n = j + i * 3;
455 mpeg3_i_slen2[n + 244] = i | (j << 3) | (5 << 12);
456 mpeg3_n_slen2[n + 500] = i | (j << 3) | (2 << 12) | (1 << 15);
457 }
458 }
459
460 for(i = 0; i < 5; i++)
461 {
462 for(j = 0; j < 5; j++)
463 {
464 for(k = 0; k < 4; k++)
465 {
466 for(l = 0; l < 4; l++)
467 {
468 int n = l + k * 4 + j * 16 + i * 80;
469 mpeg3_n_slen2[n] = i | (j << 3) | ( k << 6) | (l << 9) | (0 << 12);
470 }
471 }
472 }
473 }
474 for(i = 0; i < 5; i++)
475 {
476 for(j = 0; j < 5; j++)
477 {
478 for(k = 0; k < 4; k++)
479 {
480 int n = k + j * 4 + i * 20;
481 mpeg3_n_slen2[n + 400] = i | (j << 3) | (k << 6) | (1 << 12);
482 }
483 }
484 }
485
486 return 0;
487}
488
489int mpeg3audio_new_decode_tables(mpeg3audio_t *audio)
490{
491 int i, j, k, kr, divv;
492 mpeg3_real_t *costab;
493 int idx;
494 long scaleval = audio->outscale;
495
496
497 for(i = 0; i < 5; i++)
498 {
499 kr = 0x10 >> i;
500 divv = 0x40 >> i;
501 costab = mpeg3_pnts[i];
502 for(k = 0; k < kr; k++)
503 costab[k] = 1.0 / (2.0 * cos(M_PI * ((double)k * 2.0 + 1.0) / (double)divv));
504
505#ifdef USE_3DNOW
506 for(k = 0; k < kr; k++)
507 costab[k + kr] = -costab[k];
508#endif
509
510 }
511
512 idx = 0;
513 scaleval = -scaleval;
514 for(i = 0, j = 0; i < 256; i++, j++,idx += 32)
515 {
516 if(idx < 512 + 16)
517 mpeg3_decwin[idx+16] = mpeg3_decwin[idx] = (double)mpeg3_intwinbase[j] / 65536.0 * (double)scaleval;
518
519 if(i % 32 == 31)
520 idx -= 1023;
521 if(i % 64 == 63)
522 scaleval = -scaleval;
523 }
524
525 for( ; i < 512; i++, j--, idx += 32)
526 {
527 if(idx < 512 + 16)
528 mpeg3_decwin[idx + 16] = mpeg3_decwin[idx] = (double)mpeg3_intwinbase[j] / 65536.0 * (double)scaleval;
529
530 if(i % 32 == 31)
531 idx -= 1023;
532 if(i % 64 == 63)
533 scaleval = -scaleval;
534 }
535
536#ifdef USE_3DNOW
537 if(!param.down_sample)
538 {
539 for(i = 0; i < 512 + 32; i++)
540 {
541 mpeg3_decwin[512 + 31 - i] *= 65536.0; /* allows faster clipping in 3dnow code */
542 mpeg3_decwin[512 + 32 + i] = mpeg3_decwin[512 + 31 - i];
543 }
544 }
545#endif
546
547/* Initialize AC3 */
548 audio->ac3_lfsr_state = 1;
549 mpeg3audio_imdct_init(audio);
550/* Initialize MPEG */
551 mpeg3audio_init_layer2(audio); /* inits also shared tables with layer1 */
552 mpeg3audio_init_layer3(audio);
553 return 0;
554}