DECODE.C
上传用户:dshsh2009
上传日期:2007-01-07
资源大小:155k
文件大小:56k
源码类别:

mpeg/mp3

开发平台:

Unix_Linux

  1. /**********************************************************************
  2. Copyright (c) 1991 MPEG/audio software simulation group, All Rights Reserved
  3. decode.c
  4. **********************************************************************/
  5. /**********************************************************************
  6.  * MPEG/audio coding/decoding software, work in progress              *
  7.  *   NOT for public distribution until verified and approved by the   *
  8.  *   MPEG/audio committee.  For further information, please contact   *
  9.  *   Davis Pan, 708-538-5671, e-mail: pan@ukraine.corp.mot.com        *
  10.  *                                                                    *
  11.  * VERSION 4.3                                                        *
  12.  *   changes made since last update:                                  *
  13.  *   date   programmers         comment                               *
  14.  * 2/25/91  Douglas Wong,       start of version 1.0 records          *
  15.  *          Davis Pan                                                 *
  16.  * 3/06/91  Douglas Wong        rename: setup.h to dedef.h            *
  17.  *                                      dfilter to defilter           *
  18.  *                                      dwindow to dewindow           *
  19.  *                              integrated "quantizer", "scalefactor" *
  20.  *                              combined window_samples routine into  *
  21.  *                              filter samples                        *
  22.  * 3/31/91  Bill Aspromonte     replaced read_filter by               *
  23.  *                              create_syn_filter and introduced a    *
  24.  *                              new Sub-Band Synthesis routine called *
  25.  *                              SubBandSynthesis()                    *
  26.  * 5/10/91  Vish (PRISM)        Ported to Macintosh and Unix.         *
  27.  *                              Changed "out_fifo()" so that last     *
  28.  *                              unfilled block is also written out.   *
  29.  *                              "create_syn_filter()" was modified so *
  30.  *                              that calculation precision is same as *
  31.  *                              in specification tables.              *
  32.  *                              Changed "decode_scale()" to reflect   *
  33.  *                              specifications.                       *
  34.  *                              Removed all routines used by          *
  35.  *                              "synchronize_buffer()".  This is now  *
  36.  *                              replaced by "seek_sync()".            *
  37.  *                              Incorporated Jean-Georges Fritsch's   *
  38.  *                              "bitstream.c" package.                *
  39.  *                              Deleted "reconstruct_sample()".       *
  40.  * 27jun91  dpwe (Aware)        Passed outFile and &sampFrames as     *
  41.  *                              args to out_fifo() - were global.     *
  42.  *                              Moved "alloc_*" reader to common.c.   *
  43.  *                              alloc, sblimit, stereo passed via new *
  44.  *                              'frame_params struct (were globals).  *
  45.  *                              Added JOINT STEREO decoding, lyrs I&II*
  46.  *                              Affects: decode_bitalloc,buffer_samps *
  47.  *                              Plus a few other cleanups.            *
  48.  * 6/10/91   Earle Jennings     conditional expansion added in        *
  49.  *                              II_dequantize_sample to handle range  *
  50.  *                              problems in MSDOS version             *
  51.  * 8/8/91    Jens Spille        Change for MS-C6.00                   *
  52.  *10/1/91    S.I. Sudharsanan,  Ported to IBM AIX platform.           *
  53.  *           Don H. Lee,                                              *
  54.  *           Peter W. Farrett                                         *
  55.  *10/3/91    Don H. Lee         implemented CRC-16 error protection   *
  56.  *                              newly introduced functions are        *
  57.  *                              buffer_CRC and recover_CRC_error.     *
  58.  * 2/11/92  W. Joseph Carter    Ported new code to Macintosh.  Most   *
  59.  *                              important fixes involved changing     *
  60.  *                              16-bit ints to long or unsigned in    *
  61.  *                              bit alloc routines for quant of 65535 *
  62.  *                              and passing proper function args.     *
  63.  *                              Removed "Other Joint Stereo" option   *
  64.  *                              and made bitrate be total channel     *
  65.  *                              bitrate, irrespective of the mode.    *
  66.  *                              Fixed many small bugs & reorganized.  *
  67.  * 7/27/92  Juan Pineda         Bug fix in SubBandSynthesis()         *
  68.  *--------------------------------------------------------------------*
  69.  * 6/14/92  Juan Pineda         Layer III decoding routines added.    *
  70.  *          Amit Gulati         Follows CD 3-11172 rev2.  Contains    *
  71.  *                              hacks deal with evolving available    *
  72.  *                              layerIII bitstreams.  Some (minor)    *
  73.  *                              modification of prior LI&II code.     *
  74.  * 10/25/92 Amit Gulati         Updated layerIII routines. Added code *
  75.  *                              for subblock_gain, switched block     *
  76.  *                              modes, stereo pre-processing.         *
  77.  *                              Corrected sign bits for huffman       *
  78.  *                              decoding of quadruples region and     *
  79.  *                              adjusted gain factor in III_dequant.  *
  80.  * 11/21/92 Amit Gulati         Several layerIII bugs fixed.          *
  81.  * 12/15/92 Amit Gulati         Corrected reordering (indexing)       *
  82.  *          Stan Searing        within IMDCT routine.                 *
  83.  *  8/24/93 Masahiro Iwadare    Included IS modification in Layer III.*
  84.  *                              Changed for 1 pass decoding.          *
  85.  *  9/07/93 Toshiyuki Ishino    Integrated Layer III with Ver 3.9.    *
  86.  *--------------------------------------------------------------------*
  87.  * 11/20/93 Masahiro Iwadare    Integrated Layer III with Ver 4.0.    *
  88.  *--------------------------------------------------------------------*
  89.  *  7/14/94 Juergen Koller      Bug fixes in Layer III code           *
  90.  *--------------------------------------------------------------------*
  91.  * 08/11/94 IIS                 Bug fixes in Layer III code           *
  92.  *--------------------------------------------------------------------*
  93.  * 9/20/94  Davis Pan           Modification to avoid premature       *
  94.  *                              synchword detection                   *
  95.  *--------------------------------------------------------------------*
  96.  * 11/09/94 Jon Rowlands        Merged premature synchword detection  *
  97.  *                              fix into layer III code version       *
  98.  **********************************************************************/
  99. #include        "common.h"
  100. #include        "decoder.h"
  101. #include        "huffman.h"
  102. /***************************************************************
  103. /*
  104. /* This module contains the core of the decoder ie all the
  105. /* computational routines. (Layer I and II only)
  106. /* Functions are common to both layer unless
  107. /* otherwise specified.
  108. /*
  109. /***************************************************************/
  110. /*****************************************************************
  111. /*
  112. /* The following routines decode the system information
  113. /*
  114. /****************************************************************/
  115. /************ Layer I, Layer II & Layer III ******************/
  116. void decode_info(bs, fr_ps)
  117. Bit_stream_struc *bs;
  118. frame_params *fr_ps;
  119. {
  120.     unsigned int bits;
  121.     layer *hdr = fr_ps->header;
  122.     while( (bits=getbits(bs,8)) == 255); /*discard leading 0xFF's of syncword*/
  123.     hdr->bitrate_index = bits & 0xF;
  124.     bits = bits >> 4;
  125.     switch(bits) {
  126.       case 0:
  127.          hdr->version = 0;
  128.          hdr->lay = 4;
  129.          hdr->error_protection = 1;
  130.          break;
  131.       case 1:
  132.          hdr->version = 0;
  133.          hdr->lay = 4;
  134.          hdr->error_protection = 0;
  135.          break;
  136.       case 2:
  137.          hdr->version = 0;
  138.          hdr->lay = 3;
  139.          hdr->error_protection = 1;
  140.          break;
  141.       case 3:
  142.          hdr->version = 0;
  143.          hdr->lay = 3;
  144.          hdr->error_protection = 0;
  145.          break;
  146.       case 4:
  147.          hdr->version = 0;
  148.          hdr->lay = 2;
  149.          hdr->error_protection = 1;
  150.          break;
  151.       case 5:
  152.          hdr->version = 0;
  153.          hdr->lay = 2;
  154.          hdr->error_protection = 0;
  155.          break;
  156.       case 6:
  157.          hdr->version = 0;
  158.          hdr->lay = 1;
  159.          hdr->error_protection = 1;
  160.          break;
  161.       case 7:
  162.          hdr->version = 0;
  163.          hdr->lay = 1;
  164.          hdr->error_protection = 0;
  165.          break;
  166.       case 8:
  167.          hdr->version = 1;
  168.          hdr->lay = 4;
  169.          hdr->error_protection = 1;
  170.          break;
  171.       case 9:
  172.          hdr->version = 1;
  173.          hdr->lay = 4;
  174.          hdr->error_protection = 0;
  175.          break;
  176.       case 10:
  177.          hdr->version = 1;
  178.          hdr->lay = 3;
  179.          hdr->error_protection = 1;
  180.          break;
  181.       case 11:
  182.          hdr->version = 1;
  183.          hdr->lay = 3;
  184.          hdr->error_protection = 0;
  185.          break;
  186.       case 12:
  187.          hdr->version = 1;
  188.          hdr->lay = 2;
  189.          hdr->error_protection = 1;
  190.          break;
  191.       case 13:
  192.          hdr->version = 1;
  193.          hdr->lay = 2;
  194.          hdr->error_protection = 0;
  195.          break;
  196.       case 14:
  197.          hdr->version = 1;
  198.          hdr->lay = 1;
  199.          hdr->error_protection = 1;
  200.          break;
  201.       default:
  202.          hdr->version = 1;
  203.          hdr->lay = 1;
  204.          hdr->error_protection = 0;
  205.     }
  206.     hdr->sampling_frequency = getbits(bs,2);
  207.     hdr->padding = get1bit(bs);
  208.     hdr->extension = get1bit(bs);
  209.     hdr->mode = getbits(bs,2);
  210.     hdr->mode_ext = getbits(bs,2);
  211.     hdr->copyright = get1bit(bs);
  212.     hdr->original = get1bit(bs);
  213.     hdr->emphasis = getbits(bs,2);
  214. }
  215. /*******************************************************************
  216. /*
  217. /* The bit allocation information is decoded. Layer I
  218. /* has 4 bit per subband whereas Layer II is Ws and bit rate
  219. /* dependent.
  220. /*
  221. /********************************************************************/
  222. /**************************** Layer II *************/
  223. void II_decode_bitalloc(bs, bit_alloc, fr_ps)
  224. Bit_stream_struc *bs;
  225. unsigned int bit_alloc[2][SBLIMIT];
  226. frame_params *fr_ps;
  227. {
  228.     int i,j;
  229.     int stereo = fr_ps->stereo;
  230.     int sblimit = fr_ps->sblimit;
  231.     int jsbound = fr_ps->jsbound;
  232.     al_table *alloc = fr_ps->alloc;
  233.     for (i=0;i<jsbound;i++) for (j=0;j<stereo;j++)
  234.         bit_alloc[j][i] = (char) getbits(bs,(*alloc)[i][0].bits);
  235.     for (i=jsbound;i<sblimit;i++) /* expand to 2 channels */
  236.         bit_alloc[0][i] = bit_alloc[1][i] =
  237.             (char) getbits(bs,(*alloc)[i][0].bits);
  238.     for (i=sblimit;i<SBLIMIT;i++) for (j=0;j<stereo;j++)
  239.         bit_alloc[j][i] = 0;
  240. }
  241. /**************************** Layer I *************/
  242. void I_decode_bitalloc(bs, bit_alloc, fr_ps)
  243. Bit_stream_struc *bs;
  244. unsigned int bit_alloc[2][SBLIMIT];
  245. frame_params *fr_ps;
  246. {
  247.     int i,j;
  248.     int stereo  = fr_ps->stereo;
  249.     int sblimit = fr_ps->sblimit;
  250.     int jsbound = fr_ps->jsbound;
  251.     int b;
  252.     for (i=0;i<jsbound;i++) for (j=0;j<stereo;j++)
  253.         bit_alloc[j][i] = getbits(bs,4);
  254.     for (i=jsbound;i<SBLIMIT;i++) {
  255.         b = getbits(bs,4);
  256.         for (j=0;j<stereo;j++)
  257.             bit_alloc[j][i] = b;
  258.     }
  259. }
  260. /*****************************************************************
  261. /*
  262. /* The following two functions implement the layer I and II
  263. /* format of scale factor extraction. Layer I involves reading
  264. /* 6 bit per subband as scale factor. Layer II requires reading
  265. /* first the scfsi which in turn indicate the number of scale factors
  266. /* transmitted.
  267. /*    Layer I : I_decode_scale
  268. /*   Layer II : II_decode_scale
  269. /*
  270. /****************************************************************/
  271. /************************** Layer I stuff ************************/
  272. void I_decode_scale(bs, bit_alloc, scale_index, fr_ps)
  273. Bit_stream_struc *bs;
  274. unsigned int bit_alloc[2][SBLIMIT], scale_index[2][3][SBLIMIT];
  275. frame_params *fr_ps;
  276. {
  277.     int i,j;
  278.     int stereo = fr_ps->stereo;
  279.     int sblimit = fr_ps->sblimit;
  280.     for (i=0;i<SBLIMIT;i++) for (j=0;j<stereo;j++)
  281.         if (!bit_alloc[j][i])
  282.             scale_index[j][0][i] = SCALE_RANGE-1;
  283.         else                    /* 6 bit per scale factor */
  284.             scale_index[j][0][i] =  getbits(bs,6);
  285. }
  286. /*************************** Layer II stuff ***************************/
  287. void II_decode_scale(bs,scfsi, bit_alloc,scale_index, fr_ps)
  288. Bit_stream_struc *bs;
  289. unsigned int scfsi[2][SBLIMIT], bit_alloc[2][SBLIMIT],
  290.              scale_index[2][3][SBLIMIT];
  291. frame_params *fr_ps;
  292. {
  293.     int i,j;
  294.     int stereo = fr_ps->stereo;
  295.     int sblimit = fr_ps->sblimit;
  296.    
  297.     for (i=0;i<sblimit;i++) for (j=0;j<stereo;j++) /* 2 bit scfsi */
  298.         if (bit_alloc[j][i]) scfsi[j][i] = (char) getbits(bs,2);
  299.     for (i=sblimit;i<SBLIMIT;i++) for (j=0;j<stereo;j++)   
  300.         scfsi[j][i] = 0;
  301.     for (i=0;i<sblimit;i++) for (j=0;j<stereo;j++) {
  302.         if (bit_alloc[j][i])   
  303.             switch (scfsi[j][i]) {
  304.                 /* all three scale factors transmitted */
  305.              case 0 : scale_index[j][0][i] = getbits(bs,6);
  306.                 scale_index[j][1][i] = getbits(bs,6);
  307.                 scale_index[j][2][i] = getbits(bs,6);
  308.                 break;
  309.                 /* scale factor 1 & 3 transmitted */
  310.              case 1 : scale_index[j][0][i] =
  311.                  scale_index[j][1][i] = getbits(bs,6);
  312.                 scale_index[j][2][i] = getbits(bs,6);
  313.                 break;
  314.                 /* scale factor 1 & 2 transmitted */
  315.              case 3 : scale_index[j][0][i] = getbits(bs,6);
  316.                 scale_index[j][1][i] =
  317.                     scale_index[j][2][i] =  getbits(bs,6);
  318.                 break;
  319.                 /* only one scale factor transmitted */
  320.              case 2 : scale_index[j][0][i] =
  321.                  scale_index[j][1][i] =
  322.                      scale_index[j][2][i] = getbits(bs,6);
  323.                 break;
  324.                 default : break;
  325.             }
  326.         else {
  327.             scale_index[j][0][i] = scale_index[j][1][i] =
  328.                 scale_index[j][2][i] = SCALE_RANGE-1;
  329.         }
  330.     }
  331.     for (i=sblimit;i<SBLIMIT;i++) for (j=0;j<stereo;j++) {
  332.         scale_index[j][0][i] = scale_index[j][1][i] =
  333.             scale_index[j][2][i] = SCALE_RANGE-1;
  334.     }
  335. }
  336. /**************************************************************
  337. /*
  338. /*   The following two routines take care of reading the
  339. /* compressed sample from the bit stream for both layer 1 and
  340. /* layer 2. For layer 1, read the number of bits as indicated
  341. /* by the bit_alloc information. For layer 2, if grouping is
  342. /* indicated for a particular subband, then the sample size has
  343. /* to be read from the bits_group and the merged samples has
  344. /* to be decompose into the three distinct samples. Otherwise,
  345. /* it is the same for as layer one.
  346. /*
  347. /**************************************************************/
  348. /******************************* Layer I stuff ******************/
  349. void I_buffer_sample(bs, sample, bit_alloc, fr_ps)
  350. unsigned int FAR sample[2][3][SBLIMIT];
  351. unsigned int bit_alloc[2][SBLIMIT];
  352. Bit_stream_struc *bs;
  353. frame_params *fr_ps;
  354. {
  355.     int i,j,k;
  356.     int stereo = fr_ps->stereo;
  357.     int sblimit = fr_ps->sblimit;
  358.     int jsbound = fr_ps->jsbound;
  359.     unsigned int s;
  360.     for (i=0;i<jsbound;i++) for (j=0;j<stereo;j++)
  361.         if ( (k = bit_alloc[j][i]) == 0)
  362.             sample[j][0][i] = 0;
  363.         else 
  364.             sample[j][0][i] = (unsigned int) getbits(bs,k+1);
  365.     for (i=jsbound;i<SBLIMIT;i++) {
  366.         if ( (k = bit_alloc[0][i]) == 0)
  367.             s = 0;
  368.         else 
  369.             s = (unsigned int)getbits(bs,k+1);
  370.         for (j=0;j<stereo;j++)
  371.             sample[j][0][i]    = s;
  372.     }
  373. }
  374. /*************************** Layer II stuff ************************/
  375. void II_buffer_sample(bs,sample,bit_alloc,fr_ps)
  376. unsigned int FAR sample[2][3][SBLIMIT];
  377. unsigned int bit_alloc[2][SBLIMIT];
  378. Bit_stream_struc *bs;
  379. frame_params *fr_ps;
  380. {
  381.     int i,j,k,m;
  382.     int stereo = fr_ps->stereo;
  383.     int sblimit = fr_ps->sblimit;
  384.     int jsbound = fr_ps->jsbound;
  385.     al_table *alloc = fr_ps->alloc;
  386.     for (i=0;i<sblimit;i++) for (j=0;j<((i<jsbound)?stereo:1);j++) {
  387.         if (bit_alloc[j][i]) {
  388.             /* check for grouping in subband */
  389.             if ((*alloc)[i][bit_alloc[j][i]].group==3)
  390.                 for (m=0;m<3;m++) {
  391.                     k = (*alloc)[i][bit_alloc[j][i]].bits;
  392.                     sample[j][m][i] = (unsigned int) getbits(bs,k);
  393.                 }         
  394.             else {              /* bit_alloc = 3, 5, 9 */
  395.                 unsigned int nlevels, c=0;
  396.                 nlevels = (*alloc)[i][bit_alloc[j][i]].steps;
  397.                 k=(*alloc)[i][bit_alloc[j][i]].bits;
  398.                 c = (unsigned int) getbits(bs, k);
  399.                 for (k=0;k<3;k++) {
  400.                     sample[j][k][i] = c % nlevels;
  401.                     c /= nlevels;
  402.                 }
  403.             }
  404.         }
  405.         else {                  /* for no sample transmitted */
  406.             for (k=0;k<3;k++) sample[j][k][i] = 0;
  407.         }
  408.         if(stereo == 2 && i>= jsbound) /* joint stereo : copy L to R */
  409.             for (k=0;k<3;k++) sample[1][k][i] = sample[0][k][i];
  410.     }
  411.     for (i=sblimit;i<SBLIMIT;i++) for (j=0;j<stereo;j++) for (k=0;k<3;k++)
  412.         sample[j][k][i] = 0;
  413. }      
  414. /**************************************************************
  415. /*
  416. /*   Restore the compressed sample to a factional number.
  417. /*   first complement the MSB of the sample
  418. /*    for layer I :
  419. /*    Use s = (s' + 2^(-nb+1) ) * 2^nb / (2^nb-1)
  420. /*   for Layer II :
  421. /*   Use the formula s = s' * c + d
  422. /*
  423. /**************************************************************/
  424. static double c[17] = { 1.33333333333, 1.60000000000, 1.14285714286,
  425.                         1.77777777777, 1.06666666666, 1.03225806452,
  426.                         1.01587301587, 1.00787401575, 1.00392156863,
  427.                         1.00195694716, 1.00097751711, 1.00048851979,
  428.                         1.00024420024, 1.00012208522, 1.00006103888,
  429.                         1.00003051851, 1.00001525902 };
  430. static double d[17] = { 0.500000000, 0.500000000, 0.250000000, 0.500000000,
  431.                         0.125000000, 0.062500000, 0.031250000, 0.015625000,
  432.                         0.007812500, 0.003906250, 0.001953125, 0.0009765625,
  433.                         0.00048828125, 0.00024414063, 0.00012207031,
  434.                         0.00006103516, 0.00003051758 };
  435. /************************** Layer II stuff ************************/
  436. void II_dequantize_sample(sample, bit_alloc, fraction, fr_ps)
  437. unsigned int FAR sample[2][3][SBLIMIT];
  438. unsigned int bit_alloc[2][SBLIMIT];
  439. double FAR fraction[2][3][SBLIMIT];
  440. frame_params *fr_ps;
  441. {
  442.     int i, j, k, x;
  443.     int stereo = fr_ps->stereo;
  444.     int sblimit = fr_ps->sblimit;
  445.     al_table *alloc = fr_ps->alloc;
  446.     for (i=0;i<sblimit;i++)  for (j=0;j<3;j++) for (k=0;k<stereo;k++)
  447.         if (bit_alloc[k][i]) {
  448.             /* locate MSB in the sample */
  449.             x = 0;
  450. #ifndef MS_DOS
  451.             while ((1L<<x) < (*alloc)[i][bit_alloc[k][i]].steps) x++;
  452. #else
  453.             /* microsoft C thinks an int is a short */
  454.             while (( (unsigned long) (1L<<(long)x) <
  455.                     (unsigned long)( (*alloc)[i][bit_alloc[k][i]].steps)
  456.                     ) && ( x < 16) ) x++;
  457. #endif
  458.             /* MSB inversion */
  459.             if (((sample[k][j][i] >> x-1) & 1) == 1)
  460.                 fraction[k][j][i] = 0.0;
  461.             else  fraction[k][j][i] = -1.0;
  462.             /* Form a 2's complement sample */
  463.             fraction[k][j][i] += (double) (sample[k][j][i] & ((1<<x-1)-1)) /
  464.                 (double) (1L<<x-1);
  465.             /* Dequantize the sample */
  466.             fraction[k][j][i] += d[(*alloc)[i][bit_alloc[k][i]].quant];
  467.             fraction[k][j][i] *= c[(*alloc)[i][bit_alloc[k][i]].quant];
  468.         }
  469.         else fraction[k][j][i] = 0.0;   
  470.    
  471.     for (i=sblimit;i<SBLIMIT;i++) for (j=0;j<3;j++) for(k=0;k<stereo;k++)
  472.         fraction[k][j][i] = 0.0;
  473. }
  474. /***************************** Layer I stuff ***********************/
  475. void I_dequantize_sample(sample, fraction, bit_alloc, fr_ps)
  476. unsigned int FAR sample[2][3][SBLIMIT];
  477. unsigned int bit_alloc[2][SBLIMIT];
  478. double FAR fraction[2][3][SBLIMIT];
  479. frame_params *fr_ps;
  480. {
  481.     int i, nb, k;
  482.     int stereo = fr_ps->stereo;
  483.     int sblimit = fr_ps->sblimit;
  484.     for (i=0;i<SBLIMIT;i++)
  485.         for (k=0;k<stereo;k++)
  486.             if (bit_alloc[k][i]) {
  487.                 nb = bit_alloc[k][i] + 1;
  488.                 if (((sample[k][0][i] >> nb-1) & 1) == 1) fraction[k][0][i] = 0.0;
  489.                 else fraction[k][0][i] = -1.0;
  490.                 fraction[k][0][i] += (double) (sample[k][0][i] & ((1<<nb-1)-1)) /
  491.                     (double) (1L<<nb-1);
  492.                 fraction[k][0][i] =
  493.                     (double) (fraction[k][0][i]+1.0/(double)(1L<<nb-1)) *
  494.                         (double) (1L<<nb) / (double) ((1L<<nb)-1);
  495.             }
  496.             else fraction[k][0][i] = 0.0;
  497. }
  498. /************************************************************
  499. /*
  500. /*   Restore the original value of the sample ie multiply
  501. /*    the fraction value by its scalefactor.
  502. /*
  503. /************************************************************/
  504. /************************* Layer II Stuff **********************/
  505. void II_denormalize_sample(fraction, scale_index,fr_ps,x)
  506. double FAR fraction[2][3][SBLIMIT];
  507. unsigned int scale_index[2][3][SBLIMIT];
  508. frame_params *fr_ps;
  509. int x;
  510. {
  511.     int i,j,k;
  512.     int stereo = fr_ps->stereo;
  513.     int sblimit = fr_ps->sblimit;
  514.     for (i=0;i<sblimit;i++) for (j=0;j<stereo;j++) {
  515.         fraction[j][0][i] *= multiple[scale_index[j][x][i]];
  516.         fraction[j][1][i] *= multiple[scale_index[j][x][i]];
  517.         fraction[j][2][i] *= multiple[scale_index[j][x][i]];
  518.     }
  519. }
  520. /**************************** Layer I stuff ******************************/
  521. void I_denormalize_sample(fraction,scale_index,fr_ps)
  522. double FAR fraction[2][3][SBLIMIT];
  523. unsigned int scale_index[2][3][SBLIMIT];
  524. frame_params *fr_ps;
  525. {
  526.     int i,j,k;
  527.     int stereo = fr_ps->stereo;
  528.     int sblimit = fr_ps->sblimit;
  529.     for (i=0;i<SBLIMIT;i++) for (j=0;j<stereo;j++)
  530.         fraction[j][0][i] *= multiple[scale_index[j][0][i]];
  531. }
  532. /*****************************************************************
  533. /*
  534. /* The following are the subband synthesis routines. They apply
  535. /* to both layer I and layer II stereo or mono. The user has to
  536. /* decide what parameters are to be passed to the routines.
  537. /*
  538. /***************************************************************/
  539. /*************************************************************
  540. /*
  541. /*   Pass the subband sample through the synthesis window
  542. /*
  543. /**************************************************************/
  544. /* create in synthesis filter */
  545. void create_syn_filter(filter)
  546. double FAR filter[64][SBLIMIT];
  547. {
  548.     register int i,k;
  549.     for (i=0; i<64; i++)
  550.         for (k=0; k<32; k++) {
  551.             if ((filter[i][k] = 1e9*cos((double)((PI64*i+PI4)*(2*k+1)))) >= 0)
  552.                 modf(filter[i][k]+0.5, &filter[i][k]);
  553.             else
  554.                 modf(filter[i][k]-0.5, &filter[i][k]);
  555.             filter[i][k] *= 1e-9;
  556.         }
  557. }
  558. /***************************************************************
  559. /*
  560. /*   Window the restored sample
  561. /*
  562. /***************************************************************/
  563. /* read in synthesis window */
  564. void read_syn_window(window)
  565. double FAR window[HAN_SIZE];
  566. {
  567.     int i,j[4];
  568.     FILE *fp;
  569.     double f[4];
  570.     char t[150];
  571.     if (!(fp = OpenTableFile("dewindow") )) {
  572.         printf("Please check synthesis window table 'dewindow'n");
  573.         exit(1);
  574.     }
  575.     for (i=0;i<512;i+=4) {
  576.         fgets(t, 150, fp);
  577.         sscanf(t,"D[%d] = %lf D[%d] = %lf D[%d] = %lf D[%d] = %lfn",
  578.                j, f,j+1,f+1,j+2,f+2,j+3,f+3);
  579.         if (i==j[0]) {
  580.             window[i] = f[0];
  581.             window[i+1] = f[1];
  582.             window[i+2] = f[2];
  583.             window[i+3] = f[3];
  584.         }
  585.         else {
  586.             printf("Check index in synthesis window tablen");
  587.             exit(1);
  588.         }
  589.         fgets(t,150,fp);
  590.     }
  591.     fclose(fp);
  592. }
  593. int SubBandSynthesis (bandPtr, channel, samples)
  594. double *bandPtr;
  595. int channel;
  596. short *samples;
  597. {
  598.     register int i,j,k;
  599.     register double *bufOffsetPtr, sum;
  600.     static int init = 1;
  601.     typedef double NN[64][32];
  602.     static NN FAR *filter;
  603.     typedef double BB[2][2*HAN_SIZE];
  604.     static BB FAR *buf;
  605.     static int bufOffset[2] = {64,64};
  606.     static double FAR *window;
  607.     int clip = 0;               /* count & return how many samples clipped */
  608.     if (init) {
  609.         buf = (BB FAR *) mem_alloc(sizeof(BB),"BB");
  610.         filter = (NN FAR *) mem_alloc(sizeof(NN), "NN");
  611.         create_syn_filter(*filter);
  612.         window = (double FAR *) mem_alloc(sizeof(double) * HAN_SIZE, "WIN");
  613.         read_syn_window(window);
  614.         init = 0;
  615.     }
  616. /*    if (channel == 0) */
  617.     bufOffset[channel] = (bufOffset[channel] - 64) & 0x3ff;
  618.     bufOffsetPtr = &((*buf)[channel][bufOffset[channel]]);
  619.     for (i=0; i<64; i++) {
  620.         sum = 0;
  621.         for (k=0; k<32; k++)
  622.             sum += bandPtr[k] * (*filter)[i][k];
  623.         bufOffsetPtr[i] = sum;
  624.     }
  625.     /*  S(i,j) = D(j+32i) * U(j+32i+((i+1)>>1)*64)  */
  626.     /*  samples(i,j) = MWindow(j+32i) * bufPtr(j+32i+((i+1)>>1)*64)  */
  627.     for (j=0; j<32; j++) {
  628.         sum = 0;
  629.         for (i=0; i<16; i++) {
  630.             k = j + (i<<5);
  631.             sum += window[k] * (*buf) [channel] [( (k + ( ((i+1)>>1) <<6) ) +
  632.                                                   bufOffset[channel]) & 0x3ff];
  633.         }
  634. /*   {long foo = (sum > 0) ? sum * SCALE + 0.5 : sum * SCALE - 0.5; */
  635.      {long foo = sum * SCALE;
  636.      if (foo >= (long) SCALE)      {samples[j] = SCALE-1; ++clip;}
  637.      else if (foo < (long) -SCALE) {samples[j] = -SCALE;  ++clip;}
  638.      else                           samples[j] = foo;
  639.  }
  640.     }
  641.     return(clip);
  642. }
  643. void out_fifo(pcm_sample, num, fr_ps, done, outFile, psampFrames)
  644. short FAR pcm_sample[2][SSLIMIT][SBLIMIT];
  645. int num;
  646. frame_params *fr_ps;
  647. int done;
  648. FILE *outFile;
  649. unsigned long *psampFrames;
  650. {
  651.     int i,j,l;
  652.     int stereo = fr_ps->stereo;
  653.     int sblimit = fr_ps->sblimit;
  654.     static short int outsamp[1600];
  655.     static long k = 0;
  656.     if (!done)
  657.         for (i=0;i<num;i++) for (j=0;j<SBLIMIT;j++) {
  658.             (*psampFrames)++;
  659.             for (l=0;l<stereo;l++) {
  660.                 if (!(k%1600) && k) {
  661.                     fwrite(outsamp,2,1600,outFile);
  662.                     k = 0;
  663.                 }
  664.                 outsamp[k++] = pcm_sample[l][i][j];
  665.             }
  666.         }
  667.     else {
  668.         fwrite(outsamp,2,(int)k,outFile);
  669.         k = 0;
  670.     }
  671. }
  672. void  buffer_CRC(bs, old_crc)
  673. Bit_stream_struc  *bs;
  674. unsigned int  *old_crc;
  675. {
  676.     *old_crc = getbits(bs, 16);
  677. }
  678. void  recover_CRC_error(pcm_sample, error_count, fr_ps, outFile, psampFrames)
  679. short FAR pcm_sample[2][SSLIMIT][SBLIMIT];
  680. int error_count;
  681. frame_params *fr_ps;
  682. FILE *outFile;
  683. unsigned long *psampFrames;
  684. {
  685.     int  stereo = fr_ps->stereo;
  686.     int  num, done, i;
  687.     int  samplesPerFrame, samplesPerSlot;
  688.     layer  *hdr = fr_ps->header;
  689.     long  offset;
  690.     short  *temp;
  691.     num = 3;
  692.     if (hdr->lay == 1) num = 1;
  693.     samplesPerSlot = SBLIMIT * num * stereo;
  694.     samplesPerFrame = samplesPerSlot * 32;
  695.     if (error_count == 1) {     /* replicate previous error_free frame */
  696.         done = 1;
  697.         /* flush out fifo */
  698.         out_fifo(pcm_sample, num, fr_ps, done, outFile, psampFrames);
  699.         /* go back to the beginning of the previous frame */
  700.         offset = sizeof(short int) * samplesPerFrame;
  701.         fseek(outFile, -offset, SEEK_CUR);
  702.         done = 0;
  703.         for (i = 0; i < SCALE_BLOCK; i++) {
  704.             fread(pcm_sample, 2, samplesPerSlot, outFile);
  705.             out_fifo(pcm_sample, num, fr_ps, done, outFile, psampFrames);
  706.         }
  707.     }
  708.     else{                       /* mute the frame */
  709.         temp = (short*) pcm_sample;
  710.         done = 0;
  711.         for (i = 0; i < 2*3*SBLIMIT; i++)
  712.             *temp++ = MUTE;     /* MUTE value is in decoder.h */
  713.         for (i = 0; i < SCALE_BLOCK; i++)
  714.             out_fifo(pcm_sample, num, fr_ps, done, outFile, psampFrames);
  715.     }
  716. }
  717. /************************* Layer III routines **********************/
  718. void III_get_side_info(bs, si, fr_ps)
  719. Bit_stream_struc *bs;
  720. III_side_info_t *si;
  721. frame_params *fr_ps;
  722. {
  723.    int ch, gr, i;
  724.    int stereo = fr_ps->stereo;
  725.    
  726.    si->main_data_begin = getbits(bs, 9);
  727.    if (stereo == 1)
  728.       si->private_bits = getbits(bs,5);
  729.       else si->private_bits = getbits(bs,3);
  730.    for (ch=0; ch<stereo; ch++)
  731.       for (i=0; i<4; i++)
  732.       si->ch[ch].scfsi[i] = get1bit(bs);
  733.    for (gr=0; gr<2; gr++) {
  734.       for (ch=0; ch<stereo; ch++) {
  735.          si->ch[ch].gr[gr].part2_3_length = getbits(bs, 12);
  736.          si->ch[ch].gr[gr].big_values = getbits(bs, 9);
  737.          si->ch[ch].gr[gr].global_gain = getbits(bs, 8);
  738.          si->ch[ch].gr[gr].scalefac_compress = getbits(bs, 4);
  739.          si->ch[ch].gr[gr].window_switching_flag = get1bit(bs);
  740.          if (si->ch[ch].gr[gr].window_switching_flag) {
  741.             si->ch[ch].gr[gr].block_type = getbits(bs, 2);
  742.             si->ch[ch].gr[gr].mixed_block_flag = get1bit(bs);
  743.             for (i=0; i<2; i++)
  744.                si->ch[ch].gr[gr].table_select[i] = getbits(bs, 5);
  745.             for (i=0; i<3; i++)
  746.                si->ch[ch].gr[gr].subblock_gain[i] = getbits(bs, 3);
  747.                
  748.             /* Set region_count parameters since they are implicit in this case. */
  749.             
  750.             if (si->ch[ch].gr[gr].block_type == 0) {
  751.                printf("Side info bad: block_type == 0 in split block.n");
  752.                exit(0);
  753.                }
  754.             else if (si->ch[ch].gr[gr].block_type == 2
  755.                      && si->ch[ch].gr[gr].mixed_block_flag == 0)
  756.                si->ch[ch].gr[gr].region0_count = 8; /* MI 9; */
  757.             else si->ch[ch].gr[gr].region0_count = 7; /* MI 8; */
  758.             si->ch[ch].gr[gr].region1_count = 20 -
  759.       si->ch[ch].gr[gr].region0_count;
  760.             }
  761.          else {
  762.             for (i=0; i<3; i++)
  763.                si->ch[ch].gr[gr].table_select[i] = getbits(bs, 5);
  764.             si->ch[ch].gr[gr].region0_count = getbits(bs, 4);
  765.             si->ch[ch].gr[gr].region1_count = getbits(bs, 3);
  766.             si->ch[ch].gr[gr].block_type = 0;
  767.             }      
  768.          si->ch[ch].gr[gr].preflag = get1bit(bs);
  769.          si->ch[ch].gr[gr].scalefac_scale = get1bit(bs);
  770.          si->ch[ch].gr[gr].count1table_select = get1bit(bs);
  771.          }
  772.       }
  773. }
  774. void III_put_side_info(bs, si, fr_ps)
  775. frame_params *fr_ps;
  776. Bit_stream_struc *bs;
  777. III_side_info_t *si;
  778. {
  779.    int ch, gr, i;
  780.    int stereo = fr_ps->stereo;
  781.  
  782.    putbits(bs, si->main_data_begin,9);
  783.    if (stereo == 1)
  784.       putbits(bs, si->private_bits, 5);
  785.       else putbits(bs, si->private_bits, 3);
  786.    for (ch=0; ch<stereo; ch++)
  787.       for (i=0; i<4; i++)
  788.          put1bit(bs, si->ch[ch].scfsi[i]);
  789.    for (gr=0; gr<2; gr++) {
  790.       for (ch=0; ch<stereo; ch++) {
  791.          putbits(bs, si->ch[ch].gr[gr].part2_3_length, 12);
  792.          putbits(bs, si->ch[ch].gr[gr].big_values, 9);
  793.          putbits(bs, si->ch[ch].gr[gr].global_gain, 8);
  794.          putbits(bs, si->ch[ch].gr[gr].scalefac_compress, 4);
  795.          put1bit(bs, si->ch[ch].gr[gr].window_switching_flag);
  796.          if (si->ch[ch].gr[gr].window_switching_flag) {
  797.             putbits(bs, si->ch[ch].gr[gr].block_type, 2);
  798.             put1bit(bs, si->ch[ch].gr[gr].mixed_block_flag);
  799.             for (i=0; i<2; i++)
  800.                putbits(bs, si->ch[ch].gr[gr].table_select[i], 5);
  801.             for (i=0; i<3; i++)
  802.                putbits(bs, si->ch[ch].gr[gr].subblock_gain[i], 3);
  803.             }
  804.          else {
  805.             for (i=0; i<3; i++)
  806.             putbits(bs, si->ch[ch].gr[gr].table_select[i], 5);
  807.             putbits(bs, si->ch[ch].gr[gr].region0_count, 4);
  808.             putbits(bs, si->ch[ch].gr[gr].region1_count, 3);
  809.             }      
  810.          put1bit(bs, si->ch[ch].gr[gr].preflag);
  811.          put1bit(bs, si->ch[ch].gr[gr].scalefac_scale);
  812.          put1bit(bs, si->ch[ch].gr[gr].count1table_select);
  813.          }
  814.       }
  815. }
  816. struct {
  817.    int l[5];
  818.    int s[3];} sfbtable = {{0, 6, 11, 16, 21},
  819.                           {0, 6, 12}};
  820.                          
  821. int slen[2][16] = {{0, 0, 0, 0, 3, 1, 1, 1, 2, 2, 2, 3, 3, 3, 4, 4},
  822.                    {0, 1, 2, 3, 0, 1, 2, 3, 1, 2, 3, 1, 2, 3, 2, 3}};
  823. struct  {
  824.    int l[23];
  825.    int s[14];} sfBandIndex[3] =   
  826.    {{{0,4,8,12,16,20,24,30,36,44,52,62,74,90,110,134,162,196,238,288,342,418,576},
  827.      {0,4,8,12,16,22,30,40,52,66,84,106,136,192}},
  828.     {{0,4,8,12,16,20,24,30,36,42,50,60,72,88,106,128,156,190,230,276,330,384,576},
  829.      {0,4,8,12,16,22,28,38,50,64,80,100,126,192}},
  830.     {{0,4,8,12,16,20,24,30,36,44,54,66,82,102,126,156,194,240,296,364,448,550,576},
  831.      {0,4,8,12,16,22,30,42,58,78,104,138,180,192}}};
  832. void III_get_scale_factors(scalefac, si, gr, ch, fr_ps)
  833. III_scalefac_t *scalefac;
  834. III_side_info_t *si;
  835. int gr, ch;
  836. frame_params *fr_ps;
  837. {
  838. int sfb, i, window;
  839. struct gr_info_s *gr_info = &(si->ch[ch].gr[gr]);
  840.     if (gr_info->window_switching_flag && (gr_info->block_type == 2)) { 
  841.       if (gr_info->mixed_block_flag) { /* MIXED */ /* NEW - ag 11/25 */
  842.          for (sfb = 0; sfb < 8; sfb++)
  843.             (*scalefac)[ch].l[sfb] = hgetbits( 
  844.                  slen[0][gr_info->scalefac_compress]);
  845.          for (sfb = 3; sfb < 6; sfb++)
  846.             for (window=0; window<3; window++)
  847.                (*scalefac)[ch].s[window][sfb] = hgetbits(
  848.                  slen[0][gr_info->scalefac_compress]);
  849.          for (sfb = 6; sfb < 12; sfb++)
  850.             for (window=0; window<3; window++)
  851.                (*scalefac)[ch].s[window][sfb] = hgetbits(
  852.                  slen[1][gr_info->scalefac_compress]);
  853.          for (sfb=12,window=0; window<3; window++)
  854.             (*scalefac)[ch].s[window][sfb] = 0;
  855.       }
  856.       else {  /* SHORT*/
  857.          for (i=0; i<2; i++) 
  858.             for (sfb = sfbtable.s[i]; sfb < sfbtable.s[i+1]; sfb++)
  859.                for (window=0; window<3; window++)
  860.                   (*scalefac)[ch].s[window][sfb] = hgetbits( 
  861.                     slen[i][gr_info->scalefac_compress]);
  862.          for (sfb=12,window=0; window<3; window++)
  863.             (*scalefac)[ch].s[window][sfb] = 0;
  864.       }
  865.     }          
  866.     else {   /* LONG types 0,1,3 */
  867.         for (i=0; i<4; i++) {
  868.            if ((si->ch[ch].scfsi[i] == 0) || (gr == 0))
  869.               for (sfb = sfbtable.l[i]; sfb < sfbtable.l[i+1]; sfb++)
  870.                   (*scalefac)[ch].l[sfb] = hgetbits(
  871.                  slen[(i<2)?0:1][gr_info->scalefac_compress]);
  872.         }
  873.         (*scalefac)[ch].l[22] = 0; 
  874.     }
  875. }
  876. /* Already declared in huffman.c
  877. struct huffcodetab ht[HTN];
  878. */
  879. int huffman_initialized = FALSE;
  880. void initialize_huffman() {
  881.    FILE *fi;
  882.   
  883.    if (huffman_initialized) return;
  884.    if (!(fi = OpenTableFile("huffdec") )) {
  885.       printf("Please check huffman table 'huffdec'n");
  886.       exit(1);
  887.    }
  888.    if (fi==NULL) {
  889.       fprintf(stderr,"decoder table open errorn");
  890.       exit(3);
  891.       }
  892.    if (read_decoder_table(fi) != HTN) {
  893.       fprintf(stderr,"decoder table read errorn");
  894.       exit(4);
  895.       }
  896. huffman_initialized = TRUE;
  897. }
  898. III_hufman_decode(is, si, ch, gr, part2_start, fr_ps)
  899. long int is[SBLIMIT][SSLIMIT];
  900. III_side_info_t *si;
  901. int gr, ch, part2_start;
  902. frame_params *fr_ps;
  903. {
  904.    int i, x, y;
  905.    int v, w;
  906.    struct huffcodetab *h;
  907.    int region1Start;
  908.    int region2Start;
  909.    int bt = (*si).ch[ch].gr[gr].window_switching_flag && ((*si).ch[ch].gr[gr].block_type == 2);
  910.    initialize_huffman();
  911.    /* Find region boundary for short block case. */
  912.    
  913.    if ( ((*si).ch[ch].gr[gr].window_switching_flag) && 
  914.         ((*si).ch[ch].gr[gr].block_type == 2) ) { 
  915.    
  916.       /* Region2. */
  917.       region1Start = 36;  /* sfb[9/3]*3=36 */
  918.       region2Start = 576; /* No Region2 for short block case. */
  919.    }
  920.    else {          /* Find region boundary for long block case. */
  921.       region1Start = sfBandIndex[fr_ps->header->sampling_frequency]
  922.                            .l[(*si).ch[ch].gr[gr].region0_count + 1]; /* MI */
  923.       region2Start = sfBandIndex[fr_ps->header->sampling_frequency]
  924.                               .l[(*si).ch[ch].gr[gr].region0_count +
  925.                               (*si).ch[ch].gr[gr].region1_count + 2]; /* MI */
  926.       }
  927.    /* Read bigvalues area. */
  928.    for (i=0; i<(*si).ch[ch].gr[gr].big_values*2; i+=2) {
  929.       if      (i<region1Start) h = &ht[(*si).ch[ch].gr[gr].table_select[0]];
  930.       else if (i<region2Start) h = &ht[(*si).ch[ch].gr[gr].table_select[1]];
  931.            else                h = &ht[(*si).ch[ch].gr[gr].table_select[2]];
  932.       huffman_decoder(h, &x, &y, &v, &w);
  933.       is[i/SSLIMIT][i%SSLIMIT] = x;
  934.       is[(i+1)/SSLIMIT][(i+1)%SSLIMIT] = y;
  935.       }
  936.    /* Read count1 area. */
  937.    h = &ht[(*si).ch[ch].gr[gr].count1table_select+32];
  938.    while ((hsstell() < part2_start + (*si).ch[ch].gr[gr].part2_3_length ) &&
  939.      ( i < SSLIMIT*SBLIMIT )) {
  940.       huffman_decoder(h, &x, &y, &v, &w);
  941.       is[i/SSLIMIT][i%SSLIMIT] = v;
  942.       is[(i+1)/SSLIMIT][(i+1)%SSLIMIT] = w;
  943.       is[(i+2)/SSLIMIT][(i+2)%SSLIMIT] = x;
  944.       is[(i+3)/SSLIMIT][(i+3)%SSLIMIT] = y;
  945.       i += 4;
  946.       }
  947.    if (hsstell() > part2_start + (*si).ch[ch].gr[gr].part2_3_length)
  948.    {  i -=4;
  949.       rewindNbits(hsstell()-part2_start - (*si).ch[ch].gr[gr].part2_3_length);
  950.    }
  951.    /* Dismiss stuffing Bits */
  952.    if ( hsstell() < part2_start + (*si).ch[ch].gr[gr].part2_3_length )
  953.       hgetbits( part2_start + (*si).ch[ch].gr[gr].part2_3_length - hsstell());
  954.    /* Zero out rest. */
  955.    for (; i<SSLIMIT*SBLIMIT; i++)
  956.       is[i/SSLIMIT][i%SSLIMIT] = 0;
  957. }
  958. int pretab[22] = {0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,2,2,3,3,3,2,0};
  959. void III_dequantize_sample(is,xr,scalefac,gr_info, ch,fr_ps)
  960. long int is[SBLIMIT][SSLIMIT];
  961. double xr[SBLIMIT][SSLIMIT];
  962. struct gr_info_s *gr_info;
  963. III_scalefac_t *scalefac;
  964. frame_params *fr_ps;
  965. int ch;
  966. {
  967.    int ss,sb,cb=0,sfreq=fr_ps->header->sampling_frequency;
  968.    int stereo = fr_ps->stereo;
  969.    int next_cb_boundary, cb_begin, cb_width, sign;
  970.    /* choose correct scalefactor band per block type, initalize boundary */
  971.    if (gr_info->window_switching_flag && (gr_info->block_type == 2) )
  972.       if (gr_info->mixed_block_flag) 
  973.          next_cb_boundary=sfBandIndex[sfreq].l[1];  /* LONG blocks: 0,1,3 */
  974.       else {
  975.          next_cb_boundary=sfBandIndex[sfreq].s[1]*3; /* pure SHORT block */
  976.     cb_width = sfBandIndex[sfreq].s[1];
  977.     cb_begin = 0;
  978.       }  
  979.    else 
  980.       next_cb_boundary=sfBandIndex[sfreq].l[1];  /* LONG blocks: 0,1,3 */
  981.    /* apply formula per block type */
  982.    for (sb=0 ; sb < SBLIMIT ; sb++)
  983.       for (ss=0 ; ss < SSLIMIT ; ss++) {
  984.          if ( (sb*18)+ss == next_cb_boundary)  { /* Adjust critical band boundary */
  985.             if (gr_info->window_switching_flag && (gr_info->block_type == 2)) {
  986.                if (gr_info->mixed_block_flag)  {
  987.                   if (((sb*18)+ss) == sfBandIndex[sfreq].l[8])  {
  988.                      next_cb_boundary=sfBandIndex[sfreq].s[4]*3; 
  989.                      cb = 3;
  990.                      cb_width = sfBandIndex[sfreq].s[cb+1] - 
  991.                                 sfBandIndex[sfreq].s[cb];
  992.                      cb_begin = sfBandIndex[sfreq].s[cb]*3;      
  993.                   }
  994.                   else if (((sb*18)+ss) < sfBandIndex[sfreq].l[8]) 
  995.                      next_cb_boundary = sfBandIndex[sfreq].l[(++cb)+1];
  996.                   else {
  997.                      next_cb_boundary = sfBandIndex[sfreq].s[(++cb)+1]*3;
  998.                      cb_width = sfBandIndex[sfreq].s[cb+1] - 
  999.                                     sfBandIndex[sfreq].s[cb];
  1000.                      cb_begin = sfBandIndex[sfreq].s[cb]*3;      
  1001.                   }   
  1002.                }
  1003.                else  {
  1004.                   next_cb_boundary = sfBandIndex[sfreq].s[(++cb)+1]*3;
  1005.                   cb_width = sfBandIndex[sfreq].s[cb+1] - 
  1006.                                sfBandIndex[sfreq].s[cb];
  1007.                 cb_begin = sfBandIndex[sfreq].s[cb]*3;      
  1008.                } 
  1009.             }
  1010.             else /* long blocks */
  1011.                next_cb_boundary = sfBandIndex[sfreq].l[(++cb)+1];
  1012.          }
  1013.          /* Compute overall (global) scaling. */
  1014.          xr[sb][ss] = pow( 2.0 , (0.25 * (gr_info->global_gain - 210.0)));
  1015.          /* Do long/short dependent scaling operations. */
  1016.         
  1017.          if (gr_info->window_switching_flag && (
  1018.             ((gr_info->block_type == 2) && (gr_info->mixed_block_flag == 0)) ||
  1019.             ((gr_info->block_type == 2) && gr_info->mixed_block_flag && (sb >= 2)) )) {
  1020.             xr[sb][ss] *= pow(2.0, 0.25 * -8.0 * 
  1021.                     gr_info->subblock_gain[(((sb*18)+ss) - cb_begin)/cb_width]);
  1022.             xr[sb][ss] *= pow(2.0, 0.25 * -2.0 * (1.0+gr_info->scalefac_scale)
  1023.               * (*scalefac)[ch].s[(((sb*18)+ss) - cb_begin)/cb_width][cb]);
  1024.          }
  1025.          else {   /* LONG block types 0,1,3 & 1st 2 subbands of switched blocks */
  1026.             xr[sb][ss] *= pow(2.0, -0.5 * (1.0+gr_info->scalefac_scale)
  1027.                                         * ((*scalefac)[ch].l[cb]
  1028.                                         + gr_info->preflag * pretab[cb]));
  1029.          }
  1030.          /* Scale quantized value. */
  1031.         
  1032.          sign = (is[sb][ss]<0) ? 1 : 0; 
  1033.          xr[sb][ss] *= pow( (double) abs(is[sb][ss]), ((double)4.0/3.0) );
  1034.          if (sign) xr[sb][ss] = -xr[sb][ss];
  1035.       }
  1036. }
  1037. III_reorder (xr, ro, gr_info, fr_ps) 
  1038. double xr[SBLIMIT][SSLIMIT]; 
  1039. double ro[SBLIMIT][SSLIMIT]; 
  1040. struct gr_info_s *gr_info;
  1041. frame_params *fr_ps;
  1042. {
  1043.    int sfreq=fr_ps->header->sampling_frequency;
  1044.    int sfb, sfb_start, sfb_lines;
  1045.    int sb, ss, window, freq, src_line, des_line;
  1046.    for(sb=0;sb<SBLIMIT;sb++)
  1047.       for(ss=0;ss<SSLIMIT;ss++) 
  1048.          ro[sb][ss] = 0;
  1049.    if (gr_info->window_switching_flag && (gr_info->block_type == 2)) {
  1050.       if (gr_info->mixed_block_flag) {
  1051.          /* NO REORDER FOR LOW 2 SUBBANDS */
  1052.          for (sb=0 ; sb < 2 ; sb++)
  1053.             for (ss=0 ; ss < SSLIMIT ; ss++) {
  1054.                ro[sb][ss] = xr[sb][ss];
  1055.             }
  1056.          /* REORDERING FOR REST SWITCHED SHORT */
  1057.          for(sfb=3,sfb_start=sfBandIndex[sfreq].s[3],
  1058.             sfb_lines=sfBandIndex[sfreq].s[4] - sfb_start; 
  1059.             sfb < 13; sfb++,sfb_start=sfBandIndex[sfreq].s[sfb],
  1060.             (sfb_lines=sfBandIndex[sfreq].s[sfb+1] - sfb_start))
  1061.                for(window=0; window<3; window++)
  1062.                   for(freq=0;freq<sfb_lines;freq++) {
  1063.                      src_line = sfb_start*3 + window*sfb_lines + freq; 
  1064.                      des_line = (sfb_start*3) + window + (freq*3);
  1065.                      ro[des_line/SSLIMIT][des_line%SSLIMIT] = 
  1066.                                     xr[src_line/SSLIMIT][src_line%SSLIMIT];
  1067.                }
  1068.       } 
  1069.       else {  /* pure short */
  1070.          for(sfb=0,sfb_start=0,sfb_lines=sfBandIndex[sfreq].s[1]; 
  1071.             sfb < 13; sfb++,sfb_start=sfBandIndex[sfreq].s[sfb],
  1072.             (sfb_lines=sfBandIndex[sfreq].s[sfb+1] - sfb_start))
  1073.                for(window=0; window<3; window++)
  1074.                   for(freq=0;freq<sfb_lines;freq++) {
  1075.                      src_line = sfb_start*3 + window*sfb_lines + freq; 
  1076.                      des_line = (sfb_start*3) + window + (freq*3);
  1077.                      ro[des_line/SSLIMIT][des_line%SSLIMIT] = 
  1078.                                     xr[src_line/SSLIMIT][src_line%SSLIMIT];
  1079.                }
  1080.       }
  1081.    }
  1082.    else {   /*long blocks */
  1083.       for (sb=0 ; sb < SBLIMIT ; sb++)
  1084.          for (ss=0 ; ss < SSLIMIT ; ss++) 
  1085.             ro[sb][ss] = xr[sb][ss];
  1086.    }
  1087. }
  1088. void III_stereo(xr, lr, scalefac, gr_info, fr_ps)
  1089. double xr[2][SBLIMIT][SSLIMIT];
  1090. double lr[2][SBLIMIT][SSLIMIT];
  1091. III_scalefac_t *scalefac;
  1092. struct gr_info_s *gr_info;
  1093. frame_params *fr_ps;
  1094. {
  1095.    int sfreq = fr_ps->header->sampling_frequency;
  1096.    int stereo = fr_ps->stereo;
  1097.    int ms_stereo = (fr_ps->header->mode == MPG_MD_JOINT_STEREO) &&
  1098.                    (fr_ps->header->mode_ext & 0x2); 
  1099.    int i_stereo = (fr_ps->header->mode == MPG_MD_JOINT_STEREO) &&
  1100.                   (fr_ps->header->mode_ext & 0x1);
  1101.    int js_bound;  /* frequency line that marks the beggining of the zero part */  
  1102.    int sfb,next_sfb_boundary;
  1103.    int i,j,sb,ss,ch,is_pos[576]; 
  1104.    double is_ratio[576];
  1105.   
  1106.    /* intialization */
  1107.    for ( i=0; i<576; i++ )
  1108.       is_pos[i] = 7;
  1109.    if ((stereo == 2) && i_stereo )
  1110.    {  if (gr_info->window_switching_flag && (gr_info->block_type == 2))
  1111.       {  if( gr_info->mixed_block_flag )
  1112.          {  int max_sfb = 0;
  1113.             for ( j=0; j<3; j++ )
  1114.             {  int sfbcnt;
  1115.                sfbcnt = 2;
  1116.                for( sfb=12; sfb >=3; sfb-- )
  1117.                {  int lines;
  1118.                   lines = sfBandIndex[sfreq].s[sfb+1]-sfBandIndex[sfreq].s[sfb];
  1119.                   i = 3*sfBandIndex[sfreq].s[sfb] + (j+1) * lines - 1;
  1120.                   while ( lines > 0 )
  1121.                   {  if ( xr[1][i/SSLIMIT][i%SSLIMIT] != 0.0 )
  1122.                      {  sfbcnt = sfb;
  1123.                         sfb = -10;
  1124.                         lines = -10;
  1125.                      }
  1126.                      lines--;
  1127.                      i--;
  1128.                   }
  1129.                }
  1130.                sfb = sfbcnt + 1;
  1131.                if ( sfb > max_sfb )
  1132.                   max_sfb = sfb;
  1133.                while( sfb<12 )
  1134.                {  sb = sfBandIndex[sfreq].s[sfb+1]-sfBandIndex[sfreq].s[sfb];
  1135.                   i = 3*sfBandIndex[sfreq].s[sfb] + j * sb;
  1136.                   for ( ; sb > 0; sb--)
  1137.                   {  is_pos[i] = (*scalefac)[1].s[j][sfb];
  1138.                      if ( is_pos[i] != 7 )
  1139.                         is_ratio[i] = tan( is_pos[i] * (PI / 12));
  1140.                      i++;
  1141.                   }
  1142.                   sfb++;
  1143.                }
  1144.                sb = sfBandIndex[sfreq].s[11]-sfBandIndex[sfreq].s[10];
  1145.                sfb = 3*sfBandIndex[sfreq].s[10] + j * sb;
  1146.                sb = sfBandIndex[sfreq].s[12]-sfBandIndex[sfreq].s[11];
  1147.                i = 3*sfBandIndex[sfreq].s[11] + j * sb;
  1148.                for ( ; sb > 0; sb-- )
  1149.                {  is_pos[i] = is_pos[sfb];
  1150.                   is_ratio[i] = is_ratio[sfb];
  1151.                   i++;
  1152.                }
  1153.              }
  1154.              if ( max_sfb <= 3 )
  1155.              {  i = 2;
  1156.                 ss = 17;
  1157.                 sb = -1;
  1158.                 while ( i >= 0 )
  1159.                 {  if ( xr[1][i][ss] != 0.0 )
  1160.                    {  sb = i*18+ss;
  1161.                       i = -1;
  1162.                    } else
  1163.                    {  ss--;
  1164.                       if ( ss < 0 )
  1165.                       {  i--;
  1166.                          ss = 17;
  1167.                       }
  1168.                    }
  1169.                 }
  1170.                 i = 0;
  1171.                 while ( sfBandIndex[sfreq].l[i] <= sb )
  1172.                    i++;
  1173.                 sfb = i;
  1174.                 i = sfBandIndex[sfreq].l[i];
  1175.                 for ( ; sfb<8; sfb++ )
  1176.                 {  sb = sfBandIndex[sfreq].l[sfb+1]-sfBandIndex[sfreq].l[sfb];
  1177.                    for ( ; sb > 0; sb--)
  1178.                    {  is_pos[i] = (*scalefac)[1].l[sfb];
  1179.                       if ( is_pos[i] != 7 )
  1180.                          is_ratio[i] = tan( is_pos[i] * (PI / 12));
  1181.                       i++;
  1182.                    }
  1183.                 }
  1184.             }
  1185.          } else
  1186.          {  for ( j=0; j<3; j++ )
  1187.             {  int sfbcnt;
  1188.                sfbcnt = -1;
  1189.                for( sfb=12; sfb >=0; sfb-- )
  1190.                {  int lines;
  1191.                   lines = sfBandIndex[sfreq].s[sfb+1]-sfBandIndex[sfreq].s[sfb];
  1192.                   i = 3*sfBandIndex[sfreq].s[sfb] + (j+1) * lines - 1;
  1193.                   while ( lines > 0 )
  1194.                   {  if ( xr[1][i/SSLIMIT][i%SSLIMIT] != 0.0 )
  1195.                      {  sfbcnt = sfb;
  1196.                         sfb = -10;
  1197.                         lines = -10;
  1198.                      }
  1199.                      lines--;
  1200.                      i--;
  1201.                   }
  1202.                }
  1203.                sfb = sfbcnt + 1;
  1204.                while( sfb<12 )
  1205.                {  sb = sfBandIndex[sfreq].s[sfb+1]-sfBandIndex[sfreq].s[sfb];
  1206.                   i = 3*sfBandIndex[sfreq].s[sfb] + j * sb;
  1207.                   for ( ; sb > 0; sb--)
  1208.                   {  is_pos[i] = (*scalefac)[1].s[j][sfb];
  1209.                      if ( is_pos[i] != 7 )
  1210.                         is_ratio[i] = tan( is_pos[i] * (PI / 12));
  1211.                      i++;
  1212.                   }
  1213.                   sfb++;
  1214.                }
  1215.                sb = sfBandIndex[sfreq].s[11]-sfBandIndex[sfreq].s[10];
  1216.                sfb = 3*sfBandIndex[sfreq].s[10] + j * sb;
  1217.                sb = sfBandIndex[sfreq].s[12]-sfBandIndex[sfreq].s[11];
  1218.                i = 3*sfBandIndex[sfreq].s[11] + j * sb;
  1219.                for ( ; sb > 0; sb-- )
  1220.                {  is_pos[i] = is_pos[sfb];
  1221.                   is_ratio[i] = is_ratio[sfb];
  1222.                   i++;
  1223.                }
  1224.             }
  1225.          }
  1226.       } else
  1227.       {  i = 31;
  1228.          ss = 17;
  1229.          sb = 0;
  1230.          while ( i >= 0 )
  1231.          {  if ( xr[1][i][ss] != 0.0 )
  1232.             {  sb = i*18+ss;
  1233.                i = -1;
  1234.             } else
  1235.             {  ss--;
  1236.                if ( ss < 0 )
  1237.                {  i--;
  1238.                   ss = 17;
  1239.                }
  1240.             }
  1241.          }
  1242.          i = 0;
  1243.          while ( sfBandIndex[sfreq].l[i] <= sb )
  1244.             i++;
  1245.          sfb = i;
  1246.          i = sfBandIndex[sfreq].l[i];
  1247.          for ( ; sfb<21; sfb++ )
  1248.          {  sb = sfBandIndex[sfreq].l[sfb+1] - sfBandIndex[sfreq].l[sfb];
  1249.             for ( ; sb > 0; sb--)
  1250.             {  is_pos[i] = (*scalefac)[1].l[sfb];
  1251.                if ( is_pos[i] != 7 )
  1252.                   is_ratio[i] = tan( is_pos[i] * (PI / 12));
  1253.                i++;
  1254.             }
  1255.          }
  1256.          sfb = sfBandIndex[sfreq].l[20];
  1257.          for ( sb = 576 - sfBandIndex[sfreq].l[21]; sb > 0; sb-- )
  1258.          {  is_pos[i] = is_pos[sfb];
  1259.             is_ratio[i] = is_ratio[sfb];
  1260.             i++;
  1261.          }
  1262.       }
  1263.    }
  1264.    for(ch=0;ch<2;ch++)
  1265.       for(sb=0;sb<SBLIMIT;sb++)
  1266.          for(ss=0;ss<SSLIMIT;ss++) 
  1267.             lr[ch][sb][ss] = 0;
  1268.    if (stereo==2) 
  1269.       for(sb=0;sb<SBLIMIT;sb++)
  1270.          for(ss=0;ss<SSLIMIT;ss++) {
  1271.             i = (sb*18)+ss;
  1272.             if ( is_pos[i] == 7 ) {
  1273.                if ( ms_stereo ) {
  1274.                   lr[0][sb][ss] = (xr[0][sb][ss]+xr[1][sb][ss])/1.41421356;
  1275.                   lr[1][sb][ss] = (xr[0][sb][ss]-xr[1][sb][ss])/1.41421356;
  1276.                }
  1277.                else {
  1278.                   lr[0][sb][ss] = xr[0][sb][ss];
  1279.                   lr[1][sb][ss] = xr[1][sb][ss];
  1280.                }
  1281.             }
  1282.             else if (i_stereo ) {
  1283.                lr[0][sb][ss] = xr[0][sb][ss] * (is_ratio[i]/(1+is_ratio[i]));
  1284.                lr[1][sb][ss] = xr[0][sb][ss] * (1/(1+is_ratio[i])); 
  1285.             }
  1286.             else {
  1287.                printf("Error in streo processingn");
  1288.             }
  1289.          }
  1290.    else  /* mono , bypass xr[0][][] to lr[0][][]*/
  1291.       for(sb=0;sb<SBLIMIT;sb++)
  1292.          for(ss=0;ss<SSLIMIT;ss++)
  1293.             lr[0][sb][ss] = xr[0][sb][ss];
  1294. }
  1295. double Ci[8]={-0.6,-0.535,-0.33,-0.185,-0.095,-0.041,-0.0142,-0.0037};
  1296. void III_antialias(xr, hybridIn, gr_info, fr_ps)
  1297. double xr[SBLIMIT][SSLIMIT];    
  1298. double hybridIn[SBLIMIT][SSLIMIT];
  1299. struct gr_info_s *gr_info;             
  1300. frame_params *fr_ps;            
  1301. {
  1302.    static int    init = 1;
  1303.    static double ca[8],cs[8];
  1304.    double        bu,bd;  /* upper and lower butterfly inputs */
  1305.    int           ss,sb,sblim;
  1306.    if (init) {
  1307.       int i;
  1308.       double    sq;
  1309.       for (i=0;i<8;i++) {
  1310.          sq=sqrt(1.0+Ci[i]*Ci[i]);
  1311.          cs[i] = 1.0/sq;
  1312.          ca[i] = Ci[i]/sq;
  1313.       }
  1314.       init = 0;
  1315.    }
  1316.    
  1317.    /* clear all inputs */  
  1318.       
  1319.     for(sb=0;sb<SBLIMIT;sb++)
  1320.        for(ss=0;ss<SSLIMIT;ss++)
  1321.           hybridIn[sb][ss] = xr[sb][ss];
  1322.    if  (gr_info->window_switching_flag && (gr_info->block_type == 2) &&
  1323.        !gr_info->mixed_block_flag ) return;
  1324.    if ( gr_info->window_switching_flag && gr_info->mixed_block_flag &&
  1325.      (gr_info->block_type == 2))
  1326.       sblim = 1;
  1327.    else
  1328.       sblim = SBLIMIT-1;
  1329.    /* 31 alias-reduction operations between each pair of sub-bands */
  1330.    /* with 8 butterflies between each pair                         */
  1331.    for(sb=0;sb<sblim;sb++)   
  1332.       for(ss=0;ss<8;ss++) {      
  1333.          bu = xr[sb][17-ss];
  1334.          bd = xr[sb+1][ss];
  1335.          hybridIn[sb][17-ss] = (bu * cs[ss]) - (bd * ca[ss]);
  1336.          hybridIn[sb+1][ss] = (bd * cs[ss]) + (bu * ca[ss]);
  1337.          }  
  1338. }
  1339. void inv_mdct(in, out, block_type)
  1340. double in[18];
  1341. double out[36];
  1342. int block_type;
  1343. {
  1344. /*------------------------------------------------------------------*/
  1345. /*                                                                  */
  1346. /*    Function: Calculation of the inverse MDCT                     */
  1347. /*    In the case of short blocks the 3 output vectors are already  */
  1348. /*    overlapped and added in this modul.                           */
  1349. /*                                                                  */
  1350. /*    New layer3                                                    */
  1351. /*                                                                  */
  1352. /*------------------------------------------------------------------*/
  1353. int     k,i,m,N,p;
  1354. double  tmp[12],sum;
  1355. static  double  win[4][36];
  1356. static  int init=0;
  1357. static  double COS[4*36];
  1358.     if(init==0){
  1359.     /* type 0 */
  1360.       for(i=0;i<36;i++)
  1361.          win[0][i] = sin( PI/36 *(i+0.5) );
  1362.     /* type 1*/
  1363.       for(i=0;i<18;i++)
  1364.          win[1][i] = sin( PI/36 *(i+0.5) );
  1365.       for(i=18;i<24;i++)
  1366.          win[1][i] = 1.0;
  1367.       for(i=24;i<30;i++)
  1368.          win[1][i] = sin( PI/12 *(i+0.5-18) );
  1369.       for(i=30;i<36;i++)
  1370.          win[1][i] = 0.0;
  1371.     /* type 3*/
  1372.       for(i=0;i<6;i++)
  1373.          win[3][i] = 0.0;
  1374.       for(i=6;i<12;i++)
  1375.          win[3][i] = sin( PI/12 *(i+0.5-6) );
  1376.       for(i=12;i<18;i++)
  1377.          win[3][i] =1.0;
  1378.       for(i=18;i<36;i++)
  1379.          win[3][i] = sin( PI/36*(i+0.5) );
  1380.     /* type 2*/
  1381.       for(i=0;i<12;i++)
  1382.          win[2][i] = sin( PI/12*(i+0.5) ) ;
  1383.       for(i=12;i<36;i++)
  1384.          win[2][i] = 0.0 ;
  1385.       for (i=0; i<4*36; i++)
  1386.          COS[i] = cos(PI/(2*36) * i);
  1387.       init++;
  1388.     }
  1389.     for(i=0;i<36;i++)
  1390.        out[i]=0;
  1391.     if(block_type == 2){
  1392.        N=12;
  1393.        for(i=0;i<3;i++){
  1394.           for(p= 0;p<N;p++){
  1395.              sum = 0.0;
  1396.              for(m=0;m<N/2;m++)
  1397.                 sum += in[i+3*m] * cos( PI/(2*N)*(2*p+1+N/2)*(2*m+1) );
  1398.              tmp[p] = sum * win[block_type][p] ;
  1399.           }
  1400.           for(p=0;p<N;p++)
  1401.              out[6*i+p+6] += tmp[p];
  1402.        }
  1403.     }
  1404.     else{
  1405.       N=36;
  1406.       for(p= 0;p<N;p++){
  1407.          sum = 0.0;
  1408.          for(m=0;m<N/2;m++)
  1409.            sum += in[m] * COS[((2*p+1+N/2)*(2*m+1))%(4*36)];
  1410.          out[p] = sum * win[block_type][p];
  1411.       }
  1412.     }
  1413. }
  1414. void III_hybrid(fsIn, tsOut ,sb, ch, gr_info, fr_ps)
  1415. double fsIn[SSLIMIT];   /* freq samples per subband in */
  1416. double tsOut[SSLIMIT];  /* time samples per subband out */
  1417. int sb, ch;
  1418. struct gr_info_s *gr_info;             
  1419. frame_params *fr_ps;            
  1420. {
  1421.    int ss;
  1422.    double rawout[36];
  1423.    static double prevblck[2][SBLIMIT][SSLIMIT];
  1424.    static int init = 1;
  1425.    int bt;
  1426.    if (init) {
  1427.       int i,j,k;
  1428.       
  1429.       for(i=0;i<2;i++)
  1430.          for(j=0;j<SBLIMIT;j++)
  1431.             for(k=0;k<SSLIMIT;k++)
  1432.                prevblck[i][j][k]=0.0;
  1433.       init = 0;
  1434.    }
  1435.    bt = (gr_info->window_switching_flag && gr_info->mixed_block_flag &&
  1436.           (sb < 2)) ? 0 : gr_info->block_type; 
  1437.    inv_mdct( fsIn, rawout, bt);
  1438.    /* overlap addition */
  1439.    for(ss=0; ss<SSLIMIT; ss++) {
  1440.       tsOut[ss] = rawout[ss] + prevblck[ch][sb][ss];
  1441.       prevblck[ch][sb][ss] = rawout[ss+18];
  1442.    }
  1443. }
  1444. /* Return the number of slots for main data of current frame, */
  1445. int main_data_slots(fr_ps)
  1446. frame_params fr_ps;
  1447. {int nSlots;
  1448.    nSlots = (144 * bitrate[2][fr_ps.header->bitrate_index])
  1449.     / s_freq[fr_ps.header->sampling_frequency];
  1450.   if (fr_ps.header->padding) nSlots++;
  1451.   nSlots -= 4;
  1452.   if (fr_ps.header->error_protection) nSlots -= 2;
  1453.   if (fr_ps.stereo == 1) nSlots -= 17; else nSlots -=32;
  1454.   return(nSlots);
  1455. }