00001 #include "huffman.h"
00002 #include "mpeg3private.h"
00003 #include "mpeg3protos.h"
00004 #include "tables.h"
00005
00006 #include <stdio.h>
00007 #include <string.h>
00008
00009 struct gr_info_s
00010 {
00011 int scfsi;
00012 unsigned part2_3_length;
00013 unsigned big_values;
00014 unsigned scalefac_compress;
00015 unsigned block_type;
00016 unsigned mixed_block_flag;
00017 unsigned table_select[3];
00018 unsigned subblock_gain[3];
00019 unsigned maxband[3];
00020 unsigned maxbandl;
00021 unsigned maxb;
00022 unsigned region1start;
00023 unsigned region2start;
00024 unsigned preflag;
00025 unsigned scalefac_scale;
00026 unsigned count1table_select;
00027 float *full_gain[3];
00028 float *pow2gain;
00029 };
00030
00031 struct sideinfo_s
00032 {
00033 unsigned main_data_begin;
00034 unsigned private_bits;
00035 struct
00036 {
00037 struct gr_info_s gr[2];
00038 } ch[2];
00039 };
00040
00041
00042
00043
00044
00045
00046
00047
00048
00049 static int get_scale_factors_1(mpeg3_layer_t *audio,
00050 int *scf,
00051 struct gr_info_s *gr_info,
00052 int ch,
00053 int gr)
00054 {
00055 static unsigned char slen[2][16] =
00056 {{0, 0, 0, 0, 3, 1, 1, 1, 2, 2, 2, 3, 3, 3, 4, 4},
00057 {0, 1, 2, 3, 0, 1, 2, 3, 1, 2, 3, 1, 2, 3, 2, 3}};
00058 int numbits;
00059 int num0 = slen[0][gr_info->scalefac_compress];
00060 int num1 = slen[1][gr_info->scalefac_compress];
00061
00062 if (gr_info->block_type == 2)
00063 {
00064 int i = 18;
00065 numbits = (num0 + num1) * 18;
00066
00067 if (gr_info->mixed_block_flag)
00068 {
00069 for(i = 8; i; i--)
00070 *scf++ = mpeg3bits_getbits(audio->stream, num0);
00071 i = 9;
00072
00073 numbits -= num0;
00074 }
00075
00076 for( ; i; i--)
00077 *scf++ = mpeg3bits_getbits(audio->stream, num0);
00078 for(i = 18; i; i--)
00079 *scf++ = mpeg3bits_getbits(audio->stream, num1);
00080
00081 *scf++ = 0;
00082 *scf++ = 0;
00083 *scf++ = 0;
00084 }
00085 else
00086 {
00087 int i;
00088 int scfsi = gr_info->scfsi;
00089
00090 if(scfsi < 0)
00091 {
00092
00093 for(i = 11; i; i--)
00094 {
00095 *scf++ = mpeg3bits_getbits(audio->stream, num0);
00096 }
00097 for(i = 10; i; i--)
00098 *scf++ = mpeg3bits_getbits(audio->stream, num1);
00099 numbits = (num0 + num1) * 10 + num0;
00100 *scf++ = 0;
00101 }
00102 else
00103 {
00104 numbits = 0;
00105 if(!(scfsi & 0x8))
00106 {
00107 for(i = 0; i < 6; i++)
00108 {
00109 *scf++ = mpeg3bits_getbits(audio->stream, num0);
00110 }
00111 numbits += num0 * 6;
00112 }
00113 else
00114 {
00115 scf += 6;
00116 }
00117
00118 if(!(scfsi & 0x4))
00119 {
00120 for(i = 0; i < 5; i++)
00121 *scf++ = mpeg3bits_getbits(audio->stream, num0);
00122 numbits += num0 * 5;
00123 }
00124 else
00125 {
00126 scf += 5;
00127 }
00128
00129 if(!(scfsi & 0x2))
00130 {
00131 for(i = 0; i < 5; i++)
00132 *scf++ = mpeg3bits_getbits(audio->stream, num1);
00133 numbits += num1 * 5;
00134 }
00135 else
00136 {
00137 scf += 5;
00138 }
00139
00140 if(!(scfsi & 0x1))
00141 {
00142 for(i = 0; i < 5; i++)
00143 *scf++ = mpeg3bits_getbits(audio->stream, num1);
00144 numbits += num1 * 5;
00145 }
00146 else
00147 {
00148 scf += 5;
00149 }
00150 *scf++ = 0;
00151 }
00152 }
00153 return numbits;
00154 }
00155
00156 static int get_scale_factors_2(mpeg3_layer_t *audio,
00157 int *scf,
00158 struct gr_info_s *gr_info,
00159 int i_stereo)
00160 {
00161 unsigned char *pnt;
00162 int i, j, n = 0, numbits = 0;
00163 unsigned int slen;
00164 static unsigned char stab[3][6][4] =
00165 {{{ 6, 5, 5,5 }, { 6, 5, 7,3 }, { 11,10,0,0},
00166 { 7, 7, 7,0 }, { 6, 6, 6,3 }, { 8, 8,5,0}},
00167 {{ 9, 9, 9,9 }, { 9, 9,12,6 }, { 18,18,0,0},
00168 {12,12,12,0 }, {12, 9, 9,6 }, { 15,12,9,0}},
00169 {{ 6, 9, 9,9 }, { 6, 9,12,6 }, { 15,18,0,0},
00170 { 6,15,12,0 }, { 6,12, 9,6 }, { 6,18,9,0}}};
00171
00172
00173 if(i_stereo)
00174 slen = mpeg3_i_slen2[gr_info->scalefac_compress >> 1];
00175 else
00176 slen = mpeg3_n_slen2[gr_info->scalefac_compress];
00177
00178 gr_info->preflag = (slen >> 15) & 0x1;
00179
00180 n = 0;
00181 if(gr_info->block_type == 2 )
00182 {
00183 n++;
00184 if(gr_info->mixed_block_flag)
00185 n++;
00186 }
00187
00188 pnt = stab[n][(slen >> 12) & 0x7];
00189
00190 for(i = 0; i < 4; i++)
00191 {
00192 int num = slen & 0x7;
00193 slen >>= 3;
00194 if(num)
00195 {
00196 for(j = 0; j < (int)(pnt[i]); j++)
00197 *scf++ = mpeg3bits_getbits(audio->stream, num);
00198 numbits += pnt[i] * num;
00199 }
00200 else
00201 {
00202 for(j = 0; j < (int)(pnt[i]); j++)
00203 *scf++ = 0;
00204 }
00205 }
00206
00207 n = (n << 1) + 1;
00208 for(i = 0; i < n; i++)
00209 *scf++ = 0;
00210
00211 return numbits;
00212 }
00213
00214 static int pretab1[22] = {0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,2,2,3,3,3,2,0};
00215 static int pretab2[22] = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};
00216
00217
00218
00219
00220
00221
00222
00223 #define BITSHIFT ((sizeof(int32_t) - 1) * 8)
00224 #define REFRESH_MASK \
00225 while(num < BITSHIFT) \
00226 { \
00227 mask |= mpeg3bits_getbits(audio->stream, 8) << (BITSHIFT - num); \
00228 num += 8; \
00229 part2remain -= 8; \
00230 }
00231
00232
00233 static int dequantize_sample(mpeg3_layer_t *audio,
00234 float xr[SBLIMIT][SSLIMIT],
00235 int *scf,
00236 struct gr_info_s *gr_info,
00237 int sfreq,
00238 int part2bits)
00239 {
00240 int shift = 1 + gr_info->scalefac_scale;
00241 float *xrpnt = (float*)xr;
00242 int l[3],l3;
00243 int part2remain = gr_info->part2_3_length - part2bits;
00244 int *me;
00245 int num = mpeg3bits_getbitoffset(audio->stream);
00246 int32_t mask = mpeg3bits_getbits(audio->stream, num);
00247
00248 mask = mask << (BITSHIFT + 8 - num);
00249 part2remain -= num;
00250
00251 {
00252 int bv = gr_info->big_values;
00253 int region1 = gr_info->region1start;
00254 int region2 = gr_info->region2start;
00255
00256 l3 = ((576 >> 1) - bv) >> 1;
00257
00258
00259
00260
00261
00262
00263 if(bv <= region1)
00264 {
00265 l[0] = bv;
00266 l[1] = 0;
00267 l[2] = 0;
00268 }
00269 else
00270 {
00271 l[0] = region1;
00272 if(bv <= region2)
00273 {
00274 l[1] = bv - l[0]; l[2] = 0;
00275 }
00276 else
00277 {
00278 l[1] = region2 - l[0];
00279 l[2] = bv - region2;
00280 }
00281 }
00282 }
00283
00284 if(gr_info->block_type == 2)
00285 {
00286
00287
00288
00289 int i, max[4];
00290 int step = 0, lwin = 3, cb = 0;
00291 register float v = 0.0;
00292 register int *m, mc;
00293
00294 if(gr_info->mixed_block_flag)
00295 {
00296 max[3] = -1;
00297 max[0] = max[1] = max[2] = 2;
00298 m = mpeg3_map[sfreq][0];
00299 me = mpeg3_mapend[sfreq][0];
00300 }
00301 else
00302 {
00303 max[0] = max[1] = max[2] = max[3] = -1;
00304
00305 m = mpeg3_map[sfreq][1];
00306 me = mpeg3_mapend[sfreq][1];
00307 }
00308
00309 mc = 0;
00310 for(i = 0; i < 2; i++)
00311 {
00312 int lp = l[i];
00313 struct newhuff *h = mpeg3_ht + gr_info->table_select[i];
00314 for( ; lp; lp--, mc--)
00315 {
00316 register int x,y;
00317 if(!mc)
00318 {
00319 mc = *m++;
00320 xrpnt = ((float*)xr) + (*m++);
00321 lwin = *m++;
00322 cb = *m++;
00323 if(lwin == 3)
00324 {
00325 v = gr_info->pow2gain[(*scf++) << shift];
00326 step = 1;
00327 }
00328 else
00329 {
00330 v = gr_info->full_gain[lwin][(*scf++) << shift];
00331 step = 3;
00332 }
00333 }
00334
00335 {
00336 register short *val = h->table;
00337 REFRESH_MASK;
00338 while((y = *val++) < 0)
00339 {
00340 if (mask < 0)
00341 val -= y;
00342 num--;
00343 mask <<= 1;
00344 }
00345 x = y >> 4;
00346 y &= 0xf;
00347 }
00348
00349 if(x == 15 && h->linbits)
00350 {
00351 max[lwin] = cb;
00352 REFRESH_MASK;
00353 x += ((uint32_t)mask) >> (BITSHIFT + 8 - h->linbits);
00354 num -= h->linbits + 1;
00355 mask <<= h->linbits;
00356 if(mask < 0)
00357 *xrpnt = -mpeg3_ispow[x] * v;
00358 else
00359 *xrpnt = mpeg3_ispow[x] * v;
00360 mask <<= 1;
00361 }
00362 else
00363 if(x)
00364 {
00365 max[lwin] = cb;
00366 if(mask < 0)
00367 *xrpnt = -mpeg3_ispow[x] * v;
00368 else
00369 *xrpnt = mpeg3_ispow[x] * v;
00370 num--;
00371 mask <<= 1;
00372 }
00373 else
00374 *xrpnt = 0.0;
00375
00376 xrpnt += step;
00377 if(y == 15 && h->linbits)
00378 {
00379 max[lwin] = cb;
00380 REFRESH_MASK;
00381 y += ((uint32_t) mask) >> (BITSHIFT + 8 - h->linbits);
00382 num -= h->linbits + 1;
00383 mask <<= h->linbits;
00384 if(mask < 0)
00385 *xrpnt = -mpeg3_ispow[y] * v;
00386 else
00387 *xrpnt = mpeg3_ispow[y] * v;
00388 mask <<= 1;
00389 }
00390 else
00391 if(y)
00392 {
00393 max[lwin] = cb;
00394 if(mask < 0)
00395 *xrpnt = -mpeg3_ispow[y] * v;
00396 else
00397 *xrpnt = mpeg3_ispow[y] * v;
00398 num--;
00399 mask <<= 1;
00400 }
00401 else
00402 *xrpnt = 0.0;
00403 xrpnt += step;
00404 }
00405 }
00406
00407 for( ;l3 && (part2remain + num > 0); l3--)
00408 {
00409 struct newhuff *h = mpeg3_htc + gr_info->count1table_select;
00410 register short *val = h->table, a;
00411
00412 REFRESH_MASK;
00413 while((a = *val++) < 0)
00414 {
00415 if (mask < 0)
00416 val -= a;
00417 num--;
00418 mask <<= 1;
00419 }
00420 if(part2remain + num <= 0)
00421 {
00422 num -= part2remain + num;
00423 break;
00424 }
00425
00426 for(i = 0; i < 4; i++)
00427 {
00428 if(!(i & 1))
00429 {
00430 if(!mc)
00431 {
00432 mc = *m++;
00433 xrpnt = ((float*)xr) + (*m++);
00434 lwin = *m++;
00435 cb = *m++;
00436 if(lwin == 3)
00437 {
00438 v = gr_info->pow2gain[(*scf++) << shift];
00439 step = 1;
00440 }
00441 else
00442 {
00443 v = gr_info->full_gain[lwin][(*scf++) << shift];
00444 step = 3;
00445 }
00446 }
00447 mc--;
00448 }
00449 if((a & (0x8 >> i)))
00450 {
00451 max[lwin] = cb;
00452 if(part2remain + num <= 0)
00453 {
00454 break;
00455 }
00456 if(mask < 0)
00457 *xrpnt = -v;
00458 else
00459 *xrpnt = v;
00460 num--;
00461 mask <<= 1;
00462 }
00463 else
00464 *xrpnt = 0.0;
00465 xrpnt += step;
00466 }
00467 }
00468
00469 if(lwin < 3)
00470 {
00471
00472 while(1)
00473 {
00474 for( ;mc > 0; mc--)
00475 {
00476
00477 *xrpnt = 0.0;
00478 xrpnt += 3;
00479 *xrpnt = 0.0;
00480 xrpnt += 3;
00481 }
00482 if(m >= me)
00483 break;
00484 mc = *m++;
00485 xrpnt = ((float*)xr) + *m++;
00486
00487 if(*m++ == 0)
00488 break;
00489
00490 m++;
00491 }
00492 }
00493
00494 gr_info->maxband[0] = max[0] + 1;
00495 gr_info->maxband[1] = max[1] + 1;
00496 gr_info->maxband[2] = max[2] + 1;
00497 gr_info->maxbandl = max[3] + 1;
00498
00499 {
00500 int rmax = max[0] > max[1] ? max[0] : max[1];
00501 rmax = (rmax > max[2] ? rmax : max[2]) + 1;
00502 gr_info->maxb = rmax ? mpeg3_shortLimit[sfreq][rmax] : mpeg3_longLimit[sfreq][max[3] + 1];
00503 }
00504
00505 }
00506 else
00507 {
00508
00509
00510
00511 int *pretab = gr_info->preflag ? pretab1 : pretab2;
00512 int i, max = -1;
00513 int cb = 0;
00514 int *m = mpeg3_map[sfreq][2];
00515 register float v = 0.0;
00516 int mc = 0;
00517
00518
00519
00520
00521 for(i = 0; i < 3; i++)
00522 {
00523 int lp = l[i];
00524 struct newhuff *h = mpeg3_ht + gr_info->table_select[i];
00525
00526 for(; lp; lp--, mc--)
00527 {
00528 int x, y;
00529
00530 if(!mc)
00531 {
00532 mc = *m++;
00533 cb = *m++;
00534 if(cb == 21)
00535 v = 0.0;
00536 else
00537 v = gr_info->pow2gain[((*scf++) + (*pretab++)) << shift];
00538 }
00539 {
00540 register short *val = h->table;
00541 REFRESH_MASK;
00542 while((y = *val++) < 0)
00543 {
00544 if(mask < 0)
00545 val -= y;
00546 num--;
00547 mask <<= 1;
00548 }
00549 x = y >> 4;
00550 y &= 0xf;
00551 }
00552
00553 if(x == 15 && h->linbits)
00554 {
00555 max = cb;
00556 REFRESH_MASK;
00557 x += ((uint32_t) mask) >> (BITSHIFT + 8 - h->linbits);
00558 num -= h->linbits + 1;
00559 mask <<= h->linbits;
00560 if(mask < 0)
00561 *xrpnt++ = -mpeg3_ispow[x] * v;
00562 else
00563 *xrpnt++ = mpeg3_ispow[x] * v;
00564 mask <<= 1;
00565 }
00566 else
00567 if(x)
00568 {
00569 max = cb;
00570 if(mask < 0)
00571 *xrpnt++ = -mpeg3_ispow[x] * v;
00572 else
00573 *xrpnt++ = mpeg3_ispow[x] * v;
00574 num--;
00575 mask <<= 1;
00576 }
00577 else
00578 *xrpnt++ = 0.0;
00579
00580 if(y == 15 && h->linbits)
00581 {
00582 max = cb;
00583 REFRESH_MASK;
00584 y += ((uint32_t) mask) >> (BITSHIFT + 8 - h->linbits);
00585 num -= h->linbits + 1;
00586 mask <<= h->linbits;
00587 if(mask < 0)
00588 *xrpnt++ = -mpeg3_ispow[y] * v;
00589 else
00590 *xrpnt++ = mpeg3_ispow[y] * v;
00591 mask <<= 1;
00592 }
00593 else
00594 if(y)
00595 {
00596 max = cb;
00597 if(mask < 0)
00598 *xrpnt++ = -mpeg3_ispow[y] * v;
00599 else
00600 *xrpnt++ = mpeg3_ispow[y] * v;
00601 num--;
00602 mask <<= 1;
00603 }
00604 else
00605 *xrpnt++ = 0.0;
00606 }
00607 }
00608
00609
00610
00611
00612 for( ; l3 && (part2remain + num > 0); l3--)
00613 {
00614 struct newhuff *h = mpeg3_htc + gr_info->count1table_select;
00615 register short *val = h->table, a;
00616
00617 REFRESH_MASK;
00618 while((a = *val++) < 0)
00619 {
00620 if(mask < 0)
00621 val -= a;
00622 num--;
00623 mask <<= 1;
00624 }
00625 if(part2remain + num <= 0)
00626 {
00627 num -= part2remain + num;
00628 break;
00629 }
00630
00631 for(i = 0; i < 4; i++)
00632 {
00633 if(!(i & 1))
00634 {
00635 if(!mc)
00636 {
00637 mc = *m++;
00638 cb = *m++;
00639 if(cb == 21)
00640 v = 0.0;
00641 else
00642 v = gr_info->pow2gain[((*scf++) + (*pretab++)) << shift];
00643 }
00644 mc--;
00645 }
00646 if((a & (0x8 >> i)))
00647 {
00648 max = cb;
00649 if(part2remain + num <= 0)
00650 {
00651 break;
00652 }
00653 if(mask < 0)
00654 *xrpnt++ = -v;
00655 else
00656 *xrpnt++ = v;
00657 num--;
00658 mask <<= 1;
00659 }
00660 else
00661 *xrpnt++ = 0.0;
00662 }
00663 }
00664
00665 gr_info->maxbandl = max + 1;
00666 gr_info->maxb = mpeg3_longLimit[sfreq][gr_info->maxbandl];
00667 }
00668
00669 part2remain += num;
00670
00671
00672 mpeg3bits_start_reverse(audio->stream);
00673 mpeg3bits_getbits_reverse(audio->stream, num);
00674 mpeg3bits_start_forward(audio->stream);
00675
00676 num = 0;
00677
00678 while(xrpnt < &xr[SBLIMIT][0])
00679 *xrpnt++ = 0.0;
00680
00681 while(part2remain > 16)
00682 {
00683 mpeg3bits_getbits(audio->stream, 16);
00684 part2remain -= 16;
00685 }
00686
00687 if(part2remain > 0)
00688 {
00689 mpeg3bits_getbits(audio->stream, part2remain);
00690 }
00691 else
00692 if(part2remain < 0)
00693 {
00694 printf("dequantize_sample: can't rewind stream %d bits! data=%02x%02x%02x%02x\n",
00695 -part2remain,
00696 (unsigned char)audio->stream->input_ptr[-3],
00697 (unsigned char)audio->stream->input_ptr[-2],
00698 (unsigned char)audio->stream->input_ptr[-1],
00699 (unsigned char)audio->stream->input_ptr[0]);
00700 return 1;
00701 }
00702 return 0;
00703 }
00704
00705 static int get_side_info(mpeg3_layer_t *audio,
00706 struct sideinfo_s *si,
00707 int channels,
00708 int ms_stereo,
00709 long sfreq,
00710 int single,
00711 int lsf)
00712 {
00713 int ch, gr;
00714 int powdiff = (single == 3) ? 4 : 0;
00715 static const int tabs[2][5] = { { 2,9,5,3,4 } , { 1,8,1,2,9 } };
00716 const int *tab = tabs[lsf];
00717
00718 si->main_data_begin = mpeg3bits_getbits(audio->stream, tab[1]);
00719 if(channels == 1)
00720 si->private_bits = mpeg3bits_getbits(audio->stream, tab[2]);
00721 else
00722 si->private_bits = mpeg3bits_getbits(audio->stream, tab[3]);
00723 if(!lsf)
00724 {
00725 for(ch = 0; ch < channels; ch++)
00726 {
00727 si->ch[ch].gr[0].scfsi = -1;
00728 si->ch[ch].gr[1].scfsi = mpeg3bits_getbits(audio->stream, 4);
00729 }
00730 }
00731
00732 for(gr = 0; gr < tab[0]; gr++)
00733 {
00734 for(ch = 0; ch < channels; ch++)
00735 {
00736 register struct gr_info_s *gr_info = &(si->ch[ch].gr[gr]);
00737
00738 gr_info->part2_3_length = mpeg3bits_getbits(audio->stream, 12);
00739 gr_info->big_values = mpeg3bits_getbits(audio->stream, 9);
00740 if(gr_info->big_values > 288)
00741 {
00742 fprintf(stderr,"get_side_info: big_values too large!\n");
00743 gr_info->big_values = 288;
00744 }
00745 gr_info->pow2gain = mpeg3_gainpow2 + 256 - mpeg3bits_getbits(audio->stream, 8) + powdiff;
00746 if(ms_stereo)
00747 gr_info->pow2gain += 2;
00748 gr_info->scalefac_compress = mpeg3bits_getbits(audio->stream, tab[4]);
00749
00750 if(mpeg3bits_getbits(audio->stream, 1))
00751 {
00752
00753 int i;
00754 gr_info->block_type = mpeg3bits_getbits(audio->stream, 2);
00755 gr_info->mixed_block_flag = mpeg3bits_getbits(audio->stream, 1);
00756 gr_info->table_select[0] = mpeg3bits_getbits(audio->stream, 5);
00757 gr_info->table_select[1] = mpeg3bits_getbits(audio->stream, 5);
00758
00759
00760
00761
00762 gr_info->table_select[2] = 0;
00763 for(i = 0; i < 3; i++)
00764 gr_info->full_gain[i] = gr_info->pow2gain + (mpeg3bits_getbits(audio->stream, 3) << 3);
00765
00766 if(gr_info->block_type == 0)
00767 {
00768 fprintf(stderr,"Blocktype == 0 and window-switching == 1 not allowed.\n");
00769 return 1;
00770 }
00771
00772
00773 if(!lsf || gr_info->block_type == 2)
00774 gr_info->region1start = 36 >> 1;
00775 else
00776 {
00777
00778 if(sfreq == 8)
00779 gr_info->region1start = 108 >> 1;
00780 else
00781 gr_info->region1start = 54 >> 1;
00782 }
00783 gr_info->region2start = 576 >> 1;
00784 }
00785 else
00786 {
00787 int i, r0c, r1c;
00788 for(i = 0; i < 3; i++)
00789 gr_info->table_select[i] = mpeg3bits_getbits(audio->stream, 5);
00790
00791 r0c = mpeg3bits_getbits(audio->stream, 4);
00792 r1c = mpeg3bits_getbits(audio->stream, 3);
00793 gr_info->region1start = mpeg3_bandInfo[sfreq].longIdx[r0c + 1] >> 1 ;
00794 gr_info->region2start = mpeg3_bandInfo[sfreq].longIdx[r0c + 1 + r1c + 1] >> 1;
00795 gr_info->block_type = 0;
00796 gr_info->mixed_block_flag = 0;
00797 }
00798 if(!lsf) gr_info->preflag = mpeg3bits_getbits(audio->stream, 1);
00799 gr_info->scalefac_scale = mpeg3bits_getbits(audio->stream, 1);
00800 gr_info->count1table_select = mpeg3bits_getbits(audio->stream, 1);
00801 }
00802 }
00803 return 0;
00804 }
00805
00806 static int hybrid(mpeg3_layer_t *audio,
00807 float fsIn[SBLIMIT][SSLIMIT],
00808 float tsOut[SSLIMIT][SBLIMIT],
00809 int ch,
00810 struct gr_info_s *gr_info)
00811 {
00812 float *tspnt = (float *) tsOut;
00813 float *rawout1,*rawout2;
00814 int bt, sb = 0;
00815
00816
00817 {
00818 int b = audio->mp3_blc[ch];
00819 rawout1 = audio->mp3_block[b][ch];
00820 b = -b + 1;
00821 rawout2 = audio->mp3_block[b][ch];
00822 audio->mp3_blc[ch] = b;
00823 }
00824
00825 if(gr_info->mixed_block_flag)
00826 {
00827 sb = 2;
00828 mpeg3audio_dct36(fsIn[0], rawout1, rawout2, mpeg3_win[0], tspnt);
00829 mpeg3audio_dct36(fsIn[1], rawout1 + 18, rawout2 + 18, mpeg3_win1[0], tspnt + 1);
00830 rawout1 += 36;
00831 rawout2 += 36;
00832 tspnt += 2;
00833 }
00834
00835 bt = gr_info->block_type;
00836 if(bt == 2)
00837 {
00838 for( ; sb < gr_info->maxb; sb += 2, tspnt += 2, rawout1 += 36, rawout2 += 36)
00839 {
00840 mpeg3audio_dct12(fsIn[sb] ,rawout1 ,rawout2 ,mpeg3_win[2] ,tspnt);
00841 mpeg3audio_dct12(fsIn[sb + 1], rawout1 + 18, rawout2 + 18, mpeg3_win1[2], tspnt + 1);
00842 }
00843 }
00844 else
00845 {
00846 for( ; sb < gr_info->maxb; sb += 2, tspnt += 2, rawout1 += 36, rawout2 += 36)
00847 {
00848 mpeg3audio_dct36(fsIn[sb], rawout1, rawout2, mpeg3_win[bt], tspnt);
00849 mpeg3audio_dct36(fsIn[sb + 1], rawout1 + 18, rawout2 + 18, mpeg3_win1[bt], tspnt + 1);
00850 }
00851 }
00852
00853 for( ; sb < SBLIMIT; sb++, tspnt++)
00854 {
00855 int i;
00856 for(i = 0; i < SSLIMIT; i++)
00857 {
00858 tspnt[i * SBLIMIT] = *rawout1++;
00859 *rawout2++ = 0.0;
00860 }
00861 }
00862 return 0;
00863 }
00864
00865 static int antialias(mpeg3_layer_t *audio,
00866 float xr[SBLIMIT][SSLIMIT],
00867 struct gr_info_s *gr_info)
00868 {
00869 int sblim;
00870
00871 if(gr_info->block_type == 2)
00872 {
00873 if(!gr_info->mixed_block_flag)
00874 return 0;
00875 sblim = 1;
00876 }
00877 else
00878 {
00879 sblim = gr_info->maxb-1;
00880 }
00881
00882
00883
00884
00885 {
00886 int sb;
00887 float *xr1 = (float*)xr[1];
00888
00889 for(sb = sblim; sb; sb--, xr1 += 10)
00890 {
00891 int ss;
00892 float *cs, *ca;
00893 float *xr2;
00894 cs = mpeg3_aa_cs;
00895 ca = mpeg3_aa_ca;
00896 xr2 = xr1;
00897
00898 for(ss = 7; ss >= 0; ss--)
00899 {
00900
00901 register float bu, bd;
00902 bu = *--xr2;
00903 bd = *xr1;
00904 *xr2 = (bu * (*cs) ) - (bd * (*ca) );
00905 *xr1++ = (bd * (*cs++) ) + (bu * (*ca++) );
00906 }
00907 }
00908 }
00909 return 0;
00910 }
00911
00912
00913
00914
00915 static int calc_i_stereo(mpeg3_layer_t *audio,
00916 float xr_buf[2][SBLIMIT][SSLIMIT],
00917 int *scalefac,
00918 struct gr_info_s *gr_info,
00919 int sfreq,
00920 int ms_stereo,
00921 int lsf)
00922 {
00923 float (*xr)[SBLIMIT*SSLIMIT] = (float (*)[SBLIMIT*SSLIMIT] ) xr_buf;
00924 struct mpeg3_bandInfoStruct *bi = &mpeg3_bandInfo[sfreq];
00925 const float *tab1, *tab2;
00926
00927 int tab;
00928
00929 static const float *tabs[3][2][2] =
00930 {
00931 { { mpeg3_tan1_1, mpeg3_tan2_1 } , { mpeg3_tan1_2, mpeg3_tan2_2 } },
00932 { { mpeg3_pow1_1[0], mpeg3_pow2_1[0] } , { mpeg3_pow1_2[0], mpeg3_pow2_2[0] } } ,
00933 { { mpeg3_pow1_1[1], mpeg3_pow2_1[1] } , { mpeg3_pow1_2[1], mpeg3_pow2_2[1] } }
00934 };
00935
00936 tab = lsf + (gr_info->scalefac_compress & lsf);
00937 tab1 = tabs[tab][ms_stereo][0];
00938 tab2 = tabs[tab][ms_stereo][1];
00939
00940 if(gr_info->block_type == 2)
00941 {
00942 int lwin,do_l = 0;
00943 if(gr_info->mixed_block_flag)
00944 do_l = 1;
00945
00946 for(lwin = 0; lwin < 3; lwin++)
00947 {
00948
00949
00950
00951 int is_p, sb, idx, sfb = gr_info->maxband[lwin];
00952 if(sfb > 3) do_l = 0;
00953
00954 for( ; sfb < 12 ; sfb++)
00955 {
00956
00957 is_p = scalefac[sfb * 3 + lwin - gr_info->mixed_block_flag];
00958 if(is_p != 7)
00959 {
00960 float t1, t2;
00961 sb = bi->shortDiff[sfb];
00962 idx = bi->shortIdx[sfb] + lwin;
00963 t1 = tab1[is_p];
00964 t2 = tab2[is_p];
00965 for( ; sb > 0; sb--, idx += 3)
00966 {
00967 float v = xr[0][idx];
00968 xr[0][idx] = v * t1;
00969 xr[1][idx] = v * t2;
00970 }
00971 }
00972 }
00973
00974
00975
00976 is_p = scalefac[11 * 3 + lwin - gr_info->mixed_block_flag];
00977 sb = bi->shortDiff[12];
00978 idx = bi->shortIdx[12] + lwin;
00979 if(is_p != 7)
00980 {
00981 float t1, t2;
00982 t1 = tab1[is_p];
00983 t2 = tab2[is_p];
00984 for( ; sb > 0; sb--, idx += 3)
00985 {
00986 float v = xr[0][idx];
00987 xr[0][idx] = v * t1;
00988 xr[1][idx] = v * t2;
00989 }
00990 }
00991 }
00992
00993
00994
00995
00996 if(do_l)
00997 {
00998 int sfb = gr_info->maxbandl;
00999 int idx = bi->longIdx[sfb];
01000
01001 for ( ; sfb < 8; sfb++)
01002 {
01003 int sb = bi->longDiff[sfb];
01004
01005 int is_p = scalefac[sfb];
01006 if(is_p != 7)
01007 {
01008 float t1, t2;
01009 t1 = tab1[is_p];
01010 t2 = tab2[is_p];
01011 for( ; sb > 0; sb--, idx++)
01012 {
01013 float v = xr[0][idx];
01014 xr[0][idx] = v * t1;
01015 xr[1][idx] = v * t2;
01016 }
01017 }
01018 else
01019 idx += sb;
01020 }
01021 }
01022 }
01023 else
01024 {
01025
01026 int sfb = gr_info->maxbandl;
01027 int is_p, idx = bi->longIdx[sfb];
01028 for( ; sfb < 21; sfb++)
01029 {
01030 int sb = bi->longDiff[sfb];
01031
01032 is_p = scalefac[sfb];
01033 if(is_p != 7)
01034 {
01035 float t1, t2;
01036 t1 = tab1[is_p];
01037 t2 = tab2[is_p];
01038 for( ; sb > 0; sb--, idx++)
01039 {
01040 float v = xr[0][idx];
01041 xr[0][idx] = v * t1;
01042 xr[1][idx] = v * t2;
01043 }
01044 }
01045 else
01046 idx += sb;
01047 }
01048
01049 is_p = scalefac[20];
01050 if(is_p != 7)
01051 {
01052
01053 int sb;
01054 float t1 = tab1[is_p], t2 = tab2[is_p];
01055
01056 for(sb = bi->longDiff[21]; sb > 0; sb--, idx++)
01057 {
01058 float v = xr[0][idx];
01059 xr[0][idx] = v * t1;
01060 xr[1][idx] = v * t2;
01061 }
01062 }
01063 }
01064 return 0;
01065 }
01066
01067 int mpeg3audio_dolayer3(mpeg3_layer_t *audio,
01068 char *frame,
01069 int frame_size,
01070 float **output,
01071 int render)
01072 {
01073 int gr, ch, ss;
01074
01075 int scalefacs[2][39];
01076 struct sideinfo_s sideinfo;
01077 int single = audio->single;
01078 int ms_stereo, i_stereo;
01079 int sfreq = audio->sampling_frequency_code;
01080 int stereo1, granules;
01081 int i;
01082 int output_offset = 0;
01083
01084
01085
01086 frame += 4;
01087 frame_size -= 4;
01088
01089
01090 audio->bsbufold = audio->bsbuf;
01091 audio->bsbuf = audio->bsspace[audio->bsnum] + 512;
01092 audio->bsnum ^= 1;
01093
01094
01095 memcpy(audio->bsbuf, frame, frame_size);
01096
01097
01098
01099
01100
01101
01102
01103
01104
01105
01106
01107 if(!audio->first_frame)
01108 {
01109
01110 mpeg3bits_use_ptr(audio->stream, audio->bsbuf);
01111
01112
01113
01114
01115 if(audio->error_protection)
01116 mpeg3bits_getbits(audio->stream, 16);
01117
01118
01119
01120 if(audio->channels == 1)
01121 {
01122
01123 stereo1 = 1;
01124 single = 0;
01125 }
01126 else
01127 {
01128
01129 stereo1 = 2;
01130 }
01131
01132 if(audio->mode == MPG_MD_JOINT_STEREO)
01133 {
01134 ms_stereo = (audio->mode_ext & 0x2) >> 1;
01135 i_stereo = audio->mode_ext & 0x1;
01136 }
01137 else
01138 ms_stereo = i_stereo = 0;
01139
01140 if(audio->lsf)
01141 {
01142 granules = 1;
01143 }
01144 else
01145 {
01146 granules = 2;
01147 }
01148
01149
01150 if(get_side_info(audio,
01151 &sideinfo,
01152 audio->channels,
01153 ms_stereo,
01154 sfreq,
01155 single,
01156 audio->lsf))
01157 {
01158 mpeg3_layer_reset(audio);
01159 return output_offset;
01160 }
01161
01162
01163
01164 if(sideinfo.main_data_begin >= 512)
01165 {
01166 return output_offset;
01167 }
01168
01169 if(sideinfo.main_data_begin)
01170 {
01171
01172
01173
01174
01175
01176
01177 memcpy(audio->bsbuf + audio->ssize - sideinfo.main_data_begin,
01178 audio->bsbufold + audio->prev_framesize - sideinfo.main_data_begin,
01179 sideinfo.main_data_begin);
01180 mpeg3bits_use_ptr(audio->stream,
01181 audio->bsbuf + audio->ssize - sideinfo.main_data_begin);
01182 }
01183
01184
01185 for(gr = 0; gr < granules; gr++)
01186 {
01187 float hybridIn [2][SBLIMIT][SSLIMIT];
01188 float hybridOut[2][SSLIMIT][SBLIMIT];
01189
01190 {
01191 struct gr_info_s *gr_info = &(sideinfo.ch[0].gr[gr]);
01192 int32_t part2bits;
01193 if(audio->lsf)
01194 part2bits = get_scale_factors_2(audio, scalefacs[0], gr_info, 0);
01195 else
01196 part2bits = get_scale_factors_1(audio, scalefacs[0], gr_info, 0, gr);
01197
01198
01199 if(dequantize_sample(audio,
01200 hybridIn[0],
01201 scalefacs[0],
01202 gr_info,
01203 sfreq,
01204 part2bits))
01205 {
01206 mpeg3_layer_reset(audio);
01207 return output_offset;
01208 }
01209
01210 }
01211
01212 if(audio->channels == 2)
01213 {
01214 struct gr_info_s *gr_info = &(sideinfo.ch[1].gr[gr]);
01215 int32_t part2bits;
01216 if(audio->lsf)
01217 part2bits = get_scale_factors_2(audio, scalefacs[1], gr_info, i_stereo);
01218 else
01219 part2bits = get_scale_factors_1(audio, scalefacs[1], gr_info, 1, gr);
01220
01221 if(dequantize_sample(audio,
01222 hybridIn[1],
01223 scalefacs[1],
01224 gr_info,
01225 sfreq,
01226 part2bits))
01227 {
01228 mpeg3_layer_reset(audio);
01229 return output_offset;
01230 }
01231
01232 if(ms_stereo)
01233 {
01234 int i;
01235 int maxb = sideinfo.ch[0].gr[gr].maxb;
01236 if(sideinfo.ch[1].gr[gr].maxb > maxb)
01237 maxb = sideinfo.ch[1].gr[gr].maxb;
01238 for(i = 0; i < SSLIMIT * maxb; i++)
01239 {
01240 float tmp0 = ((float*)hybridIn[0])[i];
01241 float tmp1 = ((float*)hybridIn[1])[i];
01242 ((float*)hybridIn[0])[i] = tmp0 + tmp1;
01243 ((float*)hybridIn[1])[i] = tmp0 - tmp1;
01244 }
01245 }
01246
01247 if(i_stereo)
01248 calc_i_stereo(audio, hybridIn, scalefacs[1], gr_info, sfreq, ms_stereo, audio->lsf);
01249
01250 if(ms_stereo || i_stereo || (single == 3))
01251 {
01252 if(gr_info->maxb > sideinfo.ch[0].gr[gr].maxb)
01253 sideinfo.ch[0].gr[gr].maxb = gr_info->maxb;
01254 else
01255 gr_info->maxb = sideinfo.ch[0].gr[gr].maxb;
01256 }
01257
01258 switch(single)
01259 {
01260 case 3:
01261 {
01262 register int i;
01263 register float *in0 = (float*)hybridIn[0], *in1 = (float*)hybridIn[1];
01264
01265 for(i = 0; i < SSLIMIT * gr_info->maxb; i++, in0++)
01266 *in0 = (*in0 + *in1++);
01267 }
01268 break;
01269 case 1:
01270 {
01271 register int i;
01272 register float *in0 = (float*)hybridIn[0], *in1 = (float*)hybridIn[1];
01273 for(i = 0; i < SSLIMIT * gr_info->maxb; i++)
01274 *in0++ = *in1++;
01275 }
01276 break;
01277 }
01278 }
01279
01280
01281 for(ch = 0; ch < stereo1; ch++)
01282 {
01283 struct gr_info_s *gr_info = &(sideinfo.ch[ch].gr[gr]);
01284
01285 antialias(audio, hybridIn[ch], gr_info);
01286
01287 hybrid(audio, hybridIn[ch], hybridOut[ch], ch, gr_info);
01288
01289 }
01290
01291
01292
01293
01294 for(ss = 0; ss < SSLIMIT; ss++)
01295 {
01296 if(single >= 0)
01297 {
01298 if(render)
01299 mpeg3audio_synth_stereo(audio,
01300 hybridOut[0][ss],
01301 0,
01302 output[0],
01303 &(output_offset));
01304 else
01305 output_offset += 32;
01306 }
01307 else
01308 {
01309 int p1 = output_offset;
01310 if(render)
01311 {
01312 mpeg3audio_synth_stereo(audio,
01313 hybridOut[0][ss],
01314 0,
01315 output[0],
01316 &p1);
01317 mpeg3audio_synth_stereo(audio,
01318 hybridOut[1][ss],
01319 1,
01320 output[1],
01321 &(output_offset));
01322 }
01323 else
01324 output_offset += 32;
01325 }
01326 }
01327 }
01328 }
01329 else
01330 {
01331 audio->first_frame = 0;
01332 }
01333
01334
01335
01336
01337 return output_offset;
01338 }
01339
01340
01341
01342
01343
01344
01345
01346 void mpeg3_layer_reset(mpeg3_layer_t *audio)
01347 {
01348
01349 audio->first_frame = 1;
01350
01351
01352 bzero(audio->mp3_block, sizeof(audio->mp3_block));
01353 bzero(audio->mp3_blc, sizeof(audio->mp3_blc));
01354 mpeg3audio_reset_synths(audio);
01355 }
01356
01357
01358
01359
01360
01361
01362
01363 int mpeg3_layer_check(unsigned char *data)
01364 {
01365 uint32_t head = ((uint32_t)(data[0] << 24)) |
01366 ((uint32_t)(data[1] << 16)) |
01367 ((uint32_t)(data[2] << 8)) |
01368 ((uint32_t)data[3]);
01369
01370 if((head & 0xffe00000) != 0xffe00000) return 1;
01371
01372 if(!((head >> 17) & 3)) return 1;
01373
01374 if(((head >> 12) & 0xf) == 0xf) return 1;
01375
01376 if(!((head >> 12) & 0xf)) return 1;
01377
01378 if(((head >> 10) & 0x3) == 0x3 ) return 1;
01379
01380 if(((head >> 19) & 1) == 1 && ((head >> 17) & 3) == 3 && ((head >> 16) & 1) == 1)
01381 return 1;
01382
01383 if((head & 0xffff0000) == 0xfffe0000) return 1;
01384
01385 if((head & 0xffff0000) == 0xffed0000) return 1;
01386
01387 return 0;
01388 }
01389
01390
01391
01392 int mpeg3_layer_header(mpeg3_layer_t *audio, unsigned char *data)
01393 {
01394 uint32_t header;
01395 int sampling_frequency_code;
01396 int layer;
01397 int lsf;
01398 int mpeg35;
01399 int channels;
01400 int mode;
01401
01402 if(mpeg3_layer_check(data))
01403 {
01404 return 0;
01405 }
01406
01407 header = (data[0] << 24) |
01408 (data[1] << 16) |
01409 (data[2] << 8) |
01410 data[3];
01411 if(header & (1 << 20))
01412 {
01413 lsf = (header & (1 << 19)) ? 0x0 : 0x1;
01414 mpeg35 = 0;
01415 }
01416 else
01417 {
01418 lsf = 1;
01419 mpeg35 = 1;
01420 }
01421
01422 layer = 4 - ((header >> 17) & 3);
01423
01424
01425 if(audio->layer != 0 &&
01426 layer != audio->layer)
01427 {
01428 return 0;
01429 }
01430
01431 if(mpeg35)
01432 sampling_frequency_code = 6 + ((header >> 10) & 0x3);
01433 else
01434 sampling_frequency_code = ((header >> 10) & 0x3) + (lsf * 3);
01435
01436
01437 if(audio->samplerate != 0 &&
01438 sampling_frequency_code != audio->sampling_frequency_code)
01439 {
01440 return 0;
01441 }
01442
01443 mode = ((header >> 6) & 0x3);
01444 channels = (mode == MPG_MD_MONO) ? 1 : 2;
01445
01446
01447
01448
01449
01450
01451
01452
01453
01454
01455 audio->channels = channels;
01456 audio->layer = layer;
01457 audio->lsf = lsf;
01458 audio->mpeg35 = mpeg35;
01459 audio->mode = mode;
01460 audio->sampling_frequency_code = sampling_frequency_code;
01461 audio->samplerate = mpeg3_freqs[audio->sampling_frequency_code];
01462 audio->error_protection = ((header >> 16) & 0x1) ^ 0x1;
01463
01464 audio->bitrate_index = ((header >> 12) & 0xf);
01465 audio->padding = ((header >> 9) & 0x1);
01466 audio->extension = ((header >> 8) & 0x1);
01467 audio->mode_ext = ((header >> 4) & 0x3);
01468 audio->copyright = ((header >> 3) & 0x1);
01469 audio->original = ((header >> 2) & 0x1);
01470 audio->emphasis = header & 0x3;
01471 if(audio->channels > 1)
01472 audio->single = -1;
01473 else
01474 audio->single = 3;
01475
01476 if(!audio->bitrate_index) return 0;
01477 audio->bitrate = 1000 * mpeg3_tabsel_123[audio->lsf][audio->layer - 1][audio->bitrate_index];
01478
01479 audio->prev_framesize = audio->framesize - 4;
01480 switch(audio->layer)
01481 {
01482 case 1:
01483 audio->framesize = (long)mpeg3_tabsel_123[audio->lsf][0][audio->bitrate_index] * 12000;
01484 audio->framesize /= mpeg3_freqs[audio->sampling_frequency_code];
01485 audio->framesize = ((audio->framesize + audio->padding) << 2);
01486 break;
01487 case 2:
01488 audio->framesize = (long)mpeg3_tabsel_123[audio->lsf][1][audio->bitrate_index] * 144000;
01489 audio->framesize /= mpeg3_freqs[audio->sampling_frequency_code];
01490 audio->framesize += audio->padding;
01491 break;
01492 case 3:
01493 if(audio->lsf)
01494 audio->ssize = (audio->channels == 1) ? 9 : 17;
01495 else
01496 audio->ssize = (audio->channels == 1) ? 17 : 32;
01497 if(audio->error_protection)
01498 audio->ssize += 2;
01499 audio->framesize = (long)mpeg3_tabsel_123[audio->lsf][2][audio->bitrate_index] * 144000;
01500 audio->framesize /= mpeg3_freqs[audio->sampling_frequency_code] << (audio->lsf);
01501 audio->framesize = audio->framesize + audio->padding;
01502 break;
01503 default:
01504 return 0;
01505 }
01506
01507
01508
01509
01510
01511
01512
01513
01514
01515
01516
01517
01518
01519 if(audio->bitrate < 64000 && audio->layer != 3) return 0;
01520 if(audio->framesize > MAXFRAMESIZE) return 0;
01521
01522
01523 return audio->framesize;
01524 }
01525
01526
01527
01528
01529
01530
01531
01532
01533 mpeg3_layer_t* mpeg3_new_layer()
01534 {
01535 mpeg3_layer_t *result = calloc(1, sizeof(mpeg3_layer_t));
01536 result->bsbuf = result->bsspace[1];
01537 result->bo = 1;
01538 result->channels = -1;
01539 result->stream = mpeg3bits_new_stream(0, 0);
01540 mpeg3_new_decode_tables(result);
01541 return result;
01542 }
01543
01544
01545
01546 void mpeg3_delete_layer(mpeg3_layer_t *audio)
01547 {
01548 mpeg3bits_delete_stream(audio->stream);
01549 free(audio);
01550 }
01551
01552
01553