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

mpeg/mp3

开发平台:

C/C++

  1. /**********************************************************************
  2.  * ISO MPEG Audio Subgroup Software Simulation Group (1996)
  3.  * ISO 13818-3 MPEG-2 Audio Multichannel Decoder
  4.  *
  5.  * $Id: decode.c 1.12 1997/01/17 04:26:01 rowlands Exp $
  6.  *
  7.  * $Log: decode.c $
  8.  * Revision 1.12  1997/01/17 04:26:01  rowlands
  9.  * Fixed base bitstream joint stereo bugs.
  10.  * Fixed PCM output file cleanup bugs.
  11.  *
  12.  * Revision 1.11  1996/04/18 05:37:23  rowlands
  13.  * Release following Florence meeting
  14.  *
  15.  * Revision 1.10  1996/02/12 07:13:06  rowlands
  16.  * Release following Munich meeting
  17.  *
  18.  * Revision 1.9.1.4  1996/01/29  03:36:47  rowlands
  19.  * Fixed problem with dynamic crosstalk in 2/2 configuration
  20.  * Fixed bug in dynamic crosstalk for 3/1 configuration.
  21.  *
  22.  * Revision 1.9.1.1  1996/01/20  17:28:45  rowlands
  23.  * Received from Ralf Schwalbe (Telekom FTZ) - includes prediction
  24.  *
  25.  * Revision 1.7.1.3  1995/08/14  08:12:10  tenkate
  26.  * ML-LSF added Warner ten Kate 7/8/95 (Philips)
  27.  * change "alloc" and "sblimit" into "alloc_ml" and
  28.  * "sblimit_ml" where appropriate.
  29.  *
  30.  * Revision 1.7.1.1  1995/07/14  06:12:46  rowlands
  31.  * Updated dynamic crosstalk from FTZ: revision FTZ_03
  32.  *
  33.  * Revision 1.3.3.1  1995/06/16  08:00:46  rowlands
  34.  * Input from Sang Wook Kim (Samsung AIT)
  35.  *
  36.  * Revision 1.3.2.1  1995/06/16  03:27:20  rowlands
  37.  * Corrected prediction select syntax according to IS
  38.  * Added dematrixing procedure 2. Corrected dematrix weighting values.
  39.  *
  40.  **********************************************************************/
  41. /**********************************************************************
  42.  *   date   programmers                comment                        *
  43.  * 2/25/91  Douglas Wong        start of version 1.0 records          *
  44.  * 3/06/91  Douglas Wong        rename setup.h to dedef.h             *
  45.  *                              removed extraneous variables          *
  46.  *                              removed window_samples (now part of   *
  47.  *                              filter_samples)                       *
  48.  * 3/07/91  Davis Pan           changed output file to "codmusic"     *
  49.  * 5/10/91  Vish (PRISM)        Ported to Macintosh and Unix.         *
  50.  *                              Incorporated new "out_fifo()" which   *
  51.  *                              writes out last incomplete buffer.    *
  52.  *                              Incorporated all AIFF routines which  *
  53.  *                              are also compatible with SUN.         *
  54.  *                              Incorporated user interface for       *
  55.  *                              specifying sound file names.          *
  56.  *                              Also incorporated user interface for  *
  57.  *                              writing AIFF compatible sound files.  *
  58.  * 27jun91  dpwe (Aware)        Added musicout and &sample_frames as  *
  59.  *                              args to out_fifo (were glob refs).    *
  60.  *                              Used new 'frame_params' struct.       *
  61.  *                              Clean,simplify, track clipped output  *
  62.  *                              and total bits/frame received.        *
  63.  * 7/10/91  Earle Jennings      changed to floats to FLOAT            *
  64.  *10/ 1/91  S.I. Sudharsanan,   Ported to IBM AIX platform.           *
  65.  *          Don H. Lee,                                               *
  66.  *          Peter W. Farrett                                          *
  67.  *10/ 3/91  Don H. Lee          implemented CRC-16 error protection   *
  68.  *                              newly introduced functions are        *
  69.  *                              buffer_CRC and recover_CRC_error      *
  70.  *                              Additions and revisions are marked    *
  71.  *                              with "dhl" for clarity                *
  72.  * 2/11/92  W. Joseph Carter    Ported new code to Macintosh.  Most   *
  73.  *                              important fixes involved changing     *
  74.  *                              16-bit ints to long or unsigned in    *
  75.  *                              bit alloc routines for quant of 65535 *
  76.  *                              and passing proper function args.     *
  77.  *                              Removed "Other Joint Stereo" option   *
  78.  *                              and made bitrate be total channel     *
  79.  *                              bitrate, irrespective of the mode.    *
  80.  *                              Fixed many small bugs & reorganized.  *
  81.  **********************************************************************
  82.  *                                                                    *
  83.  *                                                                    *
  84.  *  MPEG/audio Phase 2 coding/decoding multichannel                   *
  85.  *                                                                    *
  86.  *  Version 1.0                                                       *
  87.  *                                                                    *
  88.  *  7/27/93        Susanne Ritscher,  IRT Munich                      *
  89.  *                                                                    *
  90.  *                  thanks to                                         *
  91.  *                  Ralf Schwalbe,    Telekom FTZ Berlin              *
  92.  *                  Heiko Purnhagen,  Uni Hannover                    *
  93.  *                                                                    *
  94.  *  Version 2.0                                                       *
  95.  *                                                                    *
  96.  *  8/27/93        Susanne Ritscher, IRT Munich                       *
  97.  *                 Channel-Switching is working                       *
  98.  *                                                                    *
  99.  *  Version 2.1                                                       *
  100.  *                                                                    *
  101.  *  9/1/93         Susanne Ritscher,  IRT Munich                      *
  102.  *                 all channels normalized                            *
  103.  *                                                                    *
  104.  *  Version 3.0                                                       *
  105.  *                                                                    *
  106.  *  06/16/94       Ralf Schwalbe, Telekom FTZ Berlin                  *
  107.  *                 all sources and variables adapted due to MPEG-2 -  *
  108.  *                 DIS from March 1994                                *
  109.  *                  - dematrix and denormalize procedure              *
  110.  *                  - new tc - allocation (0-7)                       *
  111.  *                  - some new structures and variables as a basis    *
  112.  *                    for further decoding modes                      *
  113.  **********************************************************************
  114.  *       *
  115.  *  Version 1.0                                                       *
  116.  *                                                                    *
  117.  *  11/04/94       Ralf Schwalbe,  Telekom FTZ Berlin                 *
  118.  *                  - decoding tc-allocation                          *
  119.  *                  - some new subroutines, globale variables and     *
  120.  *                    structures (important to handle the ext. bitst.)*
  121.  *                  - changed all functions to ANSI-C funktion header *
  122.  *     - corrected some bugs to decode bitstreams > 512kB*
  123.  *       *
  124.  *  Version 1.1                                                       *
  125.  *                                                                    *
  126.  *  12/07/94       Ralf Schwalbe,  Telekom FTZ Berlin                 *
  127.  *                  - decoding extension bitstream                    *
  128.  *                                                                    *
  129.  *  Version 1.1.1                                                     *
  130.  *                 Ralf Schwalbe, Telekom FTZ Berlin                  *
  131.  *                  - fixed some bugs                                 *
  132.  *                                                                    *
  133.  *  Version 1.2                                                       *
  134.  *                                                                    *
  135.  *  6/21/95       Ralf Schwalbe, Deutsche Telekom FTZ Berlin          *
  136.  *                 - decoding dynamic crosstalk                      *
  137.  *                  - decoding phantom center                         * 
  138.  *                  - decoding MPEG1 compatible part only (stereo)    *
  139.  *                  - corrected some settings and bugs                *
  140.  *                                                                    * 
  141.  *  7/12/95   Ralf Schwalbe, Deutsche Telekom FTZ Berlin          *
  142.  *     - corrected dynamic crosstalk        *
  143.  *     - 3/2,3/1,3/0,2/1, channel configurations         *
  144.  *                    are working                                     *
  145.  *          *
  146.  * 10/31/95   Ralf Schwalbe, Deutsche Telekom FTZ Berlin       *
  147.  *     - decoding of LFE-channel is working         *
  148.  *     - corrected any settings and bugs       *
  149.  *     - corrected table-switch for channel mode < 3/2   *
  150.  *       and tc-allocation / dyn-crosstalk       *
  151.  *     - still a problem with compl. bitstream 18/19     *
  152.  *       *
  153.  * 01/12/96   Ralf Schwalbe, Deutsche Telekom TZ Darmstadt       *
  154.  *     - decoder prediction installed       *
  155.  *     - problem with compl. bitstream 19 solved,        *
  156.  *                                                                    *         
  157.  *  Version 2.0                                                       *
  158.  *                                                                    *
  159.  * 01/28/97       Frans de Bont, Philips Sound & Vision, Eindhoven    *
  160.  *     - simultaneous use of tc allocation and dynamic   *
  161.  *       crosstalk working for all configurations       *
  162.  *     - prediction working for all configurations       *
  163.  *     - layer 1 MC working       *
  164.  *     - variable bit rate and extension bitstreams      *
  165.  *     - fully compliant to 13818-3.2                    *
  166.  *                                                                    *       *     
  167.  **********************************************************************/
  168. /**********************************************************************
  169.  *                                                                    *
  170.  *  06/06/95       Yeon Bae Thomas Kim,  Samsung AIT                  *
  171.  *                 ancillary data is working                          *
  172.  *       *
  173.  **********************************************************************/
  174.  /*********************************************************************/
  175. #include        "common.h"
  176. #include        "decoder.h"
  177. /***************************************************************
  178. /*
  179. /* This module contains the core of the decoder ie all the
  180. /* computational routines. (Layer I and II only)
  181. /* Functions are common to both layer unless
  182. /* otherwise specified.
  183. /*
  184. /***************************************************************/
  185. /*****************************************************************
  186. /*
  187. /* The following routines decode the system information
  188. /*
  189. /****************************************************************/
  190. /************************* Layer II  ****************************/
  191. void decode_info(Bit_stream *bs,
  192.  frame_params *fr_ps)
  193. {
  194.    layer *hdr = fr_ps->header;
  195.    hdr->version = get1bit (bs);
  196.    hdr->lay = 4 - getbits (bs, 2);
  197.    hdr->error_protection = !get1bit (bs); /* error protect. TRUE/FALSE */
  198.    hdr->bitrate_index = getbits (bs, 4);
  199.    hdr->sampling_frequency = getbits (bs, 2);
  200.    hdr->padding = get1bit (bs);
  201.    hdr->extension = get1bit (bs);
  202.    hdr->mode = getbits (bs, 2);
  203.    hdr->mode_ext = getbits (bs, 2);
  204.    hdr->copyright = get1bit (bs);
  205.    hdr->original = get1bit (bs);
  206.    hdr->emphasis = getbits (bs, 2);
  207. }
  208. /**********************************************************************/
  209. /*   */
  210. /*  7.7.93 Susanne Ritscher Systeminformation for multi-channel       */
  211. /* 27.5.94 Ralf Schwalbe    Systeminformation and names due to   */
  212. /* MPEG 2 DIS from March 1994  */                         
  213. /* */
  214. /**********************************************************************/
  215. void mc_header(Bit_stream *bs,
  216.        frame_params *fr_ps)
  217. {
  218.    layer *hdr = fr_ps->header;
  219.    hdr->ext_bit_stream_present = get1bit (bs);
  220.    if( hdr->ext_bit_stream_present == 1)
  221. hdr->n_ad_bytes =  getbits (bs, 8);
  222.    hdr->center = getbits (bs, 2);
  223.    hdr->surround = getbits (bs, 2);
  224.    hdr->lfe = get1bit (bs);
  225.    hdr->audio_mix = get1bit (bs);     /* large or small room  R.S. */
  226.    hdr->dematrix_procedure = getbits (bs, 2);
  227.    hdr->no_of_multi_lingual_ch = getbits (bs, 3);
  228.    hdr->multi_lingual_fs = get1bit (bs);
  229.    hdr->multi_lingual_layer = get1bit (bs);
  230.    hdr->copyright_ident_bit = get1bit (bs);
  231.    hdr->copyright_ident_start = get1bit (bs);
  232. }
  233. /* R.S. prediction table MPEG-2 IS November, 1995 */
  234. /* FdB  prediction table MPEG-2 CD 13818-3.2 March, 1996 */
  235. int pred_coef_table[6][16] = {{6,4,4,4,2,2,2,0,2,2,2,0,0,0,0,0},
  236.       {4,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0},
  237.       {2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
  238.       {4,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0},
  239.       {2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
  240.       {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}};
  241. void mc_composite_status_info(Bit_stream *bs,
  242.       frame_params *fr_ps, int tca_log, int dynx_log)
  243. {
  244.    layer *hdr = fr_ps->header;
  245.    int sbgr, j, pci;
  246.    hdr->tc_sbgr_select = get1bit (bs);
  247.    hdr->dyn_cross_on = get1bit (bs);
  248.    hdr->mc_prediction_on = get1bit (bs);
  249.    if(hdr->tc_sbgr_select == 1)
  250.    {
  251. hdr->tc_allocation = getbits (bs, fr_ps->alloc_bits);
  252. /* tc_allocation is valid for all sbgr R.S. */
  253. for(sbgr = 0; sbgr < 12; sbgr++)   
  254. hdr->tc_alloc[sbgr] = hdr->tc_allocation;
  255.    }
  256.    else
  257.    {
  258. hdr->tc_allocation = 0;
  259. for(sbgr = 0; sbgr < 12; sbgr++)
  260. hdr->tc_alloc[sbgr] = getbits (bs, fr_ps->alloc_bits);
  261.    }
  262.    if (tca_log)
  263.       for (sbgr = 0; sbgr < 12; sbgr++)
  264.  printf ("tc_alloc[ %2d ] = %2dn", sbgr, hdr->tc_alloc[sbgr]);
  265.    if( hdr->dyn_cross_on == 1)
  266.    {
  267. hdr->dyn_cross_LR = get1bit (bs);
  268. for(sbgr = 0; sbgr < 12; sbgr++)
  269. {
  270. hdr->dyn_cross_mode[sbgr] = getbits (bs, fr_ps->dyn_cross_bits);
  271. /* 960816 FdB dyn_second_stereo added */
  272. if (hdr->surround == 3)
  273. hdr->dyn_second_stereo[sbgr] = get1bit (bs);
  274. }
  275.    }
  276.    else
  277.    {
  278. hdr->dyn_cross_LR = 0;
  279. for(sbgr = 0; sbgr < 12; sbgr++)
  280. hdr->dyn_cross_mode[sbgr] = 0;
  281.    }
  282.    if (dynx_log)
  283.       for (sbgr = 0; sbgr < 12; sbgr++)
  284.  printf ("dynx_mod[ %2d ] = %2dn", sbgr, hdr->dyn_cross_mode[sbgr]);
  285.    if( hdr->mc_prediction_on == 1)
  286.    {
  287.   for(sbgr = 0; sbgr < 8; sbgr++) 
  288.   {  
  289. if( (hdr->mc_prediction[sbgr] = get1bit (bs)) == 1 )
  290. {
  291. /* R.S. read from npredcoef-table max number of coef. for 3/2 configuration */
  292. /* and then the predsi info -> 0    : no prediction    */
  293. /*     -> 1..3 : 1..3 coefficient */
  294.     for(pci=0; pci< pred_coef_table[fr_ps->pred_mode][hdr->dyn_cross_mode[sbgr]] ; pci++)
  295. hdr->mc_predsi[sbgr][pci] = getbits (bs, 2);
  296. }
  297.   }
  298.    }
  299. }
  300. #ifdef Augmentation_7ch
  301. void mc_aug_composite_status_info (Bit_stream *bs, frame_params *fr_ps, int tca_log, int dynx_log)
  302. {
  303.    layer *hdr = fr_ps->header;
  304.    int sbgr, j, pci;
  305.    hdr->aug_mtx_proc = getbits (bs, 2);
  306.    hdr->aug_dyn_cross_on = get1bit (bs);
  307.    hdr->aug_future_ext = get1bit (bs);
  308.    if(hdr->aug_mtx_proc == 0)
  309.    {
  310. for(sbgr = 0; sbgr < 12; sbgr++)   
  311. hdr->tc_aug_alloc[sbgr] = getbits (bs, 3);
  312.    }
  313.    else if(hdr->aug_mtx_proc == 1)
  314.    {
  315. for(sbgr = 0; sbgr < 12; sbgr++)
  316. hdr->tc_aug_alloc[sbgr] = getbits (bs, 2);
  317.    }
  318.    else
  319. for(sbgr = 0; sbgr < 12; sbgr++)
  320. hdr->tc_aug_alloc[sbgr] = 0;
  321.    if (tca_log)
  322.       for (sbgr = 0; sbgr < 12; sbgr++)
  323.  printf ("tc_aug_alloc[ %2d ] = %2dn", sbgr, hdr->tc_aug_alloc[sbgr]);
  324.    if( hdr->aug_dyn_cross_on == 1)
  325.    {
  326. for(sbgr = 0; sbgr < 12; sbgr++)
  327. hdr->dyn_cross_aug_mode[sbgr] = getbits (bs, 5);
  328.    }
  329.    else
  330. for(sbgr = 0; sbgr < 12; sbgr++)
  331. hdr->dyn_cross_aug_mode[sbgr] = 0;
  332.    if (dynx_log)
  333.       for (sbgr = 0; sbgr < 12; sbgr++)
  334.  printf ("dynx_aug_mod[ %2d ] = %2dn", sbgr, hdr->dyn_cross_aug_mode[sbgr]);
  335. }
  336. #endif
  337. /*******************************************************************
  338. /*
  339. /* The bit allocation information is decoded. Layer I
  340. /* has 4 bit per subband whereas Layer II is Ws and bit rate
  341. /* dependent.
  342. /*
  343. /********************************************************************/
  344. void I_decode_bitalloc (Bit_stream   *bs,
  345. frame_params *fr_ps,
  346. unsigned int bit_alloc[7][SBLIMIT],
  347. int      bits_log)
  348. {
  349.    int i,j;
  350.    int stereo  = fr_ps->stereo;
  351.    int sblimit = fr_ps->sblimit;
  352.    int jsbound = fr_ps->jsbound;
  353.    int b;
  354.    for (i=0;i<jsbound;i++)
  355.       for (j=0;j<stereo;j++)
  356.  bit_alloc[j][i] = getbits (bs, 4);
  357.    for (i=jsbound; i<SBLIMIT; i++)
  358.    {
  359.       b = getbits (bs, 4);
  360.       for (j=0; j<stereo; j++)
  361.  bit_alloc[j][i] = b;
  362.    }
  363.    if (bits_log)
  364.    {
  365.       for (j= 0; j < stereo; j++)
  366.          for (i = 0; i < SBLIMIT; i++)
  367.  {
  368.     int alloc_bits = 0, alloc_id = bit_alloc[j][i];
  369.     if ((j == 0 || i < jsbound) && bit_alloc[j][i] > 0)
  370.        alloc_bits = 12 * (alloc_id + 1);
  371.     printf ("alloc_bi[ %d ][ %2d ]= %3dn", j, i, alloc_bits);
  372.  }
  373.    }
  374. }
  375. void II_decode_bitalloc (Bit_stream *bs,
  376.  frame_params *fr_ps,
  377.  unsigned int bit_alloc[7][SBLIMIT],
  378.  int bits_log)
  379. {
  380.    int i,j,c,sbgr;
  381.    int stereo = fr_ps->stereo;
  382.    int sblimit = fr_ps->sblimit;
  383.    int jsbound = fr_ps->jsbound;
  384.    al_table *alloc = fr_ps->alloc;
  385.    unsigned int actual_alloc[7][SBLIMIT];
  386.    for (i = 0; i < SBLIMIT; i++)
  387.       for (j = 0; j < stereo; j++)
  388.  actual_alloc[j][i] = 0;
  389.    for (i=0; i<jsbound; i++)
  390.       for (j=0;j<stereo;j++)
  391.  actual_alloc[j][i] = bit_alloc[j][i] = (char) getbits (bs, (*alloc)[i][0].bits);
  392.    for (i=jsbound; i<sblimit; i++)   /* expand to 2 channels */
  393.       actual_alloc[0][i] = bit_alloc[0][i] = bit_alloc[1][i] = (char) getbits (bs, (*alloc)[i][0].bits);
  394.    for (i=sblimit; i<SBLIMIT; i++)
  395.       for (j=0; j<stereo; j++)
  396.   bit_alloc[j][i] = 0;
  397.    if (bits_log)
  398.    {
  399.       for (j= 0; j < stereo; j++)
  400.          for (i = 0; i < SBLIMIT; i++)
  401.  {
  402.     int alloc_bits = 0, alloc_id = bit_alloc[j][i];
  403.     if (actual_alloc[j][i] > 0)
  404.        alloc_bits = 12 * (*alloc)[i][alloc_id].bits * (*alloc)[i][alloc_id].group;
  405.     printf ("alloc_bi[ %d ][ %2d ]= %3dn", j, i, alloc_bits);
  406.  }
  407.    }
  408. }
  409. void II_decode_bitalloc_mc (Bit_stream *bs,
  410.     frame_params *fr_ps,
  411.     unsigned int bit_alloc[7][SBLIMIT],
  412.     int *l, int *m, int bits_log)
  413. {
  414.    layer *info = fr_ps->header;
  415.    int i,j,c,sbgr;
  416.    int sblimit = fr_ps->sblimit_mc;
  417.    al_table *alloc = fr_ps->alloc_mc;
  418.    unsigned int actual_alloc[7][SBLIMIT];
  419.    for (i = 0; i < SBLIMIT; i++)
  420.       for (j = *l; j < *m; j++)
  421.  actual_alloc[j][i] = 0;
  422.    /* 10/31/95 Ralf Schwalbe LFE */
  423.    if (info->lfe)
  424.       info->lfe_alloc = (char) getbits (bs, (*alloc)[0][0].bits);
  425.    for (i=0; i<sblimit; i++)
  426.       if (info->dyn_cross_on == 0)
  427.  for (j=*l;j<*m;j++)
  428.  {
  429.     if ((fr_ps->header->center != 3) || (i < 12) || (j !=2))
  430.        actual_alloc[j][i] = bit_alloc[j][i] = (char) getbits (bs, (*alloc)[i][0].bits);
  431.     else
  432.        bit_alloc[j][i] = 0;
  433.  }
  434.       else  /* dyn. cross mode */
  435.       {
  436.  if (i == 0) sbgr = 0;
  437.  else
  438.     for (c = 1; c < 12; c++)
  439.     {
  440.        if ((sb_groups[c-1] < i) && (i <= sb_groups[c]))
  441.        {
  442.   sbgr = c;  /* search the valid subband group */
  443.   break;
  444.        }
  445.     }
  446.  
  447.  /* 960816 FdB new setup for dyn. crosstalk modes */
  448.  if (info->dyn_cross_mode[sbgr] == 0)
  449.  {
  450.     for (j = *l; j < *m; j++)
  451.        if (fr_ps->header->center == 3 && i >= 12 && j == 2)
  452.   bit_alloc[j][i] = 0;
  453.        else if (info->surround == 3 && info->dyn_second_stereo[sbgr] == 1)
  454.        {
  455.   if (info->center != 0 && j == 4)
  456.      bit_alloc[j][i] = bit_alloc[3][i];
  457.   else if (info->center == 0 && j == 3)
  458.      bit_alloc[j][i] = bit_alloc[2][i];
  459.   else
  460.      actual_alloc[j][i] = bit_alloc[j][i] = (char) getbits (bs, (*alloc)[i][0].bits);
  461.        }
  462.        else
  463.   actual_alloc[j][i] = bit_alloc[j][i] = (char) getbits (bs, (*alloc)[i][0].bits);
  464.  }
  465.  else if (fr_ps->dyn_cross_bits == 1)   /* for channel mode 3/0 and 2/1 */
  466.  {
  467.     /* DynX mode has to be 1 */
  468.     if ((info->center == 3) && (i >= 12))    /* 3/0 + phantom center */
  469.        bit_alloc[2][i] = 0;
  470.     else if (info->tc_alloc[sbgr] == 1)
  471.        bit_alloc[2][i] = bit_alloc[0][i];
  472.     else if (info->tc_alloc[sbgr] == 2)
  473.        bit_alloc[2][i] = bit_alloc[1][i];
  474.     else
  475.        if (info->dyn_cross_LR)
  476.   bit_alloc[2][i] = bit_alloc[1][i];
  477.        else
  478.   bit_alloc[2][i] = bit_alloc[0][i];
  479.  
  480.     if (info->surround == 3) /* 3/0 + 2/0 */
  481.     {
  482.        actual_alloc[3][i] = bit_alloc[3][i] = (char) getbits (bs, (*alloc)[i][0].bits);
  483.        if (info->dyn_second_stereo[sbgr] == 1)
  484.   bit_alloc[4][i] = bit_alloc[3][i];
  485.        else
  486.   actual_alloc[4][i] = bit_alloc[4][i] = (char) getbits (bs, (*alloc)[i][0].bits);
  487.     }
  488.  }
  489.  else if (fr_ps->dyn_cross_bits == 3)   /* for channel mode 3/1 and 2/2 */
  490.  {
  491.     if ((info->center == 3) && (i >= 12))    /* 3/1 + phantom center */
  492.        bit_alloc[2][i] = 0;
  493.     else if ((info->dyn_cross_mode[sbgr] == 1) || (info->dyn_cross_mode[sbgr] == 4))
  494.        actual_alloc[2][i] = bit_alloc[2][i] = (char) getbits (bs, (*alloc)[i][0].bits);
  495.     else
  496.     {
  497.        /* T2 not transmitted */
  498.        if (fr_ps->header->surround == 2 || /* 2/2 mode */
  499.    fr_ps->header->tc_alloc[sbgr] == 1 || /* 3/1 mode */
  500.    fr_ps->header->tc_alloc[sbgr] == 5 || /* 3/1 mode (matrix mode 2 only) */
  501.    fr_ps->header->tc_alloc[sbgr] != 2 && !fr_ps->header->dyn_cross_LR)
  502.   bit_alloc[2][i] = bit_alloc[0][i]; /* C, L or Ls from L0 */
  503.        else
  504.   bit_alloc[2][i] = bit_alloc[1][i]; /* C, R or Rs from RO */
  505.     }
  506.  
  507.     if (info->dyn_cross_mode[sbgr] == 2)
  508.        actual_alloc[3][i] = bit_alloc[3][i] = (char) getbits (bs, (*alloc)[i][0].bits);
  509.     else if (info->dyn_cross_mode[sbgr] == 4)
  510.        bit_alloc[3][i] = bit_alloc[2][i];
  511.     else
  512.     {
  513.        /* T3 not transmitted */
  514.        if (fr_ps->header->surround == 2 || /* 2/2 mode */
  515.    fr_ps->header->tc_alloc[sbgr] == 4 || /* 3/1 mode */
  516.    fr_ps->header->tc_alloc[sbgr] == 5 || /* 3/1 mode (matrix mode 2 only) */
  517.    fr_ps->header->tc_alloc[sbgr] < 3 && fr_ps->header->dyn_cross_LR)
  518.   bit_alloc[3][i] = bit_alloc[1][i]; /* S, R or Rs from R0 */
  519.        else
  520.   bit_alloc[3][i] = bit_alloc[0][i]; /* S, L or Ls from LO */
  521.     }
  522.  } 
  523.  else if (fr_ps->dyn_cross_bits == 4)   /* for channel mode 3/2 */
  524.  {
  525.     /* T2 */
  526.     if ((info->center == 3) && (i >= 12))    /* 3/2 + phantom center */
  527.        bit_alloc[2][i] = 0;
  528.     else switch (info->dyn_cross_mode[sbgr])
  529.     {
  530.     case 1 :   /* T2 contains bitalloc info */
  531.     case 2 :
  532.     case 4 :
  533.     case 8 :
  534.     case 9 :
  535.     case 10: 
  536.     case 11: 
  537.     case 12: 
  538.     case 14: 
  539.        actual_alloc[2][i] = bit_alloc[2][i] = (char) getbits (bs, (*alloc)[i][0].bits);
  540.        break;
  541.     case 3 :   /* T2 contains no bitalloc info */
  542.     case 5 :
  543.     case 6 :
  544.     case 7 :
  545.     case 13: 
  546.        if ((info->tc_alloc[sbgr] == 1) || (info->tc_alloc[sbgr] == 7))
  547.   bit_alloc[2][i] = bit_alloc[0][i];
  548.        else if ((info->tc_alloc[sbgr] == 2) || (info->tc_alloc[sbgr] == 6))
  549.   bit_alloc[2][i] = bit_alloc[1][i];
  550.        else
  551.   if (info->dyn_cross_LR)
  552.      bit_alloc[2][i] = bit_alloc[1][i];
  553.   else
  554.      bit_alloc[2][i] = bit_alloc[0][i];
  555.        break;
  556.     }
  557.  
  558.     /* T3 */
  559.     switch (info->dyn_cross_mode[sbgr])
  560.     {
  561.     case 1 :   /* T3 contains bitalloc info */
  562.     case 3 :
  563.     case 5 :
  564.     case 8 :
  565.     case 10: 
  566.     case 13: 
  567.        actual_alloc[3][i] = bit_alloc[3][i] = (char) getbits (bs, (*alloc)[i][0].bits);
  568.        break;
  569.     case 2 :   /* T3 has to copy its bitalloc from T0 */
  570.     case 4 :
  571.     case 6 :
  572.     case 7 :
  573.     case 12: 
  574.        bit_alloc[3][i] = bit_alloc[0][i];
  575.        break;
  576.     case 9 :   /* T3 has to copy its bitalloc from T2 */
  577.     case 11:
  578.     case 14: 
  579.        bit_alloc[3][i] = bit_alloc[2][i];
  580.        break;
  581.     }
  582.  
  583.     /* T4 */
  584.     switch (info->dyn_cross_mode[sbgr])
  585.     {
  586.     case 2 :   /* T4 contains bitalloc info */
  587.     case 3 :
  588.     case 6 :
  589.     case 9 : 
  590.        actual_alloc[4][i] = bit_alloc[4][i] = (char) getbits (bs, (*alloc)[i][0].bits);
  591.        break;
  592.     case 1 :   /* T4 has to copy its bitalloc from T1 */
  593.     case 4 :
  594.     case 5 :
  595.     case 7 :
  596.     case 11: 
  597.        bit_alloc[4][i] = bit_alloc[1][i];
  598.        break;
  599.     case 10:   /* T4 has to copy its bitalloc from T2 */
  600.     case 12:
  601.     case 14: 
  602.        bit_alloc[4][i] = bit_alloc[2][i];
  603.        break;
  604.     case 8 :   /* T4 has to copy its bitalloc from T3 */
  605.     case 13: 
  606.        bit_alloc[4][i] = bit_alloc[3][i];
  607.        break;
  608.     }
  609.  }
  610.       }
  611.    for (i=sblimit; i<SBLIMIT; i++)
  612.       for (j=*l; j<*m; j++)
  613.   bit_alloc[j][i] = 0;
  614.    if (bits_log)
  615.    {
  616.       for (j= *l; j < *m; j++)
  617.          for (i = 0; i < SBLIMIT; i++)
  618.  {
  619.     int alloc_bits = 0, alloc_id = bit_alloc[j][i];
  620.     if (actual_alloc[j][i] > 0)
  621.        alloc_bits = 12 * (*alloc)[i][alloc_id].bits * (*alloc)[i][alloc_id].group;
  622.     printf ("alloc_bi[ %d ][ %2d ]= %3dn", j, i, alloc_bits);
  623.  }
  624.    }
  625. }
  626. #ifdef Augmentation_7ch
  627. void II_decode_bitalloc_aug (Bit_stream *bs,
  628.      frame_params *fr_ps,
  629.      unsigned int bit_alloc[7][SBLIMIT],
  630.      int *l, int *m, int bits_log)
  631. {
  632.    layer *info = fr_ps->header;
  633.    int i,j,c,sbgr;
  634.    /* int stereo = fr_ps->stereo; */ /* not used for mc - decoding */
  635.    int sblimit = fr_ps->sblimit_mc;
  636.    al_table *alloc = fr_ps->alloc_mc;
  637.    unsigned int actual_alloc[7][SBLIMIT];
  638.    for (i = 0; i < SBLIMIT; i++)
  639.       for (j = *l; j < *m; j++)
  640.  actual_alloc[j][i] = 0;
  641.    for (i=0; i<sblimit; i++)
  642.       if (info->aug_dyn_cross_on == 0)
  643.  for (j=*l;j<*m;j++)
  644.     actual_alloc[j][i] = bit_alloc[j][i] = (char) getbits (bs, (*alloc)[i][0].bits);
  645.       else  /* dyn. cross mode */
  646.       {
  647.         int T5T0 = 0, T6T0 = 0, T6T1 = 1;
  648.     
  649.  if(i == 0) sbgr = 0;
  650.  else
  651.     for(c = 1; c < 12; c++)
  652.     {
  653.        if((sb_groups[c-1] < i) && (i <= sb_groups[c]))
  654.        {
  655.  sbgr = c;  /* search the valid subband group */
  656.  break;
  657. }
  658.      }
  659.  
  660.         if (info->tc_aug_alloc[sbgr] == 4 || info->tc_aug_alloc[sbgr] == 5)
  661.        if (info->dyn_cross_LR == 0)
  662.     T6T1 = 0;
  663.   else
  664.     T6T0 = 1;
  665.         else if (info->tc_aug_alloc[sbgr] == 6 || info->tc_aug_alloc[sbgr] == 7)
  666.           if (info->dyn_cross_LR)
  667.     T5T0 = 1;
  668.  /* read bitalloc info from bitstream */
  669.  switch (info->dyn_cross_aug_mode[sbgr])
  670.  {
  671.  case  0:   /* T5 and T6 contains bitalloc info */
  672.     actual_alloc[5][i] = bit_alloc[5][i] = (char) getbits (bs, (*alloc)[i][0].bits);
  673.     actual_alloc[6][i] = bit_alloc[6][i] = (char) getbits (bs, (*alloc)[i][0].bits);
  674.     break;
  675.  case  1:   /* T5 contains bitalloc info */
  676.  case  2:
  677.  case  3:
  678.  case  4:
  679.     actual_alloc[5][i] = bit_alloc[5][i] = (char) getbits (bs, (*alloc)[i][0].bits);
  680.     break;
  681.  
  682.  case  5:   /* T6 contains bitalloc info */
  683.  case 10:
  684.  case 14:
  685.     actual_alloc[6][i] = bit_alloc[6][i] = (char) getbits (bs, (*alloc)[i][0].bits);
  686.     break;
  687.  }
  688.  
  689.  /* copy bitalloc info from other channels */
  690.  switch (info->dyn_cross_aug_mode[sbgr])
  691.  {
  692.  case  1:   /* copy T6 from T1 */
  693.     bit_alloc[6][i] = bit_alloc[T6T1][i];
  694.     break;
  695.  case  2:   /* copy T6 from T2 */
  696.     bit_alloc[6][i] = bit_alloc[2][i];
  697.     break;
  698.  case  3:   /* copy T6 from T4 */
  699.     bit_alloc[6][i] = bit_alloc[4][i];
  700.     break;
  701.  case  4:   /* copy T6 from T5 */
  702.     bit_alloc[6][i] = bit_alloc[5][i];
  703.     break;
  704.  case  5:   /* copy T5 from T0 */
  705.     bit_alloc[5][i] = bit_alloc[T5T0][i];
  706.     break;
  707.  case  6:   /* copy T5 from T0 and T6 from T1 */
  708.     bit_alloc[5][i] = bit_alloc[T5T0][i];
  709.     bit_alloc[6][i] = bit_alloc[T6T1][i];
  710.     break;
  711.  case  7:   /* copy T5 from T0 and T6 from T2 */
  712.     bit_alloc[5][i] = bit_alloc[T5T0][i];
  713.     bit_alloc[6][i] = bit_alloc[2][i];
  714.     break;
  715.  case  8:   /* copy T5 from T0 and T6 from T4 */
  716.     bit_alloc[5][i] = bit_alloc[T5T0][i];
  717.     bit_alloc[6][i] = bit_alloc[4][i];
  718.     break;
  719.  case  9:   /* copy T5 and T6 from T0 */
  720.     bit_alloc[5][i] = bit_alloc[T5T0][i];
  721.     bit_alloc[6][i] = bit_alloc[T6T0][i];
  722.     break;
  723.  case 10:   /* copy T5 from T2 */
  724.     bit_alloc[5][i] = bit_alloc[2][i];
  725.     break;
  726.  case 11:   /* copy T5 from T2 and T6 from T1 */
  727.     bit_alloc[5][i] = bit_alloc[2][i];
  728.     bit_alloc[6][i] = bit_alloc[T6T1][i];
  729.     break;
  730.  case 12:   /* copy T5 and T6 from T2 */
  731.     bit_alloc[5][i] = bit_alloc[6][i] = bit_alloc[2][i];
  732.     break;
  733.  case 13:   /* copy T5 from T2 and T6 from T4 */
  734.     bit_alloc[5][i] = bit_alloc[2][i];
  735.     bit_alloc[6][i] = bit_alloc[4][i];
  736.     break;
  737.  case 14:   /* copy T5 from T3 */
  738.     bit_alloc[5][i] = bit_alloc[3][i];
  739.     break;
  740.  case 15:   /* copy T5 from T3 and T6 from T1 */
  741.     bit_alloc[5][i] = bit_alloc[3][i];
  742.     bit_alloc[6][i] = bit_alloc[T6T1][i];
  743.     break;
  744.  case 16:   /* copy T5 from T3 and T6 from T2 */
  745.     bit_alloc[5][i] = bit_alloc[3][i];
  746.     bit_alloc[6][i] = bit_alloc[2][i];
  747.     break;
  748.  case 17:   /* copy T5 from T3 and T6 from T4 */
  749.     bit_alloc[5][i] = bit_alloc[3][i];
  750.     bit_alloc[6][i] = bit_alloc[4][i];
  751.     break;
  752.  case 18:   /* copy T5 and T6 from T3 */
  753.     bit_alloc[5][i] = bit_alloc[6][i] = bit_alloc[3][i];
  754.     break;
  755.  }
  756.       }
  757.    for (i=sblimit; i<SBLIMIT; i++)
  758.       for (j=*l; j<*m; j++)
  759.  bit_alloc[j][i] = 0;
  760.    if (bits_log)
  761.    {
  762.       for (j= *l; j < *m; j++)
  763.          for (i = 0; i < SBLIMIT; i++)
  764.  {
  765.     int alloc_bits = 0, alloc_id = bit_alloc[j][i];
  766.     if (actual_alloc[j][i] > 0)
  767.        alloc_bits = 12 * (*alloc)[i][alloc_id].bits * (*alloc)[i][alloc_id].group;
  768.     printf ("alloc_bi[ %d ][ %2d ]= %3dn", j, i, alloc_bits);
  769.  }
  770.    }
  771. }
  772. #endif
  773. void II_decode_bitalloc_ml(Bit_stream *bs,
  774.    frame_params *fr_ps,
  775.    unsigned int bit_alloc_ml[7][SBLIMIT],
  776.    int *m)
  777. {
  778.    int i,j;
  779.    int sblimit_ml = fr_ps->sblimit_ml;
  780.    al_table *alloc_ml = fr_ps->alloc_ml;
  781.    /* JR: no dynamic crosstalk for multilingual channels */
  782.    /* JR: no phantom center coding for multilingual channels */
  783.    /* JR: no joint coding for multilingual channels */
  784.    /* JR: they're really simple, aren't they? */
  785.    for (i=0;i<sblimit_ml;i++)
  786.     for (j=0;j<*m;j++) 
  787.      bit_alloc_ml[j][i] = (char) getbits (bs, (*alloc_ml)[i][0].bits);
  788.    for (i=sblimit_ml;i<SBLIMIT;i++) 
  789.     for (j=0;j<*m;j++) 
  790.      bit_alloc_ml[j][i] = 0;
  791. }
  792. /*****************************************************************
  793. /*
  794. /* The following two functions implement the layer II
  795. /* format of scale factor extraction. Layer I involves reading
  796. /* 6 bit per subband as scale factor. Layer II requires reading
  797. /* first the scfsi which in turn indicate the number of scale factors
  798. /* transmitted.
  799. /*   Layer II : II_decode_scale
  800. /*
  801. /*************************** Layer II stuff ***************************/
  802. /* 28.9.93 R.S. reading of the prediction coefficients */
  803. /* 03.6.94 R.S. read pred-coef. due to MPEG 2 - DIS    */
  804. /**********************************************************************/
  805. /* JMZ 09/03/1995 Multilingual adaptations , WtK 7/8/95               */
  806. /**********************************************************************/
  807. void I_decode_scale (Bit_stream   *bs,
  808.      frame_params *fr_ps,
  809.      unsigned int bit_alloc[7][SBLIMIT],
  810.      unsigned int scale_index[7][3][SBLIMIT],
  811.      int   part,
  812.      int   scf_log)
  813. {
  814.    int i,j;
  815.    int stereo = fr_ps->stereo;
  816.    int sblimit = fr_ps->sblimit;
  817.    for (i=0; i<SBLIMIT; i++)
  818.       for (j=0;j<stereo;j++)
  819.  if (!bit_alloc[j][i])
  820.     scale_index[j][part][i] = SCALE_RANGE-1;
  821.  else                    /* 6 bit per scale factor */
  822.     scale_index[j][part][i] = getbits (bs, 6);
  823. }
  824. void II_decode_scale (Bit_stream *bs,
  825.       frame_params *fr_ps,
  826.       unsigned int scfsi[7][SBLIMIT], 
  827.       unsigned int bit_alloc[7][SBLIMIT],
  828.       unsigned int scale_index[7][3][SBLIMIT],
  829.       int *l, int *m, int scfsi_log)
  830. {
  831.     layer *info = fr_ps->header;
  832.     int stereo = fr_ps->stereo;
  833.     int i,j;
  834.     int px,pci;
  835.     int sblimit = fr_ps->sblimit;
  836.     if (*m == stereo)
  837. sblimit = fr_ps->sblimit;
  838.     else
  839.      sblimit = fr_ps->sblimit_mc;
  840.     for (i = 0; i < sblimit; i++) 
  841.     {
  842. for (j = *l; j < *m; j++)   /* 2 bit scfsi */
  843.     if (bit_alloc[j][i]) 
  844.   scfsi[j][i] = (char) getbits (bs, 2);
  845.     else
  846. scfsi[j][i] = 4;
  847.     }
  848.     for (i = sblimit; i < SBLIMIT; i++) 
  849. for (j = *l; j < *m; j++)
  850.     scfsi[j][i] = 4;
  851.     if (scfsi_log)
  852.     {
  853. for (j= *l; j < *m; j++)
  854.     for (i = 0; i < SBLIMIT; i++)
  855.     {
  856. int scf_bits;
  857.     
  858. switch (scfsi[j][i])
  859. {
  860.     /* all three scale factors transmitted */
  861.     case 0 : scf_bits = 20;
  862.      break;
  863.     /* two scale factors transmitted */
  864.     case 1 :
  865.     case 3 : scf_bits = 14;
  866.      break;
  867.     /* only one scale factor transmitted */
  868.     case 2 : scf_bits = 8;
  869.      break;
  870.     /* no scale factors transmitted */
  871.     default : scf_bits = 0;
  872. }
  873. printf ("scf_bits[ %d ][ %2d ]= %3dn", j, i, scf_bits);
  874.     }
  875.     }
  876.     /* 3.6.94 R.S. read the prediction coefficients in the mc - part */
  877.     if (*m > stereo && *m < 7)
  878. if (fr_ps->header->mc_prediction_on == 1)
  879.     for (i = 0; i < 8; i++)
  880. if (fr_ps->header->mc_prediction[i] == 1)
  881.     for (px = 0; px < pred_coef_table[fr_ps->pred_mode][fr_ps->header->dyn_cross_mode[i]]; px++)
  882. if (fr_ps->header->mc_predsi[i][px] != 0)
  883. {
  884.     /* predictors are transfered */
  885.     fr_ps->header->mc_delay_comp[i][px] = getbits (bs, 3);
  886.     for (pci = 0; pci < fr_ps->header->mc_predsi[i][px]; pci++)
  887. fr_ps->header->mc_pred_coeff[i][px][pci] = getbits (bs, 8);
  888. }
  889. else
  890. {
  891.     /* no prediction coef. */
  892.     fr_ps->header->mc_pred_coeff[i][px][0] = 127;     /* Index 127 -> 0.0 */
  893.     fr_ps->header->mc_delay_comp[i][px] = 0;
  894. }
  895.     /* 31/10/95 Ralf Schwalbe LFE */
  896.     if (*l == stereo)
  897. if (info->lfe)
  898.     if (info->lfe_alloc)
  899. info->lfe_scf = getbits (bs, 6);
  900.     for (i = 0; i < sblimit; i++) 
  901. for (j = *l; j < *m; j++)
  902.     if (bit_alloc[j][i])
  903. switch (scfsi[j][i])
  904. {
  905.     /* all three scale factors transmitted */
  906.     case 0 : scale_index[j][0][i] = getbits (bs, 6);
  907.      scale_index[j][1][i] = getbits (bs, 6);
  908.      scale_index[j][2][i] = getbits (bs, 6);
  909.      break;
  910.     /* scale factor 1 & 3 transmitted */
  911.     case 1 : scale_index[j][0][i] =
  912.      scale_index[j][1][i] = getbits (bs, 6);
  913.      scale_index[j][2][i] = getbits (bs, 6);
  914.      break;
  915.     /* scale factor 1 & 2 transmitted */
  916.     case 3 : scale_index[j][0][i] = getbits (bs, 6);
  917.      scale_index[j][1][i] =
  918.      scale_index[j][2][i] = getbits (bs, 6);
  919.      break;
  920.     /* only one scale factor transmitted */
  921.     case 2 : scale_index[j][0][i] =
  922.      scale_index[j][1][i] =
  923.      scale_index[j][2][i] = getbits (bs, 6);
  924.      break;
  925.     default : scale_index[j][0][i] =
  926.       scale_index[j][1][i] =
  927.       scale_index[j][2][i] = SCALE_RANGE-1;
  928.       break;
  929. }
  930.     else
  931. scale_index[j][0][i] = scale_index[j][1][i] = scale_index[j][2][i] = SCALE_RANGE-1;
  932.     for (i = sblimit; i < SBLIMIT; i++)
  933. for (j = *l; j < *m; j++)
  934.     scale_index[j][0][i] = scale_index[j][1][i] = scale_index[j][2][i] = SCALE_RANGE-1;
  935. }
  936. /**********************************************************************/
  937. /* JMZ 15/03/1995 Multilingual                                        */
  938. /**********************************************************************/
  939. void II_decode_scale_ml(Bit_stream *bs,
  940.         frame_params *fr_ps,
  941.         unsigned int scfsi[7][SBLIMIT], 
  942.         unsigned int bit_alloc[7][SBLIMIT],
  943.         unsigned int scale_index[7][3][SBLIMIT],
  944.         int *m)
  945. {
  946.    int i,j;
  947.    int px,pci;
  948.    int sblimit_ml = fr_ps->sblimit_ml;
  949.    for (i=0;i<sblimit_ml;i++) for (j=0;j<*m;j++)   /* 2 bit scfsi */
  950. if (bit_alloc[j][i]) 
  951. {
  952.    scfsi[j][i] = (char) getbits (bs, 2);
  953.    }
  954. else scfsi[j][i] = 4;
  955.    for (i=sblimit_ml;i<SBLIMIT;i++) for (j=0;j<*m;j++)
  956. scfsi[j][i] = 4;
  957.    for (i = 0; i < sblimit_ml; i++) for (j = 0; j < *m; j++) {
  958.   if (bit_alloc[j][i])
  959.     switch (scfsi[j][i]) {
  960.  /* all three scale factors transmitted */
  961.  case 0 : scale_index[j][0][i] = getbits (bs, 6);
  962.   scale_index[j][1][i] = getbits (bs, 6);
  963.   scale_index[j][2][i] = getbits (bs, 6);
  964.   break;
  965.  /* scale factor 1 & 3 transmitted */
  966.  case 1 : scale_index[j][0][i] =
  967.   scale_index[j][1][i] = getbits (bs, 6);
  968.   scale_index[j][2][i] = getbits (bs, 6);
  969.   break;
  970.          /* scale factor 1 & 2 transmitted */
  971.  case 3 : scale_index[j][0][i] = getbits (bs, 6);
  972.   scale_index[j][1][i] =
  973.   scale_index[j][2][i] = getbits (bs, 6);
  974.             break;
  975.  /* only one scale factor transmitted */
  976.          case 2 : scale_index[j][0][i] =
  977.           scale_index[j][1][i] =
  978.           scale_index[j][2][i] = getbits (bs, 6);
  979.             break;
  980.  default : scale_index[j][0][i] =
  981.            scale_index[j][1][i] =
  982.            scale_index[j][2][i] = SCALE_RANGE-1;
  983.              break;
  984.           }
  985.           else {
  986.                           scale_index[j][0][i] = scale_index[j][1][i] =
  987.                   scale_index[j][2][i] = SCALE_RANGE-1;
  988.   }
  989.    }
  990.    for (i=sblimit_ml;i<SBLIMIT;i++) for (j=0;j<*m;j++) {
  991.           scale_index[j][0][i] = scale_index[j][1][i] =
  992.           scale_index[j][2][i] = SCALE_RANGE-1;
  993.    }
  994. }
  995. /**************************************************************
  996. /*
  997. /* The following two routines take care of reading the
  998. /* compressed sample from the bit stream for layer 2.
  999. /* For layer 1, read the number of bits as indicated
  1000. /* by the bit_alloc information. For layer 2, if grouping is
  1001. /* indicated for a particular subband, then the sample size has
  1002. /* to be read from the bits_group and the merged samples has
  1003. /* to be decompose into the three distinct samples. Otherwise,
  1004. /* it is the same for as layer one.
  1005. /*
  1006. /*************************** Layer II stuff ************************/
  1007. void I_buffer_sample (Bit_stream *bs,
  1008.       frame_params *fr_ps,
  1009.       unsigned int sample[7][3][SBLIMIT],
  1010.       unsigned int bit_alloc[7][SBLIMIT])
  1011. {
  1012.    int i,j,k;
  1013.    int stereo = fr_ps->stereo;
  1014.    int sblimit = fr_ps->sblimit;
  1015.    int jsbound = fr_ps->jsbound;
  1016.    unsigned int s;
  1017.    for (i=0; i<jsbound; i++)
  1018.       for (j=0; j<stereo; j++)
  1019.  if ((k = bit_alloc[j][i]) == 0)
  1020.     sample[j][0][i] = 0;
  1021.  else 
  1022.     sample[j][0][i] = (unsigned int) getbits (bs, k+1);
  1023.    for (i=jsbound; i<SBLIMIT; i++)
  1024.    {
  1025.       if ((k = bit_alloc[0][i]) == 0)
  1026.  s = 0;
  1027.       else 
  1028.  s = (unsigned int) getbits (bs, k+1);
  1029.       for (j=0; j<stereo; j++)
  1030.  sample[j][0][i] = s;
  1031.    }
  1032. }
  1033. void II_buffer_sample (Bit_stream *bs,
  1034.        frame_params *fr_ps,
  1035.        unsigned int sample[7][3][SBLIMIT],
  1036.        unsigned int bit_alloc[7][SBLIMIT])
  1037. {
  1038.    int i,j,k,m;
  1039.    int stereo = fr_ps->stereo;
  1040.    int sblimit = fr_ps->sblimit;
  1041.    int jsbound = fr_ps->jsbound;
  1042.    al_table *alloc = fr_ps->alloc;
  1043.    for (i=0;i<sblimit;i++)
  1044.       for (j= 0;j<((i<jsbound)? stereo:1);j++)
  1045.       {
  1046.    if (bit_alloc[j][i])
  1047.    {
  1048.  /* check for grouping in subband */
  1049.  if ((*alloc)[i][bit_alloc[j][i]].group==3)
  1050.    {
  1051. for (m=0;m<3;m++)
  1052. {
  1053.   k = (*alloc)[i][bit_alloc[j][i]].bits;
  1054.   sample[j][m][i] = (unsigned int) getbits (bs, k);
  1055.  }
  1056.  }
  1057.  else
  1058.  {    /* bit_alloc = 3, 5, 9 */
  1059.    unsigned int nlevels, c=0;
  1060.    nlevels = (*alloc)[i][bit_alloc[j][i]].steps;
  1061.    k=(*alloc)[i][bit_alloc[j][i]].bits;
  1062.    c = (unsigned int) getbits (bs, k);
  1063.    for (k=0;k<3;k++)
  1064.    {
  1065.  sample[j][k][i] = c % nlevels;
  1066.  c /= nlevels;
  1067.    }
  1068.  }
  1069.    }
  1070.    else
  1071.    {      /* for no sample transmitted */
  1072.  for (k=0;k<3;k++) sample[j][k][i] = 0;
  1073.    }
  1074.    if(stereo == 2 && i>= jsbound)  /* joint stereo : copy L to R */
  1075.   for (k=0;k<3;k++) sample[1][k][i] = sample[0][k][i];
  1076.       }
  1077.    for (i = sblimit; i < SBLIMIT; i++)
  1078.  for (j = 0; j < stereo; j++)
  1079. for (k = 0; k < 3; k++)
  1080.    sample[j][k][i] = 0;
  1081. }
  1082. /******************** mc - layer2 stuff ******************************/
  1083. /* 19.10.93 R.S. */
  1084. void II_buffer_sample_mc (Bit_stream *bs,
  1085.   frame_params *fr_ps,
  1086.   unsigned int sample[7][3][SBLIMIT],
  1087.   unsigned int bit_alloc[7][SBLIMIT],
  1088.   int ch_start, int channels, int gr)
  1089. {
  1090.    layer *info = fr_ps->header;
  1091.    int i,j,k,m,sbgr,l;
  1092.    unsigned int nlevels, c=0;
  1093.    int sblimit = fr_ps->sblimit_mc;
  1094.    int transmitted;
  1095.    al_table *alloc = fr_ps->alloc_mc;
  1096.    /* 31/10/95 Ralf Schwalbe LFE */
  1097.    /* 961003 FdB LFE number of bits corrected */
  1098.    if(info->lfe && info->lfe_alloc > 0)
  1099. info->lfe_spl[gr] = (unsigned int) getbits (bs, info->lfe_alloc+1);
  1100.    for (i = 0; i < sblimit; i++)
  1101.    {
  1102.   if( i == 0) sbgr = 0 ;
  1103.   else
  1104.      for(l = 1; l < 12; l++)
  1105. if((sb_groups[l-1] < i) && (i <= sb_groups[l]))
  1106. {
  1107.    sbgr = l; break;
  1108. }
  1109.  for (j = ch_start; j < channels; j++)
  1110.  {
  1111.    if (bit_alloc[j][i])
  1112.    {
  1113.      transmitted = 1;
  1114.      if (fr_ps->header->dyn_cross_on == 1)
  1115.      {
  1116. if (fr_ps->dyn_cross_bits == 4 && (
  1117. (fr_ps->header->dyn_cross_mode[sbgr]==1  && j==4) ||
  1118. (fr_ps->header->dyn_cross_mode[sbgr]==2  && j==3) ||
  1119. (fr_ps->header->dyn_cross_mode[sbgr]==3  && j==2) ||
  1120. (fr_ps->header->dyn_cross_mode[sbgr]==4  && j!=2) ||
  1121. (fr_ps->header->dyn_cross_mode[sbgr]==5  && j!=3) ||
  1122. (fr_ps->header->dyn_cross_mode[sbgr]==6  && j!=4) ||
  1123. (fr_ps->header->dyn_cross_mode[sbgr]==7) ||
  1124. (fr_ps->header->dyn_cross_mode[sbgr]==8  && j==4) ||
  1125. (fr_ps->header->dyn_cross_mode[sbgr]==9  && j==3) ||
  1126. (fr_ps->header->dyn_cross_mode[sbgr]==10 && j==4) ||
  1127. (fr_ps->header->dyn_cross_mode[sbgr]==11 && j!=2) ||
  1128. (fr_ps->header->dyn_cross_mode[sbgr]==12 && j!=2) ||
  1129. (fr_ps->header->dyn_cross_mode[sbgr]==13 && j!=3) ||
  1130. (fr_ps->header->dyn_cross_mode[sbgr]==14 && j!=2)
  1131.           ))
  1132.    transmitted = 0; /* 3/2 */
  1133. if (fr_ps->dyn_cross_bits == 3 && (
  1134. (fr_ps->header->dyn_cross_mode[sbgr]==1  && j==3) ||
  1135. (fr_ps->header->dyn_cross_mode[sbgr]==2  && j==2) ||
  1136. (fr_ps->header->dyn_cross_mode[sbgr]==3) ||
  1137. (fr_ps->header->dyn_cross_mode[sbgr]==4  && j==3)
  1138.   ))
  1139.    transmitted = 0; /* 3/1 and 2/2 */
  1140. if (fr_ps->dyn_cross_bits == 1 && fr_ps->header->dyn_cross_mode[sbgr]==1 && j==2)
  1141.    transmitted = 0; /* 3/0 (+2/0) and 2/1 */
  1142. if (fr_ps->header->surround == 3 && fr_ps->header->dyn_second_stereo[sbgr] == 1)
  1143. {
  1144.    if ((fr_ps->header->center == 1 || fr_ps->header->center == 3) && j == 4)
  1145.               transmitted = 0;
  1146.            else if (fr_ps->header->center == 0 && j == 3)
  1147.               transmitted = 0;
  1148. }
  1149.      }
  1150.    }
  1151.    else
  1152.       transmitted = 0;
  1153.    if (transmitted == 1)
  1154.    {
  1155. /* check for grouping in subband */
  1156. if ((*alloc)[i][bit_alloc[j][i]].group==3)
  1157. {
  1158. for (m=0;m<3;m++)
  1159. {
  1160. k = (*alloc)[i][bit_alloc[j][i]].bits;
  1161. sample[j][m][i] = (unsigned int) getbits (bs, k);
  1162. }
  1163. }
  1164. else
  1165. { /* bit_alloc = 3, 5, 9 */
  1166. nlevels = (*alloc)[i][bit_alloc[j][i]].steps;
  1167. k=(*alloc)[i][bit_alloc[j][i]].bits;
  1168. c = (unsigned int) getbits (bs, k);
  1169. for (k=0;k<3;k++)
  1170. {
  1171. sample[j][k][i] = c % nlevels;
  1172. c /= nlevels;
  1173. }
  1174. }
  1175.    }
  1176.    else   /* no samples transmitted */
  1177.       for (k=0; k<3; k++)
  1178.  sample[j][k][i] = 0;
  1179.  }  /* for channel loop */
  1180.    }  /* for sblimit loop */
  1181.    for (i = sblimit; i < SBLIMIT; i++)
  1182.  for (j = ch_start; j < channels; j++)
  1183. for (k = 0; k < 3; k++)  sample[j][k][i] = 0;
  1184. }
  1185. #ifdef Augmentation_7ch
  1186. void II_buffer_sample_aug(Bit_stream *bs,
  1187. frame_params *fr_ps,
  1188. unsigned int sample[7][3][SBLIMIT],
  1189. unsigned int bit_alloc[7][SBLIMIT],
  1190. int gr)
  1191. {
  1192.    int i,j,k,m,sbgr,l;
  1193.    unsigned int nlevels, c=0;
  1194.    int sblimit = fr_ps->sblimit_mc;
  1195.    int transmitted;
  1196.    al_table *alloc = fr_ps->alloc_mc;
  1197.    for (i = 0; i < sblimit; i++)
  1198.    {
  1199.       if( i == 0) sbgr = 0;
  1200.       else
  1201.  for(l = 1; l < 12; l++)
  1202.     if((sb_groups[l-1] < i) && (i <= sb_groups[l]))
  1203.     {
  1204.        sbgr = l; break;
  1205.     }
  1206.       for (j = 5; j < 7; j++)
  1207.       {
  1208.  if (bit_alloc[j][i])
  1209.  {
  1210.     transmitted = 1;
  1211.     if (fr_ps->header->aug_dyn_cross_on == 1)
  1212.     {
  1213.        if (j == 5)
  1214.        {
  1215.   if (fr_ps->header->dyn_cross_aug_mode[sbgr] > 4)
  1216.      transmitted = 0;
  1217.        }
  1218.        else
  1219.        {
  1220.   transmitted = 0;
  1221.   switch (fr_ps->header->dyn_cross_aug_mode[sbgr])
  1222.   {
  1223.   case  0:
  1224.   case  5:
  1225.   case 10:
  1226.   case 14:
  1227.    transmitted = 1;
  1228.    break;
  1229.   }
  1230.        }
  1231.     }
  1232.  }
  1233.  else
  1234.     transmitted = 0;
  1235.  if (transmitted == 1)
  1236.  {
  1237.       /* check for grouping in subband */
  1238.       if ((*alloc)[i][bit_alloc[j][i]].group==3)
  1239.       {
  1240.       for (m=0;m<3;m++)
  1241.       {
  1242.       k = (*alloc)[i][bit_alloc[j][i]].bits;
  1243.       sample[j][m][i] = (unsigned int) getbits (bs, k);
  1244.       }
  1245.       }
  1246.       else
  1247.       { /* bit_alloc = 3, 5, 9 */
  1248.       nlevels = (*alloc)[i][bit_alloc[j][i]].steps;
  1249.       k=(*alloc)[i][bit_alloc[j][i]].bits;
  1250.       c = (unsigned int) getbits (bs, k);
  1251.       for (k=0;k<3;k++)
  1252.       {
  1253.       sample[j][k][i] = c % nlevels;
  1254.       c /= nlevels;
  1255.       }
  1256.       }
  1257.  }
  1258.  else   /* no samples transmitted */
  1259.     for (k=0; k<3; k++)
  1260.        sample[j][k][i] = 0;
  1261.       }  /* for channel loop */
  1262.    }  /* for sblimit loop */
  1263.    for (i = sblimit; i < SBLIMIT; i++)
  1264.  for (j = 5; j < 7; j++)
  1265. for (k = 0; k < 3; k++)  sample[j][k][i] = 0;
  1266. }
  1267. #endif
  1268. /***************************************************************/
  1269. /* 09/03/1995 JMZ Multilingual */
  1270. /***************************************************************/
  1271. /* 15/03/1995 JMZ */
  1272. void II_buffer_sample_ml(Bit_stream *bs,
  1273.  frame_params *fr_ps,
  1274.  unsigned int sample_ml[7][3][SBLIMIT],
  1275.  unsigned int bit_alloc_ml[7][SBLIMIT],
  1276.  int *n_ml_ch)
  1277. {
  1278.    int i,j,k,m,sbgr,l;
  1279.    unsigned int nlevels, c=0;
  1280.    int sblimit_ml = fr_ps->sblimit_ml;
  1281.    al_table *alloc_ml = fr_ps->alloc_ml;
  1282.    for (i = 0; i < sblimit_ml; i++)
  1283.    {
  1284.  for (j = 0; j < *n_ml_ch; j++)
  1285.  {
  1286.    if (bit_alloc_ml[j][i])
  1287.    {
  1288. /* JR: no dynamic crosstalk for multilingual channels */
  1289. /* check for grouping in subband */
  1290. if ((*alloc_ml)[i][bit_alloc_ml[j][i]].group==3)
  1291. {
  1292. for (m=0;m<3;m++)
  1293. {
  1294. k = (*alloc_ml)[i][bit_alloc_ml[j][i]].bits;
  1295. sample_ml[j][m][i] = (unsigned int) getbits (bs, k);
  1296. }
  1297. }
  1298. else
  1299. {    /* bit_alloc = 3, 5, 9 */
  1300.   nlevels = (*alloc_ml)[i][bit_alloc_ml[j][i]].steps;
  1301.   k=(*alloc_ml)[i][bit_alloc_ml[j][i]].bits;
  1302.   c = (unsigned int) getbits (bs, k);
  1303.   for (k=0;k<3;k++)
  1304.   {
  1305. sample_ml[j][k][i] = c % nlevels;
  1306. c /= nlevels;
  1307.   }
  1308. }
  1309.    }
  1310.    else
  1311.    {      /* for no sample transmitted */
  1312.  for (k=0;k<3;k++) sample_ml[j][k][i] = 0;
  1313.    }
  1314.  }
  1315.    }
  1316.    for (i = sblimit_ml; i < SBLIMIT; i++)
  1317.  for (j = 0; j < *n_ml_ch; j++)
  1318. for (k = 0; k < 3; k++)
  1319.    sample_ml[j][k][i] = 0;
  1320. }
  1321. /**************************************************************
  1322. /*
  1323. /*   Restore the compressed sample to a factional number.
  1324. /*   first complement the MSB of the sample
  1325. /*    for layer I :
  1326. /*    Use s = (s' + 2^(-nb+1) ) * 2^nb / (2^nb-1)
  1327. /*   for Layer II :
  1328. /*   Use the formula s = s' * c + d
  1329. /*
  1330. /**************************************************************/
  1331. static double c[17] = { 1.33333333333, 1.60000000000, 1.14285714286,
  1332. 1.77777777777, 1.06666666666, 1.03225806452,
  1333. 1.01587301587, 1.00787401575, 1.00392156863,
  1334. 1.00195694716, 1.00097751711, 1.00048851979,
  1335. 1.00024420024, 1.00012208522, 1.00006103888,
  1336. 1.00003051851, 1.00001525902 };
  1337. static double d[17] = { 0.500000000, 0.500000000, 0.250000000, 0.500000000,
  1338. 0.125000000, 0.062500000, 0.031250000, 0.015625000,
  1339. 0.007812500, 0.003906250, 0.001953125, 0.0009765625,
  1340. 0.00048828125, 0.00024414063, 0.00012207031,
  1341. 0.00006103516, 0.00003051758 };
  1342. /************************** Layer II stuff ************************/
  1343. void I_dequantize_sample (unsigned int sample[7][3][SBLIMIT],
  1344.   int part,
  1345.   unsigned int bit_alloc[7][SBLIMIT],
  1346.   double fraction[7][SBLIMIT][3][12],
  1347.   frame_params *fr_ps, int *z)
  1348. {
  1349.    int i, nb, k, gr_id, gr_sam;
  1350.    int stereo = fr_ps->stereo;
  1351.    int sblimit = fr_ps->sblimit;
  1352.    gr_id = 4*part + (*z / 3);
  1353.    gr_sam = *z % 3;
  1354.    for (i=0; i<SBLIMIT; i++)
  1355.       for (k=0; k<stereo; k++)
  1356.  if (bit_alloc[k][i])
  1357.  {
  1358.     nb = bit_alloc[k][i] + 1;
  1359.     if (((sample[k][0][i] >> nb-1) & 1) == 1)
  1360.        fraction[k][i][gr_sam][gr_id] = 0.0;
  1361.     else
  1362.        fraction[k][i][gr_sam][gr_id] = -1.0;
  1363.     fraction[k][i][gr_sam][gr_id] += (double) (sample[k][0][i] & ((1<<nb-1)-1)) /
  1364.  (double) (1L<<nb-1);
  1365.     fraction[k][i][gr_sam][gr_id] =
  1366.  (double) (fraction[k][i][gr_sam][gr_id] + 1.0 / (double)(1L<<nb-1)) *
  1367.      (double) (1L<<nb) / (double) ((1L<<nb)-1);
  1368.  }
  1369.  else
  1370.     fraction[k][i][gr_sam][gr_id] = 0.0;
  1371. }
  1372. void II_dequantize_sample (unsigned int sample[7][3][SBLIMIT],
  1373.    unsigned int bit_alloc[7][SBLIMIT],
  1374.    double fraction[7][SBLIMIT][3][12],
  1375.    frame_params *fr_ps, int *z)
  1376. {
  1377.    int i, j, k, x;
  1378.    int stereo = fr_ps->stereo;
  1379.    int sblimit = fr_ps->sblimit;
  1380.    al_table *alloc = fr_ps->alloc;
  1381.    for (i=0;i<sblimit;i++)  for (j=0;j<3;j++) for (k = 0; k < stereo ; k++)
  1382.  if (bit_alloc[k][i])
  1383.  {
  1384.    /* locate MSB in the sample */
  1385.    x = 0;
  1386. #ifndef MSDOS
  1387.    while ((1L<<x) < (*alloc)[i][bit_alloc[k][i]].steps) x++;
  1388. #else
  1389.    /* microsoft C thinks an int is a short */
  1390.    while (( (unsigned long) (1L<<(long)x) <
  1391. (unsigned long)( (*alloc)[i][bit_alloc[k][i]].steps)
  1392.   ) && ( x < 16) ) x++;
  1393. #endif
  1394.    /* MSB inversion */
  1395.    if (((sample[k][j][i] >> (x-1)) & 1) == 1)
  1396.   fraction[k][i][j][*z] = 0.0;
  1397.    else  fraction[k][i][j][*z] = -1.0;
  1398.    /* Form a 2's complement sample */
  1399.    fraction[k][i][j][*z] += (double) (sample[k][j][i] & ((1<<(x-1))-1)) /
  1400. (double) (1L<<(x-1));
  1401.    /* Dequantize the sample */
  1402.    fraction[k][i][j][*z] += d[(*alloc)[i][bit_alloc[k][i]].quant];
  1403.    fraction[k][i][j][*z] *= c[(*alloc)[i][bit_alloc[k][i]].quant];
  1404.  }
  1405.  else fraction[k][i][j][*z] = 0.0;
  1406.    for (i=sblimit;i<SBLIMIT;i++)
  1407.   for (j=0;j<3;j++)
  1408.  for(k = 0; k < stereo; k++)
  1409.  fraction[k][i][j][*z] = 0.0;
  1410. }
  1411. /************************** MC Layer II stuff ************************/
  1412. void II_dequantize_sample_mc (unsigned int sample[7][3][SBLIMIT],
  1413.       unsigned int bit_alloc[7][SBLIMIT],
  1414.       double fraction[7][SBLIMIT][3][12],
  1415.       frame_params *fr_ps, int ch_start, int channels, int *z)
  1416. {
  1417.    int i, j, k, x,sbgr,l;
  1418.    int sblimit = fr_ps->sblimit_mc;
  1419.    al_table *alloc = fr_ps->alloc_mc;
  1420.    for (i = 0; i < sblimit; i++)
  1421.    {
  1422. if (i == 0) sbgr = 0;
  1423. else
  1424.    for (l = 1; l < 12; l++)
  1425. if ((sb_groups[l-1] < i) && (i <= sb_groups[l]))
  1426. {
  1427.     sbgr = l; break;
  1428. }
  1429. for (j = 0; j < 3; j++)
  1430.     for (k = ch_start; k < channels; k++)
  1431. if (bit_alloc[k][i])
  1432. {
  1433.     if (fr_ps->header->dyn_cross_on == 0)
  1434.     {
  1435. /* locate MSB in the sample */
  1436. x = 0;
  1437. #ifndef MSDOS
  1438. while ((1L << x) < (*alloc)[i][bit_alloc[k][i]].steps)
  1439.     x++;
  1440. #else
  1441. /* microsoft C thinks an int is a short */
  1442. while (((unsigned long) (1L << (long) x) <
  1443.         (unsigned long) ((*alloc)[i][bit_alloc[k][i]].steps)) &&
  1444.        (x < 16))
  1445.     x++;
  1446. #endif
  1447. /* MSB inversion */
  1448. if (((sample[k][j][i] >> (x-1)) & 1) == 1)
  1449.     fraction[k][i][j][*z] = 0.0;
  1450. else 
  1451.     fraction[k][i][j][*z] = -1.0;
  1452. /* Form a 2's complement sample */
  1453. fraction[k][i][j][*z] += (double) (sample[k][j][i] & ((1<<(x-1))-1)) /
  1454.      (double) (1L<<(x-1));
  1455. /* Dequantize the sample */
  1456. fraction[k][i][j][*z] += d[(*alloc)[i][bit_alloc[k][i]].quant];
  1457. fraction[k][i][j][*z] *= c[(*alloc)[i][bit_alloc[k][i]].quant];
  1458.     }
  1459.     else   /* 21.07.94 Ralf Schwalbe dyn. cross mode */
  1460.     {
  1461. if (fr_ps->dyn_cross_bits == 4  &&
  1462.     ((fr_ps->header->dyn_cross_mode[sbgr]==0) ||
  1463.      (fr_ps->header->dyn_cross_mode[sbgr]==1  && k!=4) ||
  1464.      (fr_ps->header->dyn_cross_mode[sbgr]==2  && k!=3) ||
  1465.      (fr_ps->header->dyn_cross_mode[sbgr]==3  && k!=2) ||
  1466.      (fr_ps->header->dyn_cross_mode[sbgr]==8  && k!=4) ||
  1467.      (fr_ps->header->dyn_cross_mode[sbgr]==9  && k!=3) ||
  1468.      (fr_ps->header->dyn_cross_mode[sbgr]==10 && k!=4)))
  1469. {
  1470.     x = 0;
  1471. #ifndef MSDOS
  1472.     while ((1L << x) < (*alloc)[i][bit_alloc[k][i]].steps)
  1473. x++;
  1474. #else
  1475.     /* microsoft C thinks an int is a short */
  1476.     while (((unsigned long) (1L << (long) x) <
  1477.     (unsigned long) ((*alloc)[i][bit_alloc[k][i]].steps)) &&
  1478.    (x < 16))
  1479. x++;
  1480. #endif
  1481.     /* MSB inversion */
  1482.     if (((sample[k][j][i] >> (x-1)) & 1) == 1)
  1483. fraction[k][i][j][*z] = 0.0;
  1484.     else
  1485. fraction[k][i][j][*z] = -1.0;
  1486.     /* Form a 2's complement sample */
  1487.     fraction[k][i][j][*z] += (double) (sample[k][j][i] & ((1<<(x-1))-1)) /
  1488.     (double) (1L<<(x-1));
  1489.     /* Dequantize the sample */
  1490.     fraction[k][i][j][*z] += d[(*alloc)[i][bit_alloc[k][i]].quant];
  1491.     fraction[k][i][j][*z] *= c[(*alloc)[i][bit_alloc[k][i]].quant];
  1492. }  /* end if 2-channel dyn-cross mode */
  1493. if (fr_ps->dyn_cross_bits != 4 ||
  1494.     ((fr_ps->header->dyn_cross_mode[sbgr]==4  && k==2) ||
  1495.      (fr_ps->header->dyn_cross_mode[sbgr]==5  && k==3) ||
  1496.      (fr_ps->header->dyn_cross_mode[sbgr]==6  && k==4) ||
  1497.      (fr_ps->header->dyn_cross_mode[sbgr]==11 && k==2) ||
  1498.      (fr_ps->header->dyn_cross_mode[sbgr]==12 && k==2) ||
  1499.      (fr_ps->header->dyn_cross_mode[sbgr]==13 && k==3) ||
  1500.      (fr_ps->header->dyn_cross_mode[sbgr]==14 && k==2))) 
  1501. {
  1502.      if ((fr_ps->dyn_cross_bits == 3 && ((fr_ps->header->dyn_cross_mode[sbgr] == 1 && k==3) ||
  1503.  (fr_ps->header->dyn_cross_mode[sbgr] == 2 && k==2) ||
  1504.  fr_ps->header->dyn_cross_mode[sbgr] == 3 ||
  1505.  (fr_ps->header->dyn_cross_mode[sbgr] == 4 && k==3)
  1506. )) ||
  1507.  (fr_ps->dyn_cross_bits == 1 && fr_ps->header->dyn_cross_mode[sbgr] == 1 && k == 2) ||
  1508.  (fr_ps->header->surround == 3 && fr_ps->header->dyn_second_stereo[sbgr] == 1 &&
  1509.   ((fr_ps->header->center != 0 && j == 4) || (fr_ps->header->center == 0 && j == 3))))
  1510.      {
  1511.      /* no samples to dequantize */
  1512.      }
  1513.      else
  1514.      {
  1515. x = 0;
  1516. #ifndef MSDOS
  1517. while ((1L << x) < (*alloc)[i][bit_alloc[k][i]].steps)
  1518.     x++;
  1519. #else
  1520. /* microsoft C thinks an int is a short */
  1521. while (((unsigned long) (1L << (long) x) <
  1522. (unsigned long) ((*alloc)[i][bit_alloc[k][i]].steps)) &&
  1523.        (x < 16))
  1524.     x++;
  1525. #endif
  1526. /* MSB inversion */
  1527. if (((sample[k][j][i] >> (x-1)) & 1) == 1)
  1528.     fraction[k][i][j][*z] = 0.0;
  1529. else
  1530.     fraction[k][i][j][*z] = -1.0;
  1531. /* Form a 2's complement sample */
  1532. fraction[k][i][j][*z] += (double) (sample[k][j][i] & ((1<<(x-1))-1)) /
  1533. (double) (1L<<(x-1));
  1534. /* Dequantize the sample */
  1535. fraction[k][i][j][*z] += d[(*alloc)[i][bit_alloc[k][i]].quant];
  1536. fraction[k][i][j][*z] *= c[(*alloc)[i][bit_alloc[k][i]].quant];
  1537.     } /* end if ..bits */
  1538. }   /* end if 1-channel dyn-cross mode */
  1539.     } /* end if dyn-cross on */
  1540. } /* if bit_alloc */
  1541.    else
  1542.     fraction[k][i][j][*z] = 0.0;
  1543.     }
  1544.     for (i = sblimit; i < SBLIMIT; i++)
  1545. for (j = 0; j < 3; j++)
  1546.     for (k = ch_start; k < channels; k++)
  1547. fraction[k][i][j][*z] = 0.0;
  1548. }
  1549. #ifdef Augmentation_7ch
  1550. void II_dequantize_sample_aug (unsigned int sample[7][3][SBLIMIT],
  1551.        unsigned int bit_alloc[7][SBLIMIT],
  1552.        double fraction[7][SBLIMIT][3][12],
  1553.        frame_params *fr_ps, int *z)
  1554. {
  1555.    int i, j, k, x,sbgr,l;
  1556.    int sblimit = fr_ps->sblimit_mc;
  1557.    al_table *alloc = fr_ps->alloc_mc;
  1558.    for (i = 0; i < sblimit; i++)
  1559.    {
  1560. if( i == 0) sbgr = 0 ;
  1561. else
  1562.    for(l = 1; l < 12; l++)
  1563. if((sb_groups[l-1] < i) && (i <= sb_groups[l]))
  1564. {
  1565.     sbgr = l; break;
  1566. }
  1567. for (j = 0; j < 3; j++)
  1568.    for ( k = 5; k < 7; k++)
  1569. if (bit_alloc[k][i])
  1570. {
  1571.    if ((fr_ps->header->dyn_cross_aug_mode[sbgr]== 0) ||
  1572.        (fr_ps->header->dyn_cross_aug_mode[sbgr]== 1 && k==5) ||
  1573.        (fr_ps->header->dyn_cross_aug_mode[sbgr]== 2 && k==5) ||
  1574.        (fr_ps->header->dyn_cross_aug_mode[sbgr]== 3 && k==5) ||
  1575.        (fr_ps->header->dyn_cross_aug_mode[sbgr]== 4 && k==5) ||
  1576.        (fr_ps->header->dyn_cross_aug_mode[sbgr]== 5 && k==6) ||
  1577.        (fr_ps->header->dyn_cross_aug_mode[sbgr]==10 && k==6) ||
  1578.        (fr_ps->header->dyn_cross_aug_mode[sbgr]==14 && k==6))
  1579.    {
  1580. x = 0;
  1581. #ifndef MSDOS
  1582. while ((1L<<x) < (*alloc)[i][bit_alloc[k][i]].steps) x++;
  1583. #else
  1584. /* microsoft C thinks an int is a short */
  1585. while (( (unsigned long) (1L<<(long)x) <
  1586. (unsigned long)( (*alloc)[i][bit_alloc[k][i]].steps)) && ( x < 16) ) x++;
  1587. #endif
  1588. /* MSB inversion */
  1589. if (((sample[k][j][i] >> (x-1)) & 1) == 1)
  1590.       fraction[k][i][j][*z] = 0.0;
  1591. else  fraction[k][i][j][*z] = -1.0;
  1592. /* Form a 2's complement sample */
  1593. fraction[k][i][j][*z] += (double) (sample[k][j][i] & ((1<<(x-1))-1)) /
  1594. (double) (1L<<(x-1));
  1595. /* Dequantize the sample */
  1596. fraction[k][i][j][*z] += d[(*alloc)[i][bit_alloc[k][i]].quant];
  1597. fraction[k][i][j][*z] *= c[(*alloc)[i][bit_alloc[k][i]].quant];
  1598.    }  /* end if 2-channel dyn-cross mode */
  1599. } /* if bit_alloc */
  1600. else
  1601.    fraction[k][i][j][*z] = 0.0;
  1602.    }
  1603.    for (i = sblimit; i < SBLIMIT; i++)
  1604.   for (j = 0; j < 3; j++)
  1605.  for(k = 5; k < 7; k++)
  1606.  fraction[k][i][j][*z] = 0.0;
  1607. }
  1608. #endif
  1609. /*************************************************************************/
  1610. /* JMZ 09/03/1995 Multilingual */
  1611. void II_dequantize_sample_ml(unsigned int sample_ml[7][3][SBLIMIT],
  1612.      unsigned int bit_alloc_ml[7][SBLIMIT],
  1613.      double fraction_ml[7][SBLIMIT][3][12],
  1614.      frame_params *fr_ps,
  1615.      int *n_ml_ch,
  1616.      int *z)
  1617. {
  1618.    int i, j, k, x,sbgr,l;
  1619.    int sblimit_ml = fr_ps->sblimit_ml;
  1620.    al_table *alloc_ml = fr_ps->alloc_ml;
  1621.    for (i = 0; i < sblimit_ml; i++)
  1622.    {
  1623.   for (j = 0; j < 3; j++)
  1624.  for ( k = 0; k < *n_ml_ch; k++)
  1625. if (bit_alloc_ml[k][i])
  1626. {
  1627.   /* JR: ditto */
  1628.   /* locate MSB in the sample */
  1629.    x = 0;
  1630. #ifndef MSDOS
  1631.    while ((1L<<x) < (*alloc_ml)[i][bit_alloc_ml[k][i]].steps) x++;
  1632. #else
  1633.    /* microsoft C thinks an int is a short */
  1634.    while (( (unsigned long) (1L<<(long)x) <
  1635. (unsigned long)( (*alloc_ml)[i][bit_alloc_ml[k][i]].steps)
  1636.    ) && ( x < 16) ) x++;
  1637. #endif
  1638.    /* MSB inversion */
  1639.    if (((sample_ml[k][j][i] >> (x-1)) & 1) == 1)
  1640. fraction_ml[k][i][j][*z] = 0.0;
  1641.    else  fraction_ml[k][i][j][*z] = -1.0;
  1642.    /* Form a 2's complement sample */
  1643.    fraction_ml[k][i][j][*z] += (double) (sample_ml[k][j][i] & ((1<<(x-1))-1)) /
  1644. (double) (1L<<(x-1));
  1645.    /* Dequantize the sample */
  1646.    fraction_ml[k][i][j][*z] += d[(*alloc_ml)[i][bit_alloc_ml[k][i]].quant];
  1647.    fraction_ml[k][i][j][*z] *= c[(*alloc_ml)[i][bit_alloc_ml[k][i]].quant];
  1648. } /* if bit_alloc */
  1649. else fraction_ml[k][i][j][*z] = 0.0;
  1650.    }
  1651.    for (i = sblimit_ml; i < SBLIMIT; i++)
  1652.   for (j = 0; j < 3; j++)
  1653.  for(k = 0; k < *n_ml_ch; k++)
  1654.  fraction_ml[k][i][j][*z] = 0.0;
  1655. }
  1656. /**************************************************************************
  1657. II_lfe_calc();  R.Schwalbe 
  1658. **************************************************************************/
  1659. void II_lfe_calc(frame_params *fr_ps)
  1660. {
  1661.    layer *info = fr_ps->header;
  1662.    int x,i;
  1663.    al_table *alloc = fr_ps->alloc_mc;
  1664.    for(i = 0; i < 12; i++)
  1665.    {
  1666. x = 0;
  1667. #ifndef MSDOS
  1668.     while ((1L<<x) < (*alloc)[0][info->lfe_alloc].steps) x++;
  1669. #else
  1670.     /* microsoft C thinks an int is a short */
  1671.     while (( (unsigned long) (1L<<(long)x) <
  1672.     (unsigned long)( (*alloc)[0][info->lfe_alloc].steps)) && ( x < 16) ) x++;
  1673. #endif
  1674.     /* MSB inversion */
  1675.     if (((info->lfe_spl[i] >> (x-1)) & 1) == 1)
  1676.       info->lfe_spl_fraction[i] = 0.0;
  1677.     else  info->lfe_spl_fraction[i] = -1.0;
  1678.     /* Form a 2's complement sample */
  1679.     info->lfe_spl_fraction[i] += (double) (info->lfe_spl[i] & ((1<<(x-1))-1)) /
  1680.   (double) (1L<<(x-1));
  1681.     /* Dequantize the sample */
  1682.     info->lfe_spl_fraction[i] += d[(*alloc)[0][info->lfe_alloc].quant];
  1683.     info->lfe_spl_fraction[i] *= c[(*alloc)[0][info->lfe_alloc].quant];
  1684.     /* Denormalize the sample */
  1685.     info->lfe_spl_fraction[i] *= multiple[info->lfe_scf];
  1686.     }
  1687. }
  1688. /************************************************************
  1689. /*
  1690. /*   Restore the original value of the sample ie multiply
  1691. /*    the fraction value by its scalefactor.
  1692. /*
  1693. /************************* Layer II Stuff **********************/
  1694. void I_denormalize_sample (double fraction[7][SBLIMIT][3][12],
  1695.    unsigned int scale_index[7][3][SBLIMIT],
  1696.    int part,
  1697.    frame_params *fr_ps,
  1698.    int *z)
  1699. {
  1700.    int i, j, k, gr_id, gr_sam;
  1701.    int stereo = fr_ps->stereo;
  1702.    int sblimit = fr_ps->sblimit;
  1703.    gr_id = 4*part + (*z / 3);
  1704.    gr_sam = *z % 3;
  1705.    for (i=0; i<SBLIMIT; i++)
  1706.       for (j=0; j<stereo; j++)
  1707.  fraction[j][i][gr_sam][gr_id] *= multiple[scale_index[j][part][i]];
  1708. }
  1709. void II_denormalize_sample(double fraction[7][SBLIMIT][3][12],
  1710.    unsigned int scale_index[7][3][SBLIMIT],
  1711.    frame_params *fr_ps,
  1712.    int x,
  1713.    int *z)
  1714. {
  1715.    int i,j,k;
  1716.    int stereo = fr_ps->stereo;
  1717.    int sblimit = fr_ps->sblimit;
  1718.    for (i=0;i<sblimit;i++)
  1719. for (j = 0;j < stereo; j++)
  1720. {
  1721.   fraction[j][i][0][*z] *= multiple[scale_index[j][x][i]];
  1722.   fraction[j][i][1][*z] *= multiple[scale_index[j][x][i]];
  1723.   fraction[j][i][2][*z] *= multiple[scale_index[j][x][i]];
  1724. }
  1725. }
  1726. /************************* MC Layer II Stuff **********************/
  1727. void II_denormalize_sample_mc(double fraction[7][SBLIMIT][3][12],
  1728.      unsigned int scale_index[7][3][SBLIMIT],
  1729.      frame_params *fr_ps,
  1730.      int x, int ch_start, int channels, int *z)
  1731. {
  1732.    int i,j,k,sbgr,l,bl=0;
  1733.    int sblimit = fr_ps->sblimit_mc;
  1734.    for (i = 0; i < sblimit; i++)
  1735.    {
  1736.       if (i == 0) sbgr = 0 ;
  1737.       else
  1738. for (l = 1; l < 12; l++)
  1739. if ((sb_groups[l-1] < i) && (i <= sb_groups[l]))
  1740. {
  1741. sbgr = l; break;
  1742. }
  1743.       /* 960821 FdB new setup for dyn. crosstalk modes */
  1744.       for (bl = 0; bl < 3; bl++)   
  1745. if (fr_ps->header->dyn_cross_on == 0)
  1746. for (j = ch_start; j < channels; j++)
  1747. fraction[j][i][bl][*z] *= multiple[scale_index[j][x][i]];
  1748. else if (fr_ps->dyn_cross_bits == 0)   /* for channel mode 2/0 (+2/0) */
  1749. {
  1750. if (fr_ps->header->surround == 3) /* 2/0 + 2/0 and 1/0 + 2/0 */
  1751. {
  1752. fraction[ch_start][i][bl][*z] *= multiple[scale_index[ch_start][x][i]];
  1753. if (fr_ps->header->dyn_second_stereo[sbgr] == 0)
  1754. fraction[ch_start+1][i][bl][*z] *= multiple[scale_index[ch_start+1][x][i]];
  1755. else
  1756. fraction[ch_start+1][i][bl][*z] = (fraction[ch_start][i][bl][*z] / multiple[scale_index[ch_start][x][i]])
  1757.  * multiple[scale_index[ch_start+1][x][i]];
  1758. }
  1759. }
  1760. else if (fr_ps->dyn_cross_bits == 1)   /* for channel mode 3/0 (+2/0) and 2/1 */
  1761. {
  1762. switch (fr_ps->header->dyn_cross_mode[sbgr])
  1763. {
  1764.   case 0 : fraction[2][i][bl][*z] *= multiple[scale_index[2][x][i]];
  1765. if (fr_ps->header->surround == 3) /* 3/0 + 2/0 */
  1766. {
  1767. fraction[3][i][bl][*z] *= multiple[scale_index[3][x][i]];
  1768. if (fr_ps->header->dyn_second_stereo[sbgr] == 0)
  1769. fraction[4][i][bl][*z] *= multiple[scale_index[4][x][i]];
  1770. else
  1771. fraction[4][i][bl][*z] = (fraction[3][i][bl][*z] / multiple[scale_index[3][x][i]])
  1772.  * multiple[scale_index[4][x][i]];
  1773. }
  1774.    break;
  1775.   case 1 : if (fr_ps->header->tc_alloc[sbgr] == 0)
  1776. if (fr_ps->header->dyn_cross_LR) /* C,S from R0 */ 
  1777. fraction[2][i][bl][*z] = (fraction[1][i][bl][*z] / multiple[scale_index[1][x][i]])
  1778.    * multiple[scale_index[2][x][i]];
  1779.      else /* C,S from L0 */
  1780. fraction[2][i][bl][*z] = (fraction[0][i][bl][*z] / multiple[scale_index[0][x][i]])
  1781.  * multiple[scale_index[2][x][i]];
  1782. if (fr_ps->header->tc_alloc[sbgr] == 1)
  1783. fraction[2][i][bl][*z] = (fraction[0][i][bl][*z] / multiple[scale_index[0][x][i]])
  1784.  * multiple[scale_index[2][x][i]];
  1785. if (fr_ps->header->tc_alloc[sbgr] == 2)
  1786. fraction[2][i][bl][*z] = (fraction[1][i][bl][*z] / multiple[scale_index[1][x][i]])
  1787.  * multiple[scale_index[2][x][i]];
  1788. if (fr_ps->header->surround == 3) /* 3/0 + 2/0 */
  1789. {
  1790. fraction[3][i][bl][*z] *= multiple[scale_index[3][x][i]];
  1791. if (fr_ps->header->dyn_second_stereo[sbgr] == 0)
  1792. fraction[4][i][bl][*z] *= multiple[scale_index[4][x][i]];
  1793. else
  1794. fraction[4][i][bl][*z] = (fraction[3][i][bl][*z] / multiple[scale_index[3][x][i]])
  1795.  * multiple[scale_index[4][x][i]];
  1796. }
  1797.    break;
  1798. }
  1799. }
  1800. else if (fr_ps->dyn_cross_bits == 3)   /* for channel mode 3/1 and 2/2 */
  1801. {
  1802. switch (fr_ps->header->dyn_cross_mode[sbgr])
  1803. {
  1804.   case 0 : for (j = ch_start; j < channels; j++)
  1805. fraction[j][i][bl][*z] *= multiple[scale_index[j][x][i]];
  1806.    break;
  1807.   case 1 : fraction[2][i][bl][*z] *= multiple[scale_index[2][x][i]];
  1808. if (fr_ps->header->surround == 2 || /* 2/2 mode */
  1809.     fr_ps->header->tc_alloc[sbgr] == 4 || /* 3/1 mode */
  1810.     fr_ps->header->tc_alloc[sbgr] == 5 || /* 3/1 mode, matrix mode 2 */
  1811.     (fr_ps->header->tc_alloc[sbgr] != 3 && fr_ps->header->dyn_cross_LR))
  1812. /* S, R or Rs from R0 */
  1813. fraction[3][i][bl][*z]  = (fraction[1][i][bl][*z] / multiple[scale_index[1][x][i]])
  1814.   * multiple[scale_index[3][x][i]];
  1815. else
  1816. /* S, L or Ls from L0 */
  1817. fraction[3][i][bl][*z]  = (fraction[0][i][bl][*z] / multiple[scale_index[0][x][i]])
  1818.   * multiple[scale_index[3][x][i]];
  1819.    break;
  1820.   case 2 : fraction[3][i][bl][*z] *= multiple[scale_index[3][x][i]];
  1821. if (fr_ps->header->surround == 2 || /* 2/2 mode */
  1822.     fr_ps->header->tc_alloc[sbgr] == 1 || /* 3/1 mode */
  1823.     fr_ps->header->tc_alloc[sbgr] == 5 || /* 3/1 mode, matrix mode 2 */
  1824.     (fr_ps->header->tc_alloc[sbgr] != 2 && !fr_ps->header->dyn_cross_LR))
  1825. /* C, L or Ls from L0 */
  1826. fraction[2][i][bl][*z] = (fraction[0][i][bl][*z] / multiple[scale_index[0][x][i]])
  1827.  * multiple[scale_index[2][x][i]];
  1828. else
  1829. /* C, R or Rs from RO */
  1830. fraction[2][i][bl][*z] = (fraction[1][i][bl][*z] / multiple[scale_index[1][x][i]])
  1831.  * multiple[scale_index[2][x][i]];
  1832.    break;
  1833.   case 3 : if (fr_ps->header->surround == 2 || /* 2/2 mode */
  1834.     fr_ps->header->tc_alloc[sbgr] == 1 || /* 3/1 mode */
  1835.     fr_ps->header->tc_alloc[sbgr] == 5 || /* 3/1 mode, matrix mode 2 */
  1836.     (fr_ps->header->tc_alloc[sbgr] != 2 && !fr_ps->header->dyn_cross_LR))
  1837. /* C, L or Ls from L0 */
  1838. fraction[2][i][bl][*z] = (fraction[0][i][bl][*z] / multiple[scale_index[0][x][i]])
  1839.  * multiple[scale_index[2][x][i]];
  1840. else
  1841. /* C, R or Rs from RO */
  1842. fraction[2][i][bl][*z] = (fraction[1][i][bl][*z] / multiple[scale_index[1][x][i]])
  1843.  * multiple[scale_index[2][x][i]];
  1844. if (fr_ps->header->surround == 2 || /* 2/2 mode */
  1845.     fr_ps->header->tc_alloc[sbgr] == 4 || /* 3/1 mode */
  1846.     fr_ps->header->tc_alloc[sbgr] == 5 || /* 3/1 mode, matrix mode 2 */
  1847.     (fr_ps->header->tc_alloc[sbgr] != 3 && fr_ps->header->dyn_cross_LR))
  1848. /* S, R or Rs from R0 */
  1849. fraction[3][i][bl][*z]  = (fraction[1][i][bl][*z] / multiple[scale_index[1][x][i]])
  1850.   * multiple[scale_index[3][x][i]];
  1851. else
  1852. /* S, L or Ls from L0 */
  1853. fraction[3][i][bl][*z]  = (fraction[0][i][bl][*z] / multiple[scale_index[0][x][i]])
  1854.   * multiple[scale_index[3][x][i]];
  1855.    break;
  1856.   case 4 : fraction[3][i][bl][*z] = fraction[2][i][bl][*z];
  1857. fraction[2][i][bl][*z] *= multiple[scale_index[2][x][i]];
  1858. fraction[3][i][bl][*z] *= multiple[scale_index[3][x][i]];
  1859.    break;
  1860. }
  1861. }
  1862. else if (fr_ps->dyn_cross_bits == 4)   /* for channel mode 3/2 */
  1863. {
  1864. switch (fr_ps->header->dyn_cross_mode[sbgr])
  1865. {
  1866.   case 0 : for (j = ch_start; j < channels; j++)
  1867. fraction[j][i][bl][*z] *= multiple[scale_index[j][x][i]];
  1868.    break;
  1869.   case 1 : /* C from T2 */
  1870. fraction[2][i][bl][*z] *= multiple[scale_index[2][x][i]];
  1871. fraction[3][i][bl][*z] *= multiple[scale_index[3][x][i]];
  1872. fraction[4][i][bl][*z]  = (fraction[1][i][bl][*z] / multiple[scale_index[1][x][i]])
  1873.   * multiple[scale_index[4][x][i]];
  1874.    break;
  1875.   case 2 : /* C from T2 */
  1876. fraction[2][i][bl][*z] = fraction[2][i][bl][*z] * multiple[scale_index[2][x][i]];
  1877. fraction[3][i][bl][*z]  = (fraction[0][i][bl][*z] / multiple[scale_index[0][x][i]])
  1878.   * multiple[scale_index[3][x][i]];
  1879. fraction[4][i][bl][*z] *= multiple[scale_index[4][x][i]];
  1880.    break;
  1881.   case 3 : if ((fr_ps->header->tc_alloc[sbgr] == 1) || (fr_ps->header->tc_alloc[sbgr] == 7))
  1882. fraction[2][i][bl][*z] = (fraction[0][i][bl][*z] / multiple[scale_index[0][x][i]])
  1883.  * multiple[scale_index[2][x][i]];
  1884. else if ((fr_ps->header->tc_alloc[sbgr] == 2) || (fr_ps->header->tc_alloc[sbgr] == 6))
  1885. fraction[2][i][bl][*z] = (fraction[1][i][bl][*z] / multiple[scale_index[1][x][i]])
  1886.  * multiple[scale_index[2][x][i]];
  1887. else if (fr_ps->header->dyn_cross_LR) /* C from RO */
  1888. fraction[2][i][bl][*z] = (fraction[1][i][bl][*z] / multiple[scale_index[1][x][i]])
  1889.  * multiple[scale_index[2][x][i]];
  1890. else /* C from LO */
  1891. fraction[2][i][bl][*z] = (fraction[0][i][bl][*z] / multiple[scale_index[0][x][i]])
  1892.  * multiple[scale_index[2][x][i]];
  1893. fraction[3][i][bl][*z] *= multiple[scale_index[3][x][i]]; 
  1894. fraction[4][i][bl][*z] *= multiple[scale_index[4][x][i]];
  1895.    break;
  1896.   case 4 : /* C from T2 */
  1897. fraction[2][i][bl][*z] *= multiple[scale_index[2][x][i]];
  1898. fraction[3][i][bl][*z]  = (fraction[0][i][bl][*z] / multiple[scale_index[0][x][i]])
  1899.   * multiple[scale_index[3][x][i]];
  1900. fraction[4][i][bl][*z]  = (fraction[1][i][bl][*z] / multiple[scale_index[1][x][i]])
  1901.   * multiple[scale_index[4][x][i]];
  1902.    break;
  1903.   case 5 : if ((fr_ps->header->tc_alloc[sbgr] == 1) || (fr_ps->header->tc_alloc[sbgr] == 7))
  1904. fraction[2][i][bl][*z] = (fraction[0][i][bl][*z] / multiple[scale_index[0][x][i]])
  1905.  * multiple[scale_index[2][x][i]];
  1906. else if ((fr_ps->header->tc_alloc[sbgr] == 2) || (fr_ps->header->tc_alloc[sbgr] == 6))
  1907. fraction[2][i][bl][*z] = (fraction[1][i][bl][*z] / multiple[scale_index[1][x][i]])
  1908.  * multiple[scale_index[2][x][i]];
  1909. else if (fr_ps->header->dyn_cross_LR)  /* C from RO */
  1910. fraction[2][i][bl][*z] = (fraction[1][i][bl][*z] / multiple[scale_index[1][x][i]])
  1911.  * multiple[scale_index[2][x][i]];
  1912. else /* C from LO */
  1913. fraction[2][i][bl][*z] = (fraction[0][i][bl][*z] / multiple[scale_index[0][x][i]])
  1914.  * multiple[scale_index[2][x][i]];
  1915. fraction[3][i][bl][*z] *= multiple[scale_index[3][x][i]];
  1916. fraction[4][i][bl][*z]  = (fraction[1][i][bl][*z] / multiple[scale_index[1][x][i]])
  1917.   * multiple[scale_index[4][x][i]];
  1918.    break;
  1919.   case 6 : if ((fr_ps->header->tc_alloc[sbgr] == 1) || (fr_ps->header->tc_alloc[sbgr] == 7))
  1920. fraction[2][i][bl][*z] = (fraction[0][i][bl][*z] / multiple[scale_index[0][x][i]])
  1921.  * multiple[scale_index[2][x][i]];
  1922. else if ((fr_ps->header->tc_alloc[sbgr] == 2) || (fr_ps->header->tc_alloc[sbgr] == 6))
  1923. fraction[2][i][bl][*z] = (fraction[1][i][bl][*z] / multiple[scale_index[1][x][i]])
  1924.  * multiple[scale_index[2][x][i]];
  1925. else if (fr_ps->header->dyn_cross_LR) /* C from RO */
  1926. fraction[2][i][bl][*z] = (fraction[1][i][bl][*z] / multiple[scale_index[1][x][i]])
  1927.  * multiple[scale_index[2][x][i]];
  1928. else /* C from LO */
  1929. fraction[2][i][bl][*z] = (fraction[0][i][bl][*z] / multiple[scale_index[0][x][i]])
  1930.  * multiple[scale_index[2][x][i]];
  1931. fraction[3][i][bl][*z]  = (fraction[0][i][bl][*z] / multiple[scale_index[0][x][i]])
  1932.   * multiple[scale_index[3][x][i]];
  1933. fraction[4][i][bl][*z] *= multiple[scale_index[4][x][i]];
  1934.    break;
  1935.   case 7 : if ((fr_ps->header->tc_alloc[sbgr] == 1) || (fr_ps->header->tc_alloc[sbgr] == 7))
  1936. fraction[2][i][bl][*z] = (fraction[0][i][bl][*z] / multiple[scale_index[0][x][i]])
  1937.  * multiple[scale_index[2][x][i]];
  1938. else if ((fr_ps->header->tc_alloc[sbgr] == 2) || (fr_ps->header->tc_alloc[sbgr] == 6))
  1939. fraction[2][i][bl][*z] = (fraction[1][i][bl][*z] / multiple[scale_index[1][x][i]])
  1940.  * multiple[scale_index[2][x][i]];
  1941. else if (fr_ps->header->dyn_cross_LR) /* C from RO */
  1942. fraction[2][i][bl][*z] = (fraction[1][i][bl][*z] / multiple[scale_index[1][x][i]])
  1943.  * multiple[scale_index[2][x][i]];
  1944. else /* C from LO */
  1945. fraction[2][i][bl][*z] = (fraction[0][i][bl][*z] / multiple[scale_index[0][x][i]])
  1946.  * multiple[scale_index[2][x][i]];
  1947. fraction[3][i][bl][*z]  = (fraction[0][i][bl][*z] / multiple[scale_index[0][x][i]])
  1948.   * multiple[scale_index[3][x][i]];
  1949. fraction[4][i][bl][*z]  = (fraction[1][i][bl][*z] / multiple[scale_index[1][x][i]])
  1950.   * multiple[scale_index[4][x][i]];
  1951.    break;
  1952.   case 8 : /* C from T2 */
  1953. fraction[2][i][bl][*z] *= multiple[scale_index[2][x][i]];
  1954. fraction[4][i][bl][*z]  = fraction[3][i][bl][*z];
  1955. fraction[3][i][bl][*z] *= multiple[scale_index[3][x][i]];
  1956. fraction[4][i][bl][*z] *= multiple[scale_index[4][x][i]];
  1957.    break;
  1958.   case 9 : /* C from T2 */
  1959. fraction[3][i][bl][*z] = fraction[2][i][bl][*z];
  1960. fraction[2][i][bl][*z] *= multiple[scale_index[2][x][i]];
  1961. fraction[3][i][bl][*z] *= multiple[scale_index[3][x][i]];
  1962. fraction[4][i][bl][*z] *= multiple[scale_index[4][x][i]];
  1963.    break;
  1964.   case 10 : /* C from T2 */
  1965. fraction[4][i][bl][*z]  = fraction[2][i][bl][*z];
  1966. fraction[2][i][bl][*z] *= multiple[scale_index[2][x][i]];
  1967. fraction[3][i][bl][*z] *= multiple[scale_index[3][x][i]];
  1968. fraction[4][i][bl][*z] *= multiple[scale_index[4][x][i]];
  1969.    break;
  1970.   case 11 : fraction[3][i][bl][*z]  = fraction[2][i][bl][*z];
  1971. fraction[2][i][bl][*z] *= multiple[scale_index[2][x][i]];
  1972. fraction[3][i][bl][*z] *= multiple[scale_index[3][x][i]];
  1973. fraction[4][i][bl][*z]  = (fraction[1][i][bl][*z] / multiple[scale_index[1][x][i]])
  1974.   * multiple[scale_index[4][x][i]];
  1975.    break;
  1976.   case 12 : fraction[4][i][bl][*z]  = fraction[2][i][bl][*z];
  1977. fraction[2][i][bl][*z] *= multiple[scale_index[2][x][i]];
  1978. fraction[3][i][bl][*z]  = (fraction[0][i][bl][*z] / multiple[scale_index[0][x][i]])
  1979.   * multiple[scale_index[3][x][i]];
  1980. fraction[4][i][bl][*z] *= multiple[scale_index[4][x][i]];
  1981.    break;
  1982.   case 13: if ((fr_ps->header->tc_alloc[sbgr] == 1) || (fr_ps->header->tc_alloc[sbgr] == 7))
  1983. fraction[2][i][bl][*z] = (fraction[0][i][bl][*z] / multiple[scale_index[0][x][i]])
  1984.  * multiple[scale_index[2][x][i]];
  1985. else if ((fr_ps->header->tc_alloc[sbgr] == 2) || (fr_ps->header->tc_alloc[sbgr] == 6))
  1986. fraction[2][i][bl][*z] = (fraction[1][i][bl][*z] / multiple[scale_index[1][x][i]])
  1987.  * multiple[scale_index[2][x][i]];
  1988. else if (fr_ps->header->dyn_cross_LR) /* C from RO */
  1989. fraction[2][i][bl][*z] = (fraction[1][i][bl][*z] / multiple[scale_index[1][x][i]])
  1990.  * multiple[scale_index[2][x][i]];
  1991. else /* C from LO */
  1992. fraction[2][i][bl][*z] = (fraction[0][i][bl][*z] / multiple[scale_index[0][x][i]])
  1993.  * multiple[scale_index[2][x][i]];
  1994. fraction[4][i][bl][*z]  = fraction[3][i][bl][*z];
  1995. fraction[3][i][bl][*z] *= multiple[scale_index[3][x][i]];
  1996. fraction[4][i][bl][*z] *= multiple[scale_index[4][x][i]];
  1997.    break;
  1998.   case 14 : fraction[4][i][bl][*z]  = fraction[2][i][bl][*z];
  1999. fraction[3][i][bl][*z]  = fraction[2][i][bl][*z];
  2000. /* C from T2 */
  2001. fraction[2][i][bl][*z] *= multiple[scale_index[2][x][i]];
  2002. fraction[3][i][bl][*z] *= multiple[scale_index[3][x][i]];
  2003. fraction[4][i][bl][*z] *= multiple[scale_index[4][x][i]];
  2004. break;
  2005. }
  2006. }
  2007.    } /* for sblimit */
  2008. }
  2009. #ifdef Augmentation_7ch
  2010. void II_denormalize_sample_aug(double fraction[7][SBLIMIT][3][12],
  2011.      unsigned int scale_index[7][3][SBLIMIT],
  2012.      frame_params *fr_ps,
  2013.      int x,
  2014.      int *z)
  2015. {
  2016.    layer *info = fr_ps->header;
  2017.    int i,j,k,sbgr,l,bl=0;
  2018.    int sblimit = fr_ps->sblimit_mc;
  2019.     
  2020.    for (i = 0; i < sblimit; i++)
  2021.    {
  2022.       int T5T0 = 0, T6T0 = 0, T6T1 = 1;
  2023.       if (i == 0) sbgr = 0 ;
  2024.       else
  2025.  for (l = 1; l < 12; l++)
  2026.     if ((sb_groups[l-1] < i) && (i <= sb_groups[l]))
  2027.     {
  2028.        sbgr = l; break;
  2029.     }
  2030.       if (info->tc_aug_alloc[sbgr] == 4 || info->tc_aug_alloc[sbgr] == 5)
  2031.      if (info->dyn_cross_LR == 0)
  2032.   T6T1 = 0;
  2033. else
  2034.   T6T0 = 1;
  2035.       else if (info->tc_aug_alloc[sbgr] == 6 || info->tc_aug_alloc[sbgr] == 7)
  2036.         if (info->dyn_cross_LR)
  2037.   T5T0 = 1;
  2038.       /* 960821 FdB new setup for dyn. crosstalk modes */
  2039.       for (bl = 0; bl < 3; bl++)
  2040.       {
  2041.  switch (fr_ps->header->dyn_cross_aug_mode[sbgr])
  2042.  {
  2043.    case  0 : /* T5 and T6 present */
  2044.  for (j = 5; j < 7; j++)
  2045.     fraction[j][i][bl][*z] *= multiple[scale_index[j][x][i]];
  2046.  break;
  2047.    case  1 : /* T6 from T1 */
  2048.  fraction[5][i][bl][*z] *= multiple[scale_index[5][x][i]];
  2049.  fraction[6][i][bl][*z]  = (fraction[T6T1][i][bl][*z] / multiple[scale_index[T6T1][x][i]])
  2050.       * multiple[scale_index[6][x][i]];
  2051.  break;
  2052.    case  2 : /* T6 from T2 */
  2053.  fraction[5][i][bl][*z] *= multiple[scale_index[5][x][i]];
  2054.  fraction[6][i][bl][*z]  = (fraction[2][i][bl][*z] / multiple[scale_index[2][x][i]])
  2055.    * multiple[scale_index[6][x][i]];
  2056.  break;
  2057.    case  3 : /* T6 from T4 */
  2058.  fraction[5][i][bl][*z] *= multiple[scale_index[5][x][i]];
  2059.  fraction[6][i][bl][*z]  = (fraction[4][i][bl][*z] / multiple[scale_index[4][x][i]])
  2060.    * multiple[scale_index[6][x][i]];
  2061.  break;
  2062.    case  4 : /* T6 from T5 */
  2063.  fraction[5][i][bl][*z] *= multiple[scale_index[5][x][i]];
  2064.  fraction[6][i][bl][*z]  = (fraction[5][i][bl][*z] / multiple[scale_index[5][x][i]])
  2065.    * multiple[scale_index[6][x][i]];
  2066.  break;
  2067.    case  5 : /* T5 from T0 */
  2068.  fraction[5][i][bl][*z]  = (fraction[T5T0][i][bl][*z] / multiple[scale_index[T5T0][x][i]])
  2069.       * multiple[scale_index[5][x][i]];
  2070.  fraction[6][i][bl][*z] *= multiple[scale_index[6][x][i]];
  2071.  break;
  2072.    case  6 : /* T5 from T0 and T6 from T1 */
  2073.  fraction[5][i][bl][*z]  = (fraction[T5T0][i][bl][*z] / multiple[scale_index[T5T0][x][i]])
  2074.       * multiple[scale_index[5][x][i]];
  2075.  fraction[6][i][bl][*z]  = (fraction[T6T1][i][bl][*z] / multiple[scale_index[T6T1][x][i]])
  2076.       * multiple[scale_index[6][x][i]];
  2077.  break;
  2078.    case  7 : /* T5 from T0 and T6 from T2 */
  2079.  fraction[5][i][bl][*z]  = (fraction[T5T0][i][bl][*z] / multiple[scale_index[T5T0][x][i]])
  2080.       * multiple[scale_index[5][x][i]];
  2081.  fraction[6][i][bl][*z]  = (fraction[2][i][bl][*z] / multiple[scale_index[2][x][i]])
  2082.    * multiple[scale_index[6][x][i]];
  2083.  break;
  2084.    case  8 : /* T5 from T0 and T6 from T4 */
  2085.  fraction[5][i][bl][*z]  = (fraction[T5T0][i][bl][*z] / multiple[scale_index[T5T0][x][i]])
  2086.       * multiple[scale_index[5][x][i]];
  2087.  fraction[6][i][bl][*z]  = (fraction[4][i][bl][*z] / multiple[scale_index[4][x][i]])
  2088.    * multiple[scale_index[6][x][i]];
  2089.  break;
  2090.    case  9 : /* T5 and T6 from T0 */
  2091.  fraction[5][i][bl][*z]  = (fraction[T5T0][i][bl][*z] / multiple[scale_index[T5T0][x][i]])
  2092.       * multiple[scale_index[5][x][i]];
  2093.  fraction[6][i][bl][*z]  = (fraction[T6T0][i][bl][*z] / multiple[scale_index[T6T0][x][i]])
  2094.       * multiple[scale_index[6][x][i]];
  2095.  break;
  2096.    case 10 : /* T5 from T2 */
  2097.  fraction[5][i][bl][*z]  = (fraction[2][i][bl][*z] / multiple[scale_index[2][x][i]])
  2098.    * multiple[scale_index[5][x][i]];
  2099.  fraction[6][i][bl][*z] *= multiple[scale_index[6][x][i]];
  2100.  break;
  2101.    case 11 : /* T5 from T2 and T6 from T1 */
  2102.  fraction[5][i][bl][*z]  = (fraction[2][i][bl][*z] / multiple[scale_index[2][x][i]])
  2103.    * multiple[scale_index[5][x][i]];
  2104.  fraction[6][i][bl][*z]  = (fraction[T6T1][i][bl][*z] / multiple[scale_index[T6T1][x][i]])
  2105.    * multiple[scale_index[6][x][i]];
  2106.  break;
  2107.    case 12 : /* T5 and T6 from T2 */
  2108.  fraction[5][i][bl][*z]  = (fraction[2][i][bl][*z] / multiple[scale_index[2][x][i]])
  2109.    * multiple[scale_index[5][x][i]];
  2110.  fraction[6][i][bl][*z]  = (fraction[2][i][bl][*z] / multiple[scale_index[2][x][i]])
  2111.    * multiple[scale_index[6][x][i]];
  2112.  break;
  2113.    case 13 : /* T5 from T2 and T6 from T4 */
  2114.  fraction[5][i][bl][*z]  = (fraction[2][i][bl][*z] / multiple[scale_index[2][x][i]])
  2115.    * multiple[scale_index[5][x][i]];
  2116.  fraction[6][i][bl][*z]  = (fraction[4][i][bl][*z] / multiple[scale_index[4][x][i]])
  2117.    * multiple[scale_index[6][x][i]];
  2118.  break;
  2119.    case 14 : /* T5 from T3 */
  2120.  fraction[5][i][bl][*z]  = (fraction[3][i][bl][*z] / multiple[scale_index[3][x][i]])
  2121.    * multiple[scale_index[5][x][i]];
  2122.  fraction[6][i][bl][*z] *= multiple[scale_index[6][x][i]];
  2123.  break;
  2124.    case 15 : /* T5 from T3 and T6 from T1 */
  2125.  fraction[5][i][bl][*z]  = (fraction[3][i][bl][*z] / multiple[scale_index[3][x][i]])
  2126.    * multiple[scale_index[5][x][i]];
  2127.  fraction[6][i][bl][*z]  = (fraction[T6T1][i][bl][*z] / multiple[scale_index[T6T1][x][i]])
  2128.       * multiple[scale_index[6][x][i]];
  2129.  break;
  2130.    case 16 : /* T5 from T3 and T6 from T2 */
  2131.  fraction[5][i][bl][*z]  = (fraction[3][i][bl][*z] / multiple[scale_index[3][x][i]])
  2132.    * multiple[scale_index[5][x][i]];
  2133.  fraction[6][i][bl][*z]  = (fraction[2][i][bl][*z] / multiple[scale_index[2][x][i]])
  2134.    * multiple[scale_index[6][x][i]];
  2135.  break;
  2136.    case 17 : /* T5 from T3 and T6 from T4 */
  2137.  fraction[5][i][bl][*z]  = (fraction[3][i][bl][*z] / multiple[scale_index[3][x][i]])
  2138.    * multiple[scale_index[5][x][i]];
  2139.  fraction[6][i][bl][*z]  = (fraction[4][i][bl][*z] / multiple[scale_index[4][x][i]])
  2140.    * multiple[scale_index[6][x][i]];
  2141.  break;
  2142.    case 18 : /* T5 and T6 from T3 */
  2143.  fraction[5][i][bl][*z]  = (fraction[3][i][bl][*z] / multiple[scale_index[3][x][i]])
  2144.    * multiple[scale_index[5][x][i]];
  2145.  fraction[6][i][bl][*z]  = (fraction[3][i][bl][*z] / multiple[scale_index[3][x][i]])
  2146.    * multiple[scale_index[6][x][i]];
  2147.  break;
  2148.  }
  2149.       }   
  2150.    } /* for sblimit */
  2151. }
  2152. #endif
  2153. /*************************************************************/
  2154. /* JMZ 09/03/1995 Multilingual */
  2155. void II_denormalize_sample_ml(double fraction_ml[7][SBLIMIT][3][12],
  2156.       unsigned int scale_index_ml[7][3][SBLIMIT],
  2157.       frame_params *fr_ps,
  2158.       int x,
  2159.       int *n_ml_ch,
  2160.       int *z)
  2161. {
  2162.    int i,j;
  2163.    int sblimit_ml = fr_ps->sblimit_ml;
  2164.    for (i = 0; i < sblimit_ml; i++)
  2165.     for (j = 0; j < *n_ml_ch; j++)
  2166.      {
  2167.        fraction_ml[j][i][0][*z] *= multiple[scale_index_ml[j][x][i]];
  2168.        fraction_ml[j][i][1][*z] *= multiple[scale_index_ml[j][x][i]];
  2169.        fraction_ml[j][i][2][*z] *= multiple[scale_index_ml[j][x][i]];
  2170.      }
  2171. }
  2172. /*****************************************************************
  2173. /*
  2174. /* The following are the subband synthesis routines. They apply
  2175. /* to both layer I and layer II stereo or mono. The user has to
  2176. /* decide what parameters are to be passed to the routines.
  2177. /*
  2178. /***************************************************************/
  2179. /*************************************************************
  2180. /*
  2181. /*   Pass the subband sample through the synthesis window
  2182. /*
  2183. /**************************************************************/
  2184. /* create in synthesis filter */
  2185. static void create_syn_filter(double filter[64][SBLIMIT])
  2186. {
  2187.    register int i,k;
  2188.    for (i=0; i<64; i++)
  2189.       for (k=0; k<32; k++) {
  2190.  if ((filter[i][k] = 1e9*cos((double)((PI64*i+PI4)*(2*k+1)))) >= 0)
  2191. modf(filter[i][k]+0.5, &filter[i][k]);
  2192.          else
  2193.             modf(filter[i][k]-0.5, &filter[i][k]);
  2194.  filter[i][k] *= 1e-9;
  2195.   }
  2196. }
  2197. /***************************************************************
  2198. /*
  2199. /*   Window the restored sample
  2200. /*
  2201. /***************************************************************/
  2202. /* read in synthesis window */
  2203. static void read_syn_window(double window[HAN_SIZE])
  2204. {
  2205.    int i,j[4];
  2206.    FILE *fp;
  2207.    double f[4];
  2208.    char t[150];
  2209.    if (!(fp = OpenTableFile("dewindow") )) {
  2210.   fprintf (stderr, "Please check synthesis window table 'dewindow'n");
  2211.   exit (1);
  2212.    }
  2213.    for (i=0;i<512;i+=4) {
  2214. fgets(t,150, fp);
  2215.   sscanf(t,"D[%d] = %lf D[%d] = %lf D[%d] = %lf D[%d] = %lfn",
  2216.  j, f,j+1,f+1,j+2,f+2,j+3,f+3);
  2217.   if (i==j[0]) {
  2218.  window[i] = f[0];
  2219.  window[i+1] = f[1];
  2220.  window[i+2] = f[2];
  2221.  window[i+3] = f[3];
  2222.   }
  2223.   else {
  2224.  fprintf (stderr, "Check index in synthesis window tablen");
  2225. exit (1);
  2226.   }
  2227.   fgets(t,80,fp);
  2228.    }
  2229.    fclose(fp);
  2230. }
  2231. int SubBandSynthesis (double *bandPtr,
  2232.       int channel,
  2233.       long *samples)
  2234. {
  2235.     long foo;
  2236.     register int i,j,k;
  2237.     register double *bufOffsetPtr, sum;
  2238.     static int init = 1;
  2239.     typedef double NN[64][32];
  2240.     static NN *filter;
  2241.     typedef double BB[7][2*HAN_SIZE]; 
  2242.     static BB *buf;
  2243.     static int bufOffset = 64;
  2244.     static double *window;
  2245.     int clip = 0;               /* count & return how many samples clipped */
  2246.     if (init) {
  2247. buf = (BB *) mem_alloc(sizeof(BB),"BB");
  2248. filter = (NN *) mem_alloc(sizeof(NN), "NN");
  2249. create_syn_filter(*filter);
  2250. window = (double *) mem_alloc(sizeof(double) * HAN_SIZE, "WIN");
  2251. read_syn_window(window);
  2252. bufOffset = 64;
  2253. init = 0;
  2254. }
  2255. if (channel == 0) bufOffset = (bufOffset - 64) & 0x3ff;
  2256. bufOffsetPtr = &((*buf)[channel][bufOffset]);
  2257. for (i=0; i<64; i++)
  2258. {
  2259. sum = 0;
  2260. for (k=0; k<32; k++)
  2261. sum += bandPtr[k] * (*filter)[i][k];
  2262. bufOffsetPtr[i] = sum;
  2263. }
  2264. /*  S(i,j) = D(j+32i) * U(j+32i+((i+1)>>1)*64)  */
  2265. /*  samples(i,j) = MWindow(j+32i) * bufPtr(j+32i+((i+1)>>1)*64)  */
  2266. for (j=0; j<32; j++)
  2267. {
  2268.         sum = 0;
  2269. for (i=0; i<16; i++)
  2270. {
  2271. k = j + (i<<5);
  2272.             sum += window[k] * (*buf) [channel] [( (k + ( ((i+1)>>1) <<6) ) +
  2273.                                                   bufOffset) & 0x3ff];
  2274.         }
  2275. /*   {long foo = (sum > 0) ? sum * SCALE + 0.5 : sum * SCALE - 0.5; */
  2276. /*   {long foo = sum * SCALE;  */
  2277.      
  2278. #ifdef SB_OUTPUT
  2279.  sum = bandPtr[j]; /* 960814 FdB for subband sample generation */
  2280. #endif
  2281.  foo = floor(sum * SCALE + 0.5);
  2282.  if (foo >= (long) SCALE)      {samples[j] = SCALE-1; ++clip;}
  2283.  else if (foo < (long) -SCALE) {samples[j] =-SCALE;  ++clip;}
  2284.  else                           samples[j] = foo;
  2285.  
  2286.     }
  2287.     return(clip);
  2288. }
  2289. int SubBandSynthesis_ml (double *bandPtr,
  2290.          int channel,
  2291.          long *samples)
  2292. {
  2293.     long foo;
  2294.     register int i,j,k;
  2295.     register double *bufOffsetPtr, sum;
  2296.     static int init = 1;
  2297.     typedef double NN[64][32];
  2298.     static NN *filter;
  2299.     typedef double BB[7][2*HAN_SIZE]; 
  2300.     static BB *buf;
  2301.     static int bufOffset = 64;
  2302.     static double *window;
  2303.     int clip = 0;               /* count & return how many samples clipped */
  2304.     if (init) {
  2305. buf = (BB *) mem_alloc(sizeof(BB),"BB");
  2306. filter = (NN *) mem_alloc(sizeof(NN), "NN");
  2307. create_syn_filter(*filter);
  2308. window = (double *) mem_alloc(sizeof(double) * HAN_SIZE, "WIN");
  2309. read_syn_window(window);
  2310. bufOffset = 64;
  2311. init = 0;
  2312. }
  2313. if (channel == 0) bufOffset = (bufOffset - 64) & 0x3ff;
  2314. bufOffsetPtr = &((*buf)[channel][bufOffset]);
  2315. for (i=0; i<64; i++)
  2316. {
  2317. sum = 0;
  2318. for (k=0; k<32; k++)
  2319. sum += bandPtr[k] * (*filter)[i][k];
  2320. bufOffsetPtr[i] = sum;
  2321. }
  2322. /*  S(i,j) = D(j+32i) * U(j+32i+((i+1)>>1)*64)  */
  2323. /*  samples(i,j) = MWindow(j+32i) * bufPtr(j+32i+((i+1)>>1)*64)  */
  2324. for (j=0; j<32; j++)
  2325. {
  2326.         sum = 0;
  2327. for (i=0; i<16; i++)
  2328. {
  2329. k = j + (i<<5);
  2330.             sum += window[k] * (*buf) [channel] [( (k + ( ((i+1)>>1) <<6) ) +
  2331.                                                   bufOffset) & 0x3ff];
  2332.         }
  2333. /*   {long foo = (sum > 0) ? sum * SCALE + 0.5 : sum * SCALE - 0.5; */
  2334. /*   {long foo = sum * SCALE;  */
  2335.      
  2336. #ifdef SB_OUTPUT
  2337.  sum = bandPtr[j]; /* 960814 FdB for subband sample generation */
  2338. #endif
  2339.  foo = floor(sum * SCALE + 0.5);
  2340.  if (foo >= (long) SCALE)      {samples[j] = SCALE-1; ++clip;}
  2341.  else if (foo < (long) -SCALE) {samples[j] =-SCALE;  ++clip;}
  2342.  else                           samples[j] = foo;
  2343.  
  2344.     }
  2345.     return (clip);
  2346. }
  2347. void out_fifo (long pcm_sample[7][3][SBLIMIT],
  2348.        int num,
  2349.        frame_params *fr_ps,
  2350.        int done,
  2351.        FILE *outFile,
  2352.        unsigned long *psampFrames,
  2353.        int ch)
  2354. {
  2355.    int i,j,l;
  2356. static short int outsamp[1600];
  2357. static long k = 0;
  2358.     if (!done)
  2359. for (i = 0; i < num; i++)
  2360.     for (j = 0; j < SBLIMIT; j++) 
  2361.     {
  2362. (*psampFrames)++;
  2363. for (l = 0; l < ch; l++)
  2364. {
  2365.     if (!(k % 1600) && k) 
  2366.     {
  2367. fwrite (outsamp, 2, 1600, outFile);
  2368. k = 0;
  2369.     }
  2370.     outsamp[k++] = pcm_sample[l][i][j];
  2371. }
  2372.     }
  2373.     else if (k > 0)
  2374.     {
  2375. fwrite (outsamp, 2, (int) k, outFile);
  2376. k = 0;
  2377.     }
  2378. }
  2379. void out_fifo_ml(long pcm_sample[7][3][SBLIMIT],
  2380.          int num,
  2381.          frame_params *fr_ps,
  2382.          int done,
  2383.          FILE *outFile,
  2384.          unsigned long *psampFrames)
  2385. {
  2386.    int i,j,l;
  2387.    int n_ml_ch = fr_ps->header->no_of_multi_lingual_ch;
  2388.    static short int outsamp[1600];
  2389.    static long k = 0;
  2390.    if (!done)
  2391.       for (i=0; i<num; i++)
  2392.  for (j=0; j<SBLIMIT; j++)
  2393.  {
  2394.     (*psampFrames)++;
  2395.     for (l=0; l<n_ml_ch; l++)
  2396.     {
  2397.        if (!(k%1600) && k)
  2398.        {
  2399.   fwrite (outsamp, 2, 1600, outFile);
  2400.   k = 0;
  2401.        }
  2402.        outsamp[k++] = pcm_sample[l][i][j];
  2403.     }
  2404.  }
  2405.    else if (k > 0)
  2406.    {
  2407.       fwrite (outsamp, 2, (int) k, outFile);
  2408.       k = 0;
  2409.    }
  2410. }
  2411. /*************************************************/
  2412. /* JMZ 10/03/1995 Multilingual */
  2413. /* JMZ 10/03/1995 Multilingual */
  2414. /*************************************************/
  2415. void  buffer_CRC(Bit_stream  *bs,
  2416.  unsigned int  *old_crc)
  2417. {
  2418.    *old_crc = getbits (bs, 16);
  2419. }
  2420. void  recover_CRC_error(long pcm_sample[7][3][SBLIMIT],
  2421. int error_count,
  2422. frame_params *fr_ps,
  2423. FILE *outFile,
  2424. unsigned long *psampFrames,
  2425. int ch)
  2426. {
  2427.    int  stereo = fr_ps->stereo;
  2428.    int  num, done, i;
  2429.    int  samplesPerFrame, samplesPerSlot;
  2430.    layer  *hdr = fr_ps->header;
  2431.    long  offset;
  2432.    short  *temp;
  2433.    num = 3;
  2434.    if (hdr->lay == 1) num = 1;
  2435.    samplesPerSlot = SBLIMIT * num * stereo;
  2436.    samplesPerFrame = samplesPerSlot * 32;
  2437.    if (error_count == 1) {   /* replicate previous error_free frame */
  2438.       done = 1;
  2439.   /* flush out fifo */
  2440.   out_fifo(pcm_sample, num, fr_ps, done, outFile, psampFrames, ch);
  2441.   /* go back to the beginning of the previous frame */
  2442.   offset = sizeof(short int) * samplesPerFrame;
  2443.       fseek(outFile, -offset, SEEK_CUR);
  2444.       done = 0;
  2445.       for (i = 0; i < 12; i++) {
  2446.  fread(pcm_sample, 2, samplesPerSlot, outFile);
  2447.  out_fifo(pcm_sample, num, fr_ps, done, outFile, psampFrames, ch);
  2448.       }
  2449.    }
  2450.    else{   /* mute the frame */
  2451.       temp = (short*) pcm_sample;
  2452.       done = 0;
  2453.       for (i = 0; i < 2*3*SBLIMIT; i++)
  2454.          *temp++ = MUTE;   /* MUTE value is in decoder.h */
  2455.       for (i = 0; i < 12; i++)
  2456.          out_fifo(pcm_sample, num, fr_ps, done, outFile, psampFrames, ch);
  2457.    }
  2458. }
  2459. /*******************************************************/
  2460. /* prediction corrected, Heiko Purnhagen 08-nov-94 */
  2461. /*******************************************************/
  2462. /* this is only a local function */
  2463. static double predict (double pred_buf[2][8][36+PREDDEL], 
  2464. frame_params *fr_ps,
  2465. int sb, 
  2466. int jj, 
  2467. int j,
  2468. int ch,
  2469. int idx) 
  2470. {
  2471.   int i;
  2472.   double t;
  2473.   t = 0;
  2474.   for (i=0; i<fr_ps->header->mc_predsi[sb][idx]; i++)
  2475.     t += pred_buf[ch][sb][PREDDEL+3*jj+j-i-fr_ps->header->mc_delay_comp[sb][idx]]
  2476.       * (fr_ps->header->mc_pred_coeff[sb][idx][i] - 127) * STEP;
  2477.   return t;
  2478. }
  2479. /**************************************************************/
  2480. /* JMZ 09/03/1995 Multilingual modifications */
  2481. void dematricing_mc (double pcm_sample[7][SBLIMIT][3][12], 
  2482.      frame_params *fr_ps,
  2483.      double pred_buf[2][8][36+PREDDEL])
  2484. {
  2485.   int i, j, jj, k, tc_alloc, l, sbgr = 0 ;
  2486.   layer *info = fr_ps->header;
  2487.   double tmp_sample, tmp_sample1, surround_sample;
  2488.   
  2489.   for (jj=0; jj<12; jj++)
  2490.   for( j = 0; j < 3; ++j)
  2491.    {
  2492. for(k = 0; k < SBLIMIT; k ++)
  2493. {
  2494.     if(fr_ps->header->tc_sbgr_select == 1)
  2495. tc_alloc = fr_ps->header->tc_allocation; /* one tc_alloc is valid for all sbgr */
  2496.     else
  2497.     {
  2498. if(k == 0) sbgr = 0;
  2499. else
  2500. for(l = 1; l < 12; l++)
  2501. {
  2502. if((sb_groups[l-1] < k) && (k <= sb_groups[l]))
  2503. {
  2504. sbgr = l;  /* search the valid subband group */
  2505. break;
  2506. }
  2507. }
  2508. tc_alloc = fr_ps->header->tc_alloc[sbgr]; /* no prediction, but different tc_alloc's
  2509. per subband*/
  2510.     }  /* else tc_sbgr_select == 0 */
  2511.     if (fr_ps->header->mc_prediction_on && k < 8 && fr_ps->header->mc_prediction[k])
  2512.     {
  2513. /* prediction on in sbgr */
  2514.     if ((fr_ps->header->surround == 2) && (fr_ps->header->center != 0))
  2515. {    
  2516.     /* FdB channel mode 3/2 */
  2517.     switch (fr_ps->header->dyn_cross_mode[k])   /* if prediction on in sb */
  2518.     {
  2519. case 0: pcm_sample[2][k][j][jj] += predict(pred_buf,fr_ps,k,jj,j,0,0)
  2520.                                  + predict(pred_buf,fr_ps,k,jj,j,1,1);
  2521.      pcm_sample[3][k][j][jj] += predict(pred_buf,fr_ps,k,jj,j,0,2)
  2522.            + predict(pred_buf,fr_ps,k,jj,j,1,3);
  2523.      pcm_sample[4][k][j][jj] += predict(pred_buf,fr_ps,k,jj,j,0,4)
  2524.          + predict(pred_buf,fr_ps,k,jj,j,1,5);
  2525. break;
  2526. case 1: pcm_sample[2][k][j][jj] += predict(pred_buf,fr_ps,k,jj,j,0,0)
  2527.                                  + predict(pred_buf,fr_ps,k,jj,j,1,1);
  2528.      pcm_sample[3][k][j][jj] += predict(pred_buf,fr_ps,k,jj,j,0,2)
  2529.            + predict(pred_buf,fr_ps,k,jj,j,1,3);
  2530.      break;
  2531. case 2: pcm_sample[2][k][j][jj] += predict(pred_buf,fr_ps,k,jj,j,0,0)
  2532.                                  + predict(pred_buf,fr_ps,k,jj,j,1,1);
  2533.      pcm_sample[4][k][j][jj] += predict(pred_buf,fr_ps,k,jj,j,0,2)
  2534.          + predict(pred_buf,fr_ps,k,jj,j,1,3);
  2535. break;
  2536. case 3: pcm_sample[3][k][j][jj] += predict(pred_buf,fr_ps,k,jj,j,0,0)
  2537.            + predict(pred_buf,fr_ps,k,jj,j,1,1);
  2538.      pcm_sample[4][k][j][jj] += predict(pred_buf,fr_ps,k,jj,j,0,2)
  2539.          + predict(pred_buf,fr_ps,k,jj,j,1,3);
  2540. break;
  2541. case 4: pcm_sample[2][k][j][jj] += predict(pred_buf,fr_ps,k,jj,j,0,0)
  2542.                                  + predict(pred_buf,fr_ps,k,jj,j,1,1);
  2543.      break;
  2544. case 5: pcm_sample[3][k][j][jj] += predict(pred_buf,fr_ps,k,jj,j,0,0)
  2545.            + predict(pred_buf,fr_ps,k,jj,j,1,1);
  2546.      break;
  2547. case 6: pcm_sample[4][k][j][jj] += predict(pred_buf,fr_ps,k,jj,j,0,0)
  2548.          + predict(pred_buf,fr_ps,k,jj,j,1,1);
  2549. break;
  2550. case 8: pcm_sample[2][k][j][jj] += predict(pred_buf,fr_ps,k,jj,j,0,0)
  2551.                                  + predict(pred_buf,fr_ps,k,jj,j,1,1);
  2552.      break;
  2553. case 9: pcm_sample[4][k][j][jj] += predict(pred_buf,fr_ps,k,jj,j,0,0)
  2554.          + predict(pred_buf,fr_ps,k,jj,j,1,1);
  2555. break;
  2556.        case 10: pcm_sample[3][k][j][jj] += predict(pred_buf,fr_ps,k,jj,j,0,0)
  2557.          + predict(pred_buf,fr_ps,k,jj,j,1,1);
  2558.      break;
  2559.      }
  2560. } /* 3/2 mode */
  2561. else if ((fr_ps->header->surround == 1 && fr_ps->header->center != 0) ||
  2562.  (fr_ps->header->surround == 2 && fr_ps->header->center == 0))
  2563. {
  2564.     /* FdB channel modes 3/1 and 2/2 */
  2565.     switch(fr_ps->header->dyn_cross_mode[k])   /* if prediction on in sb */
  2566.     {
  2567. case 0: pcm_sample[2][k][j][jj] += predict(pred_buf,fr_ps,k,jj,j,0,0)
  2568.  + predict(pred_buf,fr_ps,k,jj,j,1,1);
  2569. pcm_sample[3][k][j][jj] += predict(pred_buf,fr_ps,k,jj,j,0,2)
  2570.  + predict(pred_buf,fr_ps,k,jj,j,1,3);
  2571. break;
  2572. case 1: pcm_sample[2][k][j][jj] += predict(pred_buf,fr_ps,k,jj,j,0,0)
  2573.  + predict(pred_buf,fr_ps,k,jj,j,1,1);
  2574. break;
  2575. case 2: pcm_sample[3][k][j][jj] += predict(pred_buf,fr_ps,k,jj,j,0,0)
  2576.  + predict(pred_buf,fr_ps,k,jj,j,1,1);
  2577. break;
  2578.     }
  2579. } /* 3/1 and 2/2 modes */
  2580. else if (((fr_ps->header->surround == 0 || fr_ps->header->surround == 3) && fr_ps->header->center != 0) ||
  2581.  (fr_ps->header->surround == 1 && fr_ps->header->center == 0))
  2582. {
  2583.     /* FdB channel modes 3/0 (+ 2/0) and 2/1 */
  2584.     switch(fr_ps->header->dyn_cross_mode[k])   /* if prediction on in sb */
  2585.     {
  2586. case 0: pcm_sample[2][k][j][jj] += predict(pred_buf,fr_ps,k,jj,j,0,0)
  2587.  + predict(pred_buf,fr_ps,k,jj,j,1,1);
  2588. break;
  2589.     }
  2590. }
  2591.     }    
  2592.     if (fr_ps->header->dematrix_procedure != 3)
  2593.     if ((fr_ps->header->surround == 2) && (fr_ps->header->center != 0))
  2594. {    
  2595.     /* FdB channel mode 3/2 */
  2596.     switch(tc_alloc)
  2597.     {
  2598.      case 0:
  2599.     if (fr_ps->header->dematrix_procedure == 2) {
  2600. surround_sample = (pcm_sample[3][k][j][jj] + pcm_sample[4][k][j][jj]) / 2.0;
  2601. pcm_sample[0][k][j][jj] = pcm_sample[0][k][j][jj] - pcm_sample[2][k][j][jj] + surround_sample;
  2602. pcm_sample[1][k][j][jj] = pcm_sample[1][k][j][jj] - pcm_sample[2][k][j][jj] - surround_sample;
  2603.     }
  2604.     else {
  2605. pcm_sample[0][k][j][jj] = pcm_sample[0][k][j][jj] - pcm_sample[2][k][j][jj] - pcm_sample[3][k][j][jj];
  2606. pcm_sample[1][k][j][jj] = pcm_sample[1][k][j][jj] - pcm_sample[2][k][j][jj] - pcm_sample[4][k][j][jj];
  2607.     }
  2608.     break;
  2609.     
  2610.      case 1:
  2611.     if (fr_ps->header->dematrix_procedure == 2) {
  2612.     surround_sample = (pcm_sample[3][k][j][jj] + pcm_sample[4][k][j][jj]) / 2.0;
  2613.     tmp_sample = pcm_sample[2][k][j][jj]; /* L */
  2614.     pcm_sample[2][k][j][jj] = pcm_sample[0][k][j][jj] - pcm_sample[2][k][j][jj] + surround_sample;
  2615.     pcm_sample[1][k][j][jj] = pcm_sample[1][k][j][jj] - pcm_sample[2][k][j][jj] - surround_sample;
  2616.     pcm_sample[0][k][j][jj] = tmp_sample;
  2617.     }
  2618.     else {
  2619.     tmp_sample = pcm_sample[2][k][j][jj]; /* L */
  2620.     pcm_sample[2][k][j][jj] = pcm_sample[0][k][j][jj] - pcm_sample[2][k][j][jj] - pcm_sample[3][k][j][jj];
  2621.     pcm_sample[1][k][j][jj] = pcm_sample[1][k][j][jj] - pcm_sample[2][k][j][jj] - pcm_sample[4][k][j][jj];
  2622.     pcm_sample[0][k][j][jj] = tmp_sample;
  2623.     }
  2624.     break;
  2625.     
  2626.      case 2:
  2627.     if (fr_ps->header->dematrix_procedure == 2) {
  2628.     surround_sample = (pcm_sample[3][k][j][jj] + pcm_sample[4][k][j][jj]) / 2.0;
  2629.     tmp_sample = pcm_sample[2][k][j][jj]; /* R */
  2630.     pcm_sample[2][k][j][jj] = pcm_sample[1][k][j][jj] - pcm_sample[2][k][j][jj] - surround_sample;
  2631.     pcm_sample[0][k][j][jj] = pcm_sample[0][k][j][jj] - pcm_sample[2][k][j][jj] + surround_sample;
  2632.     pcm_sample[1][k][j][jj] = tmp_sample;
  2633.     }
  2634.     else {
  2635.     tmp_sample = pcm_sample[2][k][j][jj]; /* R */
  2636.     pcm_sample[2][k][j][jj] = pcm_sample[1][k][j][jj] - pcm_sample[2][k][j][jj] - pcm_sample[4][k][j][jj];
  2637.     pcm_sample[0][k][j][jj] = pcm_sample[0][k][j][jj] - pcm_sample[2][k][j][jj] - pcm_sample[3][k][j][jj];
  2638.     pcm_sample[1][k][j][jj] = tmp_sample;
  2639.     }
  2640.     break;
  2641.     
  2642.      case 3:
  2643.     if (fr_ps->header->dematrix_procedure == 2) {
  2644.     tmp_sample = pcm_sample[3][k][j][jj];  /* L in T3 */
  2645.     pcm_sample[3][k][j][jj] = -2.0 * (pcm_sample[0][k][j][jj] - pcm_sample[2][k][j][jj] -  pcm_sample[3][k][j][jj]) - pcm_sample[4][k][j][jj];
  2646.     pcm_sample[1][k][j][jj] = pcm_sample[0][k][j][jj] + pcm_sample[1][k][j][jj] - 2.0 * pcm_sample[2][k][j][jj] - tmp_sample;
  2647.     pcm_sample[0][k][j][jj] = tmp_sample;
  2648.     }
  2649.     else {
  2650.     tmp_sample = pcm_sample[3][k][j][jj];  /* L in T3 */
  2651.     pcm_sample[3][k][j][jj] = pcm_sample[0][k][j][jj] - pcm_sample[3][k][j][jj] - pcm_sample[2][k][j][jj];
  2652.     pcm_sample[1][k][j][jj] = pcm_sample[1][k][j][jj] - pcm_sample[2][k][j][jj] - pcm_sample[4][k][j][jj];
  2653.     pcm_sample[0][k][j][jj] = tmp_sample;
  2654.     }
  2655.     break;
  2656.     
  2657.      case 4:
  2658.     if (fr_ps->header->dematrix_procedure == 2) {
  2659.     tmp_sample = pcm_sample[4][k][j][jj];  /* R in T4 */
  2660.     pcm_sample[0][k][j][jj] = pcm_sample[0][k][j][jj] + pcm_sample[1][k][j][jj] - 2.0 * pcm_sample[2][k][j][jj] - pcm_sample[4][k][j][jj];
  2661.     pcm_sample[4][k][j][jj] = 2.0 * pcm_sample[1][k][j][jj] - 2.0 * (pcm_sample[2][k][j][jj] + pcm_sample[4][k][j][jj]) - pcm_sample[3][k][j][jj];
  2662.     pcm_sample[1][k][j][jj] = tmp_sample;
  2663.     }
  2664.     else {
  2665.     tmp_sample = pcm_sample[4][k][j][jj];  /* R in T4 */
  2666.     pcm_sample[0][k][j][jj] = pcm_sample[0][k][j][jj] - pcm_sample[2][k][j][jj] - pcm_sample[3][k][j][jj];
  2667.     pcm_sample[4][k][j][jj] = pcm_sample[1][k][j][jj] - pcm_sample[4][k][j][jj] - pcm_sample[2][k][j][jj];
  2668.     pcm_sample[1][k][j][jj] = tmp_sample;
  2669.     }
  2670.     break;
  2671.     
  2672.      case 5:
  2673.     if (fr_ps->header->dematrix_procedure == 2) {
  2674.     tmp_sample = pcm_sample[3][k][j][jj];  /* L in T3 */
  2675.     pcm_sample[3][k][j][jj] = 0.5 * (pcm_sample[1][k][j][jj] - pcm_sample[0][k][j][jj] + pcm_sample[3][k][j][jj] - pcm_sample[4][k][j][jj]);
  2676.     pcm_sample[0][k][j][jj] = tmp_sample;
  2677.     pcm_sample[1][k][j][jj] = pcm_sample[4][k][j][jj]; /* R in T4 */
  2678.     pcm_sample[4][k][j][jj] = pcm_sample[3][k][j][jj]; /* RS = LS */
  2679.     }
  2680.     else {
  2681.     tmp_sample = pcm_sample[3][k][j][jj];
  2682.     pcm_sample[3][k][j][jj] = pcm_sample[0][k][j][jj] - pcm_sample[3][k][j][jj] - pcm_sample[2][k][j][jj];
  2683.     pcm_sample[0][k][j][jj] = tmp_sample;
  2684.     tmp_sample = pcm_sample[4][k][j][jj];
  2685.     pcm_sample[4][k][j][jj] = pcm_sample[1][k][j][jj] - pcm_sample[4][k][j][jj] - pcm_sample[2][k][j][jj];
  2686.     pcm_sample[1][k][j][jj] = tmp_sample;
  2687.     }
  2688.     break;
  2689.     
  2690.      case 6:
  2691.     if (fr_ps->header->dematrix_procedure == 2) {
  2692.     tmp_sample = pcm_sample[2][k][j][jj];  /* R in T2 */
  2693.     tmp_sample1 = pcm_sample[3][k][j][jj];  /* L in T3 */
  2694.     pcm_sample[3][k][j][jj] = pcm_sample[1][k][j][jj] - pcm_sample[0][k][j][jj] - pcm_sample[2][k][j][jj] + pcm_sample[3][k][j][jj] - pcm_sample[4][k][j][jj];
  2695.     pcm_sample[2][k][j][jj] = 0.5 * (pcm_sample[0][k][j][jj] + pcm_sample[1][k][j][jj] - pcm_sample[2][k][j][jj] - tmp_sample1);
  2696.     pcm_sample[1][k][j][jj] = tmp_sample;
  2697.     pcm_sample[0][k][j][jj] = tmp_sample1;
  2698.     }
  2699.     else {
  2700.     tmp_sample = pcm_sample[2][k][j][jj];  /* R in T2 */
  2701.     pcm_sample[2][k][j][jj] = pcm_sample[1][k][j][jj] - pcm_sample[2][k][j][jj] - pcm_sample[4][k][j][jj];
  2702.     pcm_sample[1][k][j][jj] = tmp_sample;
  2703.     tmp_sample = pcm_sample[3][k][j][jj];  /* L in T3 */
  2704.     pcm_sample[3][k][j][jj] = pcm_sample[0][k][j][jj] - pcm_sample[3][k][j][jj] - pcm_sample[2][k][j][jj];
  2705.     pcm_sample[0][k][j][jj] = tmp_sample;
  2706.     }
  2707.     break;
  2708.     
  2709.      case 7:
  2710.     if (fr_ps->header->dematrix_procedure == 2) {
  2711.     tmp_sample = pcm_sample[2][k][j][jj];  /* L in T2 */
  2712.     tmp_sample1 = pcm_sample[4][k][j][jj];  /* R in T4 */
  2713.     pcm_sample[4][k][j][jj] = pcm_sample[1][k][j][jj] - pcm_sample[0][k][j][jj] + pcm_sample[2][k][j][jj] - pcm_sample[3][k][j][jj] - pcm_sample[4][k][j][jj];
  2714.     pcm_sample[2][k][j][jj] = 0.5 * (pcm_sample[0][k][j][jj] + pcm_sample[1][k][j][jj] - pcm_sample[2][k][j][jj] - tmp_sample1);
  2715.     pcm_sample[0][k][j][jj] = tmp_sample;
  2716.     pcm_sample[1][k][j][jj] = tmp_sample1;
  2717.     }
  2718.     else {
  2719.     tmp_sample = pcm_sample[2][k][j][jj];
  2720.     pcm_sample[2][k][j][jj] = pcm_sample[0][k][j][jj] - pcm_sample[2][k][j][jj] - pcm_sample[3][k][j][jj];
  2721.     pcm_sample[0][k][j][jj] = tmp_sample;
  2722.     tmp_sample = pcm_sample[4][k][j][jj];
  2723.     pcm_sample[4][k][j][jj] = pcm_sample[1][k][j][jj] - pcm_sample[4][k][j][jj] - pcm_sample[2][k][j][jj];
  2724.     pcm_sample[1][k][j][jj] = tmp_sample;
  2725.     }
  2726.     break;
  2727.     
  2728.     } /* switch end loop*/
  2729. }
  2730. else if (fr_ps->header->surround == 1 && fr_ps->header->center != 0)  
  2731. {    
  2732.     /* FdB channel mode 3/1 */
  2733.     switch(tc_alloc)
  2734.     {
  2735.  case 0: 
  2736. if (fr_ps->header->dematrix_procedure == 2)
  2737.     pcm_sample[0][k][j][jj] = pcm_sample[0][k][j][jj] - pcm_sample[2][k][j][jj] + pcm_sample[3][k][j][jj];
  2738. else
  2739.     pcm_sample[0][k][j][jj] = pcm_sample[0][k][j][jj] - pcm_sample[2][k][j][jj] - pcm_sample[3][k][j][jj];
  2740. pcm_sample[1][k][j][jj] = pcm_sample[1][k][j][jj] - pcm_sample[2][k][j][jj] - pcm_sample[3][k][j][jj];
  2741. break;
  2742.  case 1:
  2743. tmp_sample = pcm_sample[2][k][j][jj]; /* L */
  2744. if (fr_ps->header->dematrix_procedure == 2)
  2745.     pcm_sample[2][k][j][jj] = pcm_sample[0][k][j][jj] - pcm_sample[2][k][j][jj] + pcm_sample[3][k][j][jj];
  2746. else
  2747.     pcm_sample[2][k][j][jj] = pcm_sample[0][k][j][jj] - pcm_sample[2][k][j][jj] - pcm_sample[3][k][j][jj];
  2748. pcm_sample[1][k][j][jj] = pcm_sample[1][k][j][jj] - pcm_sample[2][k][j][jj] - pcm_sample[3][k][j][jj];
  2749. pcm_sample[0][k][j][jj] = tmp_sample;
  2750. break;
  2751.  case 2: 
  2752. tmp_sample = pcm_sample[2][k][j][jj]; /* R */
  2753. pcm_sample[2][k][j][jj] = pcm_sample[1][k][j][jj] - pcm_sample[2][k][j][jj] - pcm_sample[3][k][j][jj];
  2754. if (fr_ps->header->dematrix_procedure == 2)
  2755.     pcm_sample[0][k][j][jj] = pcm_sample[0][k][j][jj] - pcm_sample[2][k][j][jj] + pcm_sample[3][k][j][jj];
  2756. else
  2757.     pcm_sample[0][k][j][jj] = pcm_sample[0][k][j][jj] - pcm_sample[2][k][j][jj] - pcm_sample[3][k][j][jj];
  2758. pcm_sample[1][k][j][jj] = tmp_sample;
  2759. break;
  2760.  case 3: 
  2761. tmp_sample = pcm_sample[3][k][j][jj];  /* L in T3 */
  2762. if (fr_ps->header->dematrix_procedure == 2)
  2763.     pcm_sample[3][k][j][jj] = -pcm_sample[0][k][j][jj] + pcm_sample[2][k][j][jj] + pcm_sample[3][k][j][jj];
  2764. else
  2765.     pcm_sample[3][k][j][jj] = pcm_sample[0][k][j][jj] - pcm_sample[2][k][j][jj] - pcm_sample[3][k][j][jj];
  2766. pcm_sample[1][k][j][jj] = pcm_sample[1][k][j][jj] - pcm_sample[2][k][j][jj] - pcm_sample[3][k][j][jj];
  2767. pcm_sample[0][k][j][jj] = tmp_sample;
  2768. break;
  2769.  case 4:
  2770. tmp_sample = pcm_sample[3][k][j][jj];  /* R in T3 */
  2771. pcm_sample[3][k][j][jj] = pcm_sample[1][k][j][jj] - pcm_sample[2][k][j][jj] - pcm_sample[3][k][j][jj];
  2772. if (fr_ps->header->dematrix_procedure == 2)
  2773.     pcm_sample[0][k][j][jj] = pcm_sample[0][k][j][jj] - pcm_sample[2][k][j][jj] + pcm_sample[3][k][j][jj];
  2774. else
  2775.     pcm_sample[0][k][j][jj] = pcm_sample[0][k][j][jj] - pcm_sample[2][k][j][jj] - pcm_sample[3][k][j][jj];
  2776. pcm_sample[1][k][j][jj] = tmp_sample;
  2777. break;
  2778.  case 5:
  2779. tmp_sample = pcm_sample[2][k][j][jj];  /* L in T2 */
  2780. tmp_sample1 = pcm_sample[3][k][j][jj];  /* R in T3 */
  2781. pcm_sample[2][k][j][jj] = 0.5 * (pcm_sample[0][k][j][jj] + pcm_sample[1][k][j][jj] - tmp_sample - tmp_sample1);
  2782. pcm_sample[3][k][j][jj] = 0.5 * (pcm_sample[1][k][j][jj] - pcm_sample[0][k][j][jj] + tmp_sample - tmp_sample1);
  2783. pcm_sample[0][k][j][jj] = tmp_sample;
  2784. pcm_sample[1][k][j][jj] = tmp_sample1;
  2785. break;
  2786.     }   /* switch end */
  2787. }
  2788. else if (fr_ps->header->surround == 1 || fr_ps->header->center != 0)
  2789. {
  2790.     /* FdB channel modes 3/0 (+ 2/0) and 2/1 */
  2791.     switch(tc_alloc)
  2792.     {
  2793.  case 0: 
  2794. pcm_sample[0][k][j][jj] = pcm_sample[0][k][j][jj] - pcm_sample[2][k][j][jj]; 
  2795. pcm_sample[1][k][j][jj] = pcm_sample[1][k][j][jj] - pcm_sample[2][k][j][jj];
  2796. break;
  2797.  case 1:
  2798. tmp_sample = pcm_sample[2][k][j][jj]; /* L */
  2799. pcm_sample[2][k][j][jj] = pcm_sample[0][k][j][jj] - pcm_sample[2][k][j][jj];
  2800. pcm_sample[1][k][j][jj] = pcm_sample[1][k][j][jj] - pcm_sample[2][k][j][jj];
  2801. pcm_sample[0][k][j][jj] = tmp_sample;
  2802. break;
  2803.  case 2: 
  2804. tmp_sample = pcm_sample[2][k][j][jj]; /* R */
  2805. pcm_sample[2][k][j][jj] = pcm_sample[1][k][j][jj] - pcm_sample[2][k][j][jj];
  2806. pcm_sample[0][k][j][jj] = pcm_sample[0][k][j][jj] - pcm_sample[2][k][j][jj];
  2807. pcm_sample[1][k][j][jj] = tmp_sample;
  2808. break;
  2809.     }   /* switch end */
  2810. }
  2811. else if (fr_ps->header->surround == 2)  
  2812. {
  2813.     /* FdB channel mode 2/2 */
  2814.     switch(tc_alloc)
  2815.     {
  2816.  case 0: 
  2817. pcm_sample[0][k][j][jj] = pcm_sample[0][k][j][jj] - pcm_sample[2][k][j][jj];
  2818.      pcm_sample[1][k][j][jj] = pcm_sample[1][k][j][jj] - pcm_sample[3][k][j][jj];
  2819. break;
  2820.  case 1:
  2821. tmp_sample = pcm_sample[2][k][j][jj]; /* L */
  2822. pcm_sample[1][k][j][jj] = pcm_sample[1][k][j][jj] - pcm_sample[3][k][j][jj];
  2823. pcm_sample[2][k][j][jj] = pcm_sample[0][k][j][jj] - pcm_sample[2][k][j][jj];
  2824. pcm_sample[0][k][j][jj] = tmp_sample;
  2825. break;
  2826.  case 2: 
  2827. tmp_sample = pcm_sample[3][k][j][jj]; /* R */
  2828. pcm_sample[0][k][j][jj] = pcm_sample[0][k][j][jj] - pcm_sample[2][k][j][jj];
  2829. pcm_sample[3][k][j][jj] = pcm_sample[1][k][j][jj] - pcm_sample[3][k][j][jj];
  2830. pcm_sample[1][k][j][jj] = tmp_sample;
  2831. break;
  2832.  case 3: 
  2833. tmp_sample = pcm_sample[2][k][j][jj]; /* L */
  2834. pcm_sample[2][k][j][jj] = pcm_sample[0][k][j][jj] - pcm_sample[2][k][j][jj];
  2835. pcm_sample[0][k][j][jj] = tmp_sample;
  2836. tmp_sample = pcm_sample[3][k][j][jj]; /* R */
  2837. pcm_sample[3][k][j][jj] = pcm_sample[1][k][j][jj] - pcm_sample[3][k][j][jj];
  2838. pcm_sample[1][k][j][jj] = tmp_sample;
  2839. break;
  2840.     }   /* switch end */
  2841. }
  2842. }     /* for k < sblimit loop */
  2843.       }     /* for j < 3 loop */
  2844. }
  2845. void denormalizing_mc (double pcm_sample[7][SBLIMIT][3][12], frame_params *fr_ps, int channels)
  2846. {
  2847.   double matr1;   /* normalizing factor */
  2848.   double matr2;   /* matricing factor   */
  2849.   double matr3;   /* matricing factor   */
  2850.   int i, j, jj, k, l;
  2851.   layer *info = fr_ps->header;
  2852.   int  stereo = fr_ps->stereo;
  2853.   
  2854.   switch (info->dematrix_procedure)
  2855.   {
  2856.     /* factors according to International Standard */
  2857.     case 0:
  2858.     case 2: matr1 = 1 + sqrt(2.0); /* factor for L and R   */
  2859.     matr2 = sqrt(2.0) * matr1; /* factor for C */
  2860.     matr3 = sqrt(2.0) * matr1; /* factor for Ls, Rs */
  2861.     break;
  2862.     case 1: matr1 = (1.5 + 0.5*sqrt(2.0));/* factor for L, R      */
  2863.     matr2 = sqrt(2.0) * matr1; /* factor for C         */
  2864.     matr3 = 2 * matr1; /* factor for Ls, Rs  */
  2865.     break;
  2866.     case 3: matr1 = 1.0;
  2867.     matr2 = 1.0;
  2868.     matr3 = 1.0;
  2869.     break;
  2870.   }
  2871.   /* denormalized signals */
  2872.   if (fr_ps->header->dematrix_procedure != 3 )  /* dematrixing */
  2873.     for (jj=0; jj<12; jj++)
  2874.       for( j = 0; j < 3; ++j)
  2875. for (k = 0; k < SBLIMIT; k ++)
  2876. {   /* Lo / Ro */
  2877.     for (i = 0; i < stereo; i++)
  2878. pcm_sample[i][k][j][jj] = pcm_sample[i][k][j][jj] * matr1;
  2879.     if (fr_ps->header->dematrix_procedure != 1)  /* matrix 0 and 2, since C, Ls, Rs, and S all use the same value */
  2880.     {
  2881. /* second stereo channels */
  2882. if (fr_ps->header->surround == 3)
  2883. {
  2884.     if (fr_ps->header->center != 0)
  2885. pcm_sample[2][k][j][jj] = pcm_sample[2][k][j][jj] * matr2;
  2886. }
  2887. else   
  2888. {
  2889.     for (l = 2; l < channels; l++)
  2890.        pcm_sample[l][k][j][jj] = pcm_sample[l][k][j][jj] * matr2;
  2891. }
  2892.     }
  2893.     else   /* matrix 1 */
  2894.     {
  2895. if (fr_ps->header->surround == 3)
  2896. {
  2897.     if (fr_ps->header->center != 0)
  2898. pcm_sample[2][k][j][jj] = pcm_sample[2][k][j][jj] * matr2;
  2899. }
  2900. else if (fr_ps->mc_channel == 3)   /* R.S. matr2 = C */
  2901. {
  2902.     pcm_sample[2][k][j][jj] = pcm_sample[2][k][j][jj] * matr2;
  2903.     pcm_sample[3][k][j][jj] = pcm_sample[3][k][j][jj] * matr3;
  2904.     pcm_sample[4][k][j][jj] = pcm_sample[4][k][j][jj] * matr3;
  2905. }
  2906. else if (fr_ps->mc_channel == 2)
  2907. {
  2908.     if (fr_ps->header->surround == 2) /* 2/2 */
  2909.     {
  2910. pcm_sample[2][k][j][jj] = pcm_sample[2][k][j][jj] * matr3;  
  2911. pcm_sample[3][k][j][jj] = pcm_sample[3][k][j][jj] * matr3;
  2912.     }
  2913.     else /* 3/1 */
  2914.     {
  2915. pcm_sample[2][k][j][jj] = pcm_sample[2][k][j][jj] * matr2;
  2916. pcm_sample[3][k][j][jj] = pcm_sample[3][k][j][jj] * matr3;
  2917.     }
  2918. }
  2919. else /* mc_channel == 1 */
  2920. {
  2921.     if (fr_ps->header->center == 0) /* 2/1 */
  2922. pcm_sample[2][k][j][jj] = pcm_sample[2][k][j][jj] * matr3; 
  2923.     else /* 3/0 */
  2924. pcm_sample[2][k][j][jj] = pcm_sample[2][k][j][jj] * matr2;
  2925. }
  2926.     }
  2927. }
  2928. }
  2929. #ifdef Augmentation_7ch
  2930. void dematricing_aug (double pcm_sample[7][SBLIMIT][3][12], frame_params *fr_ps)
  2931. {
  2932.   double c0, c1;   /* denormalization factors */
  2933.   int i, j, jj, k, tc_aug_alloc, l, sbgr = 0 ;
  2934.   layer *info = fr_ps->header;
  2935.   double tmp_sample1, tmp_sample2;
  2936.   
  2937.   c0 = 1.0 / 3.0;
  2938.   if (info->dematrix_procedure != 3)
  2939.     c0 *= sqrt (0.5);
  2940.   c1 = 1.0 / c0;
  2941.   for (jj=0; jj<12; jj++)
  2942.     for( j = 0; j < 3; ++j)
  2943.     {
  2944.       for(k = 0; k < SBLIMIT; k ++)
  2945.       {
  2946. if (k == 0) sbgr = 0;
  2947. else
  2948. {
  2949.   for(l = 1; l < 12; l++)
  2950.   {
  2951.     if((sb_groups[l-1] < k) && (k <= sb_groups[l]))
  2952.     {
  2953.       sbgr = l;  /* search the valid subband group */
  2954.       break;
  2955.     }
  2956.   }
  2957. }
  2958. tc_aug_alloc = fr_ps->header->tc_aug_alloc[sbgr];
  2959. if (info->aug_mtx_proc == 0)
  2960.   switch (tc_aug_alloc)
  2961.   {
  2962.   case 0:  pcm_sample[0][k][j][jj] -= pcm_sample[5][k][j][jj];
  2963.    pcm_sample[1][k][j][jj] -= pcm_sample[6][k][j][jj];
  2964.    pcm_sample[2][k][j][jj] -= c0 * (pcm_sample[5][k][j][jj] + pcm_sample[6][k][j][jj]);
  2965.    break;
  2966.   case 1:  tmp_sample1 = pcm_sample[0][k][j][jj];
  2967.    pcm_sample[0][k][j][jj] = pcm_sample[5][k][j][jj];
  2968.    pcm_sample[5][k][j][jj] = tmp_sample1 - pcm_sample[5][k][j][jj];
  2969.    pcm_sample[1][k][j][jj] -= pcm_sample[6][k][j][jj];
  2970.    pcm_sample[2][k][j][jj] -= c0 * (pcm_sample[5][k][j][jj] + pcm_sample[6][k][j][jj]);
  2971.    break;
  2972.   case 2:  pcm_sample[0][k][j][jj] -= pcm_sample[5][k][j][jj];
  2973.    tmp_sample2 = pcm_sample[1][k][j][jj];
  2974.    pcm_sample[1][k][j][jj] = pcm_sample[6][k][j][jj];
  2975.    pcm_sample[6][k][j][jj] = tmp_sample2 - pcm_sample[6][k][j][jj];
  2976.    pcm_sample[2][k][j][jj] -= c0 * (pcm_sample[5][k][j][jj] + pcm_sample[6][k][j][jj]);
  2977.    break;
  2978.   case 3:  tmp_sample1 = pcm_sample[0][k][j][jj];
  2979.    pcm_sample[0][k][j][jj] = pcm_sample[5][k][j][jj];
  2980.    pcm_sample[5][k][j][jj] = tmp_sample1 - pcm_sample[5][k][j][jj];
  2981.    tmp_sample2 = pcm_sample[1][k][j][jj];
  2982.    pcm_sample[1][k][j][jj] = pcm_sample[6][k][j][jj];
  2983.    pcm_sample[6][k][j][jj] = tmp_sample2 - pcm_sample[6][k][j][jj];
  2984.    pcm_sample[2][k][j][jj] -= c0 * (pcm_sample[5][k][j][jj] + pcm_sample[6][k][j][jj]);
  2985.    break;
  2986.   case 4:  pcm_sample[0][k][j][jj] -= pcm_sample[5][k][j][jj];
  2987.    tmp_sample1 = pcm_sample[2][k][j][jj];
  2988.    tmp_sample2 = pcm_sample[6][k][j][jj];
  2989.    pcm_sample[2][k][j][jj] = tmp_sample2;
  2990.    pcm_sample[6][k][j][jj] = c1 * (tmp_sample1 - tmp_sample2) - pcm_sample[5][k][j][jj];
  2991.    pcm_sample[1][k][j][jj] -= pcm_sample[6][k][j][jj];
  2992.    break;
  2993.   case 5:  tmp_sample1 = pcm_sample[0][k][j][jj];
  2994.    pcm_sample[0][k][j][jj] = pcm_sample[5][k][j][jj];
  2995.    pcm_sample[5][k][j][jj] = tmp_sample1 - pcm_sample[5][k][j][jj];
  2996.    tmp_sample1 = pcm_sample[2][k][j][jj];
  2997.    tmp_sample2 = pcm_sample[6][k][j][jj];
  2998.    pcm_sample[2][k][j][jj] = tmp_sample2;
  2999.    pcm_sample[6][k][j][jj] = c1 * (tmp_sample1 - tmp_sample2) - pcm_sample[5][k][j][jj];
  3000.    pcm_sample[1][k][j][jj] -= pcm_sample[6][k][j][jj];
  3001.    break;
  3002.   case 6:  pcm_sample[1][k][j][jj] -= pcm_sample[6][k][j][jj];
  3003.    tmp_sample1 = pcm_sample[2][k][j][jj];
  3004.    tmp_sample2 = pcm_sample[5][k][j][jj];
  3005.    pcm_sample[2][k][j][jj] = tmp_sample2;
  3006.    pcm_sample[5][k][j][jj] = c1 * (tmp_sample1 - tmp_sample2) - pcm_sample[6][k][j][jj];
  3007.    pcm_sample[0][k][j][jj] -= pcm_sample[5][k][j][jj];
  3008.    break;
  3009.   case 7:  tmp_sample1 = pcm_sample[1][k][j][jj];
  3010.    pcm_sample[1][k][j][jj] = pcm_sample[6][k][j][jj];
  3011.    pcm_sample[6][k][j][jj] = tmp_sample1 - pcm_sample[6][k][j][jj];
  3012.    tmp_sample1 = pcm_sample[2][k][j][jj];
  3013.    tmp_sample2 = pcm_sample[5][k][j][jj];
  3014.    pcm_sample[2][k][j][jj] = tmp_sample2;
  3015.    pcm_sample[5][k][j][jj] = c1 * (tmp_sample1 - tmp_sample2) - pcm_sample[6][k][j][jj];
  3016.    pcm_sample[0][k][j][jj] -= pcm_sample[5][k][j][jj];
  3017.    break;
  3018.   }
  3019. else if (info->aug_mtx_proc == 1)
  3020.   switch (tc_aug_alloc)
  3021.   {
  3022.   case 0:  pcm_sample[0][k][j][jj] -= pcm_sample[5][k][j][jj];
  3023.    pcm_sample[1][k][j][jj] -= pcm_sample[6][k][j][jj];
  3024.    break;
  3025.   case 1:  tmp_sample1 = pcm_sample[0][k][j][jj];
  3026.    pcm_sample[0][k][j][jj] = pcm_sample[5][k][j][jj];
  3027.    pcm_sample[5][k][j][jj] = tmp_sample1 - pcm_sample[5][k][j][jj];
  3028.    pcm_sample[1][k][j][jj] -= pcm_sample[6][k][j][jj];
  3029.    break;
  3030.   case 2:  pcm_sample[0][k][j][jj] -= pcm_sample[5][k][j][jj];
  3031.    tmp_sample2 = pcm_sample[1][k][j][jj];
  3032.    pcm_sample[1][k][j][jj] = pcm_sample[6][k][j][jj];
  3033.    pcm_sample[6][k][j][jj] = tmp_sample2 - pcm_sample[6][k][j][jj];
  3034.    break;
  3035.   case 3:  tmp_sample1 = pcm_sample[0][k][j][jj];
  3036.    pcm_sample[0][k][j][jj] = pcm_sample[5][k][j][jj];
  3037.    pcm_sample[5][k][j][jj] = tmp_sample1 - pcm_sample[5][k][j][jj];
  3038.    tmp_sample2 = pcm_sample[1][k][j][jj];
  3039.    pcm_sample[1][k][j][jj] = pcm_sample[6][k][j][jj];
  3040.    pcm_sample[6][k][j][jj] = tmp_sample2 - pcm_sample[6][k][j][jj];
  3041.    break;
  3042.   }
  3043.       }     /* for k < sblimit loop */
  3044.     }     /* for j < 3 loop */
  3045. }
  3046. void denormalizing_aug (double pcm_sample[7][SBLIMIT][3][12], frame_params *fr_ps)
  3047. {
  3048.   double c[7], d, denorm;   /* denormalization factors */
  3049.   int j, jj, k, l;
  3050.   layer *info = fr_ps->header;
  3051.   for (l = 0; l < 7; l++)
  3052.     c[l] = 1.0;
  3053.   switch(info->dematrix_procedure)
  3054.   {
  3055.     /* factors according to International Standard */
  3056.     case 0:
  3057.     case 2: c[2] = c[3] = c[4] = sqrt (2.0); /* unweigh factor for C, Ls and Rs */
  3058.     break;
  3059.     case 1: c[2] = sqrt (2.0); /* unweigh factor for C            */
  3060.     c[3] = c[4] = 2.0; /* unweigh factor for Ls, Rs       */
  3061.     break;
  3062.   }
  3063.   if (info->aug_mtx_proc == 0)
  3064.     /* factors according to 7-ch augmentation */
  3065.     c[5] = c[6] = 4.0 / 3; /* unweigh factor for LC, RC */
  3066.   /* denormalization factor */
  3067.   switch (info->dematrix_procedure * 10 + info->aug_mtx_proc)
  3068.   {
  3069.     case 00:
  3070.     case 20: denorm = 1.75 + 1.25 * sqrt (2.0);
  3071.      break;
  3072.     case 10: denorm = 2.25 + 0.75 * sqrt (2.0);
  3073.      break;
  3074.     case 30: denorm = 1.75;
  3075.      break;
  3076.     case 01:
  3077.     case 21: denorm = 2.0 + sqrt (2.0);
  3078.      break;
  3079.     case 11: denorm = 2.5 + 0.5 * sqrt (2.0);
  3080.      break;
  3081.     case 31: denorm = 2.0;
  3082.      break;
  3083.     case 03:
  3084.     case 23: denorm = 1.0 + sqrt (2.0);
  3085.      break;
  3086.     case 13: denorm = 1.5 + 0.5 * sqrt (2.0);
  3087.      break;
  3088.     case 33: denorm = 1.0;
  3089.      break;
  3090.   }
  3091.   for (l = 0; l < 7; l++)
  3092.     c[l] *= denorm;
  3093.   /* denormalizing */
  3094.   if (fr_ps->header->dematrix_procedure != 3 || fr_ps->header->aug_mtx_proc != 3)
  3095.     for (jj=0; jj<12; jj++)
  3096.       for( j = 0; j < 3; ++j)
  3097. for (k = 0; k < SBLIMIT; k ++)
  3098.   for (l = 0; l < 7; l++)
  3099.     pcm_sample[l][k][j][jj] *= c[l];
  3100. }
  3101. #endif