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

mpeg/mp3

开发平台:

C/C++

  1. /**********************************************************************
  2.  * ISO MPEG Audio Subgroup Software Simulation Group (1996)
  3.  * ISO 13818-3 MPEG-2 Audio Multichannel Encoder
  4.  *
  5.  * $Id: predisto.c 1.6 1996/02/12 07:13:35 rowlands Exp $
  6.  *
  7.  * $Log: predisto.c $
  8.  * Revision 1.6  1996/02/12 07:13:35  rowlands
  9.  * Release following Munich meeting
  10.  *
  11.  * Revision 1.5  1996/02/12 05:51:17  rowlands
  12.  * Added verbosity switch to control text output.
  13.  * Fixed uninitialized variable d in subband_quantization_pre.
  14.  *
  15.  * Revision 1.3.2.1  1995/11/06  04:19:12  rowlands
  16.  * Received from Uwe Felderhoff (IRT)
  17.  *
  18.  * Revision 1.4  1995/08/14  08:06:01  tenkate
  19.  * ML-LSF added Warner ten Kate 7/8/95 (Philips)
  20.  * change alloc and sblimit into alloc_ml and sblimit_ml where appropriate
  21.  *
  22.  **********************************************************************/
  23.  /*********************************************************************
  24.  *                                                                    *
  25.  *                                                                    *
  26.  *  MPEG/audio Phase 2 coding/decoding multichannel                   *
  27.  *                                                                    *
  28.  *                                                                    *
  29.  *                                                                    *
  30.  *  Version 4.0    Susanne Ritscher, IRT Munich                       *
  31.  *                                                                    *
  32.  *  9/20/93        Implemented Prediction written by                  *
  33.  *                 Heiko Purnhagen,  Uni Hannover in                  *
  34.  *                 new source-file called prediction.c                *
  35.  *                                                                    *
  36.  *                                                                    *
  37.  *                                                                    *
  38.  *  version 4.1    Susanne Ritscher, IRT Munich                       *
  39.  *                                                                    *
  40.  *  9/20/93        channel-switching is only performed at a           *
  41.  *                 certain limit of TC_ALLOC dB, which is included    *
  42.  *                 in encoder.h                                       *
  43.  *                                                                    *
  44.  * 01/16/94        prediction will not work with trans._pat._errsig   *
  45.  *    Have to do a new strategy with a new bal for       *
  46.  *    the add. channels                                  *
  47.  *                                                                    *
  48.  * 04/08/94    started with predistortion                         *
  49.  *                                                                    *
  50.  * 06/28/94        started with predistortion according to the DIS    *
  51.  *    and the tc_table                                   *
  52.  *                                                                    *
  53.  *                                                                    *
  54.  *  version 5.0    Susanne Ritscher,  IRT Munich                      *
  55.  *                                                                    *
  56.  *  7/12/94        bitstream according to DIS                         *
  57.  *                 extension bitstream is working                     *
  58.  *                 predistortion is working                           *
  59.  *                                                                    *
  60.  *  Version 1.1                                                       *
  61.  *                                                                    *
  62.  *  02/23/95    Susanne Ritscher,  IRT Munich                      *
  63.  *                 corrected some bugs                                *
  64.  *                 extension bitstream is working                     *
  65.  *                                                                    *
  66.  *  Version 2.0                                                       *
  67.  *                                                                    *
  68.  *  01/28/97       Frans de Bont, Philips Sound & Vision, Eindhoven   *
  69.  *     - dynamic crosstalk working for all configurations*
  70.  *     - prediction working for all configurations       *
  71.  *     - extension bitstream fixed       *
  72.  *     - fully compliant to DIS 13818-3.2                *
  73.  *                                                                    *       *     
  74.  *********************************************************************/ 
  75. /**********************************************************************
  76.  * 
  77.  *  This program computes the predistortion.
  78.  *  The three additional channels are AFTER THE BITALLOCATION
  79.  *  quantized and dequantized. With these dequantized samples
  80.  *  the frontchannels are matriced again in order to dematrice them in a
  81.  *  more exact way. This should improve the quality of matriced signals.
  82.  * 
  83.  *  In case of prediction the whole process of decoding predicted signals
  84.  *  is worked off????
  85.  * 
  86.  **************************************************************************/
  87. #include "common.h"
  88. #include "encoder.h"
  89. void predistortion(double (*sb_sample)[3][12][32], unsigned int (*scalar)[3][32], 
  90.     unsigned int (*bit_alloc)[32], unsigned int (*subband)[3][12][32], 
  91.     frame_params *fr_ps, double (*perm_smr)[32], unsigned int (*scfsi)[32], 
  92.     int *adb, unsigned int (*scfsi_dyn)[32])
  93. {
  94.     double sbs_sample[7][3][12][SBLIMIT];  /*predistortion*/
  95.     int l, m, i, n, k;
  96.     int sblimit;
  97.     int ch, gr, sb;
  98.     int ad;
  99.     sblimit = fr_ps->sblimit;
  100.     l = 2; m = 7;
  101.     
  102.     pre_quant(sbs_sample, l, m, sb_sample, scalar, bit_alloc, subband, fr_ps);
  103.     
  104.     matri(sbs_sample, fr_ps, sb_sample, scalar, sblimit, scfsi, scfsi_dyn,
  105.           bit_alloc, subband);
  106.     l = 0; m = 2;
  107.     
  108.     /*II_scale_factor_calc(sb_sample,scalar,sblimit, l, m);*/
  109.     trans_pattern(scalar, scfsi, fr_ps,scfsi_dyn);
  110.       
  111.     bit_all(perm_smr, scfsi, bit_alloc, adb, fr_ps);
  112. }
  113. static double snr[18] = { 0.00,  6.03, 11.80, 15.81, /* 0, 3, 5, 7 */
  114.  19.03, 23.50, 29.82, 35.99, /* 9,15,31,63 */
  115.  42.08, 48.13, 54.17, 60.20, /* 127, ...   */
  116.  66.22, 72.25, 78.27, 84.29, /* 2047, ...  */
  117.  90.31, 96.33};              /* 16383, ... */
  118. /* Multilingual TEST 17/03/1995 JMZ */
  119. int bit_all(double (*perm_smr)[32], unsigned int (*scfsi)[32], unsigned int (*bit_alloc)[32], int *adb, frame_params *fr_ps)
  120.                               /* minimum masking level */
  121. /* bit_all() recalculates allocation for compatible signals Lo and Ro */
  122. /* which are channels k==0 and k==1. This recalculation is performed  */
  123. /* because of signal modifications by predistortion.                  */
  124. /* WtK 7/8/95. Information from SR.                                   */
  125.          
  126.                     
  127. {
  128.     int n_ml_ch = fr_ps->header->multiling_ch;  /*JMZ 17/03/95 Multilingual */
  129.     int i, min_ch, min_sb, oth_ch, k, increment, scale, seli, ba, j, l;
  130.     int adb_hlp, adb_hlp1, adb_hlp2;
  131.     int bspl, bscf, bsel, ad, noisy_sbs;
  132.     int bspl_mpg1, bscf_mpg1, bsel_mpg1;
  133.     double mnr[14][SBLIMIT], small; /*JMZ 17/03/95 Multilingual */
  134.     char used[14][SBLIMIT]; /*JMZ 17/03/95 Multilingual */
  135.     int stereo = fr_ps->stereo;
  136.     int stereomc = fr_ps->stereomc;
  137.     int stereoaug = fr_ps->stereoaug;
  138.     int sblimit = fr_ps->sblimit;
  139.     int sblimit_mc = fr_ps->sblimit_mc;
  140.     int sblimit_ml = fr_ps->sblimit_ml;
  141.     int jsbound = fr_ps->jsbound;
  142.     al_table *alloc = fr_ps->alloc;
  143.     al_table *alloc_mc = fr_ps->alloc_mc;
  144.     al_table *alloc_ml = fr_ps->alloc_ml;
  145.     double dynsmr = 0.0;  /* border of SMR for dynamic datarate */
  146.     static char init= 0;
  147.     static int banc, berr;
  148.     int bbal, bancmc, pred, bancext, bbal_mpg1;
  149.     int ll, pci, adb_mpg1;
  150.     int bits = 0; /*bits already used for the front-channels*/
  151.     static int sfsPerScfsi[] = { 3,2,1,2 };    /* lookup # sfs per scfsi */
  152.     
  153.     banc = 32; /* banc: bits for header */;
  154.     /* 960627 FdB reserve extra bits wrt bugs */
  155.     banc += 200;
  156.     if (fr_ps->header->error_protection)
  157. berr = 16;
  158.     else
  159. berr = 0; /* added 92-08-11 shn */
  160.     pred = 0;
  161.     bancmc = 0;
  162.     bancext = 0;
  163.     bbal = 0;
  164.     bbal_mpg1 = 0;
  165.     adb_mpg1 = bitrate[fr_ps->header->lay-1][fr_ps->header->bitrate_index] * 24;
  166. #ifdef DEBUG
  167. if (verbosity >= 3) printf("stereo+stereomc+stereoaug+n_ml_ch=%dn", stereo+stereomc+stereoaug+n_ml_ch);
  168. #endif 
  169.     if (fr_ps->header->mode == MPG_MD_STEREO)
  170.     {
  171. for (i = 0; i < sblimit; ++i)
  172.     bbal += (stereo) * (*alloc)[i][0].bits;
  173. for (i = 0; i < sblimit_mc; ++i)
  174.     bbal += (stereomc+stereoaug) * (*alloc)[i][0].bits;
  175. for (i = 0; i < sblimit_ml; ++i)
  176.     bbal += (n_ml_ch) * (*alloc_ml)[i][0].bits;
  177.     }  
  178.     if (fr_ps->header->mode == MPG_MD_JOINT_STEREO)
  179.     {
  180. for (i = 0; i < jsbound; ++i)
  181.     bbal += (stereo) * (*alloc)[i][0].bits;
  182. for (i = jsbound; i < sblimit; ++i)
  183.     bbal += (stereo-1) * (*alloc)[i][0].bits;
  184. for (i = 0; i < sblimit_mc; ++i)
  185.     bbal += (stereomc+stereoaug) * (*alloc)[i][0].bits;
  186. for (i = 0; i < sblimit_ml; ++i)
  187.     bbal += (n_ml_ch) * (*alloc_ml)[i][0].bits;
  188.     }
  189.     if (fr_ps->header->center == 3) bbal -= 41; 
  190.     if (fr_ps->header->ext_bit_stream_present == 0)
  191. bancmc += 35;      /* mc_header + crc + tc_sbgr_select+ dyn_cross_on + 
  192.       mc_prediction_on  01/05/94,  SR  new! 05/04/94,  SR*/
  193.     else
  194.     {
  195. bancmc += 43;     
  196. bancext = 40;
  197.     }
  198.            
  199.     if (fr_ps->header->tc_sbgr_select == 0)
  200. bancmc += 36;
  201.     else
  202. bancmc += 3;
  203.     if (fr_ps->header->dyn_cross_on == 1)
  204. bancmc += 49;      /* now with dyn_cross_LR,  505/04/94,  SR*/
  205.     if (fr_ps->header->mc_prediction_on == 1)
  206.     {
  207. for (i = 0; i < 8; i++)   /*now only 8 sb_groups, 05/04/94, SR*/
  208. {
  209.     bancmc += 1;
  210.     if (fr_ps->header->mc_pred[i] == 1)
  211. bancmc += n_pred_coef[fr_ps->header->dyn_cross[i]] * 2;
  212. }
  213. for (i = 0; i < 8; i++) 
  214.     if (fr_ps->header->mc_pred[i] == 1)
  215. for (j = 0; j < n_pred_coef[fr_ps->header->dyn_cross[i]]; j++)
  216.     if (fr_ps->header->predsi[i][j] != 0)
  217.     {
  218. pred += 3;
  219. for (pci = 0; pci < fr_ps->header->predsi[i][j]; pci++)
  220.     pred += 8;
  221.     }
  222.     }  
  223.     for (l = 0; l < sblimit; l++)
  224. for (k = 0; k < 2; k++)
  225.     used[k][l] = 0;
  226.     
  227.     for (l = 0; l < SBLIMIT; l++)   /* searching for the sb min SMR */
  228.     {
  229. i = sbgrp[l];
  230. for (j = stereo; j < stereo+stereomc+stereoaug; j++)
  231.     if ((j < stereo && l < sblimit) ||
  232. (j >= stereo && l < sblimit_mc))
  233.     {
  234. /* k = transmission_channel5[fr_ps->header->tc_alloc[i]][j]; */
  235.    k = transmission_channel (fr_ps, i, j);
  236. if (j < stereo)
  237.     bits += 12 * ((*alloc)[l][bit_alloc[k][l]].group *
  238.   (*alloc)[l][bit_alloc[k][l]].bits);
  239. else if (j < 7 || n_ml_ch == 0) /* Multichannel */ 
  240.     bits += 12 * ((*alloc_mc)[l][bit_alloc[k][l]].group *
  241.   (*alloc_mc)[l][bit_alloc[k][l]].bits);
  242. else /* MultiLingual */ 
  243.     bits += 12 * ((*alloc_ml)[l][bit_alloc[k][l]].group *
  244.   (*alloc_ml)[l][bit_alloc[k][l]].bits);
  245. if (bit_alloc[k][l] != 0)
  246. {
  247.     bits += 2;
  248.     switch (scfsi[k][l])
  249.     {
  250. case 0: bits += 18; break;
  251. case 1: bits += 12; break;
  252. case 2: bits += 6; break;
  253. case 3: bits += 12; break;
  254.     }   
  255. }
  256.     }
  257.     }
  258.     for (i = 0; i < 12; i++)
  259.     {
  260. if ((fr_ps->header->tc_alloc[i] == 1) || (fr_ps->header->tc_alloc[i] == 7))
  261. {
  262.     bits += 12 * ((*alloc)[l][bit_alloc[0][l]].group *
  263.   (*alloc)[l][bit_alloc[0][l]].bits);
  264.     if (bit_alloc[0][l] != 0)
  265.     {
  266. bits += 2;
  267. switch(scfsi[0][l])
  268. {
  269.     case 0: bits += 18; break;
  270.     case 1: bits += 12; break;
  271.     case 2: bits += 6; break;
  272.     case 3: bits += 12; break;
  273. }   
  274.     }
  275.     used[0][l] = 2;
  276. }
  277. if ((fr_ps->header->tc_alloc[i] == 2) || (fr_ps->header->tc_alloc[i] == 6))
  278. {
  279.     bits += 12 * ((*alloc)[l][bit_alloc[1][l]].group *
  280.   (*alloc)[l][bit_alloc[1][l]].bits);
  281.     if (bit_alloc[1][l] != 0)
  282.     {
  283. bits += 2;
  284. switch(scfsi[1][l])
  285. {
  286.     case 0: bits += 18; break;
  287.     case 1: bits += 12; break;
  288.     case 2: bits += 6; break;
  289.     case 3: bits += 12; break;
  290. }   
  291.     }
  292.     used[1][l] = 2;
  293. }
  294.     }   
  295.      if(fr_ps->header->ext_bit_stream_present == 0)    
  296.     *adb -= bbal + berr + banc + bancmc + pred + bits;
  297. else
  298. {
  299.     *adb = *adb - bbal - berr - banc - bancmc - pred - bits - 
  300.     bancext - (fr_ps->header->n_ad_bytes * 8);
  301.     for(i = 0; i < sblimit; ++i)
  302.  bbal_mpg1 += 2 * (*alloc)[i][0].bits;
  303.     adb_mpg1 -= bbal_mpg1 + berr + banc + bancmc +
  304.      (fr_ps->header->n_ad_bytes * 8);
  305.  }   
  306.         ad = *adb;
  307.  
  308.     for(l = 0;l < sblimit; l++)
  309.     {
  310. for( k = 0; k < 2; k++)
  311. {
  312. mnr[k][l]=snr[0]-perm_smr[k][l];
  313. if(used[k][l] == 0)
  314.         bit_alloc[k][l] = 0;
  315. }
  316.     }
  317.    
  318. /********************************************************************/
  319. /* JMZ 08/03/1995 Multilingual */  
  320. for (i = 0; i < sblimit_ml; i++) 
  321. for (k = 7; k < 7+n_ml_ch; k++) 
  322. {
  323. mnr[k][i]=snr[0]-perm_smr[k][i];
  324.  /* mask-to-noise-level = signal-to-noise-level - minimum-masking-*/
  325.  /* threshold*/
  326. bit_alloc[k][i] = 0;
  327. used[k][i] = 0;
  328. }
  329. /* JMZ 08/03/1995 Multilingual */   
  330. /********************************************************************/
  331.    
  332.    
  333.    
  334. bspl = bscf = bsel = bspl_mpg1 = bscf_mpg1 = bsel_mpg1 = 0;
  335.  
  336.     do  {
  337. small = 999999.0;
  338. min_sb = -1;
  339. min_ch = -1;
  340.         for(i = 0; i < sblimit; i++)
  341. {
  342.      for( k = 0; k < 2; k++)
  343. {
  344.     if ((used[k][i] != 2) && (small > mnr[k][i])) 
  345.     {
  346. small = mnr[k][i];
  347. min_sb = i;  min_ch = k;
  348.     }
  349. }  
  350.  }
  351.  
  352. /******************************************************************/
  353. /* Multilingual JMZ 08/03/1995 */
  354. if(n_ml_ch >0)
  355. {
  356. for (i = 0; i < sblimit_ml; i++)
  357.   for(j = 7; j < (n_ml_ch+7); ++j)
  358.   {
  359.      k=j;
  360.      if ((used[k][i] != 2) && (small > mnr[k][i])) 
  361.      {
  362.                   small = mnr[k][i];
  363.                   min_sb = i;  min_ch = k;
  364.      }
  365. }
  366. }
  367. /* Multilingual JMZ 08/03/1995 */
  368. /******************************************************************/
  369.  
  370.      if(min_sb > -1) 
  371.      { 
  372.        if (min_ch < stereo) 
  373.        {
  374.  increment = 12 * ((*alloc)[min_sb][bit_alloc[min_ch][min_sb]+1].group * 
  375.              (*alloc)[min_sb][bit_alloc[min_ch][min_sb]+1].bits);
  376.      /* how many bits are needed */
  377.          if (used[min_ch][min_sb])
  378.           increment -= 12 * ((*alloc)[min_sb][bit_alloc[min_ch][min_sb]].group * 
  379.                             (*alloc)[min_sb][bit_alloc[min_ch][min_sb]].bits);
  380.        } 
  381.        else if (min_ch < 7 || n_ml_ch == 0) /* Multichannel */ 
  382.        {
  383.  increment = 12 * ((*alloc_mc)[min_sb][bit_alloc[min_ch][min_sb]+1].group * 
  384.              (*alloc_mc)[min_sb][bit_alloc[min_ch][min_sb]+1].bits);
  385.      /* how many bits are needed */
  386.          if (used[min_ch][min_sb])
  387.           increment -= 12 * ((*alloc_mc)[min_sb][bit_alloc[min_ch][min_sb]].group * 
  388.                             (*alloc_mc)[min_sb][bit_alloc[min_ch][min_sb]].bits);
  389.        } 
  390.        else /* MultiLingual 7/8/95 WtK */ 
  391.        {
  392.   increment   = ((*alloc_ml)[min_sb][bit_alloc[min_ch][min_sb]+1].group * 
  393.  (*alloc_ml)[min_sb][bit_alloc[min_ch][min_sb]+1].bits);
  394.   if (used[min_ch][min_sb])
  395.    increment -= ((*alloc_ml)[min_sb][bit_alloc[min_ch][min_sb]].group * 
  396.  (*alloc_ml)[min_sb][bit_alloc[min_ch][min_sb]].bits);
  397.   if (fr_ps->header->multiling_fs==1) increment *=  6;
  398.   else                                increment *= 12;
  399.        }
  400.        /* scale factor bits required for subband [min] */
  401.        if (used[min_ch][min_sb]) scale = seli = 0;
  402.        else 
  403.        {   /* this channel had no bits or scfs before */
  404.          seli = 2;
  405.          scale = 6 * sfsPerScfsi[scfsi[min_ch][min_sb]];
  406. }
  407.        if(fr_ps->header->ext_bit_stream_present == 1)
  408.        {
  409. if (adb_mpg1 > bspl_mpg1 + bscf_mpg1 + bsel_mpg1 + seli + scale + increment) 
  410. {
  411.    bspl_mpg1 += increment;  /* bits for subband sample */
  412.    bscf_mpg1 += scale;      /* bits for scale factor */
  413.    bsel_mpg1 += seli;       /* bits for scfsi code */
  414. }
  415. else
  416.    used[min_ch][min_sb] = 2;  /* can't increase this alloc */
  417.        }
  418.        
  419.        if ((ad > bspl + bscf + bsel + seli + scale + increment) && (used[min_ch][min_sb] != 2)) 
  420.        {
  421.     ba = ++bit_alloc[min_ch][min_sb]; /* next up alloc */
  422.     bspl += increment;     /* bits for subband sample */
  423.     bscf += scale;     /* bits for scale factor */
  424.     bsel += seli;     /* bits for scfsi code */
  425.     used[min_ch][min_sb] = 1;     /* subband has bits */
  426.     if (min_ch<7)
  427.       mnr[min_ch][min_sb] = -perm_smr[min_ch][min_sb] +
  428.     snr[(*alloc)[min_sb][ba].quant+1];
  429.     else
  430.       mnr[min_ch][min_sb] = -perm_smr[min_ch][min_sb] +
  431.     snr[(*alloc_ml)[min_sb][ba].quant+1];
  432.     
  433.     /* Check if subband has been fully allocated max bits */
  434.     if (min_ch < stereo) 
  435.     {
  436.      if (ba >= (1<<(*alloc)[min_sb][0].bits)-1) used[min_ch][min_sb] = 2;
  437.     } 
  438.     else if (min_ch < 7 || n_ml_ch == 0) /* Multichannel */ 
  439.     {
  440.      if (ba >= (1<<(*alloc_mc)[min_sb][0].bits)-1) used[min_ch][min_sb] = 2;
  441.     } 
  442.     else 
  443.     {
  444.      if (ba >= (1<<(*alloc_ml)[min_sb][0].bits)-1) used[min_ch][min_sb] = 2;
  445.     }
  446. }
  447. else used[min_ch][min_sb] = 2;  /* can't increase this alloc */
  448.       }   /* end of if-loop if min_sb >-1 */
  449.    } while(min_sb > -1);   /* until could find no channel */
  450.    /* Calculate the number of bits left */
  451.    ad -= bspl+bscf+bsel; 
  452.    *adb = ad;
  453.    for (i=sblimit;i<SBLIMIT;i++) for (k = 0; k < 2; k++) 
  454.       bit_alloc[k][i]=0;
  455.    for (i=sblimit_ml;i<SBLIMIT;i++) for (k = 7; k < 7+n_ml_ch; k++) 
  456.       bit_alloc[k][i]=0;
  457. }
  458.  
  459. void matri(double (*sbs_sample)[3][12][32], frame_params *fr_ps, double (*sb_sample)[3][12][32],
  460.  unsigned int (*scalar)[3][32], int sblimit, unsigned int (*scfsi)[32], 
  461.  unsigned int (*scfsi_dyn)[32], unsigned int (*bit_alloc)[32], 
  462.  unsigned int (*subband)[3][12][32])
  463. {
  464.   int i, j, k, l, ch1, ch2, m, n;
  465.   
  466.   layer *info = fr_ps->header;
  467. for(k = 0; k < 8; k++)
  468. {
  469.           if(fr_ps->header->mc_pred[k] == 0)
  470.   {
  471.     switch(fr_ps->header->tc_alloc[k])
  472.     {
  473. case 0: 
  474.       for( j = 0; j < 3; ++j)
  475. for(l = 0; l < 12; l ++)
  476. {
  477. sb_sample[0][j][l][k] = sb_sample[5][j][l][k] + sbs_sample[2][j][l][k] + sbs_sample[3][j][l][k];
  478. sb_sample[1][j][l][k] = sb_sample[6][j][l][k] + sbs_sample[2][j][l][k] + sbs_sample[4][j][l][k];
  479. }
  480. m = 0; n = 2;
  481. scale_factor_calc(scalar,sblimit, m, n, k, sb_sample);
  482.      break;
  483. case 1:
  484.       for( j = 0; j < 3; ++j)
  485. for(l = 0; l < 12; l ++)
  486. {
  487. sb_sample[0][j][l][k] = sbs_sample[5][j][l][k] + sb_sample[2][j][l][k] + sbs_sample[3][j][l][k];
  488. }
  489. m = 0; n = 1;
  490. scale_factor_calc(scalar,sblimit, m, n, k, sb_sample);
  491. trans_pattern(scalar, scfsi, fr_ps,scfsi_dyn);
  492. pre_quant(sbs_sample, m, n, sb_sample, scalar, bit_alloc, subband, fr_ps);
  493.       for( j = 0; j < 3; ++j)
  494. for(l = 0; l < 12; l ++)
  495. {
  496. sbs_sample[2][j][l][k] = sbs_sample[0][j][l][k] - sbs_sample[5][j][l][k] - sbs_sample[3][j][l][k];
  497. sb_sample[1][j][l][k] = sb_sample[6][j][l][k] + sbs_sample[2][j][l][k] + sbs_sample[4][j][l][k];
  498. }
  499. m = 1; n = 2;
  500. scale_factor_calc(scalar,sblimit, m, n, k, sb_sample);
  501.      break;
  502. case 2:
  503.       for( j = 0; j < 3; ++j)
  504. for(l = 0; l < 12; l ++)
  505. {
  506. sb_sample[1][j][l][k] = sbs_sample[6][j][l][k] + sb_sample[2][j][l][k] + sbs_sample[4][j][l][k];
  507. }
  508. m = 1; n = 2;
  509. scale_factor_calc(scalar,sblimit, m, n, k, sb_sample);
  510. trans_pattern(scalar, scfsi, fr_ps,scfsi_dyn);
  511. pre_quant(sbs_sample, m, n, sb_sample, scalar, bit_alloc, subband, fr_ps);
  512.       for( j = 0; j < 3; ++j)
  513. for(l = 0; l < 12; l ++)
  514. {
  515. sbs_sample[2][j][l][k] = sbs_sample[1][j][l][k] - sbs_sample[6][j][l][k] - sbs_sample[4][j][l][k];
  516. sb_sample[0][j][l][k] = sb_sample[5][j][l][k] + sbs_sample[2][j][l][k] + sbs_sample[3][j][l][k];
  517. }
  518. m = 0; n = 1;
  519. scale_factor_calc(scalar,sblimit, m, n, k, sb_sample);
  520.      break;
  521. case 3: 
  522.       for( j = 0; j < 3; ++j)
  523. for(l = 0; l < 12; l ++)
  524. {
  525. sb_sample[0][j][l][k] = sbs_sample[5][j][l][k] + sbs_sample[2][j][l][k] + sb_sample[3][j][l][k];
  526. sb_sample[1][j][l][k] = sb_sample[6][j][l][k] + sbs_sample[2][j][l][k] + sbs_sample[4][j][l][k];
  527. }
  528. m = 0; n = 2;
  529. scale_factor_calc(scalar,sblimit, m, n, k, sb_sample);
  530.      break;
  531. case 4: 
  532.       for( j = 0; j < 3; ++j)
  533. for(l = 0; l < 12; l ++)
  534. {
  535. sb_sample[0][j][l][k] = sb_sample[5][j][l][k] + sbs_sample[2][j][l][k] + sbs_sample[3][j][l][k];
  536. sb_sample[1][j][l][k] = sbs_sample[6][j][l][k] + sbs_sample[2][j][l][k] + sb_sample[4][j][l][k];
  537. }
  538. m = 0; n = 2;
  539. scale_factor_calc(scalar,sblimit, m, n, k, sb_sample);
  540.      break;
  541. case 5: 
  542.       for( j = 0; j < 3; ++j)
  543. for(l = 0; l < 12; l ++)
  544. {
  545. sb_sample[0][j][l][k] = sbs_sample[5][j][l][k] + sbs_sample[2][j][l][k] + sb_sample[3][j][l][k];
  546. sb_sample[1][j][l][k] = sbs_sample[6][j][l][k] + sbs_sample[2][j][l][k] + sb_sample[4][j][l][k];
  547. }
  548. m = 0; n = 2;
  549. scale_factor_calc(scalar,sblimit, m, n, k, sb_sample);
  550.      break;
  551. case 6:
  552.       for( j = 0; j < 3; ++j)
  553. for(l = 0; l < 12; l ++)
  554. {
  555. sb_sample[1][j][l][k] = sbs_sample[6][j][l][k] + sb_sample[2][j][l][k] + sbs_sample[4][j][l][k];
  556. }
  557. m = 1; n = 2;
  558. scale_factor_calc(scalar,sblimit, m, n, k, sb_sample);
  559. trans_pattern(scalar, scfsi, fr_ps,scfsi_dyn);
  560. pre_quant(sbs_sample, m, n, sb_sample, scalar, bit_alloc, subband, fr_ps);
  561.       for( j = 0; j < 3; ++j)
  562. for(l = 0; l < 12; l ++)
  563. {
  564. sbs_sample[2][j][l][k] = sbs_sample[1][j][l][k] - sbs_sample[6][j][l][k] - sbs_sample[4][j][l][k];
  565. sb_sample[0][j][l][k] = sbs_sample[5][j][l][k] + sbs_sample[2][j][l][k] + sb_sample[3][j][l][k];
  566. }
  567. m = 0; n = 1;
  568. scale_factor_calc(scalar,sblimit, m, n, k, sb_sample);
  569.      break;
  570. case 7:
  571.       for( j = 0; j < 3; ++j)
  572. for(l = 0; l < 12; l ++)
  573. {
  574. sb_sample[0][j][l][k] = sbs_sample[5][j][l][k] + sb_sample[2][j][l][k] + sbs_sample[3][j][l][k];
  575. }
  576. m = 0; n = 1;
  577. scale_factor_calc(scalar,sblimit, m, n, k, sb_sample);
  578. trans_pattern(scalar, scfsi, fr_ps,scfsi_dyn);
  579. pre_quant(sbs_sample, m, n, sb_sample, scalar, bit_alloc, subband, fr_ps);
  580.       for( j = 0; j < 3; ++j)
  581. for(l = 0; l < 12; l ++)
  582. {
  583. sbs_sample[2][j][l][k] = sbs_sample[0][j][l][k] - sbs_sample[5][j][l][k] - sbs_sample[3][j][l][k];
  584. sb_sample[1][j][l][k] = sbs_sample[6][j][l][k] + sbs_sample[2][j][l][k] + sb_sample[4][j][l][k];
  585. }
  586. m = 1; n = 2;
  587. scale_factor_calc(scalar,sblimit, m, n, k, sb_sample);
  588.      break;
  589.     }
  590.   }
  591. for(i = 8; i < 12; i++)
  592. {
  593.           if(fr_ps->header->mc_pred[k] == 0)
  594.   {
  595.     switch(fr_ps->header->tc_alloc[i])
  596.     {
  597. case 0: 
  598.       for( j = 0; j < 3; ++j)
  599. for(l = 0; l < 12; l ++)
  600.     for( k = sb_groups[i-1] + 1; k <= sb_groups[i]; k++)
  601.     {
  602. sb_sample[0][j][l][k] = sb_sample[5][j][l][k] + sbs_sample[2][j][l][k] + sbs_sample[3][j][l][k];
  603. sb_sample[1][j][l][k] = sb_sample[6][j][l][k] + sbs_sample[2][j][l][k] + sbs_sample[4][j][l][k];
  604.     }
  605.  m = 0; n = 2;    
  606.  scale_factor_calc(scalar,sblimit, m, n, i, sb_sample);
  607.      break;
  608. case 1:
  609.       for( j = 0; j < 3; ++j)
  610. for(l = 0; l < 12; l ++)
  611.     for( k = sb_groups[i-1] + 1; k <= sb_groups[i]; k++)
  612.     {
  613. sb_sample[0][j][l][k] = sbs_sample[5][j][l][k] + sb_sample[2][j][l][k] + sbs_sample[3][j][l][k];
  614.     }
  615. m = 0; n = 1;
  616. scale_factor_calc(scalar,sblimit, m, n, i, sb_sample);
  617. trans_pattern(scalar, scfsi, fr_ps,scfsi_dyn);
  618. pre_quant(sbs_sample, m, n, sb_sample, scalar, bit_alloc, subband, fr_ps);
  619.       for( j = 0; j < 3; ++j)
  620. for(l = 0; l < 12; l ++)
  621.     for( k = sb_groups[i-1] + 1; k <= sb_groups[i]; k++)
  622.     {
  623. sbs_sample[2][j][l][k] = sbs_sample[0][j][l][k] - sbs_sample[5][j][l][k] - sbs_sample[3][j][l][k];
  624. sb_sample[1][j][l][k] = sb_sample[6][j][l][k] + sbs_sample[2][j][l][k] + sbs_sample[4][j][l][k];
  625.     }
  626. m = 1; n = 2;
  627. scale_factor_calc(scalar,sblimit, m, n, i, sb_sample);
  628.      break;
  629. case 2:
  630.       for( j = 0; j < 3; ++j)
  631. for(l = 0; l < 12; l ++)
  632.     for( k = sb_groups[i-1] + 1; k <= sb_groups[i]; k++)
  633.     {
  634. sb_sample[1][j][l][k] = sbs_sample[6][j][l][k] + sb_sample[2][j][l][k] + sbs_sample[4][j][l][k];
  635.     }
  636. m = 1; n = 2;
  637. scale_factor_calc(scalar,sblimit, m, n, i, sb_sample);
  638. trans_pattern(scalar, scfsi, fr_ps,scfsi_dyn);
  639. pre_quant(sbs_sample, m, n, sb_sample, scalar, bit_alloc, subband, fr_ps);
  640.       for( j = 0; j < 3; ++j)
  641. for(l = 0; l < 12; l ++)
  642.     for( k = sb_groups[i-1] + 1; k <= sb_groups[i]; k++)
  643.     {
  644. sbs_sample[2][j][l][k] = sbs_sample[1][j][l][k] - sbs_sample[6][j][l][k] - sbs_sample[4][j][l][k];
  645. sb_sample[0][j][l][k] = sb_sample[5][j][l][k] + sbs_sample[2][j][l][k] + sbs_sample[3][j][l][k];
  646.     }
  647. m = 0; n = 1;
  648. scale_factor_calc(scalar,sblimit, m, n, i, sb_sample);
  649.     
  650.      break;
  651. case 3: 
  652.       for( j = 0; j < 3; ++j)
  653. for(l = 0; l < 12; l ++)
  654.     for( k = sb_groups[i-1] + 1; k <= sb_groups[i]; k++)
  655.     {
  656. sb_sample[0][j][l][k] = sbs_sample[5][j][l][k] + sbs_sample[2][j][l][k] + sb_sample[3][j][l][k];
  657. sb_sample[1][j][l][k] = sb_sample[6][j][l][k] + sbs_sample[2][j][l][k] + sbs_sample[4][j][l][k];
  658.     }
  659. m = 0; n = 2;
  660. scale_factor_calc(scalar,sblimit, m, n, i, sb_sample);
  661.      break;
  662. case 4: 
  663.       for( j = 0; j < 3; ++j)
  664. for(l = 0; l < 12; l ++)
  665.     for( k = sb_groups[i-1] + 1; k <= sb_groups[i]; k++)
  666.     {
  667. sb_sample[0][j][l][k] = sb_sample[5][j][l][k] + sbs_sample[2][j][l][k] + sbs_sample[3][j][l][k];
  668. sb_sample[1][j][l][k] = sbs_sample[6][j][l][k] + sbs_sample[2][j][l][k] + sb_sample[4][j][l][k];
  669.     }
  670. m = 0; n = 2;
  671. scale_factor_calc(scalar,sblimit, m, n, i, sb_sample);
  672.      break;
  673. case 5: 
  674.       for( j = 0; j < 3; ++j)
  675. for(l = 0; l < 12; l ++)
  676.     for( k = sb_groups[i-1] + 1; k <= sb_groups[i]; k++)
  677.     {
  678. sb_sample[0][j][l][k] = sbs_sample[5][j][l][k] + sbs_sample[2][j][l][k] + sb_sample[3][j][l][k];
  679. sb_sample[1][j][l][k] = sbs_sample[6][j][l][k] + sbs_sample[2][j][l][k] + sb_sample[4][j][l][k];
  680.     }
  681. m = 0; n = 2;
  682. scale_factor_calc(scalar,sblimit, m, n, i, sb_sample);
  683.      break;
  684. case 6:
  685.       for( j = 0; j < 3; ++j)
  686. for(l = 0; l < 12; l ++)
  687.     for( k = sb_groups[i-1] + 1; k <= sb_groups[i]; k++)
  688.     {
  689. sb_sample[1][j][l][k] = sbs_sample[6][j][l][k] + sb_sample[2][j][l][k] + sbs_sample[4][j][l][k];
  690.     }
  691. m = 1; n = 2;
  692. scale_factor_calc(scalar,sblimit, m, n, i, sb_sample);
  693. trans_pattern(scalar, scfsi, fr_ps,scfsi_dyn);
  694. pre_quant(sbs_sample, m, n, sb_sample, scalar, bit_alloc, subband, fr_ps);
  695.       for( j = 0; j < 3; ++j)
  696. for(l = 0; l < 12; l ++)
  697.     for( k = sb_groups[i-1] + 1; k <= sb_groups[i]; k++)
  698.     {
  699. sbs_sample[2][j][l][k] = sbs_sample[1][j][l][k] - sbs_sample[6][j][l][k] - sbs_sample[4][j][l][k];
  700. sb_sample[0][j][l][k] = sbs_sample[5][j][l][k] + sbs_sample[2][j][l][k] + sb_sample[3][j][l][k];
  701.     }
  702. m = 0; n = 1;
  703. scale_factor_calc(scalar,sblimit, m, n, i, sb_sample);
  704.      break;
  705. case 7:
  706.       for( j = 0; j < 3; ++j)
  707. for(l = 0; l < 12; l ++)
  708.     for( k = sb_groups[i-1] + 1; k <= sb_groups[i]; k++)
  709.     {
  710. sb_sample[0][j][l][k] = sbs_sample[5][j][l][k] + sb_sample[2][j][l][k] + sbs_sample[3][j][l][k];
  711.     }
  712. m = 0; n = 1;
  713. scale_factor_calc(scalar,sblimit, m, n, i, sb_sample);
  714. trans_pattern(scalar, scfsi, fr_ps,scfsi_dyn);
  715. pre_quant(sbs_sample, m, n, sb_sample, scalar, bit_alloc, subband, fr_ps);
  716.       for( j = 0; j < 3; ++j)
  717. for(l = 0; l < 12; l ++)
  718.     for( k = sb_groups[i-1] + 1; k <= sb_groups[i]; k++)
  719.     {
  720. sbs_sample[2][j][l][k] = sbs_sample[0][j][l][k] - sbs_sample[5][j][l][k] - sbs_sample[3][j][l][k];
  721. sb_sample[1][j][l][k] = sbs_sample[6][j][l][k] + sbs_sample[2][j][l][k] + sb_sample[4][j][l][k];
  722.     }
  723. m = 1; n = 2;
  724. scale_factor_calc(scalar,sblimit, m, n, i, sb_sample);
  725.      break;
  726.     }
  727.   }
  728. }
  729.  }
  730. buffer_sample(unsigned int (*keep_it)[36][32], unsigned int (*sample)[3][32], unsigned int (*bit_alloc)[32], frame_params *fr_ps, int l, int z, int q)
  731. {
  732.    int i,j,k,m;
  733.    int stereo = fr_ps->stereo;
  734.    int sblimit = fr_ps->sblimit;
  735.    int jsbound = fr_ps->jsbound;
  736.    al_table *alloc = fr_ps->alloc;
  737.    unsigned int x;
  738.    for (i=0;i<sblimit;i++) for (j= l;j<((i<jsbound)?z:l+1);j++) 
  739.    {
  740.        if (bit_alloc[j][i]) 
  741.        {
  742.          /* check for grouping in subband */
  743.  /* if ((*alloc)[i][bit_alloc[j][i]].group==3)*/
  744.            for (m=0;m<3;m++) 
  745.    {
  746.               sample[j][m][i] = keep_it[j][q*3+m][i];
  747.            }         
  748.        }
  749.        else 
  750.        {      /* for no sample transmitted */
  751.          for (k=0;k<3;k++) sample[j][k][i] = 0;
  752.        }
  753.        if(stereo == 2 && i>= jsbound)  /* joint stereo : copy L to R */
  754.           for (k=0;k<3;k++) sample[1][k][i] = sample[0][k][i];
  755.    }
  756.    for (i=sblimit;i<SBLIMIT;i++) for (j= l;j< z;j++) for (k=0;k<3;k++)
  757.       sample[j][k][i] = 0;
  758. }      
  759. static double a[17] = {
  760.   0.750000000, 0.625000000, 0.875000000, 0.562500000, 0.937500000,
  761.   0.968750000, 0.984375000, 0.992187500, 0.996093750, 0.998046875,
  762.   0.999023438, 0.999511719, 0.999755859, 0.999877930, 0.999938965,
  763.   0.999969482, 0.999984741 };
  764.  
  765. static double b[17] = {
  766.   -0.250000000, -0.375000000, -0.125000000, -0.437500000, -0.062500000,
  767.   -0.031250000, -0.015625000, -0.007812500, -0.003906250, -0.001953125,
  768.   -0.000976563, -0.000488281, -0.000244141, -0.000122070, -0.000061035,
  769.   -0.000030518, -0.000015259 };
  770.  
  771. void subband_quantization_pre(unsigned int (*scalar)[3][32], double (*sb_samples)[3][12][32], unsigned int (*bit_alloc)[32], unsigned int (*sbband)[3][12][32], frame_params *fr_ps, int ch1, int ch2)
  772. {
  773.    int i, j, k, s, n, qnt, sig, m, l, ll, z;
  774.    int stereo = fr_ps->stereo;
  775.    int stereomc = fr_ps->stereomc;
  776.    int sblimit = fr_ps->sblimit;
  777.    unsigned int stps, y;
  778.    double d;
  779.    al_table *alloc = fr_ps->alloc;
  780.  
  781.    for (s=0;s<3;s++)
  782.      for (j=0;j<12;j= j+3)
  783. for (i=0;i<sblimit;i++)
  784.   for(k = ch1; k < ch2; k++)
  785.   {
  786.     for(z = 0; z < 3; z ++)
  787.     {
  788.     if(bit_alloc[k][i])
  789.                d = sb_samples[k][s][j+z][i] / multiple[scalar[k][s][i]];
  790.     else
  791.        d = 0;
  792.    
  793.    
  794.     if (mod(d) >= 1.0) /* > changed to >=, 1992-11-06 shn */
  795.     {
  796. printf("In predistortion, not scaled properly, %d %d %d %dn",k,s,j+z,i);
  797. printf("Value %1.10fn",sb_samples[k][s][j+z][i]);
  798.     }
  799.     qnt = (*alloc)[i][bit_alloc[k][i]].quant;
  800.             d = d * a[qnt] + b[qnt];
  801.              /* extract MSB N-1 bits from the floating point sample */
  802.              if (d >= 0) sig = 1;
  803.              else { sig = 0; d += 1.0; }
  804.              n = 0;
  805. #ifndef MS_DOS
  806.              stps = (*alloc)[i][bit_alloc[k][i]].steps;
  807.              while ((1L<<n) < stps) n++;
  808. #else
  809.              while  ( ( (unsigned long)(1L<<(long)n) <
  810.                  ((unsigned long) ((*alloc)[i][bit_alloc[k][i]].steps)
  811.                           & 0xffff
  812.                          )
  813.                       ) && ( n <16)
  814.                     ) n++;
  815. #endif
  816.              n--;
  817.              sbband[k][s][j+z][i] = (unsigned int) (d * (double) (1L<<n));
  818.              /* tag the inverted sign bit to sbband at position N */
  819.              /* The bit inversion is a must for grouping with 3,5,9 steps
  820.                 so it is done for all subbands */
  821.              if (sig) sbband[k][s][j+z][i] |= 1<<n;
  822.      
  823.      if(!bit_alloc[k][i]) sbband[k][s][j+z][i] = 0;
  824.     }
  825. /*try try try ! 7/7/94 */
  826. /*             if ((*alloc)[i][bit_alloc[k][i]].group != 3) 
  827.      {
  828.                y =(*alloc)[i][bit_alloc[k][i]].steps;
  829.                sbband[k][s][j][i] = sbband[k][s][j][i] +
  830.                            sbband[k][s][j+1][i] * y +
  831.                                     sbband[k][s][j+2][i] * y * y;
  832.                sbband[k][s][j+1][i] = sbband[k][s][j][i];
  833.                sbband[k][s][j+2][i] = sbband[k][s][j][i];
  834.       }*/
  835.      
  836.      
  837.  }
  838.            for (s=0;s<3;s++)
  839.              for (j=sblimit;j<SBLIMIT;j++)
  840. for (i=0;i<12;i++) for (k = 0; k < 7; k++) sbband[k][s][i][j] = 0;
  841. }
  842. void trans_pattern(unsigned int (*scalar)[3][32], unsigned int (*scfsi)[32], frame_params *fr_ps, unsigned int (*scfsi_dyn)[32])
  843. {
  844.    int stereo  = fr_ps->stereo;
  845.    int stereomc = fr_ps->stereomc;
  846.    int sblimit = fr_ps->sblimit;
  847. int dscf[2];
  848. int class[2],i,j,k;
  849. static int pattern[5][5] = {0x123, 0x122, 0x122, 0x133, 0x123,
  850.                             0x113, 0x111, 0x111, 0x444, 0x113,
  851.                             0x111, 0x111, 0x111, 0x333, 0x113,
  852.                             0x222, 0x222, 0x222, 0x333, 0x123,
  853.                             0x123, 0x122, 0x122, 0x133, 0x123};
  854.  
  855.   for (k = 0; k < 2; k++)
  856.      for (i=0;i<sblimit;i++) 
  857.      {
  858.        dscf[0] =  (scalar[k][0][i]-scalar[k][1][i]);
  859.        dscf[1] =  (scalar[k][1][i]-scalar[k][2][i]);
  860.        for (j=0;j<2;j++)
  861.        {
  862.          if (dscf[j]<=-3) class[j] = 0;
  863.          else if (dscf[j] > -3 && dscf[j] <0) class[j] = 1;
  864.               else if (dscf[j] == 0) class[j] = 2;
  865.                    else if (dscf[j] > 0 && dscf[j] < 3) class[j] = 3;
  866.                         else class[j] = 4;
  867.        }
  868.        switch (pattern[class[0]][class[1]]) 
  869.        {
  870.          case 0x123 :    scfsi[k][i] = 0;
  871.                          break;
  872.          case 0x122 :    scfsi[k][i] = 3;
  873.                          scalar[k][2][i] = scalar[k][1][i];
  874.                          break;
  875.          case 0x133 :    scfsi[k][i] = 3;
  876.                          scalar[k][1][i] = scalar[k][2][i];
  877.                          break;
  878.          case 0x113 :    scfsi[k][i] = 1;
  879.                          scalar[k][1][i] = scalar[k][0][i];
  880.                          break;
  881.          case 0x111 :    scfsi[k][i] = 2;
  882.                          scalar[k][1][i] = scalar[k][2][i] = scalar[k][0][i];
  883.                          break;
  884.          case 0x222 :    scfsi[k][i] = 2;
  885.                          scalar[k][0][i] = scalar[k][2][i] = scalar[k][1][i];
  886.                          break;
  887.          case 0x333 :    scfsi[k][i] = 2;
  888.                          scalar[k][0][i] = scalar[k][1][i] = scalar[k][2][i];
  889.                          break;
  890.          case 0x444 :    scfsi[k][i] = 2;
  891.                          if (scalar[k][0][i] > scalar[k][2][i])
  892.                               scalar[k][0][i] = scalar[k][2][i];
  893.                          scalar[k][1][i] = scalar[k][2][i] = scalar[k][0][i];
  894.    
  895. }
  896.     }
  897. }        
  898. void pre_quant(double (*sbs_sample)[3][12][32], int l, int m, double (*sb_sample)[3][12][32], 
  899. unsigned int (*scalar)[3][32], unsigned int (*bit_alloc)[32], 
  900. unsigned int (*subband)[3][12][32], frame_params *fr_ps)
  901. {
  902.     double sb_pre_sample[7][3][12][SBLIMIT];  /*predistortion*/
  903.     unsigned int sample[7][3][SBLIMIT];
  904.     unsigned int keep_it[7][36][SBLIMIT];
  905.     int ch, sb, gr, i;
  906.     int hi,  hu;
  907.     subband_quantization_pre(scalar, sb_sample, bit_alloc, subband, fr_ps, l, m);
  908.     for (ch = l; ch < m; ch++)
  909.       for (sb = 0; sb < SBLIMIT; sb++)
  910. for (gr = 0; gr < 3; gr++)
  911.     for (i = 0; i < 12; i++)
  912. keep_it[ch][i+gr*12][sb] = subband[ch][gr][i][sb];
  913. for(i = 0; i < 12; i++) 
  914. {      
  915.     buffer_sample(keep_it,sample,bit_alloc,fr_ps, l, m, i);
  916.     II_dequantize_sample(sample, bit_alloc, sb_pre_sample, fr_ps, l, m, i);
  917.     II_denormalize_sample(sb_pre_sample, scalar, fr_ps, i>>2, l, m, i);
  918.         }           
  919.     for (ch = l; ch < m; ch++)
  920.       for (sb=0;sb<SBLIMIT;sb++)
  921. for (i = 0; i < 4; i++)
  922.     for (gr=0;gr<3;gr++)
  923. sbs_sample[ch][0][i*3 + gr][sb] = sb_pre_sample[ch][gr][i][sb];
  924.     for (ch = l; ch < m; ch++)
  925.       for (sb=0;sb<SBLIMIT;sb++)
  926. for (i = 4; i < 8; i++)
  927.     for (gr=0;gr<3;gr++)
  928. sbs_sample[ch][1][(i-4)*3 + gr][sb] = sb_pre_sample[ch][gr][i][sb];
  929.     for (ch = l; ch < m; ch++)
  930.       for (sb=0;sb<SBLIMIT;sb++)
  931. for (i = 8; i < 12; i++)
  932.     for (gr=0;gr<3;gr++)
  933. sbs_sample[ch][2][(i-8)*3 + gr][sb] = sb_pre_sample[ch][gr][i][sb];
  934. }
  935. /**************************************************************
  936. /*
  937. /*   Restore the compressed sample to a factional number.
  938. /*   first complement the MSB of the sample
  939. /*   for Layer II :
  940. /*   Use the formula s = s' * c + d
  941. /*
  942. /*  taken out of decoder,modified for prediction 9/16/93,SR
  943. /*
  944. /**************************************************************/
  945. static double c[17] = { 1.33333333333, 1.60000000000, 1.14285714286,
  946.                         1.77777777777, 1.06666666666, 1.03225806452,
  947.                         1.01587301587, 1.00787401575, 1.00392156863,
  948.                         1.00195694716, 1.00097751711, 1.00048851979,
  949.                         1.00024420024, 1.00012208522, 1.00006103888,
  950.                         1.00003051851, 1.00001525902 };
  951. static double d[17] = { 0.500000000, 0.500000000, 0.250000000, 0.500000000,
  952.                         0.125000000, 0.062500000, 0.031250000, 0.015625000,
  953.                         0.007812500, 0.003906250, 0.001953125, 0.0009765625,
  954.                         0.00048828125, 0.00024414063, 0.00012207031,
  955.                         0.00006103516, 0.00003051758 };
  956. /************************** Layer II stuff ************************/
  957. void II_dequantize_sample(unsigned int (*sample)[3][32], unsigned int (*bit_alloc)[32], double (*fraction)[3][12][32], frame_params *fr_ps, int l, int m, int z)
  958. {
  959.    int i, j, k, x;
  960.    int stereo = fr_ps->stereo;
  961.    int sblimit = fr_ps->sblimit;
  962.    al_table *alloc = fr_ps->alloc;
  963.    for (i=0;i<sblimit;i++)  for (j=0;j<3;j++) for (k = l;k < m ;k++)
  964.      if (bit_alloc[k][i]) {
  965.        /* locate MSB in the sample */
  966.        x = 0;
  967. #ifndef MSDOS
  968.        while ((1L<<x) < (*alloc)[i][bit_alloc[k][i]].steps) x++;
  969. #else
  970.        /* microsoft C thinks an int is a short */
  971.        while (( (unsigned long) (1L<<(long)x) <
  972.                 (unsigned long)( (*alloc)[i][bit_alloc[k][i]].steps)
  973.               ) && ( x < 16) ) x++;
  974. #endif
  975.        /* MSB inversion */
  976.        if (((sample[k][j][i] >> x-1) & 1) == 1)
  977.           fraction[k][j][z][i] = 0.0;
  978.        else  fraction[k][j][z][i] = -1.0;
  979.        /* Form a 2's complement sample */
  980.        fraction[k][j][z][i] += (double) (sample[k][j][i] & ((1<<x-1)-1)) /
  981.                             (double) (1L<<x-1);
  982.        /* Dequantize the sample */
  983.        fraction[k][j][z][i] += d[(*alloc)[i][bit_alloc[k][i]].quant];
  984.        fraction[k][j][z][i] *= c[(*alloc)[i][bit_alloc[k][i]].quant];
  985.      }
  986.      else fraction[k][j][z][i] = 0.0;   
  987.    
  988.    for (i=sblimit;i<SBLIMIT;i++) for (j=0;j<3;j++) for(k = l; k < m; k++)
  989.      fraction[k][j][z][i] = 0.0;
  990. }
  991. void II_denormalize_sample(double (*fraction)[3][12][32], unsigned int (*scale_index)[3][32], frame_params *fr_ps, int x, int l, int m, int z)
  992.        /*far*/                             
  993.                                         
  994.                     
  995.       
  996.             
  997. {
  998.    int i,j,k;
  999.    int stereo = fr_ps->stereo;
  1000.    int sblimit = fr_ps->sblimit;
  1001.    for (i=0;i<sblimit;i++) for (j= l;j < m; j++) {
  1002.       fraction[j][0][z][i] *= multiple[scale_index[j][x][i]];
  1003.       fraction[j][1][z][i] *= multiple[scale_index[j][x][i]];
  1004.       fraction[j][2][z][i] *= multiple[scale_index[j][x][i]];
  1005.    }
  1006. }
  1007. void scale_factor_calc(unsigned int (*scalar)[3][32], int sblimit, int l, int m, int z, double (*sb_sample)[3][12][32])
  1008.                                    
  1009.             
  1010.             
  1011.                                           /* (see above) */
  1012. {
  1013.   int i,j, k,t;
  1014.   double s[SBLIMIT];
  1015.  
  1016.   for (k = l; k< m; k++) for (t=0;t<3;t++) 
  1017.   {
  1018.    for (i=((z == 0) ? 0:(sb_groups[z-1]+1));i<=sb_groups[z];i++) 
  1019.    {
  1020. for (j=1, s[i] = mod(sb_sample[k][t][0][i]);j<SCALE_BLOCK;j++)
  1021.   if (mod(sb_sample[k][t][j][i]) > s[i])
  1022.  s[i] = mod(sb_sample[k][t][j][i]);
  1023.    } 
  1024.     for (i=((z == 0) ? 0:(sb_groups[z-1]+1));i<=sb_groups[z];i++)
  1025.     { 
  1026.         for (j=SCALE_RANGE-1,scalar[k][t][i]=0;j>=0;j--)
  1027. if (s[i] < multiple[j]) 
  1028. {                       /* <= changed to <, 1992-11-06 shn*/
  1029.                    scalar[k][t][i] = j;
  1030.                    break;
  1031.                 }
  1032.      }
  1033.    }