00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00027
00028 #include "avcodec.h"
00029 #include "bitstream.h"
00030 #include "dsputil.h"
00031
00032
00033
00034
00035
00036
00037
00038
00039
00040 #ifdef CONFIG_MPEGAUDIO_HP
00041 # define USE_HIGHPRECISION
00042 #endif
00043
00044 #include "mpegaudio.h"
00045 #include "mpegaudiodecheader.h"
00046
00047 #include "mathops.h"
00048
00049
00050 #define FIXR(a) ((int)((a) * FRAC_ONE + 0.5))
00051 #define FRAC_RND(a) (((a) + (FRAC_ONE/2)) >> FRAC_BITS)
00052
00053 #define FIXHR(a) ((int)((a) * (1LL<<32) + 0.5))
00054
00055
00056
00057 #define HEADER_SIZE 4
00058
00062 typedef struct MP3On4DecodeContext {
00063 int frames;
00064 int chan_cfg;
00065 MPADecodeContext *mp3decctx[5];
00066 } MP3On4DecodeContext;
00067
00068
00069 typedef struct GranuleDef {
00070 uint8_t scfsi;
00071 int part2_3_length;
00072 int big_values;
00073 int global_gain;
00074 int scalefac_compress;
00075 uint8_t block_type;
00076 uint8_t switch_point;
00077 int table_select[3];
00078 int subblock_gain[3];
00079 uint8_t scalefac_scale;
00080 uint8_t count1table_select;
00081 int region_size[3];
00082 int preflag;
00083 int short_start, long_end;
00084 uint8_t scale_factors[40];
00085 int32_t sb_hybrid[SBLIMIT * 18];
00086 } GranuleDef;
00087
00088 #include "mpegaudiodata.h"
00089 #include "mpegaudiodectab.h"
00090
00091 static void compute_antialias_integer(MPADecodeContext *s, GranuleDef *g);
00092 static void compute_antialias_float(MPADecodeContext *s, GranuleDef *g);
00093
00094
00095 static VLC huff_vlc[16];
00096 static VLC huff_quad_vlc[2];
00097
00098 static uint16_t band_index_long[9][23];
00099
00100 #define TABLE_4_3_SIZE (8191 + 16)*4
00101 static int8_t table_4_3_exp[TABLE_4_3_SIZE];
00102 static uint32_t table_4_3_value[TABLE_4_3_SIZE];
00103 static uint32_t exp_table[512];
00104 static uint32_t expval_table[512][16];
00105
00106 static int32_t is_table[2][16];
00107 static int32_t is_table_lsf[2][2][16];
00108 static int32_t csa_table[8][4];
00109 static float csa_table_float[8][4];
00110 static int32_t mdct_win[8][36];
00111
00112
00113 static uint16_t scale_factor_modshift[64];
00114
00115 static int32_t scale_factor_mult[15][3];
00116
00117
00118 #define SCALE_GEN(v) \
00119 { FIXR(1.0 * (v)), FIXR(0.7937005259 * (v)), FIXR(0.6299605249 * (v)) }
00120
00121 static const int32_t scale_factor_mult2[3][3] = {
00122 SCALE_GEN(4.0 / 3.0),
00123 SCALE_GEN(4.0 / 5.0),
00124 SCALE_GEN(4.0 / 9.0),
00125 };
00126
00127 static DECLARE_ALIGNED_16(MPA_INT, window[512]);
00128
00129
00130
00131 static inline int l1_unscale(int n, int mant, int scale_factor)
00132 {
00133 int shift, mod;
00134 int64_t val;
00135
00136 shift = scale_factor_modshift[scale_factor];
00137 mod = shift & 3;
00138 shift >>= 2;
00139 val = MUL64(mant + (-1 << n) + 1, scale_factor_mult[n-1][mod]);
00140 shift += n;
00141
00142 return (int)((val + (1LL << (shift - 1))) >> shift);
00143 }
00144
00145 static inline int l2_unscale_group(int steps, int mant, int scale_factor)
00146 {
00147 int shift, mod, val;
00148
00149 shift = scale_factor_modshift[scale_factor];
00150 mod = shift & 3;
00151 shift >>= 2;
00152
00153 val = (mant - (steps >> 1)) * scale_factor_mult2[steps >> 2][mod];
00154
00155 if (shift > 0)
00156 val = (val + (1 << (shift - 1))) >> shift;
00157 return val;
00158 }
00159
00160
00161 static inline int l3_unscale(int value, int exponent)
00162 {
00163 unsigned int m;
00164 int e;
00165
00166 e = table_4_3_exp [4*value + (exponent&3)];
00167 m = table_4_3_value[4*value + (exponent&3)];
00168 e -= (exponent >> 2);
00169 assert(e>=1);
00170 if (e > 31)
00171 return 0;
00172 m = (m + (1 << (e-1))) >> e;
00173
00174 return m;
00175 }
00176
00177
00178 #define DEV_ORDER 13
00179
00180 #define POW_FRAC_BITS 24
00181 #define POW_FRAC_ONE (1 << POW_FRAC_BITS)
00182 #define POW_FIX(a) ((int)((a) * POW_FRAC_ONE))
00183 #define POW_MULL(a,b) (((int64_t)(a) * (int64_t)(b)) >> POW_FRAC_BITS)
00184
00185 static int dev_4_3_coefs[DEV_ORDER];
00186
00187 #if 0
00188 static int pow_mult3[3] = {
00189 POW_FIX(1.0),
00190 POW_FIX(1.25992104989487316476),
00191 POW_FIX(1.58740105196819947474),
00192 };
00193 #endif
00194
00195 static void int_pow_init(void)
00196 {
00197 int i, a;
00198
00199 a = POW_FIX(1.0);
00200 for(i=0;i<DEV_ORDER;i++) {
00201 a = POW_MULL(a, POW_FIX(4.0 / 3.0) - i * POW_FIX(1.0)) / (i + 1);
00202 dev_4_3_coefs[i] = a;
00203 }
00204 }
00205
00206 #if 0
00207
00208 static int int_pow(int i, int *exp_ptr)
00209 {
00210 int e, er, eq, j;
00211 int a, a1;
00212
00213
00214 a = i;
00215 e = POW_FRAC_BITS;
00216 while (a < (1 << (POW_FRAC_BITS - 1))) {
00217 a = a << 1;
00218 e--;
00219 }
00220 a -= (1 << POW_FRAC_BITS);
00221 a1 = 0;
00222 for(j = DEV_ORDER - 1; j >= 0; j--)
00223 a1 = POW_MULL(a, dev_4_3_coefs[j] + a1);
00224 a = (1 << POW_FRAC_BITS) + a1;
00225
00226 e = e * 4;
00227 er = e % 3;
00228 eq = e / 3;
00229 a = POW_MULL(a, pow_mult3[er]);
00230 while (a >= 2 * POW_FRAC_ONE) {
00231 a = a >> 1;
00232 eq++;
00233 }
00234
00235 while (a < POW_FRAC_ONE) {
00236 a = a << 1;
00237 eq--;
00238 }
00239
00240 #if POW_FRAC_BITS > FRAC_BITS
00241 a = (a + (1 << (POW_FRAC_BITS - FRAC_BITS - 1))) >> (POW_FRAC_BITS - FRAC_BITS);
00242
00243 if (a >= 2 * (1 << FRAC_BITS)) {
00244 a = a >> 1;
00245 eq++;
00246 }
00247 #endif
00248 *exp_ptr = eq;
00249 return a;
00250 }
00251 #endif
00252
00253 static int decode_init(AVCodecContext * avctx)
00254 {
00255 MPADecodeContext *s = avctx->priv_data;
00256 static int init=0;
00257 int i, j, k;
00258
00259 s->avctx = avctx;
00260
00261 #if defined(USE_HIGHPRECISION) && defined(CONFIG_AUDIO_NONSHORT)
00262 avctx->sample_fmt= SAMPLE_FMT_S32;
00263 #else
00264 avctx->sample_fmt= SAMPLE_FMT_S16;
00265 #endif
00266 s->error_resilience= avctx->error_resilience;
00267
00268 if(avctx->antialias_algo != FF_AA_FLOAT)
00269 s->compute_antialias= compute_antialias_integer;
00270 else
00271 s->compute_antialias= compute_antialias_float;
00272
00273 if (!init && !avctx->parse_only) {
00274
00275 for(i=0;i<64;i++) {
00276 int shift, mod;
00277
00278 shift = (i / 3);
00279 mod = i % 3;
00280 scale_factor_modshift[i] = mod | (shift << 2);
00281 }
00282
00283
00284 for(i=0;i<15;i++) {
00285 int n, norm;
00286 n = i + 2;
00287 norm = ((INT64_C(1) << n) * FRAC_ONE) / ((1 << n) - 1);
00288 scale_factor_mult[i][0] = MULL(FIXR(1.0 * 2.0), norm);
00289 scale_factor_mult[i][1] = MULL(FIXR(0.7937005259 * 2.0), norm);
00290 scale_factor_mult[i][2] = MULL(FIXR(0.6299605249 * 2.0), norm);
00291 dprintf(avctx, "%d: norm=%x s=%x %x %x\n",
00292 i, norm,
00293 scale_factor_mult[i][0],
00294 scale_factor_mult[i][1],
00295 scale_factor_mult[i][2]);
00296 }
00297
00298 ff_mpa_synth_init(window);
00299
00300
00301 for(i=1;i<16;i++) {
00302 const HuffTable *h = &mpa_huff_tables[i];
00303 int xsize, x, y;
00304 unsigned int n;
00305 uint8_t tmp_bits [512];
00306 uint16_t tmp_codes[512];
00307
00308 memset(tmp_bits , 0, sizeof(tmp_bits ));
00309 memset(tmp_codes, 0, sizeof(tmp_codes));
00310
00311 xsize = h->xsize;
00312 n = xsize * xsize;
00313
00314 j = 0;
00315 for(x=0;x<xsize;x++) {
00316 for(y=0;y<xsize;y++){
00317 tmp_bits [(x << 5) | y | ((x&&y)<<4)]= h->bits [j ];
00318 tmp_codes[(x << 5) | y | ((x&&y)<<4)]= h->codes[j++];
00319 }
00320 }
00321
00322
00323 init_vlc(&huff_vlc[i], 7, 512,
00324 tmp_bits, 1, 1, tmp_codes, 2, 2, 1);
00325 }
00326 for(i=0;i<2;i++) {
00327 init_vlc(&huff_quad_vlc[i], i == 0 ? 7 : 4, 16,
00328 mpa_quad_bits[i], 1, 1, mpa_quad_codes[i], 1, 1, 1);
00329 }
00330
00331 for(i=0;i<9;i++) {
00332 k = 0;
00333 for(j=0;j<22;j++) {
00334 band_index_long[i][j] = k;
00335 k += band_size_long[i][j];
00336 }
00337 band_index_long[i][22] = k;
00338 }
00339
00340
00341
00342 int_pow_init();
00343 for(i=1;i<TABLE_4_3_SIZE;i++) {
00344 double f, fm;
00345 int e, m;
00346 f = pow((double)(i/4), 4.0 / 3.0) * pow(2, (i&3)*0.25);
00347 fm = frexp(f, &e);
00348 m = (uint32_t)(fm*(1LL<<31) + 0.5);
00349 e+= FRAC_BITS - 31 + 5 - 100;
00350
00351
00352 table_4_3_value[i] = m;
00353
00354 table_4_3_exp[i] = -e;
00355 }
00356 for(i=0; i<512*16; i++){
00357 int exponent= (i>>4);
00358 double f= pow(i&15, 4.0 / 3.0) * pow(2, (exponent-400)*0.25 + FRAC_BITS + 5);
00359 expval_table[exponent][i&15]= llrint(f);
00360 if((i&15)==1)
00361 exp_table[exponent]= llrint(f);
00362 }
00363
00364 for(i=0;i<7;i++) {
00365 float f;
00366 int v;
00367 if (i != 6) {
00368 f = tan((double)i * M_PI / 12.0);
00369 v = FIXR(f / (1.0 + f));
00370 } else {
00371 v = FIXR(1.0);
00372 }
00373 is_table[0][i] = v;
00374 is_table[1][6 - i] = v;
00375 }
00376
00377 for(i=7;i<16;i++)
00378 is_table[0][i] = is_table[1][i] = 0.0;
00379
00380 for(i=0;i<16;i++) {
00381 double f;
00382 int e, k;
00383
00384 for(j=0;j<2;j++) {
00385 e = -(j + 1) * ((i + 1) >> 1);
00386 f = pow(2.0, e / 4.0);
00387 k = i & 1;
00388 is_table_lsf[j][k ^ 1][i] = FIXR(f);
00389 is_table_lsf[j][k][i] = FIXR(1.0);
00390 dprintf(avctx, "is_table_lsf %d %d: %x %x\n",
00391 i, j, is_table_lsf[j][0][i], is_table_lsf[j][1][i]);
00392 }
00393 }
00394
00395 for(i=0;i<8;i++) {
00396 float ci, cs, ca;
00397 ci = ci_table[i];
00398 cs = 1.0 / sqrt(1.0 + ci * ci);
00399 ca = cs * ci;
00400 csa_table[i][0] = FIXHR(cs/4);
00401 csa_table[i][1] = FIXHR(ca/4);
00402 csa_table[i][2] = FIXHR(ca/4) + FIXHR(cs/4);
00403 csa_table[i][3] = FIXHR(ca/4) - FIXHR(cs/4);
00404 csa_table_float[i][0] = cs;
00405 csa_table_float[i][1] = ca;
00406 csa_table_float[i][2] = ca + cs;
00407 csa_table_float[i][3] = ca - cs;
00408
00409
00410 }
00411
00412
00413 for(i=0;i<36;i++) {
00414 for(j=0; j<4; j++){
00415 double d;
00416
00417 if(j==2 && i%3 != 1)
00418 continue;
00419
00420 d= sin(M_PI * (i + 0.5) / 36.0);
00421 if(j==1){
00422 if (i>=30) d= 0;
00423 else if(i>=24) d= sin(M_PI * (i - 18 + 0.5) / 12.0);
00424 else if(i>=18) d= 1;
00425 }else if(j==3){
00426 if (i< 6) d= 0;
00427 else if(i< 12) d= sin(M_PI * (i - 6 + 0.5) / 12.0);
00428 else if(i< 18) d= 1;
00429 }
00430
00431 d*= 0.5 / cos(M_PI*(2*i + 19)/72);
00432
00433 if(j==2)
00434 mdct_win[j][i/3] = FIXHR((d / (1<<5)));
00435 else
00436 mdct_win[j][i ] = FIXHR((d / (1<<5)));
00437
00438 }
00439 }
00440
00441
00442
00443 for(j=0;j<4;j++) {
00444 for(i=0;i<36;i+=2) {
00445 mdct_win[j + 4][i] = mdct_win[j][i];
00446 mdct_win[j + 4][i + 1] = -mdct_win[j][i + 1];
00447 }
00448 }
00449
00450 #if defined(DEBUG)
00451 for(j=0;j<8;j++) {
00452 av_log(avctx, AV_LOG_DEBUG, "win%d=\n", j);
00453 for(i=0;i<36;i++)
00454 av_log(avctx, AV_LOG_DEBUG, "%f, ", (double)mdct_win[j][i] / FRAC_ONE);
00455 av_log(avctx, AV_LOG_DEBUG, "\n");
00456 }
00457 #endif
00458 init = 1;
00459 }
00460
00461 #ifdef DEBUG
00462 s->frame_count = 0;
00463 #endif
00464 if (avctx->codec_id == CODEC_ID_MP3ADU)
00465 s->adu_mode = 1;
00466 return 0;
00467 }
00468
00469
00470
00471
00472
00473 #define COS0_0 FIXHR(0.50060299823519630134/2)
00474 #define COS0_1 FIXHR(0.50547095989754365998/2)
00475 #define COS0_2 FIXHR(0.51544730992262454697/2)
00476 #define COS0_3 FIXHR(0.53104259108978417447/2)
00477 #define COS0_4 FIXHR(0.55310389603444452782/2)
00478 #define COS0_5 FIXHR(0.58293496820613387367/2)
00479 #define COS0_6 FIXHR(0.62250412303566481615/2)
00480 #define COS0_7 FIXHR(0.67480834145500574602/2)
00481 #define COS0_8 FIXHR(0.74453627100229844977/2)
00482 #define COS0_9 FIXHR(0.83934964541552703873/2)
00483 #define COS0_10 FIXHR(0.97256823786196069369/2)
00484 #define COS0_11 FIXHR(1.16943993343288495515/4)
00485 #define COS0_12 FIXHR(1.48416461631416627724/4)
00486 #define COS0_13 FIXHR(2.05778100995341155085/8)
00487 #define COS0_14 FIXHR(3.40760841846871878570/8)
00488 #define COS0_15 FIXHR(10.19000812354805681150/32)
00489
00490 #define COS1_0 FIXHR(0.50241928618815570551/2)
00491 #define COS1_1 FIXHR(0.52249861493968888062/2)
00492 #define COS1_2 FIXHR(0.56694403481635770368/2)
00493 #define COS1_3 FIXHR(0.64682178335999012954/2)
00494 #define COS1_4 FIXHR(0.78815462345125022473/2)
00495 #define COS1_5 FIXHR(1.06067768599034747134/4)
00496 #define COS1_6 FIXHR(1.72244709823833392782/4)
00497 #define COS1_7 FIXHR(5.10114861868916385802/16)
00498
00499 #define COS2_0 FIXHR(0.50979557910415916894/2)
00500 #define COS2_1 FIXHR(0.60134488693504528054/2)
00501 #define COS2_2 FIXHR(0.89997622313641570463/2)
00502 #define COS2_3 FIXHR(2.56291544774150617881/8)
00503
00504 #define COS3_0 FIXHR(0.54119610014619698439/2)
00505 #define COS3_1 FIXHR(1.30656296487637652785/4)
00506
00507 #define COS4_0 FIXHR(0.70710678118654752439/2)
00508
00509
00510 #define BF(a, b, c, s)\
00511 {\
00512 tmp0 = tab[a] + tab[b];\
00513 tmp1 = tab[a] - tab[b];\
00514 tab[a] = tmp0;\
00515 tab[b] = MULH(tmp1<<(s), c);\
00516 }
00517
00518 #define BF1(a, b, c, d)\
00519 {\
00520 BF(a, b, COS4_0, 1);\
00521 BF(c, d,-COS4_0, 1);\
00522 tab[c] += tab[d];\
00523 }
00524
00525 #define BF2(a, b, c, d)\
00526 {\
00527 BF(a, b, COS4_0, 1);\
00528 BF(c, d,-COS4_0, 1);\
00529 tab[c] += tab[d];\
00530 tab[a] += tab[c];\
00531 tab[c] += tab[b];\
00532 tab[b] += tab[d];\
00533 }
00534
00535 #define ADD(a, b) tab[a] += tab[b]
00536
00537
00538 static void dct32(int32_t *out, int32_t *tab)
00539 {
00540 int tmp0, tmp1;
00541
00542
00543 BF( 0, 31, COS0_0 , 1);
00544 BF(15, 16, COS0_15, 5);
00545
00546 BF( 0, 15, COS1_0 , 1);
00547 BF(16, 31,-COS1_0 , 1);
00548
00549 BF( 7, 24, COS0_7 , 1);
00550 BF( 8, 23, COS0_8 , 1);
00551
00552 BF( 7, 8, COS1_7 , 4);
00553 BF(23, 24,-COS1_7 , 4);
00554
00555 BF( 0, 7, COS2_0 , 1);
00556 BF( 8, 15,-COS2_0 , 1);
00557 BF(16, 23, COS2_0 , 1);
00558 BF(24, 31,-COS2_0 , 1);
00559
00560 BF( 3, 28, COS0_3 , 1);
00561 BF(12, 19, COS0_12, 2);
00562
00563 BF( 3, 12, COS1_3 , 1);
00564 BF(19, 28,-COS1_3 , 1);
00565
00566 BF( 4, 27, COS0_4 , 1);
00567 BF(11, 20, COS0_11, 2);
00568
00569 BF( 4, 11, COS1_4 , 1);
00570 BF(20, 27,-COS1_4 , 1);
00571
00572 BF( 3, 4, COS2_3 , 3);
00573 BF(11, 12,-COS2_3 , 3);
00574 BF(19, 20, COS2_3 , 3);
00575 BF(27, 28,-COS2_3 , 3);
00576
00577 BF( 0, 3, COS3_0 , 1);
00578 BF( 4, 7,-COS3_0 , 1);
00579 BF( 8, 11, COS3_0 , 1);
00580 BF(12, 15,-COS3_0 , 1);
00581 BF(16, 19, COS3_0 , 1);
00582 BF(20, 23,-COS3_0 , 1);
00583 BF(24, 27, COS3_0 , 1);
00584 BF(28, 31,-COS3_0 , 1);
00585
00586
00587
00588
00589 BF( 1, 30, COS0_1 , 1);
00590 BF(14, 17, COS0_14, 3);
00591
00592 BF( 1, 14, COS1_1 , 1);
00593 BF(17, 30,-COS1_1 , 1);
00594
00595 BF( 6, 25, COS0_6 , 1);
00596 BF( 9, 22, COS0_9 , 1);
00597
00598 BF( 6, 9, COS1_6 , 2);
00599 BF(22, 25,-COS1_6 , 2);
00600
00601 BF( 1, 6, COS2_1 , 1);
00602 BF( 9, 14,-COS2_1 , 1);
00603 BF(17, 22, COS2_1 , 1);
00604 BF(25, 30,-COS2_1 , 1);
00605
00606
00607 BF( 2, 29, COS0_2 , 1);
00608 BF(13, 18, COS0_13, 3);
00609
00610 BF( 2, 13, COS1_2 , 1);
00611 BF(18, 29,-COS1_2 , 1);
00612
00613 BF( 5, 26, COS0_5 , 1);
00614 BF(10, 21, COS0_10, 1);
00615
00616 BF( 5, 10, COS1_5 , 2);
00617 BF(21, 26,-COS1_5 , 2);
00618
00619 BF( 2, 5, COS2_2 , 1);
00620 BF(10, 13,-COS2_2 , 1);
00621 BF(18, 21, COS2_2 , 1);
00622 BF(26, 29,-COS2_2 , 1);
00623
00624 BF( 1, 2, COS3_1 , 2);
00625 BF( 5, 6,-COS3_1 , 2);
00626 BF( 9, 10, COS3_1 , 2);
00627 BF(13, 14,-COS3_1 , 2);
00628 BF(17, 18, COS3_1 , 2);
00629 BF(21, 22,-COS3_1 , 2);
00630 BF(25, 26, COS3_1 , 2);
00631 BF(29, 30,-COS3_1 , 2);
00632
00633
00634 BF1( 0, 1, 2, 3);
00635 BF2( 4, 5, 6, 7);
00636 BF1( 8, 9, 10, 11);
00637 BF2(12, 13, 14, 15);
00638 BF1(16, 17, 18, 19);
00639 BF2(20, 21, 22, 23);
00640 BF1(24, 25, 26, 27);
00641 BF2(28, 29, 30, 31);
00642
00643
00644
00645 ADD( 8, 12);
00646 ADD(12, 10);
00647 ADD(10, 14);
00648 ADD(14, 9);
00649 ADD( 9, 13);
00650 ADD(13, 11);
00651 ADD(11, 15);
00652
00653 out[ 0] = tab[0];
00654 out[16] = tab[1];
00655 out[ 8] = tab[2];
00656 out[24] = tab[3];
00657 out[ 4] = tab[4];
00658 out[20] = tab[5];
00659 out[12] = tab[6];
00660 out[28] = tab[7];
00661 out[ 2] = tab[8];
00662 out[18] = tab[9];
00663 out[10] = tab[10];
00664 out[26] = tab[11];
00665 out[ 6] = tab[12];
00666 out[22] = tab[13];
00667 out[14] = tab[14];
00668 out[30] = tab[15];
00669
00670 ADD(24, 28);
00671 ADD(28, 26);
00672 ADD(26, 30);
00673 ADD(30, 25);
00674 ADD(25, 29);
00675 ADD(29, 27);
00676 ADD(27, 31);
00677
00678 out[ 1] = tab[16] + tab[24];
00679 out[17] = tab[17] + tab[25];
00680 out[ 9] = tab[18] + tab[26];
00681 out[25] = tab[19] + tab[27];
00682 out[ 5] = tab[20] + tab[28];
00683 out[21] = tab[21] + tab[29];
00684 out[13] = tab[22] + tab[30];
00685 out[29] = tab[23] + tab[31];
00686 out[ 3] = tab[24] + tab[20];
00687 out[19] = tab[25] + tab[21];
00688 out[11] = tab[26] + tab[22];
00689 out[27] = tab[27] + tab[23];
00690 out[ 7] = tab[28] + tab[18];
00691 out[23] = tab[29] + tab[19];
00692 out[15] = tab[30] + tab[17];
00693 out[31] = tab[31];
00694 }
00695
00696 #if FRAC_BITS <= 15
00697
00698 static inline int round_sample(int *sum)
00699 {
00700 int sum1;
00701 sum1 = (*sum) >> OUT_SHIFT;
00702 *sum &= (1<<OUT_SHIFT)-1;
00703 if (sum1 < OUT_MIN)
00704 sum1 = OUT_MIN;
00705 else if (sum1 > OUT_MAX)
00706 sum1 = OUT_MAX;
00707 return sum1;
00708 }
00709
00710
00711 #define MACS(rt, ra, rb) MAC16(rt, ra, rb)
00712
00713
00714 #define MULS(ra, rb) MUL16(ra, rb)
00715
00716 #else
00717
00718 static inline int round_sample(int64_t *sum)
00719 {
00720 int sum1;
00721 sum1 = (int)((*sum) >> OUT_SHIFT);
00722 *sum &= (1<<OUT_SHIFT)-1;
00723 if (sum1 < OUT_MIN)
00724 sum1 = OUT_MIN;
00725 else if (sum1 > OUT_MAX)
00726 sum1 = OUT_MAX;
00727 return sum1;
00728 }
00729
00730 # define MULS(ra, rb) MUL64(ra, rb)
00731 #endif
00732
00733 #define SUM8(sum, op, w, p) \
00734 { \
00735 sum op MULS((w)[0 * 64], p[0 * 64]);\
00736 sum op MULS((w)[1 * 64], p[1 * 64]);\
00737 sum op MULS((w)[2 * 64], p[2 * 64]);\
00738 sum op MULS((w)[3 * 64], p[3 * 64]);\
00739 sum op MULS((w)[4 * 64], p[4 * 64]);\
00740 sum op MULS((w)[5 * 64], p[5 * 64]);\
00741 sum op MULS((w)[6 * 64], p[6 * 64]);\
00742 sum op MULS((w)[7 * 64], p[7 * 64]);\
00743 }
00744
00745 #define SUM8P2(sum1, op1, sum2, op2, w1, w2, p) \
00746 { \
00747 int tmp;\
00748 tmp = p[0 * 64];\
00749 sum1 op1 MULS((w1)[0 * 64], tmp);\
00750 sum2 op2 MULS((w2)[0 * 64], tmp);\
00751 tmp = p[1 * 64];\
00752 sum1 op1 MULS((w1)[1 * 64], tmp);\
00753 sum2 op2 MULS((w2)[1 * 64], tmp);\
00754 tmp = p[2 * 64];\
00755 sum1 op1 MULS((w1)[2 * 64], tmp);\
00756 sum2 op2 MULS((w2)[2 * 64], tmp);\
00757 tmp = p[3 * 64];\
00758 sum1 op1 MULS((w1)[3 * 64], tmp);\
00759 sum2 op2 MULS((w2)[3 * 64], tmp);\
00760 tmp = p[4 * 64];\
00761 sum1 op1 MULS((w1)[4 * 64], tmp);\
00762 sum2 op2 MULS((w2)[4 * 64], tmp);\
00763 tmp = p[5 * 64];\
00764 sum1 op1 MULS((w1)[5 * 64], tmp);\
00765 sum2 op2 MULS((w2)[5 * 64], tmp);\
00766 tmp = p[6 * 64];\
00767 sum1 op1 MULS((w1)[6 * 64], tmp);\
00768 sum2 op2 MULS((w2)[6 * 64], tmp);\
00769 tmp = p[7 * 64];\
00770 sum1 op1 MULS((w1)[7 * 64], tmp);\
00771 sum2 op2 MULS((w2)[7 * 64], tmp);\
00772 }
00773
00774 void ff_mpa_synth_init(MPA_INT *window)
00775 {
00776 int i;
00777
00778
00779 for(i=0;i<257;i++) {
00780 int v;
00781 v = ff_mpa_enwindow[i];
00782 #if WFRAC_BITS < 16
00783 v = (v + (1 << (16 - WFRAC_BITS - 1))) >> (16 - WFRAC_BITS);
00784 #endif
00785 window[i] = v;
00786 if ((i & 63) != 0)
00787 v = -v;
00788 if (i != 0)
00789 window[512 - i] = v;
00790 }
00791 }
00792
00793
00794
00795
00796 void ff_mpa_synth_filter(MPA_INT *synth_buf_ptr, int *synth_buf_offset,
00797 MPA_INT *window, int *dither_state,
00798 OUT_INT *samples, int incr,
00799 int32_t sb_samples[SBLIMIT])
00800 {
00801 int32_t tmp[32];
00802 register MPA_INT *synth_buf;
00803 register const MPA_INT *w, *w2, *p;
00804 int j, offset, v;
00805 OUT_INT *samples2;
00806 #if FRAC_BITS <= 15
00807 int sum, sum2;
00808 #else
00809 int64_t sum, sum2;
00810 #endif
00811
00812 dct32(tmp, sb_samples);
00813
00814 offset = *synth_buf_offset;
00815 synth_buf = synth_buf_ptr + offset;
00816
00817 for(j=0;j<32;j++) {
00818 v = tmp[j];
00819 #if FRAC_BITS <= 15
00820
00821
00822 v = av_clip_int16(v);
00823 #endif
00824 synth_buf[j] = v;
00825 }
00826
00827 memcpy(synth_buf + 512, synth_buf, 32 * sizeof(MPA_INT));
00828
00829 samples2 = samples + 31 * incr;
00830 w = window;
00831 w2 = window + 31;
00832
00833 sum = *dither_state;
00834 p = synth_buf + 16;
00835 SUM8(sum, +=, w, p);
00836 p = synth_buf + 48;
00837 SUM8(sum, -=, w + 32, p);
00838 *samples = round_sample(&sum);
00839 samples += incr;
00840 w++;
00841
00842
00843
00844 for(j=1;j<16;j++) {
00845 sum2 = 0;
00846 p = synth_buf + 16 + j;
00847 SUM8P2(sum, +=, sum2, -=, w, w2, p);
00848 p = synth_buf + 48 - j;
00849 SUM8P2(sum, -=, sum2, -=, w + 32, w2 + 32, p);
00850
00851 *samples = round_sample(&sum);
00852 samples += incr;
00853 sum += sum2;
00854 *samples2 = round_sample(&sum);
00855 samples2 -= incr;
00856 w++;
00857 w2--;
00858 }
00859
00860 p = synth_buf + 32;
00861 SUM8(sum, -=, w + 32, p);
00862 *samples = round_sample(&sum);
00863 *dither_state= sum;
00864
00865 offset = (offset - 32) & 511;
00866 *synth_buf_offset = offset;
00867 }
00868
00869 #define C3 FIXHR(0.86602540378443864676/2)
00870
00871
00872 static const int icos36[9] = {
00873 FIXR(0.50190991877167369479),
00874 FIXR(0.51763809020504152469),
00875 FIXR(0.55168895948124587824),
00876 FIXR(0.61038729438072803416),
00877 FIXR(0.70710678118654752439),
00878 FIXR(0.87172339781054900991),
00879 FIXR(1.18310079157624925896),
00880 FIXR(1.93185165257813657349),
00881 FIXR(5.73685662283492756461),
00882 };
00883
00884
00885 static const int icos36h[9] = {
00886 FIXHR(0.50190991877167369479/2),
00887 FIXHR(0.51763809020504152469/2),
00888 FIXHR(0.55168895948124587824/2),
00889 FIXHR(0.61038729438072803416/2),
00890 FIXHR(0.70710678118654752439/2),
00891 FIXHR(0.87172339781054900991/2),
00892 FIXHR(1.18310079157624925896/4),
00893 FIXHR(1.93185165257813657349/4),
00894
00895 };
00896
00897
00898
00899 static void imdct12(int *out, int *in)
00900 {
00901 int in0, in1, in2, in3, in4, in5, t1, t2;
00902
00903 in0= in[0*3];
00904 in1= in[1*3] + in[0*3];
00905 in2= in[2*3] + in[1*3];
00906 in3= in[3*3] + in[2*3];
00907 in4= in[4*3] + in[3*3];
00908 in5= in[5*3] + in[4*3];
00909 in5 += in3;
00910 in3 += in1;
00911
00912 in2= MULH(2*in2, C3);
00913 in3= MULH(4*in3, C3);
00914
00915 t1 = in0 - in4;
00916 t2 = MULH(2*(in1 - in5), icos36h[4]);
00917
00918 out[ 7]=
00919 out[10]= t1 + t2;
00920 out[ 1]=
00921 out[ 4]= t1 - t2;
00922
00923 in0 += in4>>1;
00924 in4 = in0 + in2;
00925 in5 += 2*in1;
00926 in1 = MULH(in5 + in3, icos36h[1]);
00927 out[ 8]=
00928 out[ 9]= in4 + in1;
00929 out[ 2]=
00930 out[ 3]= in4 - in1;
00931
00932 in0 -= in2;
00933 in5 = MULH(2*(in5 - in3), icos36h[7]);
00934 out[ 0]=
00935 out[ 5]= in0 - in5;
00936 out[ 6]=
00937 out[11]= in0 + in5;
00938 }
00939
00940
00941 #define C1 FIXHR(0.98480775301220805936/2)
00942 #define C2 FIXHR(0.93969262078590838405/2)
00943 #define C3 FIXHR(0.86602540378443864676/2)
00944 #define C4 FIXHR(0.76604444311897803520/2)
00945 #define C5 FIXHR(0.64278760968653932632/2)
00946 #define C6 FIXHR(0.5/2)
00947 #define C7 FIXHR(0.34202014332566873304/2)
00948 #define C8 FIXHR(0.17364817766693034885/2)
00949
00950
00951
00952 static void imdct36(int *out, int *buf, int *in, int *win)
00953 {
00954 int i, j, t0, t1, t2, t3, s0, s1, s2, s3;
00955 int tmp[18], *tmp1, *in1;
00956
00957 for(i=17;i>=1;i--)
00958 in[i] += in[i-1];
00959 for(i=17;i>=3;i-=2)
00960 in[i] += in[i-2];
00961
00962 for(j=0;j<2;j++) {
00963 tmp1 = tmp + j;
00964 in1 = in + j;
00965 #if 0
00966
00967 int64_t t0, t1, t2, t3;
00968 t2 = in1[2*4] + in1[2*8] - in1[2*2];
00969
00970 t3 = (in1[2*0] + (int64_t)(in1[2*6]>>1))<<32;
00971 t1 = in1[2*0] - in1[2*6];
00972 tmp1[ 6] = t1 - (t2>>1);
00973 tmp1[16] = t1 + t2;
00974
00975 t0 = MUL64(2*(in1[2*2] + in1[2*4]), C2);
00976 t1 = MUL64( in1[2*4] - in1[2*8] , -2*C8);
00977 t2 = MUL64(2*(in1[2*2] + in1[2*8]), -C4);
00978
00979 tmp1[10] = (t3 - t0 - t2) >> 32;
00980 tmp1[ 2] = (t3 + t0 + t1) >> 32;
00981 tmp1[14] = (t3 + t2 - t1) >> 32;
00982
00983 tmp1[ 4] = MULH(2*(in1[2*5] + in1[2*7] - in1[2*1]), -C3);
00984 t2 = MUL64(2*(in1[2*1] + in1[2*5]), C1);
00985 t3 = MUL64( in1[2*5] - in1[2*7] , -2*C7);
00986 t0 = MUL64(2*in1[2*3], C3);
00987
00988 t1 = MUL64(2*(in1[2*1] + in1[2*7]), -C5);
00989
00990 tmp1[ 0] = (t2 + t3 + t0) >> 32;
00991 tmp1[12] = (t2 + t1 - t0) >> 32;
00992 tmp1[ 8] = (t3 - t1 - t0) >> 32;
00993 #else
00994 t2 = in1[2*4] + in1[2*8] - in1[2*2];
00995
00996 t3 = in1[2*0] + (in1[2*6]>>1);
00997 t1 = in1[2*0] - in1[2*6];
00998 tmp1[ 6] = t1 - (t2>>1);
00999 tmp1[16] = t1 + t2;
01000
01001 t0 = MULH(2*(in1[2*2] + in1[2*4]), C2);
01002 t1 = MULH( in1[2*4] - in1[2*8] , -2*C8);
01003 t2 = MULH(2*(in1[2*2] + in1[2*8]), -C4);
01004
01005 tmp1[10] = t3 - t0 - t2;
01006 tmp1[ 2] = t3 + t0 + t1;
01007 tmp1[14] = t3 + t2 - t1;
01008
01009 tmp1[ 4] = MULH(2*(in1[2*5] + in1[2*7] - in1[2*1]), -C3);
01010 t2 = MULH(2*(in1[2*1] + in1[2*5]), C1);
01011 t3 = MULH( in1[2*5] - in1[2*7] , -2*C7);
01012 t0 = MULH(2*in1[2*3], C3);
01013
01014 t1 = MULH(2*(in1[2*1] + in1[2*7]), -C5);
01015
01016 tmp1[ 0] = t2 + t3 + t0;
01017 tmp1[12] = t2 + t1 - t0;
01018 tmp1[ 8] = t3 - t1 - t0;
01019 #endif
01020 }
01021
01022 i = 0;
01023 for(j=0;j<4;j++) {
01024 t0 = tmp[i];
01025 t1 = tmp[i + 2];
01026 s0 = t1 + t0;
01027 s2 = t1 - t0;
01028
01029 t2 = tmp[i + 1];
01030 t3 = tmp[i + 3];
01031 s1 = MULH(2*(t3 + t2), icos36h[j]);
01032 s3 = MULL(t3 - t2, icos36[8 - j]);
01033
01034 t0 = s0 + s1;
01035 t1 = s0 - s1;
01036 out[(9 + j)*SBLIMIT] = MULH(t1, win[9 + j]) + buf[9 + j];
01037 out[(8 - j)*SBLIMIT] = MULH(t1, win[8 - j]) + buf[8 - j];
01038 buf[9 + j] = MULH(t0, win[18 + 9 + j]);
01039 buf[8 - j] = MULH(t0, win[18 + 8 - j]);
01040
01041 t0 = s2 + s3;
01042 t1 = s2 - s3;
01043 out[(9 + 8 - j)*SBLIMIT] = MULH(t1, win[9 + 8 - j]) + buf[9 + 8 - j];
01044 out[( j)*SBLIMIT] = MULH(t1, win[ j]) + buf[ j];
01045 buf[9 + 8 - j] = MULH(t0, win[18 + 9 + 8 - j]);
01046 buf[ + j] = MULH(t0, win[18 + j]);
01047 i += 4;
01048 }
01049
01050 s0 = tmp[16];
01051 s1 = MULH(2*tmp[17], icos36h[4]);
01052 t0 = s0 + s1;
01053 t1 = s0 - s1;
01054 out[(9 + 4)*SBLIMIT] = MULH(t1, win[9 + 4]) + buf[9 + 4];
01055 out[(8 - 4)*SBLIMIT] = MULH(t1, win[8 - 4]) + buf[8 - 4];
01056 buf[9 + 4] = MULH(t0, win[18 + 9 + 4]);
01057 buf[8 - 4] = MULH(t0, win[18 + 8 - 4]);
01058 }
01059
01060
01061 static int mp_decode_layer1(MPADecodeContext *s)
01062 {
01063 int bound, i, v, n, ch, j, mant;
01064 uint8_t allocation[MPA_MAX_CHANNELS][SBLIMIT];
01065 uint8_t scale_factors[MPA_MAX_CHANNELS][SBLIMIT];
01066
01067 if (s->mode == MPA_JSTEREO)
01068 bound = (s->mode_ext + 1) * 4;
01069 else
01070 bound = SBLIMIT;
01071
01072
01073 for(i=0;i<bound;i++) {
01074 for(ch=0;ch<s->nb_channels;ch++) {
01075 allocation[ch][i] = get_bits(&s->gb, 4);
01076 }
01077 }
01078 for(i=bound;i<SBLIMIT;i++) {
01079 allocation[0][i] = get_bits(&s->gb, 4);
01080 }
01081
01082
01083 for(i=0;i<bound;i++) {
01084 for(ch=0;ch<s->nb_channels;ch++) {
01085 if (allocation[ch][i])
01086 scale_factors[ch][i] = get_bits(&s->gb, 6);
01087 }
01088 }
01089 for(i=bound;i<SBLIMIT;i++) {
01090 if (allocation[0][i]) {
01091 scale_factors[0][i] = get_bits(&s->gb, 6);
01092 scale_factors[1][i] = get_bits(&s->gb, 6);
01093 }
01094 }
01095
01096
01097 for(j=0;j<12;j++) {
01098 for(i=0;i<bound;i++) {
01099 for(ch=0;ch<s->nb_channels;ch++) {
01100 n = allocation[ch][i];
01101 if (n) {
01102 mant = get_bits(&s->gb, n + 1);
01103 v = l1_unscale(n, mant, scale_factors[ch][i]);
01104 } else {
01105 v = 0;
01106 }
01107 s->sb_samples[ch][j][i] = v;
01108 }
01109 }
01110 for(i=bound;i<SBLIMIT;i++) {
01111 n = allocation[0][i];
01112 if (n) {
01113 mant = get_bits(&s->gb, n + 1);
01114 v = l1_unscale(n, mant, scale_factors[0][i]);
01115 s->sb_samples[0][j][i] = v;
01116 v = l1_unscale(n, mant, scale_factors[1][i]);
01117 s->sb_samples[1][j][i] = v;
01118 } else {
01119 s->sb_samples[0][j][i] = 0;
01120 s->sb_samples[1][j][i] = 0;
01121 }
01122 }
01123 }
01124 return 12;
01125 }
01126
01127 static int mp_decode_layer2(MPADecodeContext *s)
01128 {
01129 int sblimit;
01130 const unsigned char *alloc_table;
01131 int table, bit_alloc_bits, i, j, ch, bound, v;
01132 unsigned char bit_alloc[MPA_MAX_CHANNELS][SBLIMIT];
01133 unsigned char scale_code[MPA_MAX_CHANNELS][SBLIMIT];
01134 unsigned char scale_factors[MPA_MAX_CHANNELS][SBLIMIT][3], *sf;
01135 int scale, qindex, bits, steps, k, l, m, b;
01136
01137
01138 table = ff_mpa_l2_select_table(s->bit_rate / 1000, s->nb_channels,
01139 s->sample_rate, s->lsf);
01140 sblimit = ff_mpa_sblimit_table[table];
01141 alloc_table = ff_mpa_alloc_tables[table];
01142
01143 if (s->mode == MPA_JSTEREO)
01144 bound = (s->mode_ext + 1) * 4;
01145 else
01146 bound = sblimit;
01147
01148 dprintf(s->avctx, "bound=%d sblimit=%d\n", bound, sblimit);
01149
01150
01151 if( bound > sblimit ) bound = sblimit;
01152
01153
01154 j = 0;
01155 for(i=0;i<bound;i++) {
01156 bit_alloc_bits = alloc_table[j];
01157 for(ch=0;ch<s->nb_channels;ch++) {
01158 bit_alloc[ch][i] = get_bits(&s->gb, bit_alloc_bits);
01159 }
01160 j += 1 << bit_alloc_bits;
01161 }
01162 for(i=bound;i<sblimit;i++) {
01163 bit_alloc_bits = alloc_table[j];
01164 v = get_bits(&s->gb, bit_alloc_bits);
01165 bit_alloc[0][i] = v;
01166 bit_alloc[1][i] = v;
01167 j += 1 << bit_alloc_bits;
01168 }
01169
01170 #ifdef DEBUG
01171 {
01172 for(ch=0;ch<s->nb_channels;ch++) {
01173 for(i=0;i<sblimit;i++)
01174 dprintf(s->avctx, " %d", bit_alloc[ch][i]);
01175 dprintf(s->avctx, "\n");
01176 }
01177 }
01178 #endif
01179
01180
01181 for(i=0;i<sblimit;i++) {
01182 for(ch=0;ch<s->nb_channels;ch++) {
01183 if (bit_alloc[ch][i])
01184 scale_code[ch][i] = get_bits(&s->gb, 2);
01185 }
01186 }
01187
01188
01189 for(i=0;i<sblimit;i++) {
01190 for(ch=0;ch<s->nb_channels;ch++) {
01191 if (bit_alloc[ch][i]) {
01192 sf = scale_factors[ch][i];
01193 switch(scale_code[ch][i]) {
01194 default:
01195 case 0:
01196 sf[0] = get_bits(&s->gb, 6);
01197 sf[1] = get_bits(&s->gb, 6);
01198 sf[2] = get_bits(&s->gb, 6);
01199 break;
01200 case 2:
01201 sf[0] = get_bits(&s->gb, 6);
01202 sf[1] = sf[0];
01203 sf[2] = sf[0];
01204 break;
01205 case 1:
01206 sf[0] = get_bits(&s->gb, 6);
01207 sf[2] = get_bits(&s->gb, 6);
01208 sf[1] = sf[0];
01209 break;
01210 case 3:
01211 sf[0] = get_bits(&s->gb, 6);
01212 sf[2] = get_bits(&s->gb, 6);
01213 sf[1] = sf[2];
01214 break;
01215 }
01216 }
01217 }
01218 }
01219
01220 #ifdef DEBUG
01221 for(ch=0;ch<s->nb_channels;ch++) {
01222 for(i=0;i<sblimit;i++) {
01223 if (bit_alloc[ch][i]) {
01224 sf = scale_factors[ch][i];
01225 dprintf(s->avctx, " %d %d %d", sf[0], sf[1], sf[2]);
01226 } else {
01227 dprintf(s->avctx, " -");
01228 }
01229 }
01230 dprintf(s->avctx, "\n");
01231 }
01232 #endif
01233
01234
01235 for(k=0;k<3;k++) {
01236 for(l=0;l<12;l+=3) {
01237 j = 0;
01238 for(i=0;i<bound;i++) {
01239 bit_alloc_bits = alloc_table[j];
01240 for(ch=0;ch<s->nb_channels;ch++) {
01241 b = bit_alloc[ch][i];
01242 if (b) {
01243 scale = scale_factors[ch][i][k];
01244 qindex = alloc_table[j+b];
01245 bits = ff_mpa_quant_bits[qindex];
01246 if (bits < 0) {
01247
01248 v = get_bits(&s->gb, -bits);
01249 steps = ff_mpa_quant_steps[qindex];
01250 s->sb_samples[ch][k * 12 + l + 0][i] =
01251 l2_unscale_group(steps, v % steps, scale);
01252 v = v / steps;
01253 s->sb_samples[ch][k * 12 + l + 1][i] =
01254 l2_unscale_group(steps, v % steps, scale);
01255 v = v / steps;
01256 s->sb_samples[ch][k * 12 + l + 2][i] =
01257 l2_unscale_group(steps, v, scale);
01258 } else {
01259 for(m=0;m<3;m++) {
01260 v = get_bits(&s->gb, bits);
01261 v = l1_unscale(bits - 1, v, scale);
01262 s->sb_samples[ch][k * 12 + l + m][i] = v;
01263 }
01264 }
01265 } else {
01266 s->sb_samples[ch][k * 12 + l + 0][i] = 0;
01267 s->sb_samples[ch][k * 12 + l + 1][i] = 0;
01268 s->sb_samples[ch][k * 12 + l + 2][i] = 0;
01269 }
01270 }
01271
01272 j += 1 << bit_alloc_bits;
01273 }
01274
01275 for(i=bound;i<sblimit;i++) {
01276 bit_alloc_bits = alloc_table[j];
01277 b = bit_alloc[0][i];
01278 if (b) {
01279 int mant, scale0, scale1;
01280 scale0 = scale_factors[0][i][k];
01281 scale1 = scale_factors[1][i][k];
01282 qindex = alloc_table[j+b];
01283 bits = ff_mpa_quant_bits[qindex];
01284 if (bits < 0) {
01285
01286 v = get_bits(&s->gb, -bits);
01287 steps = ff_mpa_quant_steps[qindex];
01288 mant = v % steps;
01289 v = v / steps;
01290 s->sb_samples[0][k * 12 + l + 0][i] =
01291 l2_unscale_group(steps, mant, scale0);
01292 s->sb_samples[1][k * 12 + l + 0][i] =
01293 l2_unscale_group(steps, mant, scale1);
01294 mant = v % steps;
01295 v = v / steps;
01296 s->sb_samples[0][k * 12 + l + 1][i] =
01297 l2_unscale_group(steps, mant, scale0);
01298 s->sb_samples[1][k * 12 + l + 1][i] =
01299 l2_unscale_group(steps, mant, scale1);
01300 s->sb_samples[0][k * 12 + l + 2][i] =
01301 l2_unscale_group(steps, v, scale0);
01302 s->sb_samples[1][k * 12 + l + 2][i] =
01303 l2_unscale_group(steps, v, scale1);
01304 } else {
01305 for(m=0;m<3;m++) {
01306 mant = get_bits(&s->gb, bits);
01307 s->sb_samples[0][k * 12 + l + m][i] =
01308 l1_unscale(bits - 1, mant, scale0);
01309 s->sb_samples[1][k * 12 + l + m][i] =
01310 l1_unscale(bits - 1, mant, scale1);
01311 }
01312 }
01313 } else {
01314 s->sb_samples[0][k * 12 + l + 0][i] = 0;
01315 s->sb_samples[0][k * 12 + l + 1][i] = 0;
01316 s->sb_samples[0][k * 12 + l + 2][i] = 0;
01317 s->sb_samples[1][k * 12 + l + 0][i] = 0;
01318 s->sb_samples[1][k * 12 + l + 1][i] = 0;
01319 s->sb_samples[1][k * 12 + l + 2][i] = 0;
01320 }
01321
01322 j += 1 << bit_alloc_bits;
01323 }
01324
01325 for(i=sblimit;i<SBLIMIT;i++) {
01326 for(ch=0;ch<s->nb_channels;ch++) {
01327 s->sb_samples[ch][k * 12 + l + 0][i] = 0;
01328 s->sb_samples[ch][k * 12 + l + 1][i] = 0;
01329 s->sb_samples[ch][k * 12 + l + 2][i] = 0;
01330 }
01331 }
01332 }
01333 }
01334 return 3 * 12;
01335 }
01336
01337 static inline void lsf_sf_expand(int *slen,
01338 int sf, int n1, int n2, int n3)
01339 {
01340 if (n3) {
01341 slen[3] = sf % n3;
01342 sf /= n3;
01343 } else {
01344 slen[3] = 0;
01345 }
01346 if (n2) {
01347 slen[2] = sf % n2;
01348 sf /= n2;
01349 } else {
01350 slen[2] = 0;
01351 }
01352 slen[1] = sf % n1;
01353 sf /= n1;
01354 slen[0] = sf;
01355 }
01356
01357 static void exponents_from_scale_factors(MPADecodeContext *s,
01358 GranuleDef *g,
01359 int16_t *exponents)
01360 {
01361 const uint8_t *bstab, *pretab;
01362 int len, i, j, k, l, v0, shift, gain, gains[3];
01363 int16_t *exp_ptr;
01364
01365 exp_ptr = exponents;
01366 gain = g->global_gain - 210;
01367 shift = g->scalefac_scale + 1;
01368
01369 bstab = band_size_long[s->sample_rate_index];
01370 pretab = mpa_pretab[g->preflag];
01371 for(i=0;i<g->long_end;i++) {
01372 v0 = gain - ((g->scale_factors[i] + pretab[i]) << shift) + 400;
01373 len = bstab[i];
01374 for(j=len;j>0;j--)
01375 *exp_ptr++ = v0;
01376 }
01377
01378 if (g->short_start < 13) {
01379 bstab = band_size_short[s->sample_rate_index];
01380 gains[0] = gain - (g->subblock_gain[0] << 3);
01381 gains[1] = gain - (g->subblock_gain[1] << 3);
01382 gains[2] = gain - (g->subblock_gain[2] << 3);
01383 k = g->long_end;
01384 for(i=g->short_start;i<13;i++) {
01385 len = bstab[i];
01386 for(l=0;l<3;l++) {
01387 v0 = gains[l] - (g->scale_factors[k++] << shift) + 400;
01388 for(j=len;j>0;j--)
01389 *exp_ptr++ = v0;
01390 }
01391 }
01392 }
01393 }
01394
01395
01396 static inline int get_bitsz(GetBitContext *s, int n)
01397 {
01398 if (n == 0)
01399 return 0;
01400 else
01401 return get_bits(s, n);
01402 }
01403
01404
01405 static void switch_buffer(MPADecodeContext *s, int *pos, int *end_pos, int *end_pos2){
01406 if(s->in_gb.buffer && *pos >= s->gb.size_in_bits){
01407 s->gb= s->in_gb;
01408 s->in_gb.buffer=NULL;
01409 assert((get_bits_count(&s->gb) & 7) == 0);
01410 skip_bits_long(&s->gb, *pos - *end_pos);
01411 *end_pos2=
01412 *end_pos= *end_pos2 + get_bits_count(&s->gb) - *pos;
01413 *pos= get_bits_count(&s->gb);
01414 }
01415 }
01416
01417 static int huffman_decode(MPADecodeContext *s, GranuleDef *g,
01418 int16_t *exponents, int end_pos2)
01419 {
01420 int s_index;
01421 int i;
01422 int last_pos, bits_left;
01423 VLC *vlc;
01424 int end_pos= FFMIN(end_pos2, s->gb.size_in_bits);
01425
01426
01427 s_index = 0;
01428 for(i=0;i<3;i++) {
01429 int j, k, l, linbits;
01430 j = g->region_size[i];
01431 if (j == 0)
01432 continue;
01433
01434 k = g->table_select[i];
01435 l = mpa_huff_data[k][0];
01436 linbits = mpa_huff_data[k][1];
01437 vlc = &huff_vlc[l];
01438
01439 if(!l){
01440 memset(&g->sb_hybrid[s_index], 0, sizeof(*g->sb_hybrid)*2*j);
01441 s_index += 2*j;
01442 continue;
01443 }
01444
01445
01446 for(;j>0;j--) {
01447 int exponent, x, y, v;
01448 int pos= get_bits_count(&s->gb);
01449
01450 if (pos >= end_pos){
01451
01452 switch_buffer(s, &pos, &end_pos, &end_pos2);
01453
01454 if(pos >= end_pos)
01455 break;
01456 }
01457 y = get_vlc2(&s->gb, vlc->table, 7, 3);
01458
01459 if(!y){
01460 g->sb_hybrid[s_index ] =
01461 g->sb_hybrid[s_index+1] = 0;
01462 s_index += 2;
01463 continue;
01464 }
01465
01466 exponent= exponents[s_index];
01467
01468 dprintf(s->avctx, "region=%d n=%d x=%d y=%d exp=%d\n",
01469 i, g->region_size[i] - j, x, y, exponent);
01470 if(y&16){
01471 x = y >> 5;
01472 y = y & 0x0f;
01473 if (x < 15){
01474 v = expval_table[ exponent ][ x ];
01475
01476 }else{
01477 x += get_bitsz(&s->gb, linbits);
01478 v = l3_unscale(x, exponent);
01479 }
01480 if (get_bits1(&s->gb))
01481 v = -v;
01482 g->sb_hybrid[s_index] = v;
01483 if (y < 15){
01484 v = expval_table[ exponent ][ y ];
01485 }else{
01486 y += get_bitsz(&s->gb, linbits);
01487 v = l3_unscale(y, exponent);
01488 }
01489 if (get_bits1(&s->gb))
01490 v = -v;
01491 g->sb_hybrid[s_index+1] = v;
01492 }else{
01493 x = y >> 5;
01494 y = y & 0x0f;
01495 x += y;
01496 if (x < 15){
01497 v = expval_table[ exponent ][ x ];
01498 }else{
01499 x += get_bitsz(&s->gb, linbits);
01500 v = l3_unscale(x, exponent);
01501 }
01502 if (get_bits1(&s->gb))
01503 v = -v;
01504 g->sb_hybrid[s_index+!!y] = v;
01505 g->sb_hybrid[s_index+ !y] = 0;
01506 }
01507 s_index+=2;
01508 }
01509 }
01510
01511
01512 vlc = &huff_quad_vlc[g->count1table_select];
01513 last_pos=0;
01514 while (s_index <= 572) {
01515 int pos, code;
01516 pos = get_bits_count(&s->gb);
01517 if (pos >= end_pos) {
01518 if (pos > end_pos2 && last_pos){
01519
01520
01521 s_index -= 4;
01522 skip_bits_long(&s->gb, last_pos - pos);
01523 av_log(NULL, AV_LOG_INFO, "overread, skip %d enddists: %d %d\n", last_pos - pos, end_pos-pos, end_pos2-pos);
01524 if(s->error_resilience >= FF_ER_COMPLIANT)
01525 s_index=0;
01526 break;
01527 }
01528
01529 switch_buffer(s, &pos, &end_pos, &end_pos2);
01530
01531 if(pos >= end_pos)
01532 break;
01533 }
01534 last_pos= pos;
01535
01536 code = get_vlc2(&s->gb, vlc->table, vlc->bits, 1);
01537 dprintf(s->avctx, "t=%d code=%d\n", g->count1table_select, code);
01538 g->sb_hybrid[s_index+0]=
01539 g->sb_hybrid[s_index+1]=
01540 g->sb_hybrid[s_index+2]=
01541 g->sb_hybrid[s_index+3]= 0;
01542 while(code){
01543 static const int idxtab[16]={3,3,2,2,1,1,1,1,0,0,0,0,0,0,0,0};
01544 int v;
01545 int pos= s_index+idxtab[code];
01546 code ^= 8>>idxtab[code];
01547 v = exp_table[ exponents[pos] ];
01548
01549 if(get_bits1(&s->gb))
01550 v = -v;
01551 g->sb_hybrid[pos] = v;
01552 }
01553 s_index+=4;
01554 }
01555
01556 bits_left = end_pos2 - get_bits_count(&s->gb);
01557
01558 if (bits_left < 0/* || bits_left > 500*/) {
01559 av_log(NULL, AV_LOG_ERROR, "bits_left=%d\n", bits_left);
01560 s_index=0;
01561 }else if(bits_left > 0 && s->error_resilience >= FF_ER_AGGRESSIVE){
01562 av_log(NULL, AV_LOG_ERROR, "bits_left=%d\n", bits_left);
01563 s_index=0;
01564 }
01565 memset(&g->sb_hybrid[s_index], 0, sizeof(*g->sb_hybrid)*(576 - s_index));
01566 skip_bits_long(&s->gb, bits_left);
01567
01568 i= get_bits_count(&s->gb);
01569 switch_buffer(s, &i, &end_pos, &end_pos2);
01570
01571 return 0;
01572 }
01573
01574
01575
01576
01577 static void reorder_block(MPADecodeContext *s, GranuleDef *g)
01578 {
01579 int i, j, len;
01580 int32_t *ptr, *dst, *ptr1;
01581 int32_t tmp[576];
01582
01583 if (g->block_type != 2)
01584 return;
01585
01586 if (g->switch_point) {
01587 if (s->sample_rate_index != 8) {
01588 ptr = g->sb_hybrid + 36;
01589 } else {
01590 ptr = g->sb_hybrid + 48;
01591 }
01592 } else {
01593 ptr = g->sb_hybrid;
01594 }
01595
01596 for(i=g->short_start;i<13;i++) {
01597 len = band_size_short[s->sample_rate_index][i];
01598 ptr1 = ptr;
01599 dst = tmp;
01600 for(j=len;j>0;j--) {
01601 *dst++ = ptr[0*len];
01602 *dst++ = ptr[1*len];
01603 *dst++ = ptr[2*len];
01604 ptr++;
01605 }
01606 ptr+=2*len;
01607 memcpy(ptr1, tmp, len * 3 * sizeof(*ptr1));
01608 }
01609 }
01610
01611 #define ISQRT2 FIXR(0.70710678118654752440)
01612
01613 static void compute_stereo(MPADecodeContext *s,
01614 GranuleDef *g0, GranuleDef *g1)
01615 {
01616 int i, j, k, l;
01617 int32_t v1, v2;
01618 int sf_max, tmp0, tmp1, sf, len, non_zero_found;
01619 int32_t (*is_tab)[16];
01620 int32_t *tab0, *tab1;
01621 int non_zero_found_short[3];
01622
01623
01624 if (s->mode_ext & MODE_EXT_I_STEREO) {
01625 if (!s->lsf) {
01626 is_tab = is_table;
01627 sf_max = 7;
01628 } else {
01629 is_tab = is_table_lsf[g1->scalefac_compress & 1];
01630 sf_max = 16;
01631 }
01632
01633 tab0 = g0->sb_hybrid + 576;
01634 tab1 = g1->sb_hybrid + 576;
01635
01636 non_zero_found_short[0] = 0;
01637 non_zero_found_short[1] = 0;
01638 non_zero_found_short[2] = 0;
01639 k = (13 - g1->short_start) * 3 + g1->long_end - 3;
01640 for(i = 12;i >= g1->short_start;i--) {
01641
01642 if (i != 11)
01643 k -= 3;
01644 len = band_size_short[s->sample_rate_index][i];
01645 for(l=2;l>=0;l--) {
01646 tab0 -= len;
01647 tab1 -= len;
01648 if (!non_zero_found_short[l]) {
01649
01650 for(j=0;j<len;j++) {
01651 if (tab1[j] != 0) {
01652 non_zero_found_short[l] = 1;
01653 goto found1;
01654 }
01655 }
01656 sf = g1->scale_factors[k + l];
01657 if (sf >= sf_max)
01658 goto found1;
01659
01660 v1 = is_tab[0][sf];
01661 v2 = is_tab[1][sf];
01662 for(j=0;j<len;j++) {
01663 tmp0 = tab0[j];
01664 tab0[j] = MULL(tmp0, v1);
01665 tab1[j] = MULL(tmp0, v2);
01666 }
01667 } else {
01668 found1:
01669 if (s->mode_ext & MODE_EXT_MS_STEREO) {
01670
01671
01672 for(j=0;j<len;j++) {
01673 tmp0 = tab0[j];
01674 tmp1 = tab1[j];
01675 tab0[j] = MULL(tmp0 + tmp1, ISQRT2);
01676 tab1[j] = MULL(tmp0 - tmp1, ISQRT2);
01677 }
01678 }
01679 }
01680 }
01681 }
01682
01683 non_zero_found = non_zero_found_short[0] |
01684 non_zero_found_short[1] |
01685 non_zero_found_short[2];
01686
01687 for(i = g1->long_end - 1;i >= 0;i--) {
01688 len = band_size_long[s->sample_rate_index][i];
01689 tab0 -= len;
01690 tab1 -= len;
01691
01692 if (!non_zero_found) {
01693 for(j=0;j<len;j++) {
01694 if (tab1[j] != 0) {
01695 non_zero_found = 1;
01696 goto found2;
01697 }
01698 }
01699
01700 k = (i == 21) ? 20 : i;
01701 sf = g1->scale_factors[k];
01702 if (sf >= sf_max)
01703 goto found2;
01704 v1 = is_tab[0][sf];
01705 v2 = is_tab[1][sf];
01706 for(j=0;j<len;j++) {
01707 tmp0 = tab0[j];
01708 tab0[j] = MULL(tmp0, v1);
01709 tab1[j] = MULL(tmp0, v2);
01710 }
01711 } else {
01712 found2:
01713 if (s->mode_ext & MODE_EXT_MS_STEREO) {
01714
01715
01716 for(j=0;j<len;j++) {
01717 tmp0 = tab0[j];
01718 tmp1 = tab1[j];
01719 tab0[j] = MULL(tmp0 + tmp1, ISQRT2);
01720 tab1[j] = MULL(tmp0 - tmp1, ISQRT2);
01721 }
01722 }
01723 }
01724 }
01725 } else if (s->mode_ext & MODE_EXT_MS_STEREO) {
01726
01727
01728
01729 tab0 = g0->sb_hybrid;
01730 tab1 = g1->sb_hybrid;
01731 for(i=0;i<576;i++) {
01732 tmp0 = tab0[i];
01733 tmp1 = tab1[i];
01734 tab0[i] = tmp0 + tmp1;
01735 tab1[i] = tmp0 - tmp1;
01736 }
01737 }
01738 }
01739
01740 static void compute_antialias_integer(MPADecodeContext *s,
01741 GranuleDef *g)
01742 {
01743 int32_t *ptr, *csa;
01744 int n, i;
01745
01746
01747 if (g->block_type == 2) {
01748 if (!g->switch_point)
01749 return;
01750
01751 n = 1;
01752 } else {
01753 n = SBLIMIT - 1;
01754 }
01755
01756 ptr = g->sb_hybrid + 18;
01757 for(i = n;i > 0;i--) {
01758 int tmp0, tmp1, tmp2;
01759 csa = &csa_table[0][0];
01760 #define INT_AA(j) \
01761 tmp0 = ptr[-1-j];\
01762 tmp1 = ptr[ j];\
01763 tmp2= MULH(tmp0 + tmp1, csa[0+4*j]);\
01764 ptr[-1-j] = 4*(tmp2 - MULH(tmp1, csa[2+4*j]));\
01765 ptr[ j] = 4*(tmp2 + MULH(tmp0, csa[3+4*j]));
01766
01767 INT_AA(0)
01768 INT_AA(1)
01769 INT_AA(2)
01770 INT_AA(3)
01771 INT_AA(4)
01772 INT_AA(5)
01773 INT_AA(6)
01774 INT_AA(7)
01775
01776 ptr += 18;
01777 }
01778 }
01779
01780 static void compute_antialias_float(MPADecodeContext *s,
01781 GranuleDef *g)
01782 {
01783 int32_t *ptr;
01784 int n, i;
01785
01786
01787 if (g->block_type == 2) {
01788 if (!g->switch_point)
01789 return;
01790
01791 n = 1;
01792 } else {
01793 n = SBLIMIT - 1;
01794 }
01795
01796 ptr = g->sb_hybrid + 18;
01797 for(i = n;i > 0;i--) {
01798 float tmp0, tmp1;
01799 float *csa = &csa_table_float[0][0];
01800 #define FLOAT_AA(j)\
01801 tmp0= ptr[-1-j];\
01802 tmp1= ptr[ j];\
01803 ptr[-1-j] = lrintf(tmp0 * csa[0+4*j] - tmp1 * csa[1+4*j]);\
01804 ptr[ j] = lrintf(tmp0 * csa[1+4*j] + tmp1 * csa[0+4*j]);
01805
01806 FLOAT_AA(0)
01807 FLOAT_AA(1)
01808 FLOAT_AA(2)
01809 FLOAT_AA(3)
01810 FLOAT_AA(4)
01811 FLOAT_AA(5)
01812 FLOAT_AA(6)
01813 FLOAT_AA(7)
01814
01815 ptr += 18;
01816 }
01817 }
01818
01819 static void compute_imdct(MPADecodeContext *s,
01820 GranuleDef *g,
01821 int32_t *sb_samples,
01822 int32_t *mdct_buf)
01823 {
01824 int32_t *ptr, *win, *win1, *buf, *out_ptr, *ptr1;
01825 int32_t out2[12];
01826 int i, j, mdct_long_end, v, sblimit;
01827
01828
01829 ptr = g->sb_hybrid + 576;
01830 ptr1 = g->sb_hybrid + 2 * 18;
01831 while (ptr >= ptr1) {
01832 ptr -= 6;
01833 v = ptr[0] | ptr[1] | ptr[2] | ptr[3] | ptr[4] | ptr[5];
01834 if (v != 0)
01835 break;
01836 }
01837 sblimit = ((ptr - g->sb_hybrid) / 18) + 1;
01838
01839 if (g->block_type == 2) {
01840
01841 if (g->switch_point)
01842 mdct_long_end = 2;
01843 else
01844 mdct_long_end = 0;
01845 } else {
01846 mdct_long_end = sblimit;
01847 }
01848
01849 buf = mdct_buf;
01850 ptr = g->sb_hybrid;
01851 for(j=0;j<mdct_long_end;j++) {
01852
01853 out_ptr = sb_samples + j;
01854
01855 if (g->switch_point && j < 2)
01856 win1 = mdct_win[0];
01857 else
01858 win1 = mdct_win[g->block_type];
01859
01860 win = win1 + ((4 * 36) & -(j & 1));
01861 imdct36(out_ptr, buf, ptr, win);
01862 out_ptr += 18*SBLIMIT;
01863 ptr += 18;
01864 buf += 18;
01865 }
01866 for(j=mdct_long_end;j<sblimit;j++) {
01867
01868 win = mdct_win[2] + ((4 * 36) & -(j & 1));
01869 out_ptr = sb_samples + j;
01870
01871 for(i=0; i<6; i++){
01872 *out_ptr = buf[i];
01873 out_ptr += SBLIMIT;
01874 }
01875 imdct12(out2, ptr + 0);
01876 for(i=0;i<6;i++) {
01877 *out_ptr = MULH(out2[i], win[i]) + buf[i + 6*1];
01878 buf[i + 6*2] = MULH(out2[i + 6], win[i + 6]);
01879 out_ptr += SBLIMIT;
01880 }
01881 imdct12(out2, ptr + 1);
01882 for(i=0;i<6;i++) {
01883 *out_ptr = MULH(out2[i], win[i]) + buf[i + 6*2];
01884 buf[i + 6*0] = MULH(out2[i + 6], win[i + 6]);
01885 out_ptr += SBLIMIT;
01886 }
01887 imdct12(out2, ptr + 2);
01888 for(i=0;i<6;i++) {
01889 buf[i + 6*0] = MULH(out2[i], win[i]) + buf[i + 6*0];
01890 buf[i + 6*1] = MULH(out2[i + 6], win[i + 6]);
01891 buf[i + 6*2] = 0;
01892 }
01893 ptr += 18;
01894 buf += 18;
01895 }
01896
01897 for(j=sblimit;j<SBLIMIT;j++) {
01898
01899 out_ptr = sb_samples + j;
01900 for(i=0;i<18;i++) {
01901 *out_ptr = buf[i];
01902 buf[i] = 0;
01903 out_ptr += SBLIMIT;
01904 }
01905 buf += 18;
01906 }
01907 }
01908
01909 #if defined(DEBUG)
01910 void sample_dump(int fnum, int32_t *tab, int n)
01911 {
01912 static FILE *files[16], *f;
01913 char buf[512];
01914 int i;
01915 int32_t v;
01916
01917 f = files[fnum];
01918 if (!f) {
01919 snprintf(buf, sizeof(buf), "/tmp/out%d.%s.pcm",
01920 fnum,
01921 #ifdef USE_HIGHPRECISION
01922 "hp"
01923 #else
01924 "lp"
01925 #endif
01926 );
01927 f = fopen(buf, "w");
01928 if (!f)
01929 return;
01930 files[fnum] = f;
01931 }
01932
01933 if (fnum == 0) {
01934 static int pos = 0;
01935 av_log(NULL, AV_LOG_DEBUG, "pos=%d\n", pos);
01936 for(i=0;i<n;i++) {
01937 av_log(NULL, AV_LOG_DEBUG, " %0.4f", (double)tab[i] / FRAC_ONE);
01938 if ((i % 18) == 17)
01939 av_log(NULL, AV_LOG_DEBUG, "\n");
01940 }
01941 pos += n;
01942 }
01943 for(i=0;i<n;i++) {
01944
01945 v = tab[i] << (23 - FRAC_BITS);
01946 fwrite(&v, 1, sizeof(int32_t), f);
01947 }
01948 }
01949 #endif
01950
01951
01952
01953 static int mp_decode_layer3(MPADecodeContext *s)
01954 {
01955 int nb_granules, main_data_begin, private_bits;
01956 int gr, ch, blocksplit_flag, i, j, k, n, bits_pos;
01957 GranuleDef granules[2][2], *g;
01958 int16_t exponents[576];
01959
01960
01961 if (s->lsf) {
01962 main_data_begin = get_bits(&s->gb, 8);
01963 private_bits = get_bits(&s->gb, s->nb_channels);
01964 nb_granules = 1;
01965 } else {
01966 main_data_begin = get_bits(&s->gb, 9);
01967 if (s->nb_channels == 2)
01968 private_bits = get_bits(&s->gb, 3);
01969 else
01970 private_bits = get_bits(&s->gb, 5);
01971 nb_granules = 2;
01972 for(ch=0;ch<s->nb_channels;ch++) {
01973 granules[ch][0].scfsi = 0;
01974 granules[ch][1].scfsi = get_bits(&s->gb, 4);
01975 }
01976 }
01977
01978 for(gr=0;gr<nb_granules;gr++) {
01979 for(ch=0;ch<s->nb_channels;ch++) {
01980 dprintf(s->avctx, "gr=%d ch=%d: side_info\n", gr, ch);
01981 g = &granules[ch][gr];
01982 g->part2_3_length = get_bits(&s->gb, 12);
01983 g->big_values = get_bits(&s->gb, 9);
01984 if(g->big_values > 288){
01985 av_log(s->avctx, AV_LOG_ERROR, "big_values too big\n");
01986 return -1;
01987 }
01988
01989 g->global_gain = get_bits(&s->gb, 8);
01990
01991
01992 if ((s->mode_ext & (MODE_EXT_MS_STEREO | MODE_EXT_I_STEREO)) ==
01993 MODE_EXT_MS_STEREO)
01994 g->global_gain -= 2;
01995 if (s->lsf)
01996 g->scalefac_compress = get_bits(&s->gb, 9);
01997 else
01998 g->scalefac_compress = get_bits(&s->gb, 4);
01999 blocksplit_flag = get_bits1(&s->gb);
02000 if (blocksplit_flag) {
02001 g->block_type = get_bits(&s->gb, 2);
02002 if (g->block_type == 0){
02003 av_log(NULL, AV_LOG_ERROR, "invalid block type\n");
02004 return -1;
02005 }
02006 g->switch_point = get_bits1(&s->gb);
02007 for(i=0;i<2;i++)
02008 g->table_select[i] = get_bits(&s->gb, 5);
02009 for(i=0;i<3;i++)
02010 g->subblock_gain[i] = get_bits(&s->gb, 3);
02011
02012 if (g->block_type == 2)
02013 g->region_size[0] = (36 / 2);
02014 else {
02015 if (s->sample_rate_index <= 2)
02016 g->region_size[0] = (36 / 2);
02017 else if (s->sample_rate_index != 8)
02018 g->region_size[0] = (54 / 2);
02019 else
02020 g->region_size[0] = (108 / 2);
02021 }
02022 g->region_size[1] = (576 / 2);
02023 } else {
02024 int region_address1, region_address2, l;
02025 g->block_type = 0;
02026 g->switch_point = 0;
02027 for(i=0;i<3;i++)
02028 g->table_select[i] = get_bits(&s->gb, 5);
02029
02030 region_address1 = get_bits(&s->gb, 4);
02031 region_address2 = get_bits(&s->gb, 3);
02032 dprintf(s->avctx, "region1=%d region2=%d\n",
02033 region_address1, region_address2);
02034 g->region_size[0] =
02035 band_index_long[s->sample_rate_index][region_address1 + 1] >> 1;
02036 l = region_address1 + region_address2 + 2;
02037
02038 if (l > 22)
02039 l = 22;
02040 g->region_size[1] =
02041 band_index_long[s->sample_rate_index][l] >> 1;
02042 }
02043
02044
02045 g->region_size[2] = (576 / 2);
02046 j = 0;
02047 for(i=0;i<3;i++) {
02048 k = FFMIN(g->region_size[i], g->big_values);
02049 g->region_size[i] = k - j;
02050 j = k;
02051 }
02052
02053
02054 if (g->block_type == 2) {
02055 if (g->switch_point) {
02056
02057
02058
02059 if (s->sample_rate_index <= 2)
02060 g->long_end = 8;
02061 else if (s->sample_rate_index != 8)
02062 g->long_end = 6;
02063 else
02064 g->long_end = 4;
02065
02066 g->short_start = 2 + (s->sample_rate_index != 8);
02067 } else {
02068 g->long_end = 0;
02069 g->short_start = 0;
02070 }
02071 } else {
02072 g->short_start = 13;
02073 g->long_end = 22;
02074 }
02075
02076 g->preflag = 0;
02077 if (!s->lsf)
02078 g->preflag = get_bits1(&s->gb);
02079 g->scalefac_scale = get_bits1(&s->gb);
02080 g->count1table_select = get_bits1(&s->gb);
02081 dprintf(s->avctx, "block_type=%d switch_point=%d\n",
02082 g->block_type, g->switch_point);
02083 }
02084 }
02085
02086 if (!s->adu_mode) {
02087 const uint8_t *ptr = s->gb.buffer + (get_bits_count(&s->gb)>>3);
02088 assert((get_bits_count(&s->gb) & 7) == 0);
02089
02090 dprintf(s->avctx, "seekback: %d\n", main_data_begin);
02091
02092
02093 memcpy(s->last_buf + s->last_buf_size, ptr, EXTRABYTES);
02094 s->in_gb= s->gb;
02095 init_get_bits(&s->gb, s->last_buf, s->last_buf_size*8);
02096 skip_bits_long(&s->gb, 8*(s->last_buf_size - main_data_begin));
02097 }
02098
02099 for(gr=0;gr<nb_granules;gr++) {
02100 for(ch=0;ch<s->nb_channels;ch++) {
02101 g = &granules[ch][gr];
02102 if(get_bits_count(&s->gb)<0){
02103 av_log(NULL, AV_LOG_ERROR, "mdb:%d, lastbuf:%d skipping granule %d\n",
02104 main_data_begin, s->last_buf_size, gr);
02105 skip_bits_long(&s->gb, g->part2_3_length);
02106 memset(g->sb_hybrid, 0, sizeof(g->sb_hybrid));
02107 if(get_bits_count(&s->gb) >= s->gb.size_in_bits && s->in_gb.buffer){
02108 skip_bits_long(&s->in_gb, get_bits_count(&s->gb) - s->gb.size_in_bits);
02109 s->gb= s->in_gb;
02110 s->in_gb.buffer=NULL;
02111 }
02112 continue;
02113 }
02114
02115 bits_pos = get_bits_count(&s->gb);
02116
02117 if (!s->lsf) {
02118 uint8_t *sc;
02119 int slen, slen1, slen2;
02120
02121
02122 slen1 = slen_table[0][g->scalefac_compress];
02123 slen2 = slen_table[1][g->scalefac_compress];
02124 dprintf(s->avctx, "slen1=%d slen2=%d\n", slen1, slen2);
02125 if (g->block_type == 2) {
02126 n = g->switch_point ? 17 : 18;
02127 j = 0;
02128 if(slen1){
02129 for(i=0;i<n;i++)
02130 g->scale_factors[j++] = get_bits(&s->gb, slen1);
02131 }else{
02132 for(i=0;i<n;i++)
02133 g->scale_factors[j++] = 0;
02134 }
02135 if(slen2){
02136 for(i=0;i<18;i++)
02137 g->scale_factors[j++] = get_bits(&s->gb, slen2);
02138 for(i=0;i<3;i++)
02139 g->scale_factors[j++] = 0;
02140 }else{
02141 for(i=0;i<21;i++)
02142 g->scale_factors[j++] = 0;
02143 }
02144 } else {
02145 sc = granules[ch][0].scale_factors;
02146 j = 0;
02147 for(k=0;k<4;k++) {
02148 n = (k == 0 ? 6 : 5);
02149 if ((g->scfsi & (0x8 >> k)) == 0) {
02150 slen = (k < 2) ? slen1 : slen2;
02151 if(slen){
02152 for(i=0;i<n;i++)
02153 g->scale_factors[j++] = get_bits(&s->gb, slen);
02154 }else{
02155 for(i=0;i<n;i++)
02156 g->scale_factors[j++] = 0;
02157 }
02158 } else {
02159
02160 for(i=0;i<n;i++) {
02161 g->scale_factors[j] = sc[j];
02162 j++;
02163 }
02164 }
02165 }
02166 g->scale_factors[j++] = 0;
02167 }
02168 #if defined(DEBUG)
02169 {
02170 dprintf(s->avctx, "scfsi=%x gr=%d ch=%d scale_factors:\n",
02171 g->scfsi, gr, ch);
02172 for(i=0;i<j;i++)
02173 dprintf(s->avctx, " %d", g->scale_factors[i]);
02174 dprintf(s->avctx, "\n");
02175 }
02176 #endif
02177 } else {
02178 int tindex, tindex2, slen[4], sl, sf;
02179
02180
02181 if (g->block_type == 2) {
02182 tindex = g->switch_point ? 2 : 1;
02183 } else {
02184 tindex = 0;
02185 }
02186 sf = g->scalefac_compress;
02187 if ((s->mode_ext & MODE_EXT_I_STEREO) && ch == 1) {
02188
02189 sf >>= 1;
02190 if (sf < 180) {
02191 lsf_sf_expand(slen, sf, 6, 6, 0);
02192 tindex2 = 3;
02193 } else if (sf < 244) {
02194 lsf_sf_expand(slen, sf - 180, 4, 4, 0);
02195 tindex2 = 4;
02196 } else {
02197 lsf_sf_expand(slen, sf - 244, 3, 0, 0);
02198 tindex2 = 5;
02199 }
02200 } else {
02201
02202 if (sf < 400) {
02203 lsf_sf_expand(slen, sf, 5, 4, 4);
02204 tindex2 = 0;
02205 } else if (sf < 500) {
02206 lsf_sf_expand(slen, sf - 400, 5, 4, 0);
02207 tindex2 = 1;
02208 } else {
02209 lsf_sf_expand(slen, sf - 500, 3, 0, 0);
02210 tindex2 = 2;
02211 g->preflag = 1;
02212 }
02213 }
02214
02215 j = 0;
02216 for(k=0;k<4;k++) {
02217 n = lsf_nsf_table[tindex2][tindex][k];
02218 sl = slen[k];
02219 if(sl){
02220 for(i=0;i<n;i++)
02221 g->scale_factors[j++] = get_bits(&s->gb, sl);
02222 }else{
02223 for(i=0;i<n;i++)
02224 g->scale_factors[j++] = 0;
02225 }
02226 }
02227
02228 for(;j<40;j++)
02229 g->scale_factors[j] = 0;
02230 #if defined(DEBUG)
02231 {
02232 dprintf(s->avctx, "gr=%d ch=%d scale_factors:\n",
02233 gr, ch);
02234 for(i=0;i<40;i++)
02235 dprintf(s->avctx, " %d", g->scale_factors[i]);
02236 dprintf(s->avctx, "\n");
02237 }
02238 #endif
02239 }
02240
02241 exponents_from_scale_factors(s, g, exponents);
02242
02243
02244 huffman_decode(s, g, exponents, bits_pos + g->part2_3_length);
02245 #if defined(DEBUG)
02246 sample_dump(0, g->sb_hybrid, 576);
02247 #endif
02248 }
02249
02250 if (s->nb_channels == 2)
02251 compute_stereo(s, &granules[0][gr], &granules[1][gr]);
02252
02253 for(ch=0;ch<s->nb_channels;ch++) {
02254 g = &granules[ch][gr];
02255
02256 reorder_block(s, g);
02257 #if defined(DEBUG)
02258 sample_dump(0, g->sb_hybrid, 576);
02259 #endif
02260 s->compute_antialias(s, g);
02261 #if defined(DEBUG)
02262 sample_dump(1, g->sb_hybrid, 576);
02263 #endif
02264 compute_imdct(s, g, &s->sb_samples[ch][18 * gr][0], s->mdct_buf[ch]);
02265 #if defined(DEBUG)
02266 sample_dump(2, &s->sb_samples[ch][18 * gr][0], 576);
02267 #endif
02268 }
02269 }
02270 if(get_bits_count(&s->gb)<0)
02271 skip_bits_long(&s->gb, -get_bits_count(&s->gb));
02272 return nb_granules * 18;
02273 }
02274
02275 static int mp_decode_frame(MPADecodeContext *s,
02276 OUT_INT *samples, const uint8_t *buf, int buf_size)
02277 {
02278 int i, nb_frames, ch;
02279 OUT_INT *samples_ptr;
02280
02281 init_get_bits(&s->gb, buf + HEADER_SIZE, (buf_size - HEADER_SIZE)*8);
02282
02283
02284 if (s->error_protection)
02285 skip_bits(&s->gb, 16);
02286
02287 dprintf(s->avctx, "frame %d:\n", s->frame_count);
02288 switch(s->layer) {
02289 case 1:
02290 nb_frames = mp_decode_layer1(s);
02291 break;
02292 case 2:
02293 nb_frames = mp_decode_layer2(s);
02294 break;
02295 case 3:
02296 default:
02297 nb_frames = mp_decode_layer3(s);
02298
02299 s->last_buf_size=0;
02300 if(s->in_gb.buffer){
02301 align_get_bits(&s->gb);
02302 i= (s->gb.size_in_bits - get_bits_count(&s->gb))>>3;
02303 if(i >= 0 && i <= BACKSTEP_SIZE){
02304 memmove(s->last_buf, s->gb.buffer + (get_bits_count(&s->gb)>>3), i);
02305 s->last_buf_size=i;
02306 }else
02307 av_log(NULL, AV_LOG_ERROR, "invalid old backstep %d\n", i);
02308 s->gb= s->in_gb;
02309 s->in_gb.buffer= NULL;
02310 }
02311
02312 align_get_bits(&s->gb);
02313 assert((get_bits_count(&s->gb) & 7) == 0);
02314 i= (s->gb.size_in_bits - get_bits_count(&s->gb))>>3;
02315
02316 if(i<0 || i > BACKSTEP_SIZE || nb_frames<0){
02317 av_log(NULL, AV_LOG_ERROR, "invalid new backstep %d\n", i);
02318 i= FFMIN(BACKSTEP_SIZE, buf_size - HEADER_SIZE);
02319 }
02320 assert(i <= buf_size - HEADER_SIZE && i>= 0);
02321 memcpy(s->last_buf + s->last_buf_size, s->gb.buffer + buf_size - HEADER_SIZE - i, i);
02322 s->last_buf_size += i;
02323
02324 break;
02325 }
02326 #if defined(DEBUG)
02327 for(i=0;i<nb_frames;i++) {
02328 for(ch=0;ch<s->nb_channels;ch++) {
02329 int j;
02330 dprintf(s->avctx, "%d-%d:", i, ch);
02331 for(j=0;j<SBLIMIT;j++)
02332 dprintf(s->avctx, " %0.6f", (double)s->sb_samples[ch][i][j] / FRAC_ONE);
02333 dprintf(s->avctx, "\n");
02334 }
02335 }
02336 #endif
02337
02338 for(ch=0;ch<s->nb_channels;ch++) {
02339 samples_ptr = samples + ch;
02340 for(i=0;i<nb_frames;i++) {
02341 ff_mpa_synth_filter(s->synth_buf[ch], &(s->synth_buf_offset[ch]),
02342 window, &s->dither_state,
02343 samples_ptr, s->nb_channels,
02344 s->sb_samples[ch][i]);
02345 samples_ptr += 32 * s->nb_channels;
02346 }
02347 }
02348 #ifdef DEBUG
02349 s->frame_count++;
02350 #endif
02351 return nb_frames * 32 * sizeof(OUT_INT) * s->nb_channels;
02352 }
02353
02354 static int decode_frame(AVCodecContext * avctx,
02355 void *data, int *data_size,
02356 uint8_t * buf, int buf_size)
02357 {
02358 MPADecodeContext *s = avctx->priv_data;
02359 uint32_t header;
02360 int out_size;
02361 OUT_INT *out_samples = data;
02362
02363 retry:
02364 if(buf_size < HEADER_SIZE)
02365 return -1;
02366
02367 header = AV_RB32(buf);
02368 if(ff_mpa_check_header(header) < 0){
02369 buf++;
02370
02371 av_log(avctx, AV_LOG_ERROR, "Header missing skipping one byte.\n");
02372 goto retry;
02373 }
02374
02375 if (ff_mpegaudio_decode_header(s, header) == 1) {
02376
02377 s->frame_size = -1;
02378 return -1;
02379 }
02380
02381 avctx->channels = s->nb_channels;
02382 avctx->bit_rate = s->bit_rate;
02383 avctx->sub_id = s->layer;
02384 switch(s->layer) {
02385 case 1:
02386 avctx->frame_size = 384;
02387 break;
02388 case 2:
02389 avctx->frame_size = 1152;
02390 break;
02391 case 3:
02392 if (s->lsf)
02393 avctx->frame_size = 576;
02394 else
02395 avctx->frame_size = 1152;
02396 break;
02397 }
02398
02399 if(s->frame_size<=0 || s->frame_size > buf_size){
02400 av_log(avctx, AV_LOG_ERROR, "incomplete frame\n");
02401 return -1;
02402 }else if(s->frame_size < buf_size){
02403
02404
02405
02406 if ((buf_size % s->frame_size) != 0)
02407 av_log(avctx, AV_LOG_ERROR, "incorrect frame size\n");
02408 buf_size= s->frame_size;
02409 }
02410
02411 out_size = mp_decode_frame(s, out_samples, buf, buf_size);
02412 if(out_size>=0){
02413 *data_size = out_size;
02414 avctx->sample_rate = s->sample_rate;
02415
02416 }else
02417 av_log(avctx, AV_LOG_DEBUG, "Error while decoding MPEG audio frame.\n");
02418 s->frame_size = 0;
02419 return buf_size;
02420 }
02421
02422 static void flush(AVCodecContext *avctx){
02423 MPADecodeContext *s = avctx->priv_data;
02424 s->last_buf_size= 0;
02425 }
02426
02427 #ifdef CONFIG_MP3ADU_DECODER
02428 static int decode_frame_adu(AVCodecContext * avctx,
02429 void *data, int *data_size,
02430 uint8_t * buf, int buf_size)
02431 {
02432 MPADecodeContext *s = avctx->priv_data;
02433 uint32_t header;
02434 int len, out_size;
02435 OUT_INT *out_samples = data;
02436
02437 len = buf_size;
02438
02439
02440 if (buf_size < HEADER_SIZE) {
02441 *data_size = 0;
02442 return buf_size;
02443 }
02444
02445
02446 if (len > MPA_MAX_CODED_FRAME_SIZE)
02447 len = MPA_MAX_CODED_FRAME_SIZE;
02448
02449
02450 header = AV_RB32(buf) | 0xffe00000;
02451
02452 if (ff_mpa_check_header(header) < 0) {
02453 *data_size = 0;
02454 return buf_size;
02455 }
02456
02457 ff_mpegaudio_decode_header(s, header);
02458
02459 avctx->sample_rate = s->sample_rate;
02460 avctx->channels = s->nb_channels;
02461 avctx->bit_rate = s->bit_rate;
02462 avctx->sub_id = s->layer;
02463
02464 avctx->frame_size=s->frame_size = len;
02465
02466 if (avctx->parse_only) {
02467 out_size = buf_size;
02468 } else {
02469 out_size = mp_decode_frame(s, out_samples, buf, buf_size);
02470 }
02471
02472 *data_size = out_size;
02473 return buf_size;
02474 }
02475 #endif
02476
02477 #ifdef CONFIG_MP3ON4_DECODER
02478
02479 static int mp3Frames[16] = {0,1,1,2,3,3,4,5,2};
02480 static int mp3Channels[16] = {0,1,2,3,4,5,6,8,4};
02481
02482 static int chan_offset[9][5] = {
02483 {0},
02484 {0},
02485 {0},
02486 {2,0},
02487 {2,0,3},
02488 {4,0,2},
02489 {4,0,2,5},
02490 {4,0,2,6,5},
02491 {0,2}
02492 };
02493
02494
02495 static int decode_init_mp3on4(AVCodecContext * avctx)
02496 {
02497 MP3On4DecodeContext *s = avctx->priv_data;
02498 int i;
02499
02500 if ((avctx->extradata_size < 2) || (avctx->extradata == NULL)) {
02501 av_log(avctx, AV_LOG_ERROR, "Codec extradata missing or too short.\n");
02502 return -1;
02503 }
02504
02505 s->chan_cfg = (((unsigned char *)avctx->extradata)[1] >> 3) & 0x0f;
02506 s->frames = mp3Frames[s->chan_cfg];
02507 if(!s->frames) {
02508 av_log(avctx, AV_LOG_ERROR, "Invalid channel config number.\n");
02509 return -1;
02510 }
02511 avctx->channels = mp3Channels[s->chan_cfg];
02512
02513
02514
02515
02516
02517
02518
02519 s->mp3decctx[0] = av_mallocz(sizeof(MPADecodeContext));
02520
02521 avctx->priv_data = s->mp3decctx[0];
02522 decode_init(avctx);
02523
02524 avctx->priv_data = s;
02525 s->mp3decctx[0]->adu_mode = 1;
02526
02527
02528
02529
02530 for (i = 1; i < s->frames; i++) {
02531 s->mp3decctx[i] = av_mallocz(sizeof(MPADecodeContext));
02532 s->mp3decctx[i]->compute_antialias = s->mp3decctx[0]->compute_antialias;
02533 s->mp3decctx[i]->adu_mode = 1;
02534 s->mp3decctx[i]->avctx = avctx;
02535 }
02536
02537 return 0;
02538 }
02539
02540
02541 static int decode_close_mp3on4(AVCodecContext * avctx)
02542 {
02543 MP3On4DecodeContext *s = avctx->priv_data;
02544 int i;
02545
02546 for (i = 0; i < s->frames; i++)
02547 if (s->mp3decctx[i])
02548 av_free(s->mp3decctx[i]);
02549
02550 return 0;
02551 }
02552
02553
02554 static int decode_frame_mp3on4(AVCodecContext * avctx,
02555 void *data, int *data_size,
02556 uint8_t * buf, int buf_size)
02557 {
02558 MP3On4DecodeContext *s = avctx->priv_data;
02559 MPADecodeContext *m;
02560 int len, out_size = 0;
02561 uint32_t header;
02562 OUT_INT *out_samples = data;
02563 OUT_INT decoded_buf[MPA_FRAME_SIZE * MPA_MAX_CHANNELS];
02564 OUT_INT *outptr, *bp;
02565 int fsize;
02566 unsigned char *start2 = buf, *start;
02567 int fr, i, j, n;
02568 int off = avctx->channels;
02569 int *coff = chan_offset[s->chan_cfg];
02570
02571 len = buf_size;
02572
02573
02574 if (buf_size < HEADER_SIZE) {
02575 *data_size = 0;
02576 return buf_size;
02577 }
02578
02579
02580 outptr = s->frames == 1 ? out_samples : decoded_buf;
02581
02582 for (fr = 0; fr < s->frames; fr++) {
02583 start = start2;
02584 fsize = (start[0] << 4) | (start[1] >> 4);
02585 start2 += fsize;
02586 if (fsize > len)
02587 fsize = len;
02588 len -= fsize;
02589 if (fsize > MPA_MAX_CODED_FRAME_SIZE)
02590 fsize = MPA_MAX_CODED_FRAME_SIZE;
02591 m = s->mp3decctx[fr];
02592 assert (m != NULL);
02593
02594
02595 header = AV_RB32(start) | 0xfff00000;
02596
02597 if (ff_mpa_check_header(header) < 0) {
02598 *data_size = 0;
02599 return buf_size;
02600 }
02601
02602 ff_mpegaudio_decode_header(m, header);
02603 mp_decode_frame(m, decoded_buf, start, fsize);
02604
02605 n = MPA_FRAME_SIZE * m->nb_channels;
02606 out_size += n * sizeof(OUT_INT);
02607 if(s->frames > 1) {
02608
02609 bp = out_samples + coff[fr];
02610 if(m->nb_channels == 1) {
02611 for(j = 0; j < n; j++) {
02612 *bp = decoded_buf[j];
02613 bp += off;
02614 }
02615 } else {
02616 for(j = 0; j < n; j++) {
02617 bp[0] = decoded_buf[j++];
02618 bp[1] = decoded_buf[j];
02619 bp += off;
02620 }
02621 }
02622 }
02623 }
02624
02625
02626 avctx->sample_rate = s->mp3decctx[0]->sample_rate;
02627 avctx->frame_size= buf_size;
02628 avctx->bit_rate = 0;
02629 for (i = 0; i < s->frames; i++)
02630 avctx->bit_rate += s->mp3decctx[i]->bit_rate;
02631
02632 *data_size = out_size;
02633 return buf_size;
02634 }
02635 #endif
02636
02637 #ifdef CONFIG_MP2_DECODER
02638 AVCodec mp2_decoder =
02639 {
02640 "mp2",
02641 CODEC_TYPE_AUDIO,
02642 CODEC_ID_MP2,
02643 sizeof(MPADecodeContext),
02644 decode_init,
02645 NULL,
02646 NULL,
02647 decode_frame,
02648 CODEC_CAP_PARSE_ONLY,
02649 };
02650 #endif
02651 #ifdef CONFIG_MP3_DECODER
02652 AVCodec mp3_decoder =
02653 {
02654 "mp3",
02655 CODEC_TYPE_AUDIO,
02656 CODEC_ID_MP3,
02657 sizeof(MPADecodeContext),
02658 decode_init,
02659 NULL,
02660 NULL,
02661 decode_frame,
02662 CODEC_CAP_PARSE_ONLY,
02663 .flush= flush,
02664 };
02665 #endif
02666 #ifdef CONFIG_MP3ADU_DECODER
02667 AVCodec mp3adu_decoder =
02668 {
02669 "mp3adu",
02670 CODEC_TYPE_AUDIO,
02671 CODEC_ID_MP3ADU,
02672 sizeof(MPADecodeContext),
02673 decode_init,
02674 NULL,
02675 NULL,
02676 decode_frame_adu,
02677 CODEC_CAP_PARSE_ONLY,
02678 .flush= flush,
02679 };
02680 #endif
02681 #ifdef CONFIG_MP3ON4_DECODER
02682 AVCodec mp3on4_decoder =
02683 {
02684 "mp3on4",
02685 CODEC_TYPE_AUDIO,
02686 CODEC_ID_MP3ON4,
02687 sizeof(MP3On4DecodeContext),
02688 decode_init_mp3on4,
02689 NULL,
02690 decode_close_mp3on4,
02691 decode_frame_mp3on4,
02692 .flush= flush,
02693 };
02694 #endif