00001 #include "mpeg3private.h"
00002 #include "mpeg3protos.h"
00003 #include "tables.h"
00004
00005 #include <math.h>
00006
00007
00008 int mpeg3_tabsel_123[2][3][16] = {
00009 { {0,32,64,96,128,160,192,224,256,288,320,352,384,416,448,},
00010 {0,32,48,56, 64, 80, 96,112,128,160,192,224,256,320,384,},
00011 {0,32,40,48, 56, 64, 80, 96,112,128,160,192,224,256,320,} },
00012
00013 { {0,32,48,56,64,80,96,112,128,144,160,176,192,224,256,},
00014 {0,8,16,24,32,40,48,56,64,80,96,112,128,144,160,},
00015 {0,8,16,24,32,40,48,56,64,80,96,112,128,144,160,} }
00016 };
00017
00018 long mpeg3_freqs[9] = { 44100, 48000, 32000, 22050, 24000, 16000 , 11025 , 12000 , 8000 };
00019
00020 #ifdef USE_3DNOW
00021 float mpeg3_decwin[2 * (512 + 32)];
00022 float mpeg3_cos64[32], mpeg3_cos32[16], mpeg3_cos16[8], mpeg3_cos8[4], mpeg3_cos4[2];
00023 #else
00024 float mpeg3_decwin[512 + 32];
00025 float mpeg3_cos64[16], mpeg3_cos32[8], mpeg3_cos16[4], mpeg3_cos8[2], mpeg3_cos4[1];
00026 #endif
00027
00028 float *mpeg3_pnts[] = { mpeg3_cos64, mpeg3_cos32, mpeg3_cos16, mpeg3_cos8, mpeg3_cos4 };
00029
00030 int mpeg3_grp_3tab[32 * 3] = { 0, };
00031 int mpeg3_grp_5tab[128 * 3] = { 0, };
00032 int mpeg3_grp_9tab[1024 * 3] = { 0, };
00033 float mpeg3_muls[27][64];
00034 float mpeg3_gainpow2[256 + 118 + 4];
00035 float mpeg3_ispow[8207];
00036 float mpeg3_aa_ca[8], mpeg3_aa_cs[8];
00037 float mpeg3_win[4][36];
00038 float mpeg3_win1[4][36];
00039 float mpeg3_COS1[12][6];
00040 float mpeg3_COS9[9];
00041 float mpeg3_COS6_1, mpeg3_COS6_2;
00042 float mpeg3_tfcos36[9];
00043 float mpeg3_tfcos12[3];
00044 float mpeg3_cos9[3], mpeg3_cos18[3];
00045 float mpeg3_tan1_1[16], mpeg3_tan2_1[16], mpeg3_tan1_2[16], mpeg3_tan2_2[16];
00046 float mpeg3_pow1_1[2][16], mpeg3_pow2_1[2][16], mpeg3_pow1_2[2][16], mpeg3_pow2_2[2][16];
00047
00048
00049 long mpeg3_intwinbase[] = {
00050 0, -1, -1, -1, -1, -1, -1, -2, -2, -2,
00051 -2, -3, -3, -4, -4, -5, -5, -6, -7, -7,
00052 -8, -9, -10, -11, -13, -14, -16, -17, -19, -21,
00053 -24, -26, -29, -31, -35, -38, -41, -45, -49, -53,
00054 -58, -63, -68, -73, -79, -85, -91, -97, -104, -111,
00055 -117, -125, -132, -139, -147, -154, -161, -169, -176, -183,
00056 -190, -196, -202, -208, -213, -218, -222, -225, -227, -228,
00057 -228, -227, -224, -221, -215, -208, -200, -189, -177, -163,
00058 -146, -127, -106, -83, -57, -29, 2, 36, 72, 111,
00059 153, 197, 244, 294, 347, 401, 459, 519, 581, 645,
00060 711, 779, 848, 919, 991, 1064, 1137, 1210, 1283, 1356,
00061 1428, 1498, 1567, 1634, 1698, 1759, 1817, 1870, 1919, 1962,
00062 2001, 2032, 2057, 2075, 2085, 2087, 2080, 2063, 2037, 2000,
00063 1952, 1893, 1822, 1739, 1644, 1535, 1414, 1280, 1131, 970,
00064 794, 605, 402, 185, -45, -288, -545, -814, -1095, -1388,
00065 -1692, -2006, -2330, -2663, -3004, -3351, -3705, -4063, -4425, -4788,
00066 -5153, -5517, -5879, -6237, -6589, -6935, -7271, -7597, -7910, -8209,
00067 -8491, -8755, -8998, -9219, -9416, -9585, -9727, -9838, -9916, -9959,
00068 -9966, -9935, -9863, -9750, -9592, -9389, -9139, -8840, -8492, -8092,
00069 -7640, -7134, -6574, -5959, -5288, -4561, -3776, -2935, -2037, -1082,
00070 -70, 998, 2122, 3300, 4533, 5818, 7154, 8540, 9975, 11455,
00071 12980, 14548, 16155, 17799, 19478, 21189, 22929, 24694, 26482, 28289,
00072 30112, 31947, 33791, 35640, 37489, 39336, 41176, 43006, 44821, 46617,
00073 48390, 50137, 51853, 53534, 55178, 56778, 58333, 59838, 61289, 62684,
00074 64019, 65290, 66494, 67629, 68692, 69679, 70590, 71420, 72169, 72835,
00075 73415, 73908, 74313, 74630, 74856, 74992, 75038 };
00076
00077 int mpeg3_longLimit[9][23];
00078 int mpeg3_shortLimit[9][14];
00079
00080 struct mpeg3_bandInfoStruct mpeg3_bandInfo[9] =
00081 {
00082
00083
00084 { {0,4,8,12,16,20,24,30,36,44,52,62,74, 90,110,134,162,196,238,288,342,418,576},
00085 {4,4,4,4,4,4,6,6,8, 8,10,12,16,20,24,28,34,42,50,54, 76,158},
00086 {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},
00087 {4,4,4,4,6,8,10,12,14,18,22,30,56} } ,
00088
00089 { {0,4,8,12,16,20,24,30,36,42,50,60,72, 88,106,128,156,190,230,276,330,384,576},
00090 {4,4,4,4,4,4,6,6,6, 8,10,12,16,18,22,28,34,40,46,54, 54,192},
00091 {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},
00092 {4,4,4,4,6,6,10,12,14,16,20,26,66} } ,
00093
00094 { {0,4,8,12,16,20,24,30,36,44,54,66,82,102,126,156,194,240,296,364,448,550,576} ,
00095 {4,4,4,4,4,4,6,6,8,10,12,16,20,24,30,38,46,56,68,84,102, 26} ,
00096 {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} ,
00097 {4,4,4,4,6,8,12,16,20,26,34,42,12} } ,
00098
00099
00100 { {0,6,12,18,24,30,36,44,54,66,80,96,116,140,168,200,238,284,336,396,464,522,576},
00101 {6,6,6,6,6,6,8,10,12,14,16,20,24,28,32,38,46,52,60,68,58,54 } ,
00102 {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} ,
00103 {4,4,4,6,6,8,10,14,18,26,32,42,18 } } ,
00104
00105 { {0,6,12,18,24,30,36,44,54,66,80,96,114,136,162,194,232,278,330,394,464,540,576},
00106 {6,6,6,6,6,6,8,10,12,14,16,18,22,26,32,38,46,52,64,70,76,36 } ,
00107 {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} ,
00108 {4,4,4,6,8,10,12,14,18,24,32,44,12 } } ,
00109
00110 { {0,6,12,18,24,30,36,44,54,66,80,96,116,140,168,200,238,284,336,396,464,522,576},
00111 {6,6,6,6,6,6,8,10,12,14,16,20,24,28,32,38,46,52,60,68,58,54 },
00112 {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},
00113 {4,4,4,6,8,10,12,14,18,24,30,40,18 } } ,
00114
00115 { {0,6,12,18,24,30,36,44,54,66,80,96,116,140,168,200,238,284,336,396,464,522,576} ,
00116 {6,6,6,6,6,6,8,10,12,14,16,20,24,28,32,38,46,52,60,68,58,54},
00117 {0,12,24,36,54,78,108,144,186,240,312,402,522,576},
00118 {4,4,4,6,8,10,12,14,18,24,30,40,18} },
00119 { {0,6,12,18,24,30,36,44,54,66,80,96,116,140,168,200,238,284,336,396,464,522,576} ,
00120 {6,6,6,6,6,6,8,10,12,14,16,20,24,28,32,38,46,52,60,68,58,54},
00121 {0,12,24,36,54,78,108,144,186,240,312,402,522,576},
00122 {4,4,4,6,8,10,12,14,18,24,30,40,18} },
00123 { {0,12,24,36,48,60,72,88,108,132,160,192,232,280,336,400,476,566,568,570,572,574,576},
00124 {12,12,12,12,12,12,16,20,24,28,32,40,48,56,64,76,90,2,2,2,2,2},
00125 {0, 24, 48, 72,108,156,216,288,372,480,486,492,498,576},
00126 {8,8,8,12,16,20,24,28,36,2,2,2,26} } ,
00127 };
00128
00129 int mpeg3_mapbuf0[9][152];
00130 int mpeg3_mapbuf1[9][156];
00131 int mpeg3_mapbuf2[9][44];
00132 int *mpeg3_map[9][3];
00133 int *mpeg3_mapend[9][3];
00134
00135 unsigned int mpeg3_n_slen2[512];
00136 unsigned int mpeg3_i_slen2[256];
00137
00138 static int init_layer2(mpeg3_layer_t *audio)
00139 {
00140 static double mulmul[27] =
00141 {
00142 0.0 , -2.0/3.0 , 2.0/3.0 ,
00143 2.0/7.0 , 2.0/15.0 , 2.0/31.0, 2.0/63.0 , 2.0/127.0 , 2.0/255.0 ,
00144 2.0/511.0 , 2.0/1023.0 , 2.0/2047.0 , 2.0/4095.0 , 2.0/8191.0 ,
00145 2.0/16383.0 , 2.0/32767.0 , 2.0/65535.0 ,
00146 -4.0/5.0 , -2.0/5.0 , 2.0/5.0, 4.0/5.0 ,
00147 -8.0/9.0 , -4.0/9.0 , -2.0/9.0 , 2.0/9.0 , 4.0/9.0 , 8.0/9.0
00148 };
00149 static int base[3][9] =
00150 {
00151 { 1 , 0, 2 , } ,
00152 { 17, 18, 0 , 19, 20 , } ,
00153 { 21, 1, 22, 23, 0, 24, 25, 2, 26 }
00154 };
00155 static int tablen[3] = { 3, 5, 9 };
00156 static int *itable, *tables[3] = {mpeg3_grp_3tab, mpeg3_grp_5tab, mpeg3_grp_9tab};
00157 int i, j, k, l, len;
00158 float *table;
00159
00160 for(i = 0; i < 3; i++)
00161 {
00162 itable = tables[i];
00163 len = tablen[i];
00164 for(j = 0; j < len; j++)
00165 for(k = 0; k < len; k++)
00166 for(l = 0; l < len; l++)
00167 {
00168 *itable++ = base[i][l];
00169 *itable++ = base[i][k];
00170 *itable++ = base[i][j];
00171 }
00172 }
00173
00174 for(k = 0; k < 27; k++)
00175 {
00176 double m = mulmul[k];
00177 table = mpeg3_muls[k];
00178 for(j = 3, i = 0; i < 63; i++, j--)
00179 *table++ = m * pow(2.0, (double)j / 3.0);
00180 *table++ = 0.0;
00181 }
00182 return 0;
00183 }
00184
00185 static int init_layer3(mpeg3_layer_t *audio)
00186 {
00187 int i, j, k, l;
00188 int down_sample_sblimit = 32;
00189
00190 audio->mp3_block[0][0][0] = 0;
00191 audio->mp3_blc[0] = 0;
00192 audio->mp3_blc[1] = 0;
00193
00194 for(i = -256; i < 118 + 4; i++)
00195 mpeg3_gainpow2[i + 256] = pow((double)2.0, -0.25 * (double)(i + 210));
00196
00197 for(i = 0; i < 8207; i++)
00198 mpeg3_ispow[i] = pow((double)i, (double)4.0 / 3.0);
00199
00200 for(i = 0; i < 8; i++)
00201 {
00202 static double Ci[8] = {-0.6,-0.535,-0.33,-0.185,-0.095,-0.041,-0.0142,-0.0037};
00203 double sq = sqrt(1.0+Ci[i]*Ci[i]);
00204 mpeg3_aa_cs[i] = 1.0/sq;
00205 mpeg3_aa_ca[i] = Ci[i]/sq;
00206 }
00207
00208 for(i = 0; i < 18; i++)
00209 {
00210 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);
00211 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);
00212 }
00213 for(i = 0; i < 6; i++)
00214 {
00215 mpeg3_win[1][i + 18] = 0.5 / cos ( M_PI * (double) (2*(i+18)+19) / 72.0 );
00216 mpeg3_win[3][i + 12] = 0.5 / cos ( M_PI * (double) (2*(i+12)+19) / 72.0 );
00217 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 );
00218 mpeg3_win[1][i + 30] = mpeg3_win[3][i] = 0.0;
00219 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 );
00220 }
00221
00222 for(i = 0; i < 9; i++)
00223 mpeg3_COS9[i] = cos(M_PI / 18.0 * (double)i);
00224
00225 for(i = 0; i < 9; i++)
00226 mpeg3_tfcos36[i] = 0.5 / cos (M_PI * (double) (i*2+1) / 36.0);
00227 for(i = 0; i < 3; i++)
00228 mpeg3_tfcos12[i] = 0.5 / cos (M_PI * (double) (i*2+1) / 12.0);
00229
00230 mpeg3_COS6_1 = cos( M_PI / 6.0 * (double) 1);
00231 mpeg3_COS6_2 = cos( M_PI / 6.0 * (double) 2);
00232
00233 mpeg3_cos9[0] = cos(1.0 * M_PI / 9.0);
00234 mpeg3_cos9[1] = cos(5.0 * M_PI / 9.0);
00235 mpeg3_cos9[2] = cos(7.0 * M_PI / 9.0);
00236 mpeg3_cos18[0] = cos(1.0 * M_PI / 18.0);
00237 mpeg3_cos18[1] = cos(11.0 * M_PI / 18.0);
00238 mpeg3_cos18[2] = cos(13.0 * M_PI / 18.0);
00239
00240 for(i = 0; i < 12; i++)
00241 {
00242 mpeg3_win[2][i] = 0.5 * sin(M_PI / 24.0 * (double) (2 * i + 1)) / cos(M_PI * (double)(2 * i + 7) / 24.0);
00243 for(j = 0; j < 6; j++)
00244 mpeg3_COS1[i][j] = cos(M_PI / 24.0 * (double) ((2 * i + 7) * (2 * j + 1)));
00245 }
00246
00247 for(j = 0; j < 4; j++)
00248 {
00249 static int len[4] = {36, 36, 12, 36};
00250 for(i = 0; i < len[j]; i += 2)
00251 mpeg3_win1[j][i] = + mpeg3_win[j][i];
00252 for(i = 1; i < len[j]; i += 2)
00253 mpeg3_win1[j][i] = - mpeg3_win[j][i];
00254 }
00255
00256 for(i = 0; i < 16; i++)
00257 {
00258 double t = tan( (double) i * M_PI / 12.0 );
00259 mpeg3_tan1_1[i] = t / (1.0 + t);
00260 mpeg3_tan2_1[i] = 1.0 / (1.0 + t);
00261 mpeg3_tan1_2[i] = M_SQRT2 * t / (1.0 + t);
00262 mpeg3_tan2_2[i] = M_SQRT2 / (1.0 + t);
00263
00264 for(j = 0; j < 2; j++)
00265 {
00266 double base = pow(2.0, -0.25 * (j + 1.0));
00267 double p1 = 1.0,p2 = 1.0;
00268 if(i > 0)
00269 {
00270 if( i & 1 )
00271 p1 = pow(base, (i + 1.0) * 0.5);
00272 else
00273 p2 = pow(base, i * 0.5);
00274 }
00275 mpeg3_pow1_1[j][i] = p1;
00276 mpeg3_pow2_1[j][i] = p2;
00277 mpeg3_pow1_2[j][i] = M_SQRT2 * p1;
00278 mpeg3_pow2_2[j][i] = M_SQRT2 * p2;
00279 }
00280 }
00281
00282 for(j = 0; j < 9; j++)
00283 {
00284 struct mpeg3_bandInfoStruct *bi = &mpeg3_bandInfo[j];
00285 int *mp;
00286 int cb,lwin;
00287 int *bdf;
00288
00289 mp = mpeg3_map[j][0] = mpeg3_mapbuf0[j];
00290 bdf = bi->longDiff;
00291 for(i = 0, cb = 0; cb < 8; cb++, i += *bdf++)
00292 {
00293 *mp++ = (*bdf) >> 1;
00294 *mp++ = i;
00295 *mp++ = 3;
00296 *mp++ = cb;
00297 }
00298 bdf = bi->shortDiff + 3;
00299 for(cb = 3; cb < 13; cb++)
00300 {
00301 int l = (*bdf++) >> 1;
00302 for(lwin = 0; lwin < 3; lwin++)
00303 {
00304 *mp++ = l;
00305 *mp++ = i + lwin;
00306 *mp++ = lwin;
00307 *mp++ = cb;
00308 }
00309 i += 6 * l;
00310 }
00311 mpeg3_mapend[j][0] = mp;
00312
00313 mp = mpeg3_map[j][1] = mpeg3_mapbuf1[j];
00314 bdf = bi->shortDiff+0;
00315 for(i = 0,cb = 0; cb < 13; cb++)
00316 {
00317 int l = (*bdf++) >> 1;
00318 for(lwin = 0; lwin < 3; lwin++)
00319 {
00320 *mp++ = l;
00321 *mp++ = i + lwin;
00322 *mp++ = lwin;
00323 *mp++ = cb;
00324 }
00325 i += 6 * l;
00326 }
00327 mpeg3_mapend[j][1] = mp;
00328
00329 mp = mpeg3_map[j][2] = mpeg3_mapbuf2[j];
00330 bdf = bi->longDiff;
00331 for(cb = 0; cb < 22 ; cb++)
00332 {
00333 *mp++ = (*bdf++) >> 1;
00334 *mp++ = cb;
00335 }
00336 mpeg3_mapend[j][2] = mp;
00337 }
00338
00339 for(j = 0; j < 9; j++)
00340 {
00341 for(i = 0; i < 23; i++)
00342 {
00343 mpeg3_longLimit[j][i] = (mpeg3_bandInfo[j].longIdx[i] - 1 + 8) / 18 + 1;
00344 if(mpeg3_longLimit[j][i] > (down_sample_sblimit))
00345 mpeg3_longLimit[j][i] = down_sample_sblimit;
00346 }
00347 for(i = 0; i < 14; i++)
00348 {
00349 mpeg3_shortLimit[j][i] = (mpeg3_bandInfo[j].shortIdx[i] - 1) / 18 + 1;
00350 if(mpeg3_shortLimit[j][i] > (down_sample_sblimit) )
00351 mpeg3_shortLimit[j][i] = down_sample_sblimit;
00352 }
00353 }
00354
00355 for(i = 0; i < 5; i++)
00356 {
00357 for(j = 0; j < 6; j++)
00358 {
00359 for(k = 0; k < 6; k++)
00360 {
00361 int n = k + j * 6 + i * 36;
00362 mpeg3_i_slen2[n] = i | (j << 3) | (k << 6) | (3 << 12);
00363 }
00364 }
00365 }
00366 for(i = 0; i < 4; i++)
00367 {
00368 for(j = 0; j < 4; j++)
00369 {
00370 for(k = 0; k < 4; k++)
00371 {
00372 int n = k + j * 4 + i * 16;
00373 mpeg3_i_slen2[n+180] = i | (j << 3) | (k << 6) | (4 << 12);
00374 }
00375 }
00376 }
00377 for(i = 0; i < 4; i++)
00378 {
00379 for(j = 0; j < 3; j++)
00380 {
00381 int n = j + i * 3;
00382 mpeg3_i_slen2[n + 244] = i | (j << 3) | (5 << 12);
00383 mpeg3_n_slen2[n + 500] = i | (j << 3) | (2 << 12) | (1 << 15);
00384 }
00385 }
00386
00387 for(i = 0; i < 5; i++)
00388 {
00389 for(j = 0; j < 5; j++)
00390 {
00391 for(k = 0; k < 4; k++)
00392 {
00393 for(l = 0; l < 4; l++)
00394 {
00395 int n = l + k * 4 + j * 16 + i * 80;
00396 mpeg3_n_slen2[n] = i | (j << 3) | ( k << 6) | (l << 9) | (0 << 12);
00397 }
00398 }
00399 }
00400 }
00401 for(i = 0; i < 5; i++)
00402 {
00403 for(j = 0; j < 5; j++)
00404 {
00405 for(k = 0; k < 4; k++)
00406 {
00407 int n = k + j * 4 + i * 20;
00408 mpeg3_n_slen2[n + 400] = i | (j << 3) | (k << 6) | (1 << 12);
00409 }
00410 }
00411 }
00412 return 0;
00413 }
00414
00415 int mpeg3_new_decode_tables(mpeg3_layer_t *audio)
00416 {
00417 int i, j, k, kr, divv;
00418 float *costab;
00419 int idx;
00420 long scaleval = 1;
00421
00422
00423 for(i = 0; i < 5; i++)
00424 {
00425 kr = 0x10 >> i;
00426 divv = 0x40 >> i;
00427 costab = mpeg3_pnts[i];
00428 for(k = 0; k < kr; k++)
00429 costab[k] = 1.0 / (2.0 * cos(M_PI * ((double)k * 2.0 + 1.0) / (double)divv));
00430
00431 #ifdef USE_3DNOW
00432 for(k = 0; k < kr; k++)
00433 costab[k + kr] = -costab[k];
00434 #endif
00435
00436 }
00437
00438 idx = 0;
00439 scaleval = -scaleval;
00440 for(i = 0, j = 0; i < 256; i++, j++,idx += 32)
00441 {
00442 if(idx < 512 + 16)
00443 mpeg3_decwin[idx+16] = mpeg3_decwin[idx] = (double)mpeg3_intwinbase[j] / 65536.0 * (double)scaleval;
00444
00445 if(i % 32 == 31)
00446 idx -= 1023;
00447 if(i % 64 == 63)
00448 scaleval = -scaleval;
00449 }
00450
00451 for( ; i < 512; i++, j--, idx += 32)
00452 {
00453 if(idx < 512 + 16)
00454 mpeg3_decwin[idx + 16] = mpeg3_decwin[idx] = (double)mpeg3_intwinbase[j] / 65536.0 * (double)scaleval;
00455
00456 if(i % 32 == 31)
00457 idx -= 1023;
00458 if(i % 64 == 63)
00459 scaleval = -scaleval;
00460 }
00461
00462 #ifdef USE_3DNOW
00463 if(!param.down_sample)
00464 {
00465 for(i = 0; i < 512 + 32; i++)
00466 {
00467 mpeg3_decwin[512 + 31 - i] *= 65536.0;
00468 mpeg3_decwin[512 + 32 + i] = mpeg3_decwin[512 + 31 - i];
00469 }
00470 }
00471 #endif
00472
00473
00474
00475
00476 init_layer2(audio);
00477 init_layer3(audio);
00478 return 0;
00479 }