DECODE.C
上传用户:njqiyou
上传日期:2007-01-08
资源大小:574k
文件大小:68k
源码类别:

mpeg/mp3

开发平台:

C/C++

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