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

mpeg/mp3

开发平台:

C/C++

  1. static int pattern[5][5] = {0x123, 0x122, 0x122, 0x133, 0x123,
  2.                             0x113, 0x111, 0x111, 0x444, 0x113,
  3.                             0x111, 0x111, 0x111, 0x333, 0x113,
  4.                             0x222, 0x222, 0x222, 0x333, 0x123,
  5.                             0x123, 0x122, 0x122, 0x133, 0x123};
  6.  
  7.     if (stereomc > 0 && fr_ps->sblimit_mc > fr_ps->sblimit)
  8. sblimit = fr_ps->sblimit_mc;
  9.     else
  10. sblimit = fr_ps->sblimit;
  11. /*  for (k = 0; k < stereo+stereomc+2; k++) 960814 FdB bug for some configurations */
  12.     for (k = 0; k < 12; k++)
  13. for (i = 0; i < SBLIMIT; i++) 
  14. {
  15.     dscf[0] = (scalar[k][0][i] - scalar[k][1][i]);
  16.     dscf[1] = (scalar[k][1][i] - scalar[k][2][i]);
  17.     for (j = 0; j < 2; j++)
  18.     {
  19.         if (dscf[j] <= -3)
  20.     class[j] = 0;
  21.         else if (dscf[j] > -3 && dscf[j] < 0)
  22.     class[j] = 1;
  23. else if (dscf[j] == 0)
  24.     class[j] = 2;
  25. else if (dscf[j] > 0 && dscf[j] < 3)
  26.     class[j] = 3;
  27. else
  28.     class[j] = 4;
  29.     }
  30.     switch (pattern[class[0]][class[1]]) 
  31.     {
  32.       case 0x123 :    scfsi[k][i] = 0;
  33.       break;
  34.       case 0x122 :    scfsi[k][i] = 3;
  35.       scalar[k][2][i] = scalar[k][1][i];
  36.       break;
  37.       case 0x133 :    scfsi[k][i] = 3;
  38.       scalar[k][1][i] = scalar[k][2][i];
  39.       break;
  40.       case 0x113 :    scfsi[k][i] = 1;
  41.       scalar[k][1][i] = scalar[k][0][i];
  42.       break;
  43.       case 0x111 :    scfsi[k][i] = 2;
  44.       scalar[k][1][i] = scalar[k][2][i] = scalar[k][0][i];
  45.       break;
  46.       case 0x222 :    scfsi[k][i] = 2;
  47.       scalar[k][0][i] = scalar[k][2][i] = scalar[k][1][i];
  48.       break;
  49.       case 0x333 :    scfsi[k][i] = 2;
  50.       scalar[k][0][i] = scalar[k][1][i] = scalar[k][2][i];
  51.       break;
  52.       case 0x444 :    scfsi[k][i] = 2;
  53.       if (scalar[k][0][i] > scalar[k][2][i])
  54.   scalar[k][0][i] = scalar[k][2][i];
  55.       scalar[k][1][i] = scalar[k][2][i] = scalar[k][0][i];
  56.     } /* switch */
  57. } /* subband */
  58.     if (n_ml_ch > 0)
  59.     {
  60. for (k = 7; k < 7 + n_ml_ch; k++)
  61.     for (i = 0; i < sblimit_ml; i++) 
  62.     {
  63. dscf[0] = (scalar[k][0][i] - scalar[k][1][i]);
  64. dscf[1] = (scalar[k][1][i] - scalar[k][2][i]);
  65. for (j = 0; j < 2; j++)
  66. {
  67.     if (dscf[j] <= -3)
  68. class[j] = 0;
  69.     else if (dscf[j] > -3 && dscf[j] < 0)
  70. class[j] = 1;
  71.     else if (dscf[j] == 0)
  72. class[j] = 2;
  73.     else if (dscf[j] > 0 && dscf[j] < 3)
  74. class[j] = 3;
  75.     else
  76. class[j] = 4;
  77. }
  78. switch (pattern[class[0]][class[1]]) 
  79. {
  80.   case 0x123 :    scfsi[k][i] = 0;
  81.   break;
  82.   case 0x122 :    scfsi[k][i] = 3;
  83.   scalar[k][2][i] = scalar[k][1][i];
  84.   break;
  85.   case 0x133 :    scfsi[k][i] = 3;
  86.   scalar[k][1][i] = scalar[k][2][i];
  87.   break;
  88.   case 0x113 :    scfsi[k][i] = 1;
  89.   scalar[k][1][i] = scalar[k][0][i];
  90.   break;
  91.   case 0x111 :    scfsi[k][i] = 2;
  92.   scalar[k][1][i] = scalar[k][2][i] = scalar[k][0][i];
  93.   break;
  94.   case 0x222 :    scfsi[k][i] = 2;
  95.   scalar[k][0][i] = scalar[k][2][i] = scalar[k][1][i];
  96.   break;
  97.   case 0x333 :    scfsi[k][i] = 2;
  98.   scalar[k][0][i] = scalar[k][1][i] = scalar[k][2][i];
  99.   break;
  100.   case 0x444 :    scfsi[k][i] = 2;
  101.   if (scalar[k][0][i] > scalar[k][2][i])
  102.       scalar[k][0][i] = scalar[k][2][i];
  103.   scalar[k][1][i] = scalar[k][2][i] = scalar[k][0][i];
  104. } /* switch */
  105.     } /* subband */
  106.     }
  107. }
  108.  
  109. /************************************************************************
  110. /*
  111. /* I_encode_scale  (Layer I)
  112. /* II_encode_scale (Layer II)
  113. /*
  114. /* PURPOSE:The encoded scalar factor information is arranged and
  115. /* queued into the output fifo to be transmitted.
  116. /*
  117. /* For Layer II, the three scale factors associated with
  118. /* a given subband and channel are transmitted in accordance
  119. /* with the scfsi, which is transmitted first.
  120. /*
  121. /************************************************************************/
  122.  
  123. void I_encode_scale(unsigned int (*scalar)[3][32], unsigned int (*bit_alloc)[32], frame_params *fr_ps, Bit_stream_struc *bs)
  124. {
  125.    int stereo  = fr_ps->stereo;
  126.    int sblimit = fr_ps->sblimit;
  127.    int i,j;
  128.  
  129.    for (i=0;i<SBLIMIT;i++) for (j=0;j<stereo;j++)
  130.       if (bit_alloc[j][i]) putbits(bs,scalar[j][0][i],6);
  131. }
  132.  
  133. /***************************** Layer II  ********************************/
  134. void II_encode_scale (
  135. unsigned int (*bit_alloc)[32],
  136. unsigned int (*scfsi)[32],
  137. unsigned int (*scalar)[3][32], /* JMZ 08/03/1995 Multilingual */
  138. unsigned int lfe_alloc, 
  139. unsigned int lfe_scalar, 
  140. frame_params *fr_ps,
  141. Bit_stream_struc *bs,
  142. int *l,
  143. int *z
  144. )
  145. {
  146.    layer *info     = fr_ps->header;
  147.    int center      = info->center;
  148.    int surround    = info->surround;
  149.    int stereo  = fr_ps->stereo;
  150.    int sblimit;
  151.    int lfe     = fr_ps->header->lfe;
  152.    int i,j,k, m, n, pci;
  153.    int pred;
  154.     if (*l == 0)
  155. sblimit = fr_ps->sblimit;
  156.     else
  157. sblimit = fr_ps->sblimit_mc;
  158.     for (i = 0; i < sblimit; i++)
  159.     {
  160. n = sbgrp[i];
  161. for (m = *l; m < *z; m++)
  162. {
  163.     k = transmission_channel (fr_ps, n, m);
  164.     if (bit_alloc[k][i] && (i < 12 || m != 2 || center != 3))
  165. putbits (bs, scfsi[k][i], 2);
  166. }
  167.     }
  168.     pred = 0;
  169.     if (*l == stereo)
  170.     {
  171. if (fr_ps->header->mc_prediction_on == 1)
  172. {
  173.     for (i = 0; i < 8; i++)
  174.     {
  175.         if (fr_ps->header->mc_pred[i] == 1)
  176.         {
  177.     for (m = 0; m < n_pred_coef[fr_ps->header->dyn_cross[i]]; m++)
  178.     {
  179.         if (fr_ps->header->predsi[i][m] != 0)
  180.         {
  181.             putbits (bs, fr_ps->header->delay_comp[i][m], 3);
  182.     pred += 3;
  183.     for (pci = 0; pci < fr_ps->header->predsi[i][m]; pci++)
  184.     {
  185. putbits (bs, fr_ps->header->pred_coef[i][m][pci], 8);
  186. pred += 8;       
  187.     }
  188.         }    
  189.     }
  190.         }
  191.     }
  192. }  
  193.     }  
  194.  
  195.     if (*l == stereo && lfe && lfe_alloc)
  196. putbits (bs, lfe_scalar, 6);
  197.     for (i = 0; i < sblimit; i++)
  198.     {
  199. n = sbgrp[i];
  200. for (m = *l; m < *z; m++)
  201. {
  202.     k = transmission_channel (fr_ps, n, m);
  203.             if (bit_alloc[k][i] && (i < 12 || m != 2 || center != 3))  
  204.     switch (scfsi[k][i]) 
  205.     {
  206. case 0: for (j = 0; j < 3; j++)
  207.                             putbits (bs, scalar[k][j][i], 6);
  208. break;
  209. case 1:
  210. case 3: putbits (bs, scalar[k][0][i], 6);
  211. putbits (bs, scalar[k][2][i], 6);
  212. break;
  213. case 2: putbits (bs, scalar[k][0][i], 6);
  214.     }
  215. }
  216.     }
  217. }
  218.  
  219. /*JMZ 24/2/95 Multilingual , WtK 7/8/95*/
  220. void II_encode_scale_ml (unsigned int (*bit_alloc)[32], unsigned int (*scfsi)[32],
  221.  unsigned int (*scalar)[3][32], frame_params *fr_ps,
  222.  Bit_stream_struc *bs, int *l, int *z)
  223. {
  224.    int stereo    = fr_ps->stereo;
  225.    int sblimit_ml = fr_ps->sblimit_ml;
  226.    int i,j,k, m, n, pci;
  227. for (i=0;i<sblimit_ml;i++)
  228.   for (m = *l; m < *z; m++)
  229. {
  230. k=m;
  231. if (bit_alloc[k][i])  
  232. putbits(bs,scfsi[k][i],2);
  233. }
  234. for (i=0;i<sblimit_ml;i++)
  235.   for (m = *l;m < *z; m++)
  236. {
  237. k=m;
  238. if (bit_alloc[k][i])  
  239. switch (scfsi[k][i]) 
  240. {
  241. case 0: for (j=0;j<3;j++)
  242. putbits(bs,scalar[k][j][i],6);
  243. break;
  244. case 1:
  245. case 3: putbits(bs,scalar[k][0][i],6);
  246. putbits(bs,scalar[k][2][i],6);
  247. break;
  248. case 2: putbits(bs,scalar[k][0][i],6);
  249. break;
  250. }
  251. }
  252. }
  253. /*=======================================================================
  254. |                                                                        |
  255. |      The following routines are done after the masking threshold       |
  256. | has been calculated by the fft analysis routines in the Psychoacoustic |
  257. | model. Using the MNR calculated, the actual number of bits allocated   |
  258. | to each subband is found iteratively.                                  |
  259. |                                                                        |
  260. =======================================================================*/
  261.  
  262. /************************************************************************
  263. /*
  264. /* I_bits_for_nonoise  (Layer I)
  265. /* II_bits_for_nonoise (Layer II)
  266. /*
  267. /* PURPOSE:Returns the number of bits required to produce a
  268. /* mask-to-noise ratio better or equal to the noise/no_noise threshold.
  269. /*
  270. /* SEMANTICS:
  271. /* bbal = # bits needed for encoding bit allocation
  272. /* bsel = # bits needed for encoding scalefactor select information
  273. /* banc = # bits needed for ancillary data (header info included)
  274. /*
  275. /* For each subband and channel, will add bits until one of the
  276. /* following occurs:
  277. /* - Hit maximum number of bits we can allocate for that subband
  278. /* - MNR is better than or equal to the minimum masking level
  279. /*   (NOISY_MIN_MNR)
  280. /* Then the bits required for scalefactors, scfsi, bit allocation,
  281. /* and the subband samples are tallied (#req_bits#) and returned.
  282. /*
  283. /* (NOISY_MIN_MNR) is the smallest MNR a subband can have before it is
  284. /* counted as 'noisy' by the logic which chooses the number of JS
  285. /* subbands.
  286. /*
  287. /* Joint stereo is supported.
  288. /*
  289. /************************************************************************/
  290. /*static double snr[18] = {0.00, 7.00, 11.00, 16.00, 20.84,
  291.                          25.28, 31.59, 37.75, 43.84,
  292.                          49.89, 55.93, 61.96, 67.98, 74.01,
  293.                          80.03, 86.05, 92.01, 98.01};*/
  294. static double snr[18] = { 0.00,  6.03, 11.80, 15.81, /* 0, 3, 5, 7 */
  295.  19.03, 23.50, 29.82, 35.99, /* 9,15,31,63 */
  296.  42.08, 48.13, 54.17, 60.20, /* 127, ...   */
  297.  66.22, 72.25, 78.27, 84.29, /* 2047, ...  */
  298.  90.31, 96.33};              /* 16383, ... */
  299. int I_bits_for_nonoise(double (*perm_smr)[32], frame_params *fr_ps)
  300. {
  301.    int i,j,k;
  302.    int stereo  = fr_ps->stereo;
  303.    int sblimit = fr_ps->sblimit;
  304.    int jsbound = fr_ps->jsbound;
  305.    int req_bits = 0;
  306.  
  307.    /* initial b_anc (header) allocation bits */
  308.    req_bits = 32 + 4 * ( (jsbound * stereo) + (SBLIMIT-jsbound) );
  309.  
  310.    for(i=0; i<SBLIMIT; ++i)
  311.      for(j=0; j<((i<jsbound)?stereo:1); ++j) {
  312.        for(k=0;k<14; ++k)
  313. if( (-perm_smr[j][i] + snr[k]) >= fr_ps->mnr_min)
  314.            break; /* we found enough bits */
  315.          if(stereo == 2 && i >= jsbound)     /* check other JS channel */
  316.            for(;k<14; ++k)
  317.  if( (-perm_smr[1-j][i] + snr[k]) >= fr_ps->mnr_min) break;
  318.          if(k>0) req_bits += (k+1)*12 + 6*((i>=jsbound)?stereo:1);
  319.    }
  320.    return req_bits;
  321. }
  322.  
  323. /***************************** Layer II  ********************************/
  324.  
  325. int II_bits_for_nonoise(double (*perm_smr)[32], unsigned int (*scfsi)[32], frame_params *fr_ps, int a, int b, int *aiff)
  326. {
  327.     int sb,ch,ba,i;
  328.     int stereo  = fr_ps->stereo;
  329.     int stereomc = fr_ps->stereomc;
  330.     int stereoaug = fr_ps->stereoaug;
  331.     int n_ml_ch = fr_ps->header->multiling_ch; /* 23/03/1995 JMZ Multilingual */
  332.     int sblimit = fr_ps->sblimit;
  333.     int sblimit_mc = fr_ps->sblimit_mc;
  334.     int sblimit_ml = fr_ps->sblimit_ml;
  335.     int jsbound = fr_ps->jsbound;
  336.     al_table *alloc = fr_ps->alloc;
  337.     al_table *alloc_mc = fr_ps->alloc_mc;
  338.     al_table *alloc_ml = fr_ps->alloc_ml;
  339.     int bbal = 0;
  340.     int berr;                   /* before: =0 92-08-11 shn */
  341.     int banc = 32;                    /* header ISO Layer II */
  342.     int bancmc = 0;                            /* header multichannel = 93, 5.7.93,SR*/
  343.     int bancext = 0;                      /* header multichannel = 93, 5.7.93,SR*/
  344.     int maxAlloc, sel_bits, sc_bits, smp_bits;
  345.     int req_bits = 0;
  346.     int tca_bits, dynx_bits, aug_tca_bits;
  347.     static int sfsPerScfsi[] = { 3,2,1,2 };    /* lookup # sfs per scfsi */
  348.     if (verbosity >= 3) printf("bits_for_nonoisen");
  349.     if( *aiff == 1)
  350.     { 
  351. if (fr_ps->header->ext_bit_stream_present == 0)
  352.     bancmc += 35;      /* mc_header + crc + tc_sbgr_select+ dyn_cross_on + 
  353. mc_prediction_on  01/05/94,  SR  new! 05/04/94,  SR*/
  354. else
  355. {
  356.     bancmc += 43;     
  357.     bancext = 40;
  358. }
  359. /* 960627 FdB TCA bits dependent on configuration */
  360. if (fr_ps->config == 320)
  361.     tca_bits = 3;
  362. else if (fr_ps->config == 310)
  363.     tca_bits = 3;
  364. else if (fr_ps->config == 220)
  365.     tca_bits = 2;
  366. else if (fr_ps->config == 300 || fr_ps->config == 302 || fr_ps->config == 210)
  367.     tca_bits = 2;
  368. else
  369.     tca_bits = 0;
  370.     
  371. if (fr_ps->header->tc_sbgr_select == 0)
  372.     bancmc += 12 * tca_bits;
  373. else
  374.     bancmc += tca_bits;
  375. if (fr_ps->header->dyn_cross_on == 1)
  376. {
  377.     /* 960627 FdB DynX dependent on configuration */
  378.     if (fr_ps->config == 320)
  379. dynx_bits = 4;
  380.     else if (fr_ps->config == 310 || fr_ps->config == 220)
  381. dynx_bits = 3;
  382.     else if (fr_ps->config == 300 || fr_ps->config == 302 || fr_ps->config == 210)
  383. dynx_bits = 1;
  384.     else
  385. dynx_bits = 0;
  386.     
  387.     bancmc = 1 + 12 * dynx_bits;
  388.     if (fr_ps->header->surround == 3)
  389. bancmc += 12;      /* now with dyn_second_stereo,  17/02/95,  SR*/
  390. }
  391.     
  392. if (fr_ps->header->mc_prediction_on == 1)
  393. {
  394.     /* mc_pred, predsi, delay_comp, pred_coef */
  395.     /* bancmc += 8 * (3 + 6 * (3 + 3 * 8)); */
  396.     for (i = 0; i < 8; i++)
  397.     {
  398. bancmc += 3;
  399. bancmc += n_pred_coef[fr_ps->header->dyn_cross[i]] * 27;
  400.     }
  401. }
  402.     
  403. #ifdef Augmentation_7ch
  404. if (stereoaug == 2)
  405. {
  406.     if (fr_ps->header->aug_mtx_proc == 0)
  407. aug_tca_bits = 3;
  408.     else if (fr_ps->header->aug_mtx_proc == 1)
  409. aug_tca_bits = 2;
  410.     else
  411. aug_tca_bits = 0;
  412.     
  413.     bancmc += 12 * aug_tca_bits;
  414.     
  415.     if (fr_ps->header->aug_dyn_cross_on == 1)
  416. bancmc += 12 * 5;
  417. }
  418. #endif
  419.     }     
  420.     else
  421. bancmc = 0;
  422.     if (fr_ps->header->error_protection)
  423. berr=16;
  424.     else
  425. berr=0; /* added 92-08-11 shn */
  426.     for (sb = 0; sb < jsbound; sb++)
  427. bbal += (stereo) * (*alloc)[sb][0].bits;
  428.     for (sb = jsbound; sb < sblimit; sb++)
  429. bbal += (stereo-1) * (*alloc)[sb][0].bits;       
  430.     for (sb = 0; sb < sblimit_mc; sb++)
  431. bbal += (stereomc+stereoaug) * (*alloc_mc)[sb][0].bits;       
  432.     for (sb = 0; sb < sblimit_ml; sb++)
  433. bbal += (n_ml_ch) * (*alloc_ml)[sb][0].bits;       
  434.     req_bits = banc + bancmc + bbal + berr;
  435.     for (sb = 0; sb < SBLIMIT; sb++)
  436. for (ch = 0; ch < ((sb < jsbound)? stereo+stereomc+stereoaug : 1); ch++)
  437. {
  438.     if (ch < stereo)
  439.     {
  440. alloc = fr_ps->alloc;
  441. sblimit = fr_ps->sblimit;
  442.     }
  443.     else
  444.     {
  445. alloc = fr_ps->alloc_mc;
  446. sblimit = fr_ps->sblimit_mc;
  447.     }
  448.     if (sb < sblimit)
  449.     {
  450. maxAlloc = (1<<(*alloc)[sb][0].bits)-1;
  451. sel_bits = sc_bits = smp_bits = 0;
  452. for (ba = 0; ba < maxAlloc-1; ba++)
  453.     if ((-perm_smr[ch][sb] + snr[(*alloc)[sb][ba].quant + ((ba>0)?1:0)])
  454.     >= fr_ps->mnr_min)
  455. break;
  456. if (((b - a) >= 1) && (sb >= jsbound))
  457. { /* check other JS channels */
  458.     for (; ba < maxAlloc-1; ba++)
  459. if ((-perm_smr[1-ch][sb] + snr[(*alloc)[sb][ba].quant + ((ba>0)?1:0)])
  460.    >= fr_ps->mnr_min)
  461.     break;
  462. }
  463.    
  464. if (ba > 0) 
  465. {
  466.     smp_bits = 12 * ((*alloc)[sb][ba].group * (*alloc)[sb][ba].bits);
  467.     /* scale factor bits required for subband */
  468.     sel_bits = 2;
  469.     sc_bits  = 6 * sfsPerScfsi[scfsi[ch][sb]];
  470.    
  471.     if (stereo == 2 && sb >= jsbound)
  472.     {
  473. /* each new js sb has L+R scfsis*/
  474. sel_bits += 2;
  475. sc_bits  += 6 * sfsPerScfsi[scfsi[1-ch][sb]];
  476.     } 
  477.    
  478.     req_bits += (smp_bits+sel_bits+sc_bits);
  479. }
  480.     }
  481. }
  482.     if (n_ml_ch > 0)
  483.     {
  484. /* remaining part from jsbound to sblimit_ml in II_bits_for_indi() , WtK*/
  485. for (sb = 0; sb < (jsbound < sblimit_ml) ? jsbound:sblimit_ml; sb++)
  486. {
  487.     for (ch = 7; ch < 7+n_ml_ch; ch++)  
  488.     {
  489. maxAlloc = (1<<(*alloc_ml)[sb][0].bits)-1;
  490. sel_bits = sc_bits = smp_bits = 0;
  491. for (ba = 0; ba < maxAlloc-1; ba++)
  492.     if ((-perm_smr[ch][sb] + snr[(*alloc_ml)[sb][ba].quant + ((ba>0)?1:0)])
  493.  >= fr_ps->mnr_min)
  494. break;        
  495. if (ba > 0) 
  496. {
  497.     if (fr_ps->header->multiling_fs==1)
  498. smp_bits =  6 * ((*alloc_ml)[sb][ba].group * (*alloc_ml)[sb][ba].bits);
  499.     else
  500. smp_bits = 12 * ((*alloc_ml)[sb][ba].group * (*alloc_ml)[sb][ba].bits);
  501.     /* scale factor bits required for subband */
  502.     sel_bits = 2;
  503.     sc_bits  = 6 * sfsPerScfsi[scfsi[ch][sb]];
  504.     req_bits += (smp_bits+sel_bits+sc_bits);
  505. }
  506.     }
  507. }
  508.     }
  509.     return req_bits;
  510. }
  511. /**********************************************************************/ 
  512. /*now for the independent channels, 8/6/93, SR                        */
  513. /**********************************************************************/
  514. int II_bits_for_indi(double (*perm_smr)[32], unsigned int (*scfsi)[32], frame_params *fr_ps, int *a, int *b, int *aiff)
  515. {
  516.     int sb,ch,ba,i;
  517.     int stereo  = fr_ps->stereo;
  518.     int stereomc = fr_ps->stereomc;
  519.     int stereoaug = fr_ps->stereoaug;
  520.     int n_ml_ch = fr_ps->header->multiling_ch; /* 23/03/1995 JMZ Multilingual */
  521.     int sblimit = fr_ps->sblimit_mc;
  522.     int sblimit_ml = fr_ps->sblimit_ml;
  523.     int jsbound = fr_ps->jsbound;
  524.     al_table *alloc = fr_ps->alloc_mc;
  525.     al_table *alloc_ml = fr_ps->alloc_ml;
  526.     int req_bits = 0;
  527.     int maxAlloc, sel_bits, sc_bits, smp_bits;
  528.     static int sfsPerScfsi[] = { 3,2,1,2 };    /* lookup # sfs per scfsi */
  529.     for (sb = jsbound; sb < sblimit; sb++)
  530.     {
  531. for (ch = stereo; ch < stereo+stereomc+stereoaug; ch++) 
  532. {
  533.     maxAlloc = (1<<(*alloc)[sb][0].bits)-1;
  534.     sel_bits = sc_bits = smp_bits = 0;
  535.     for (ba = 0; ba < maxAlloc-1; ba++)
  536. if ((-perm_smr[ch][sb] + snr[(*alloc)[sb][ba].quant + ((ba>0)?1:0)])
  537.  >= fr_ps->mnr_min)
  538.     break; /* we found enough bits */
  539.     if (ba > 0) 
  540.     {
  541. smp_bits = 12 * ((*alloc)[sb][ba].group * (*alloc)[sb][ba].bits);
  542. /* scale factor bits required for subband */
  543. sel_bits = 2;
  544. sc_bits  = 6 * sfsPerScfsi[scfsi[ch][sb]];
  545. req_bits += smp_bits+sel_bits+sc_bits;
  546.     }
  547. }
  548.     }
  549.     if (n_ml_ch > 0)
  550. for (sb = jsbound; sb < sblimit_ml; sb++)
  551. {
  552.     for (ch = 7; ch < 7+n_ml_ch; ch++) 
  553.     {
  554. maxAlloc = (1<<(*alloc_ml)[sb][0].bits)-1;
  555. sel_bits = sc_bits = smp_bits = 0;
  556. for (ba = 0; ba < maxAlloc-1; ba++)
  557.     if ((-perm_smr[ch][sb] + snr[(*alloc_ml)[sb][ba].quant + ((ba>0)?1:0)])
  558.   >= fr_ps->mnr_min)
  559. break; /* we found enough bits */
  560. if (ba > 0) 
  561. {
  562.     if (fr_ps->header->multiling_fs == 1)
  563. smp_bits =  6 * ((*alloc_ml)[sb][ba].group * (*alloc_ml)[sb][ba].bits);
  564.     else
  565. smp_bits = 12 * ((*alloc_ml)[sb][ba].group * (*alloc_ml)[sb][ba].bits);
  566.      /* scale factor bits required for subband */
  567.     sel_bits = 2;
  568.     sc_bits  = 6 * sfsPerScfsi[scfsi[ch][sb]];
  569.     req_bits += smp_bits+sel_bits+sc_bits;
  570.  }
  571.     }
  572. }
  573.     return req_bits;
  574. }
  575.     
  576. /************************************************************************
  577. /*
  578. /* I_main_bit_allocation   (Layer I)
  579. /* II_main_bit_allocation  (Layer II)
  580. /*
  581. /* PURPOSE:For joint stereo mode, determines which of the 4 joint
  582. /* stereo modes is needed.  Then calls *_a_bit_allocation(), which
  583. /* allocates bits for each of the subbands until there are no more bits
  584. /* left, or the MNR is at the noise/no_noise threshold.
  585. /*
  586. /* SEMANTICS:
  587. /*
  588. /* For joint stereo mode, joint stereo is changed to stereo if
  589. /* there are enough bits to encode stereo at or better than the
  590. /* no-noise threshold (fr_ps->mnr_min).  Otherwise, the system
  591. /* iteratively allocates less bits by using joint stereo until one
  592. /* of the following occurs:
  593. /* - there are no more noisy subbands (MNR >= fr_ps->mnr_min)
  594. /* - mode_ext has been reduced to 0, which means that all but the
  595. /*   lowest 4 subbands have been converted from stereo to joint
  596. /*   stereo, and no more subbands may be converted
  597. /*
  598. /*     This function calls *_bits_for_nonoise() and *_a_bit_allocation().
  599. /*
  600. /************************************************************************/
  601.  
  602. void I_main_bit_allocation(double (*perm_smr)[32], unsigned int (*bit_alloc)[32], int *adb, frame_params *fr_ps)
  603. {
  604.    int  noisy_sbs;
  605.    int  mode, mode_ext, lay, i;
  606.    int  rq_db, av_db = *adb;
  607. static  int init = 0;
  608.  
  609.    if(init == 0) {
  610.      /* rearrange snr for layer I */
  611.      snr[2] = snr[3];
  612.      for (i=3;i<16;i++) snr[i] = snr[i+2];
  613.      init = 1;
  614.    }
  615.  
  616.    if((mode = fr_ps->actual_mode) == MPG_MD_JOINT_STEREO) {
  617.      fr_ps->header->mode = MPG_MD_STEREO;
  618.      fr_ps->header->mode_ext = 0;
  619.      fr_ps->jsbound = fr_ps->sblimit;
  620.      if(rq_db = I_bits_for_nonoise(perm_smr, fr_ps) > *adb) {
  621.        fr_ps->header->mode = MPG_MD_JOINT_STEREO;
  622.        mode_ext = 4;           /* 3 is least severe reduction */
  623.        lay = fr_ps->header->lay;
  624.        do {
  625.           --mode_ext;
  626.           fr_ps->jsbound = js_bound(lay, mode_ext);
  627.           rq_db = I_bits_for_nonoise(perm_smr, fr_ps);
  628.        } while( (rq_db > *adb) && (mode_ext > 0));
  629.        fr_ps->header->mode_ext = mode_ext;
  630.      }    /* well we either eliminated noisy sbs or mode_ext == 0 */
  631.    }
  632.    noisy_sbs = I_a_bit_allocation(perm_smr, bit_alloc, adb, fr_ps);
  633. }
  634.  
  635.  
  636. /***************************** Layer II  ********************************/
  637.  
  638. void II_main_bit_allocation (
  639. double (*perm_smr)[32], /* minimum masking level *//* JMZ 08/03/1995 Multilingual */
  640. double (*ltmin)[32], /* minimum masking level *//* JMZ 08/03/1995 Multilingual */
  641. unsigned int (*scfsi)[32], /* JMZ 08/03/1995 Multilingual */
  642. unsigned int (*bit_alloc)[32], /* JMZ 08/03/1995 Multilingual */
  643. int *adb,
  644. frame_params *fr_ps,
  645. int *aiff,
  646. double (*sb_sample)[3][12][32], /* JMZ 08/03/1995 Multilingual */
  647. unsigned int (*scalar)[3][32], /* JMZ 08/03/1995 Multilingual */
  648. double (*max_sc)[32], /* JMZ 08/03/1995 Multilingual */
  649. double (*buffer)[1152], /* JMZ 08/03/1995 Multilingual */
  650. double (*spiki)[32], /* JMZ 08/03/1995 Multilingual */
  651. double (*joint_sample)[3][12][32],
  652. unsigned int (*j_scale)[3][32], 
  653. int dyn_cr, 
  654. int aug_dyn_cr, 
  655. unsigned int (*scfsi_dyn)[SBLIMIT], 
  656. unsigned int (*scalar_dyn)[3][SBLIMIT]
  657. )
  658. {
  659.     int noisy_sbs, nn;
  660.     int mode, mode_ext, lay, modemc_hlp;
  661.     int rq_db, av_db = *adb, bits_nonoise, bits_indi;
  662.     int a, b, i, l, m, sb, k;
  663.     int sbbound = -30;
  664.     float adb_help;
  665.     double smr_pred[7][SBLIMIT];
  666.     float preco[12][4];
  667.     float prega[3][32];
  668.     int bits1, bits2, ba, ba1, subgr;
  669.     int maxAlloc;
  670.     al_table *alloc = fr_ps->alloc;
  671.     int stereoaug = fr_ps->stereoaug;
  672.     static int sfsPerScfsi[] = { 3,2,1,2 };    /* lookup # sfs per scfsi */
  673.     double sb_sample_sum[5][3][12][32];     
  674.     int subfr, ch, sum_chs;
  675.     unsigned int scalar_sum[5][3][SBLIMIT];
  676.     unsigned int scfsi_sum[5][SBLIMIT]; 
  677.     /***************************layer II two channels *******************/
  678.     if (*aiff == 0)
  679.     {
  680. if ((mode = fr_ps->actual_mode) == MPG_MD_JOINT_STEREO)
  681. {
  682.     a = 0;
  683.     b = 1;
  684.     fr_ps->header->mode = MPG_MD_STEREO;
  685.     fr_ps->header->mode_ext = 0;
  686.     fr_ps->jsbound = fr_ps->sblimit;
  687.     if (rq_db = II_bits_for_nonoise (perm_smr, scfsi, fr_ps, a, b, aiff) > *adb)
  688.     {
  689. fr_ps->header->mode = MPG_MD_JOINT_STEREO;
  690. mode_ext = 4;           /* 3 is least severe reduction */
  691. lay = fr_ps->header->lay;
  692. do
  693. {
  694.   --mode_ext;
  695.   fr_ps->jsbound = js_bound (lay, mode_ext);
  696.   rq_db = II_bits_for_nonoise (perm_smr, scfsi, fr_ps, a, b, aiff);
  697. } while ((rq_db > *adb) && (mode_ext > 0));
  698. fr_ps->header->mode_ext = mode_ext;
  699.     } /* well we either eliminated noisy sbs or mode_ext == 0 */
  700. }
  701.     }
  702.     /***************** layer II five channels ****************************/
  703.     else
  704.     {
  705. trans_chan (fr_ps);
  706. #ifdef Augmentation_7ch
  707. if (stereoaug == 2)
  708.     trans_chan_aug (fr_ps);      
  709. #endif
  710. if (verbosity >= 2) 
  711.     printf ("js actual_mode: %d  mode: %d  mode_ext: %d  jsbound: %d dyn_cr: %2d aug_dyn_cr: %2dn",
  712.          fr_ps->actual_mode, fr_ps->header->mode, fr_ps->header->mode_ext, fr_ps->jsbound, dyn_cr, aug_dyn_cr);
  713. for (sb = 0; sb < SBLIMIT; ++sb)
  714. {
  715.     subgr = sbgrp[sb];
  716.     maxAlloc = (1 << (*alloc)[sb][0].bits) - 1;
  717.     for (ba = 0; ba < maxAlloc-1; ++ba)
  718.         if ((-perm_smr[0][sb] + snr[(*alloc)[sb][ba].quant+((ba>0)?1:0)])
  719. >= fr_ps->mnr_min)
  720.     break; /* we found enough bits */
  721.     for (ba1 = 0; ba1 < maxAlloc-1; ++ba1)
  722. if ((-perm_smr[no_channel[fr_ps->header->tc_alloc[subgr]][0]][sb] +
  723.       snr[(*alloc)[sb][ba1].quant+((ba1>0)?1:0)])
  724. >= fr_ps->mnr_min)
  725.     break; /* we found enough bits */
  726.     if (ba1 > ba)
  727.     {
  728.         perm_smr[0][sb] = perm_smr[no_channel[fr_ps->header->tc_alloc[subgr]][0]][sb];
  729.         ba = ba1;
  730.     }
  731.  
  732.     maxAlloc = (1<<(*alloc)[sb][0].bits) - 1;
  733.     for (ba = 0; ba < maxAlloc-1; ++ba)
  734.         if ((-perm_smr[1][sb] + snr[(*alloc)[sb][ba].quant+((ba>0)?1:0)])
  735.        >= fr_ps->mnr_min)
  736.     break; /* we found enough bits */
  737.     for (ba1 = 0; ba1 < maxAlloc-1; ++ba1)
  738.         if ((-perm_smr[no_channel[fr_ps->header->tc_alloc[subgr]][1]][sb] +
  739.       snr[(*alloc)[sb][ba1].quant+((ba1>0)?1:0)])
  740.        >= fr_ps->mnr_min)
  741.     break; /* we found enough bits */
  742.     if (ba1 > ba)
  743.     {
  744.         perm_smr[1][sb] = perm_smr[no_channel[fr_ps->header->tc_alloc[subgr]][1]][sb];
  745.         ba = ba1;
  746.     }
  747. }
  748. /************ 05/24/95, SR, dyn_cross talk **********************/     
  749. if (dyn_cr != 0 || (fr_ps->header->dyn_cross_LR &&
  750.     (fr_ps->config == 302 || fr_ps->config == 202 || fr_ps->config == 102)))
  751. {
  752.     combine (fr_ps, sb_sample, sb_sample_sum); 
  753.     
  754.     for (ch = 0; ch < CHANMAX2; ch++)
  755.     {
  756.         for (subfr = 0; subfr < 3; subfr++)
  757.     for (sb = 0; sb < fr_ps->sblimit; sb++)
  758.         scalar_dyn[ch][subfr][sb] = scalar[ch][subfr][sb]; 
  759.     
  760.         scfsi_calc_dyn (scalar_dyn, ch, fr_ps->sblimit, scfsi_dyn);
  761.         scfsi_calc (scalar, ch, fr_ps->sblimit, scfsi);
  762.     }
  763.     
  764.     if (fr_ps->config == 320)
  765. sum_chs = 4;
  766.     else if (fr_ps->config == 302 || fr_ps->config == 310 || fr_ps->config == 220 || fr_ps->config == 202 || fr_ps->config == 102)
  767. sum_chs = 1;
  768.     else
  769. sum_chs = 0;
  770.     
  771.     for (ch = 0; ch < sum_chs; ch++) 
  772.     {
  773. scf_calc (sb_sample_sum, fr_ps->sblimit, ch, scalar_sum);
  774. scfsi_calc_dyn (scalar_sum, ch, fr_ps->sblimit, scfsi_sum);
  775.     }
  776.     take_dyn_cross (dyn_cr, fr_ps, sb_sample_sum, scalar_sum, scfsi_sum, scfsi_dyn, 
  777.     sb_sample, scalar, scfsi); 
  778. }
  779. /************ 05/24/95, SR, dyn_cross talk **********************/     
  780. #ifdef Augmentation_7ch
  781. if (aug_dyn_cr != 0)
  782. {
  783.     combine_aug (fr_ps, sb_sample, sb_sample_sum); 
  784.     
  785.     for (ch = CHANMAX2; ch < CHANMAX3; ch++)
  786.     {
  787.         for (subfr = 0; subfr < 3; subfr++)
  788.     for (sb = 0; sb < fr_ps->sblimit; sb++)
  789.         scalar_dyn[ch][subfr][sb] = scalar[ch][subfr][sb]; 
  790.     
  791.         scfsi_calc_dyn (scalar_dyn, ch, fr_ps->sblimit, scfsi_dyn);
  792.         scfsi_calc (scalar, ch, fr_ps->sblimit, scfsi);
  793.     }
  794.     
  795.     scf_calc (sb_sample_sum, fr_ps->sblimit, 4, scalar_sum);
  796.     scfsi_calc_dyn (scalar_sum, 4, fr_ps->sblimit, scfsi_sum);
  797.     take_dyn_cross_aug (aug_dyn_cr, fr_ps, sb_sample_sum, scalar_sum,
  798. scfsi_sum, scfsi_dyn, sb_sample, scalar, scfsi); 
  799. }
  800. #endif
  801. if ((mode = fr_ps->actual_mode) == MPG_MD_JOINT_STEREO)
  802. {
  803.     a = 0;
  804.     b = 1;
  805.     fr_ps->header->mode = MPG_MD_STEREO;
  806.     fr_ps->header->mode_ext = 0;
  807.     fr_ps->jsbound = fr_ps->sblimit;
  808.     adb_help = *adb;
  809.     bits_nonoise = II_bits_for_nonoise (perm_smr, scfsi, fr_ps, a, b, aiff);
  810.     bits_indi = II_bits_for_indi (perm_smr, scfsi, fr_ps, &a, &b, aiff);
  811.     rq_db = ((bits_nonoise / 10) % 2) * 10 * bits_nonoise + bits_indi;
  812.     if (verbosity >= 2) 
  813. printf ("rq_db: %5d ( %5d + %5d ) available: %5dn",
  814.     rq_db, bits_nonoise, bits_indi, *adb);
  815.     if (rq_db > adb_help)
  816.     {
  817.        fr_ps->header->mode = MPG_MD_JOINT_STEREO;
  818.        mode_ext = 4;           /* 3 is least severe reduction */
  819.        lay = fr_ps->header->lay;
  820.        do
  821.        {
  822.  --mode_ext;
  823.  fr_ps->jsbound = js_bound (lay, mode_ext);
  824.  bits_nonoise = II_bits_for_nonoise (perm_smr, scfsi, fr_ps, a, b, aiff);
  825.  bits_indi = II_bits_for_indi (perm_smr, scfsi, fr_ps, &a, &b, aiff);
  826.  rq_db = ((bits_nonoise / 10) % 2) * 10 * bits_nonoise + bits_indi;
  827.  if (verbosity >= 2) 
  828.     printf ("rq_db: %5d ( %5d + %5d ) available: %5dn",
  829.  rq_db, bits_nonoise, bits_indi, *adb);
  830.        } while ((rq_db >*adb) && (mode_ext > 0));
  831.        fr_ps->header->mode_ext = mode_ext;
  832.     }  /* well we either eliminated noisy sbs or mode_ext == 0 */
  833. }
  834.     }  /* end of else (five-channel) */
  835.     noisy_sbs = II_a_bit_allocation (perm_smr, scfsi, bit_alloc, adb, fr_ps, aiff);
  836. }
  837.  
  838. /************************************************************************
  839. /*
  840. /* I_a_bit_allocation  (Layer I)
  841. /* II_a_bit_allocation (Layer II)
  842. /*
  843. /* PURPOSE:Adds bits to the subbands with the lowest mask-to-noise
  844. /* ratios, until the maximum number of bits for the subband has
  845. /* been allocated.
  846. /*
  847. /* SEMANTICS:
  848. /* 1. Find the subband and channel with the smallest MNR (#min_sb#,
  849. /*    and #min_ch#)
  850. /* 2. Calculate the increase in bits needed if we increase the bit
  851. /*    allocation to the next higher level
  852. /* 3. If there are enough bits available for increasing the resolution
  853. /*    in #min_sb#, #min_ch#, and the subband has not yet reached its
  854. /*    maximum allocation, update the bit allocation, MNR, and bits
  855. /*    available accordingly
  856. /* 4. Repeat until there are no more bits left, or no more available
  857. /*    subbands. (A subband is still available until the maximum
  858. /*    number of bits for the subband has been allocated, or there
  859. /*    aren't enough bits to go to the next higher resolution in the
  860. /*    subband.)
  861. /*
  862. /************************************************************************/
  863.  
  864. int I_a_bit_allocation(double (*perm_smr)[32], unsigned int (*bit_alloc)[32], int *adb, frame_params *fr_ps) /* return noisy sbs */
  865.        /*far*/                      
  866.                                    
  867.          
  868.                     
  869. {
  870.    int i, k, smpl_bits, scale_bits, min_sb, min_ch, oth_ch;
  871.    int bspl, bscf, ad, noisy_sbs, done = 0;
  872.    double mnr[2][SBLIMIT], small;
  873.    char used[2][SBLIMIT];
  874.    int stereo  = fr_ps->stereo;
  875.    int sblimit = fr_ps->sblimit;
  876.    int jsbound = fr_ps->jsbound;
  877.    al_table *alloc = fr_ps->alloc;
  878.    static char init= 0;
  879.    static int bbal, banc, berr;
  880.  
  881.    if (!init) {
  882.       banc = 32;     /* before: berr = 0; 92-08-11 shn */ 
  883.       init = 1;
  884.       if (fr_ps->header->error_protection) berr = 16; else berr= 0; /* added 92-08-11 shn */
  885.    }
  886.    bbal = 4 * ( (jsbound * stereo) + (SBLIMIT-jsbound) );
  887.    *adb -= bbal + berr + banc;
  888.    ad= *adb;
  889.  
  890.    for (i=0;i<SBLIMIT;i++) for (k=0;k<stereo;k++) {
  891.      mnr[k][i]=snr[0]-perm_smr[k][i];
  892.      bit_alloc[k][i] = 0;
  893.      used[k][i] = 0;
  894.    }
  895.    bspl = bscf = 0;
  896.  
  897.    do  {
  898.      /* locate the subband with minimum SMR */
  899.      small = mnr[0][0]+1;    min_sb = -1; min_ch = -1;
  900.      for (i=0;i<SBLIMIT;i++) for (k=0;k<stereo;k++)
  901.        /* go on only if there are bits left */
  902.        if (used[k][i] != 2 && small > mnr[k][i]) {
  903.          small = mnr[k][i];
  904.          min_sb = i;  min_ch = k;
  905.        }
  906.      if(min_sb > -1) {   /* there was something to find */
  907.        /* first step of bit allocation is biggest */
  908.        if (used[min_ch][min_sb])  { smpl_bits = 12; scale_bits = 0; }
  909.        else                       { smpl_bits = 24; scale_bits = 6; }
  910.        if(min_sb >= jsbound)        scale_bits *= stereo;
  911.  
  912.        /* check to see enough bits were available for */
  913.        /* increasing resolution in the minimum band */
  914.  
  915.        if (ad  > bspl + bscf + scale_bits + smpl_bits) {
  916.          bspl += smpl_bits; /* bit for subband sample */
  917.          bscf += scale_bits; /* bit for scale factor */
  918.          bit_alloc[min_ch][min_sb]++;
  919.          used[min_ch][min_sb] = 1; /* subband has bits */
  920.          mnr[min_ch][min_sb] = -perm_smr[min_ch][min_sb]
  921.                                + snr[bit_alloc[min_ch][min_sb]];
  922.          /* Check if subband has been fully allocated max bits */
  923.          if (bit_alloc[min_ch][min_sb] ==  14 ) used[min_ch][min_sb] = 2;
  924.        }
  925.        else            /* no room to improve this band */
  926.          used[min_ch][min_sb] = 2; /*   for allocation anymore */
  927.        if(stereo == 2 && min_sb >= jsbound) {
  928.          oth_ch = 1-min_ch;  /* joint-st : fix other ch */
  929.          bit_alloc[oth_ch][min_sb] = bit_alloc[min_ch][min_sb];
  930.          used[oth_ch][min_sb] = used[min_ch][min_sb];
  931.          mnr[oth_ch][min_sb] = -perm_smr[oth_ch][min_sb]
  932.                                + snr[bit_alloc[oth_ch][min_sb]];
  933.        }
  934.      }
  935.    } while(min_sb>-1);     /* i.e. still some sub-bands to find */
  936.    /* Calculate the number of bits left, add on to pointed var */
  937.    ad -= bspl+bscf;
  938.    *adb = ad;
  939.    /* see how many channels are noisy */
  940.    noisy_sbs = 0; small = mnr[0][0];
  941.    for(k=0; k<stereo; ++k) {
  942.      for(i = 0; i< SBLIMIT; ++i) {
  943.  if(mnr[k][i] < fr_ps->mnr_min)  ++noisy_sbs;
  944.        if(small > mnr[k][i])           small = mnr[k][i];
  945.      }
  946.    }
  947.    return noisy_sbs;
  948. }
  949. /***************************** Layer II  ********************************/
  950. int II_a_bit_allocation (double (*perm_smr)[32], unsigned int (*scfsi)[32],
  951.  unsigned int (*bit_alloc)[32], int *adb,
  952.  frame_params *fr_ps, int *aiff)
  953. {
  954.     int n_ml_ch = fr_ps->header->multiling_ch;  /*JMZ 08/03/95 Multilingual */
  955.     int i, min_ch, min_sb, oth_ch, k, increment, scale, seli, ba, j, l;
  956.     int increment1, scale1, seli1;
  957.     int adb_hlp, adb_hlp1, adb_hlp2;
  958.     int bspl, bscf, bsel, ad, noisy_sbs;
  959.     int bspl_mpg1, bscf_mpg1, bsel_mpg1;
  960.     double mnr[14][SBLIMIT], small; /* JMZ 08/03/1995 Multilingual */
  961.     char used[14][SBLIMIT]; /* JMZ 08/03/1995 Multilingual */
  962.     layer *info  = fr_ps->header;
  963.     int center   = info->center;
  964.     int surround = info->surround;
  965.     int stereo = fr_ps->stereo;
  966.     int stereomc = fr_ps->stereomc;
  967.     int stereoaug = fr_ps->stereoaug;
  968.     int sblimit = fr_ps->sblimit;
  969.     int sblimit_mc = fr_ps->sblimit_mc;
  970.     int sblimit_ml = fr_ps->sblimit_ml;
  971.     int jsbound = fr_ps->jsbound;
  972.     al_table *alloc = fr_ps->alloc;
  973.     al_table *alloc_mc = fr_ps->alloc_mc;
  974.     al_table *alloc_ml = fr_ps->alloc_ml;
  975.     double dynsmr = 0.0;  /* border of SMR for dynamic datarate */
  976.     static char init= 0;
  977.     static int banc, berr;
  978.     int bbal, bancmc, bancext, bbal_mpg1;
  979.     int ll, pred, pci, adb_mpg1, sbgr, sb, tca_bits, dynx_bits, aug_tca_bits;
  980.     static int sfsPerScfsi[] = { 3,2,1,2 };    /* lookup # sfs per scfsi */
  981.     if (!init)
  982.     { 
  983. init = 1;
  984. banc = 32; /* banc: bits for header */;
  985. /* 960627 FdB reserve extra bits dependent wrt bugs */
  986. banc += 200;
  987. if (fr_ps->header->error_protection)
  988.     berr = 16;
  989. else
  990.     berr=0; /* added 92-08-11 shn */
  991.     }
  992.     pred = 0;
  993.     bancmc = 0;
  994.     bbal = 0;
  995.     bbal_mpg1 = 0;
  996.     bancext = 0;
  997.     adb_mpg1 = bitrate[fr_ps->header->lay-1][fr_ps->header->bitrate_index] * 24;
  998.     /* 960814 FdB next line added for debugging */
  999.     /* adb_mpg1 -= banc; */
  1000.     if (*aiff == 1)
  1001.     {
  1002. if (fr_ps->actual_mode == MPG_MD_JOINT_STEREO)
  1003. {
  1004.     for (i = 0; i < jsbound; ++i)
  1005. bbal += (stereo) * (*alloc)[i][0].bits;
  1006.     for (i = jsbound; i < sblimit; ++i)
  1007. bbal += (stereo-1) * (*alloc)[i][0].bits;
  1008.     for (i = 0; i < sblimit_mc; ++i)
  1009. bbal += (stereomc+stereoaug) * (*alloc_mc)[i][0].bits;
  1010.     for (i = 0; i < sblimit_ml; ++i)
  1011. bbal += (n_ml_ch) * (*alloc_ml)[i][0].bits;
  1012. }   
  1013. else
  1014. {
  1015.     for (i = 0; i < sblimit; ++i)
  1016. bbal += (stereo) * (*alloc)[i][0].bits;
  1017.     for (i = 0; i < sblimit_mc; ++i)
  1018. bbal += (stereomc+stereoaug) * (*alloc_mc)[i][0].bits;
  1019.     for (i = 0; i < sblimit_ml; ++i)
  1020. bbal += (n_ml_ch) * (*alloc_ml)[i][0].bits;
  1021. }
  1022. if (fr_ps->header->center == 3) bbal -= 41; 
  1023.     }
  1024.     else
  1025.     {
  1026. for (i = 0; i < jsbound; ++i)
  1027.     bbal += stereo * (*alloc)[i][0].bits;
  1028.         for (i = jsbound; i < sblimit; ++i)
  1029.     bbal += (*alloc)[i][0].bits;
  1030.     }
  1031.     if (fr_ps->header->dyn_cross_on == 1)
  1032. for (i = 0; i < 12; i++)
  1033. {
  1034.     bbal -= dyn_bbal (fr_ps->config, fr_ps->header->center, fr_ps->header->dyn_cross[i], i);
  1035.     if (fr_ps->header->surround == 3)
  1036. bbal -= dyn_bbal_2ndst (fr_ps->header->dyn_second_stereo[i], i);
  1037. }
  1038.     if (fr_ps->header->ext_bit_stream_present == 0)
  1039.         bancmc += 35;      /* mc_header + crc + tc_sbgr_select+ dyn_cross_on + 
  1040.     mc_prediction_on  01/05/94,  SR  new! 05/04/94,  SR*/
  1041.     else
  1042.     {
  1043.         bancmc += 43;     
  1044. bancext = 40;
  1045.     }
  1046.     /* 960627 FdB TCA bits dependent on configuration */
  1047.     if (fr_ps->config == 320)
  1048. tca_bits = 3;
  1049.     else if (fr_ps->config == 310)
  1050. tca_bits = 3;
  1051.     else if (fr_ps->config == 220)
  1052. tca_bits = 2;
  1053.     else if (fr_ps->config == 300 || fr_ps->config == 302 || fr_ps->config == 210)
  1054. tca_bits = 2;
  1055.     else
  1056. tca_bits = 0;
  1057.     if (fr_ps->header->tc_sbgr_select == 0)
  1058.         bancmc += 12 * tca_bits;
  1059.     else
  1060.         bancmc += tca_bits;
  1061.     if (fr_ps->header->dyn_cross_on == 1)
  1062.     {
  1063. /* 960627 FdB DynX dependent on configuration */
  1064. if (fr_ps->config == 320)
  1065.     dynx_bits = 4;
  1066. else if (fr_ps->config == 310 || fr_ps->config == 220)
  1067.     dynx_bits = 3;
  1068. else if (fr_ps->config == 300 || fr_ps->config == 302 || fr_ps->config == 210)
  1069.     dynx_bits = 1;
  1070. else
  1071.     dynx_bits = 0;
  1072. bancmc += 12 * dynx_bits + 1;
  1073. if (fr_ps->header->surround == 3)
  1074.     bancmc += 12;      /* now with dyn_second_stereo,  17/02/95,  SR*/
  1075.     }
  1076.     if (fr_ps->header->mc_prediction_on == 1)
  1077.     {
  1078. /* for (i = 0; i < 8; i++)
  1079. {
  1080.     bancmc += 1;
  1081.     if (fr_ps->header->mc_pred[i] == 1)
  1082.         bancmc += n_pred_coef[fr_ps->header->dyn_cross[i]] * 2;
  1083. }
  1084. */
  1085. /* mc_pred, predsi, delay_comp, pred_coef */
  1086. /* bancmc += 8 * (3 + 6 * (3 + 3 * 8)); */
  1087. for (i = 0; i < 8; i++)
  1088. {
  1089.     bancmc += 3;
  1090.     bancmc += n_pred_coef[fr_ps->header->dyn_cross[i]] * 27;
  1091. }
  1092.     }
  1093. #ifdef Augmentation_7ch
  1094.     if (stereoaug == 2)
  1095.     {
  1096. if (fr_ps->header->aug_mtx_proc == 0)
  1097.     aug_tca_bits = 3;
  1098. else if (fr_ps->header->aug_mtx_proc == 1)
  1099.     aug_tca_bits = 2;
  1100. else
  1101.     aug_tca_bits = 0;
  1102.         bancmc += 12 * aug_tca_bits;
  1103.         if (fr_ps->header->aug_dyn_cross_on == 1)
  1104. {
  1105.     bancmc += 12 * 5;
  1106.     for (i = 0; i < 12; i++)
  1107. bbal -= dyn_bbal_aug (fr_ps->header->aug_dyn_cross[i], i);
  1108. }
  1109.     }
  1110. #endif
  1111.     for (i = 0; i < SBLIMIT; i++) 
  1112. /*       for (k = 0; k < (stereo+stereomc+2); k++) 960814 FdB bug for some configurations */
  1113.         for (k = 0; k < 12; k++) 
  1114.         {
  1115.     mnr[k][i] = snr[0] - perm_smr[k][i];
  1116.     /* mask-to-noise-level = signal-to-noise-level - minimum-masking- */
  1117.     /* threshold */
  1118.   
  1119.     bit_alloc[k][i] = 0;
  1120.     used[k][i] = 0;
  1121.         }
  1122.    
  1123.     for (i = 0; i < sblimit_ml; i++) 
  1124. for (k = 7; k < 7 + n_ml_ch; k++) 
  1125. {
  1126.     mnr[k][i]=snr[0]-perm_smr[k][i];
  1127.     /* mask-to-noise-level = signal-to-noise-level - minimum-masking-*/
  1128.     /* threshold*/
  1129.     
  1130.     bit_alloc[k][i] = 0;
  1131.     used[k][i] = 0;
  1132. }
  1133.     /* dyamic crosstalk, lock sbgr which are use for dyncr. */
  1134.     if (fr_ps->header->dyn_cross_on == 1)
  1135.     {
  1136. for (sbgr = 0; sbgr < SBGRS; sbgr++)
  1137. {
  1138.     for (sb = ((sbgr == 0)?0:sb_groups[sbgr-1]+1); sb <= sb_groups[sbgr]; sb++)
  1139.     {
  1140. /* 960627 FdB DynX dependent on configuration */
  1141. if (fr_ps->config == 320)
  1142. {
  1143.     /* 3/2 */
  1144.     switch(fr_ps->header->dyn_cross[sbgr])
  1145.     {
  1146. case 0: 
  1147. break;
  1148. case 1: case 8: case 10: 
  1149. used[T4[sbgr]][sb] = 2;
  1150. break;
  1151. case 2: case 9: 
  1152. used[T3[sbgr]][sb] = 2;
  1153. break; 
  1154. case 3: 
  1155. used[T2[sbgr]][sb] = 2;
  1156. break;
  1157. case 4: case 11: case 12: case 14: 
  1158. used[T3[sbgr]][sb] = 2; 
  1159. used[T4[sbgr]][sb] = 2;
  1160. break;
  1161. case 5: case 13:
  1162. used[T2[sbgr]][sb] = 2; 
  1163. used[T4[sbgr]][sb] = 2;
  1164. break;
  1165. case 6: 
  1166. used[T2[sbgr]][sb] = 2; 
  1167. used[T3[sbgr]][sb] = 2;
  1168. break;
  1169. case 7: 
  1170. used[T2[sbgr]][sb] = 2; 
  1171. used[T4[sbgr]][sb] = 2; 
  1172. used[T3[sbgr]][sb] = 2;
  1173. break;
  1174.     }
  1175. }
  1176. else if (fr_ps->config == 310 || fr_ps->config == 220)
  1177. {
  1178.     /* 3/1 and 2/2 */
  1179.     switch(fr_ps->header->dyn_cross[sbgr])
  1180.     {
  1181. case 0: 
  1182. break;
  1183. case 1: case 4: 
  1184. used[T3[sbgr]][sb] = 2;
  1185. break;
  1186. case 2: 
  1187. used[T2[sbgr]][sb] = 2;
  1188. break; 
  1189. case 3: 
  1190. used[T2[sbgr]][sb] = 2;
  1191. used[T3[sbgr]][sb] = 2;
  1192. break;
  1193.     }
  1194. }
  1195. else if (fr_ps->config == 300 || fr_ps->config == 302 || fr_ps->config == 210)
  1196. {
  1197.     /* 3/0 (+2/0) and 2/1 */
  1198.     switch(fr_ps->header->dyn_cross[sbgr])
  1199.     {
  1200. case 0: 
  1201. break;
  1202. case 1: 
  1203. used[T2[sbgr]][sb] = 2;
  1204. break;
  1205.     }
  1206.     if (fr_ps->header->dyn_second_stereo[sbgr])
  1207. used[T4[sbgr]][sb] = 2;
  1208. }
  1209. else if (fr_ps->config == 202)
  1210. {
  1211.     if (fr_ps->header->dyn_second_stereo[sbgr])
  1212. used[T3[sbgr]][sb] = 2;
  1213. }
  1214. else if (fr_ps->config == 102)
  1215. {
  1216.     if (fr_ps->header->dyn_second_stereo[sbgr])
  1217. used[T2[sbgr]][sb] = 2;
  1218. }
  1219.     } /* for(sb.. */
  1220. } /* for(sbgr.. */
  1221.     } /* if(fr_ps.. */ 
  1222. #ifdef Augmentation_7ch
  1223.     if (fr_ps->header->aug_dyn_cross_on == 1)
  1224.     {
  1225. for (sbgr = 0; sbgr < SBGRS; sbgr++)
  1226. {
  1227.     for (sb = ((sbgr == 0)?0:sb_groups[sbgr-1]+1); sb <= sb_groups[sbgr]; sb++)
  1228.     {
  1229. /* 5/2 */
  1230. switch (fr_ps->header->aug_dyn_cross[sbgr])
  1231. {
  1232.     case 0: 
  1233.     break;
  1234.     case 1:
  1235.     case 2:
  1236.     case 3:
  1237.     case 4:
  1238.     used[T6[sbgr]][sb] = 2;
  1239.     break;
  1240.     case 5:
  1241.     case 10:
  1242.     case 14:
  1243.     used[T5[sbgr]][sb] = 2;
  1244.     break;
  1245.     case 6: 
  1246.     case 7: 
  1247.     case 8: 
  1248.     case 9: 
  1249.     case 11: 
  1250.     case 12: 
  1251.     case 13: 
  1252.     case 15: 
  1253.     case 16: 
  1254.     case 17: 
  1255.     case 18: 
  1256.     used[T5[sbgr]][sb] = 2;
  1257.     used[T6[sbgr]][sb] = 2;
  1258.     break;
  1259. }
  1260.     } /* for(sb.. */
  1261. } /* for(sbgr.. */
  1262.     } /* if(fr_ps.. */ 
  1263. #endif
  1264. /*
  1265.     if (fr_ps->header->mc_prediction_on == 1)
  1266.     {
  1267.         for (i = 0; i < 8; i++) 
  1268.         {
  1269.     if (fr_ps->header->mc_pred[i] == 1)
  1270.     {
  1271.         for (j = 0; j < n_pred_coef[fr_ps->header->dyn_cross[i]]; j++)
  1272.         {
  1273.     if (fr_ps->header->predsi[i][j] != 0)
  1274.     {
  1275.         pred += 3;
  1276.         for (pci = 0; pci < fr_ps->header->predsi[i][j]; pci++)
  1277.     pred += 8;
  1278.     }
  1279.         }
  1280.     }
  1281.         }
  1282.     }  
  1283. */
  1284.     adb_hlp = *adb;
  1285.     if (*aiff != 1)
  1286.     {
  1287. *adb -= bbal + berr + banc;
  1288.     }
  1289.     else 
  1290.     {
  1291.      if (fr_ps->header->ext_bit_stream_present == 0)    
  1292.     *adb -= bbal + berr + banc + bancmc + pred +
  1293.          (fr_ps->header->n_ad_bytes * 8);
  1294. else
  1295. {
  1296.     *adb -= bbal + berr + banc + bancmc + pred +
  1297.         bancext + (fr_ps->header->n_ad_bytes * 8);
  1298.     
  1299.             for(i = 0; i < jsbound; ++i)
  1300. bbal_mpg1 += stereo * (*alloc)[i][0].bits;
  1301.     for(i = jsbound; i < sblimit; ++i)
  1302. bbal_mpg1 += (*alloc)[i][0].bits;
  1303.     adb_mpg1 -= bbal_mpg1 + berr + banc + bancmc +
  1304. (fr_ps->header->n_ad_bytes * 8);
  1305. }   
  1306.     }     
  1307.     ad = *adb;
  1308.     bspl = bscf = bsel = bspl_mpg1 = bscf_mpg1 = bsel_mpg1 = 0;
  1309.     do
  1310.     {
  1311.         /* locate the subband with minimum SMR */
  1312. small = 999999.0;
  1313. min_sb = -1;
  1314. min_ch = -1;
  1315. for (i = 0; i < SBLIMIT; i++)   /* searching for the sb min SMR */
  1316. {
  1317.     l = sbgrp[i];
  1318.     for (j = 0; j < (stereo+stereomc+stereoaug); ++j)
  1319. if ((j < stereo && i < sblimit) ||
  1320.     (j >= stereo && i < sblimit_mc))
  1321. {
  1322.     k = transmission_channel (fr_ps, l, j);
  1323.     
  1324.     if ((i >= 12) && (fr_ps->header->center == 3) && (k == 2))
  1325. used[k][i] = 2;
  1326.     
  1327.     if ((used[k][i] != 2) && (small > mnr[k][i])) 
  1328.     {
  1329.  small = mnr[k][i];
  1330.  min_sb = i;
  1331.  min_ch = k;
  1332.  ll = l;     /*sb-group*/
  1333.     }
  1334. }
  1335. }
  1336. /******************************************************************/
  1337. /* Multilingual JMZ 08/03/1995 */
  1338. if (n_ml_ch > 0)
  1339. {
  1340.     for (i = 0; i < sblimit_ml; i++)
  1341. for (j = 7; j < (n_ml_ch+7); ++j)
  1342. {
  1343.     k = j;
  1344.     if ((used[k][i] != 2) && (small > mnr[k][i])) 
  1345.     {
  1346. small = mnr[k][i];
  1347. min_sb = i;
  1348. min_ch = k;
  1349. ll = l;     
  1350.     }
  1351. }
  1352. }
  1353. /* Multilingual JMZ 08/03/1995 */
  1354. /******************************************************************/
  1355. if (min_sb > -1)
  1356. {   /* there was something to find */
  1357.     /* find increase in bit allocation in subband [min] */
  1358.     if (min_ch < stereo) 
  1359.     {
  1360. increment = 12 * ((*alloc)[min_sb][bit_alloc[min_ch][min_sb]+1].group * 
  1361.   (*alloc)[min_sb][bit_alloc[min_ch][min_sb]+1].bits);
  1362. /* how many bits are needed */
  1363. if (used[min_ch][min_sb])
  1364.     increment -= 12 * ((*alloc)[min_sb][bit_alloc[min_ch][min_sb]].group * 
  1365.        (*alloc)[min_sb][bit_alloc[min_ch][min_sb]].bits);
  1366.     } 
  1367.     else if (min_ch < 7 || n_ml_ch == 0) /* Multichannel */ 
  1368.     {
  1369. increment = 12 * ((*alloc_mc)[min_sb][bit_alloc[min_ch][min_sb]+1].group * 
  1370.   (*alloc_mc)[min_sb][bit_alloc[min_ch][min_sb]+1].bits);
  1371. /* how many bits are needed */
  1372. if (used[min_ch][min_sb])
  1373.     increment -= 12 * ((*alloc_mc)[min_sb][bit_alloc[min_ch][min_sb]].group * 
  1374.        (*alloc_mc)[min_sb][bit_alloc[min_ch][min_sb]].bits);
  1375.     } 
  1376.     else /* MultiLingual 7/8/95 WtK */ 
  1377.     {
  1378. increment = ((*alloc_ml)[min_sb][bit_alloc[min_ch][min_sb]+1].group * 
  1379.      (*alloc_ml)[min_sb][bit_alloc[min_ch][min_sb]+1].bits);
  1380. if (used[min_ch][min_sb])
  1381.     increment -= ((*alloc_ml)[min_sb][bit_alloc[min_ch][min_sb]].group * 
  1382.   (*alloc_ml)[min_sb][bit_alloc[min_ch][min_sb]].bits);
  1383. if (fr_ps->header->multiling_fs == 1) increment *=  6;
  1384. else                                  increment *= 12;
  1385.     }
  1386.     
  1387.     /* scale factor bits required for subband [min] */
  1388.     /* above js bound, need both chans */
  1389.     
  1390.     if ((fr_ps->actual_mode == MPG_MD_JOINT_STEREO) && 
  1391. ((min_ch == 0) || (min_ch == 1)))
  1392. oth_ch = 1 - min_ch;       
  1393.     if (used[min_ch][min_sb])
  1394. scale = seli = 0;
  1395.     else 
  1396.     {   /* this channel had no bits or scfs before */
  1397. seli = 2;
  1398. scale = 6 * sfsPerScfsi[scfsi[min_ch][min_sb]];
  1399.     
  1400. if ((fr_ps->actual_mode == MPG_MD_JOINT_STEREO) && (min_sb >= jsbound) &&
  1401.       ((min_ch == 0) || (min_ch == 1))) 
  1402. {
  1403.     /* each new js sb has L+R scfsis */
  1404.     seli += 2;
  1405.     scale += 6 * sfsPerScfsi[scfsi[oth_ch][min_sb]];
  1406. }
  1407. if (fr_ps->header->dyn_cross_on == 1)
  1408. {
  1409.     dyn_bal (scfsi, ll, fr_ps, min_ch, min_sb, &seli, &scale);
  1410.     /* 960819 FdB joint stereo in combination with DynX added */
  1411.     if ((fr_ps->actual_mode == MPG_MD_JOINT_STEREO) && (min_sb >= jsbound) &&
  1412. (stereo == 2) && ((min_ch == 0) || (min_ch == 1))) 
  1413. dyn_bal (scfsi, ll, fr_ps, oth_ch, min_sb, &seli, &scale);
  1414. }
  1415. #ifdef Augmentation_7ch
  1416. if (fr_ps->header->aug_dyn_cross_on == 1)
  1417. {
  1418.     dyn_bal_aug (scfsi, ll, fr_ps, min_ch, min_sb, &seli, &scale);
  1419.     /* 960819 FdB joint stereo in combination with DynX added */
  1420.     if ((fr_ps->actual_mode == MPG_MD_JOINT_STEREO) && (min_sb >= jsbound) &&
  1421. (stereo == 2) && ((min_ch == 0) || (min_ch == 1))) 
  1422. dyn_bal_aug (scfsi, ll, fr_ps, oth_ch, min_sb, &seli, &scale);
  1423. }
  1424. #endif
  1425.     }
  1426.     
  1427.     /* check to see enough bits were available for */
  1428.     /* increasing resolution in the minimum band */
  1429.             if (fr_ps->header->ext_bit_stream_present == 1) 
  1430.             {
  1431. if ((min_ch == 0) || (min_ch == 1 && stereo == 2))
  1432. {
  1433.     if (adb_mpg1 > bspl_mpg1 + bscf_mpg1 + bsel_mpg1 + seli + scale + increment) 
  1434.     {
  1435. bspl_mpg1 += increment;  /* bits for subband sample */
  1436. bscf_mpg1 += scale;      /* bits for scale factor */
  1437. bsel_mpg1 += seli;       /* bits for scfsi code */
  1438.     }
  1439.     else
  1440. used[min_ch][min_sb] = 2;  /* can't increase this alloc */
  1441. }
  1442.             }
  1443.     if ((ad > bspl + bscf + bsel + seli + scale + increment) && (used[min_ch][min_sb] != 2)) 
  1444.     {
  1445. ba = ++bit_alloc[min_ch][min_sb]; /* next up alloc */
  1446. bspl += increment;  /* bits for subband sample */
  1447. bscf += scale;      /* bits for scale factor */
  1448. bsel += seli;       /* bits for scfsi code */
  1449. used[min_ch][min_sb] = 1; /* subband has bits */
  1450.       
  1451. if (min_ch < stereo) 
  1452. {
  1453.     mnr[min_ch][min_sb] = -perm_smr[min_ch][min_sb] +
  1454.   snr[(*alloc)[min_sb][ba].quant+1];
  1455.     /* Check if subband has been fully allocated max bits */
  1456.     if (ba >= (1<<(*alloc)[min_sb][0].bits) - 1)
  1457. used[min_ch][min_sb] = 2;
  1458. }
  1459. else if (min_ch < 7 || n_ml_ch == 0)  /* Multichannel */
  1460. {
  1461.     mnr[min_ch][min_sb] = -perm_smr[min_ch][min_sb] +
  1462.   snr[(*alloc_mc)[min_sb][ba].quant+1];
  1463.     /* Check if subband has been fully allocated max bits */
  1464.     if (ba >= (1<<(*alloc_mc)[min_sb][0].bits) - 1)
  1465. used[min_ch][min_sb] = 2;
  1466. }
  1467. else /* MultiLingual 7/8/95 WtK */ 
  1468. {
  1469.     mnr[min_ch][min_sb] = -perm_smr[min_ch][min_sb] +
  1470.     snr[(*alloc_ml)[min_sb][ba].quant+1];
  1471.     if (ba >= (1<<(*alloc_ml)[min_sb][0].bits) - 1)
  1472. used[min_ch][min_sb] = 2;
  1473. }
  1474.     }
  1475.     else
  1476. used[min_ch][min_sb] = 2;  /* can't increase this alloc */
  1477.     if (verbosity >= 3)
  1478.     {
  1479. if (fr_ps->header->ext_bit_stream_present == 1)
  1480.     printf("ch: %02d sb: %02d used: %d adb: %05d used: %05d ad: %05d used: %05dn",
  1481.     min_ch, min_sb, used[min_ch][min_sb],
  1482.     adb_mpg1, bspl_mpg1 + bscf_mpg1 + bsel_mpg1,
  1483.     ad, bspl + bscf + bsel);
  1484. else
  1485.     printf("ch: %02d sb: %02d used: %d ad: %05d used: %05dn",
  1486.     min_ch, min_sb, used[min_ch][min_sb],
  1487.     ad, bspl + bscf + bsel);
  1488.     }
  1489.     if ((fr_ps->actual_mode == MPG_MD_JOINT_STEREO) && (min_sb >= jsbound) && (stereo == 2) &&
  1490.     ((min_ch == 0) || (min_ch == 1))) 
  1491.     {
  1492. /* above jsbound, alloc applies L+R */
  1493. ba = bit_alloc[oth_ch][min_sb] = bit_alloc[min_ch][min_sb];
  1494. used[oth_ch][min_sb] = used[min_ch][min_sb];
  1495. mnr[oth_ch][min_sb] = -perm_smr[oth_ch][min_sb] +
  1496. snr[(*alloc)[min_sb][ba].quant+1];
  1497.     }
  1498.     if (fr_ps->header->dyn_cross_on == 1)
  1499.     {
  1500. choose_dyn (fr_ps, min_ch, min_sb, ll, bit_alloc);
  1501. /* 960819 FdB joint stereo in combination with DynX added */
  1502. if ((fr_ps->actual_mode == MPG_MD_JOINT_STEREO) && (min_sb >= jsbound) &&
  1503.     (stereo == 2) && ((min_ch == 0) || (min_ch == 1))) 
  1504.     choose_dyn (fr_ps, oth_ch, min_sb, ll, bit_alloc);
  1505.     }
  1506. #ifdef Augmentation_7ch
  1507.     if (fr_ps->header->aug_dyn_cross_on == 1)
  1508.     {
  1509. choose_dyn_aug (fr_ps, min_ch, min_sb, ll, bit_alloc);
  1510. /* 960819 FdB joint stereo in combination with DynX added */
  1511. if ((fr_ps->actual_mode == MPG_MD_JOINT_STEREO) && (min_sb >= jsbound) &&
  1512.     (stereo == 2) && ((min_ch == 0) || (min_ch == 1))) 
  1513.     choose_dyn_aug (fr_ps, oth_ch, min_sb, ll, bit_alloc);
  1514.     }
  1515. #endif
  1516. }   /* end of if-loop if min_sb >-1 */
  1517.     } while (min_sb > -1);   /* until could find no channel */
  1518.     /* Calculate the number of bits left */
  1519.     ad -= bspl+bscf+bsel; 
  1520.     *adb = ad;
  1521.     for (k = 0; k < stereo; k++)
  1522. for (i = sblimit; i < SBLIMIT; i++)
  1523.     bit_alloc[k][i] = 0;
  1524.     if (n_ml_ch > 0)
  1525.     {
  1526. for (k = stereo; k < 7; k++)
  1527.     for (i = sblimit_mc; i < SBLIMIT; i++)
  1528. bit_alloc[k][i] = 0;
  1529. for (i = sblimit_ml; i < SBLIMIT; i++)
  1530.     for (k = 7; k < 14; k++)
  1531. bit_alloc[k][i] = 0;
  1532.     }
  1533.     else
  1534. for (k = stereo; k < 12; k++)
  1535.     for (i = sblimit_mc; i < SBLIMIT; i++)
  1536. bit_alloc[k][i] = 0;
  1537.  
  1538.     /* not used !?! perhaps later!! 8/21/93, SR */
  1539.     noisy_sbs = 0;
  1540.     small = mnr[0][0];      /* calc worst noise in case */
  1541.     for (k = 0; k < (stereo+stereomc+stereoaug); k++)
  1542.     {
  1543.         for (i = 0; i < sblimit; i++) 
  1544. {
  1545.             if (small > mnr[k][i])
  1546. small = mnr[k][i];
  1547.     if (mnr[k][i] < fr_ps->mnr_min)
  1548. noisy_sbs++; /* noise is not masked */
  1549.         }
  1550.     }
  1551.     if (n_ml_ch > 0)
  1552.     {
  1553. for (k = 7; k < (7+n_ml_ch); k++)
  1554. {
  1555.     for (i = 0; i < sblimit_ml; i++) 
  1556.     {
  1557. if (small > mnr[k][i])
  1558.     small = mnr[k][i];
  1559. if (mnr[k][i] < fr_ps->mnr_min)
  1560.     noisy_sbs++; /* noise is not masked */
  1561.     }
  1562. }
  1563.     }
  1564.     return noisy_sbs;
  1565. }
  1566.  
  1567. /************************************************************************
  1568. /*
  1569. /* I_subband_quantization  (Layer I)
  1570. /* II_subband_quantization (Layer II)
  1571. /* II_subband_quantisationmc (MPEG2)  SR
  1572. /* PURPOSE:Quantizes subband samples to appropriate number of bits
  1573. /*
  1574. /* SEMANTICS:  Subband samples are divided by their scalefactors, which
  1575. /* makes the quantization more efficient. The scaled samples are
  1576. /* quantized by the function a*x+b, where a and b are functions of
  1577. /* the number of quantization levels. The result is then truncated
  1578. /* to the appropriate number of bits and the MSB is inverted.
  1579. /*
  1580. /* Note that for fractional 2's complement, inverting the MSB for a
  1581. /* negative number x is equivalent to adding 1 to it.
  1582. /*
  1583. /************************************************************************/
  1584.  
  1585. static double I_a[15] = {
  1586.   0.750000000, 0.875000000, 0.937500000,
  1587.   0.968750000, 0.984375000, 0.992187500, 0.996093750, 0.998046875,
  1588.   0.999023438, 0.999511719, 0.999755859, 0.999877930, 0.999938965,
  1589.   0.999969482, 0.999984741 };
  1590.  
  1591. static double I_b[15] = {
  1592.   -0.250000000, -0.125000000, -0.062500000,
  1593.   -0.031250000, -0.015625000, -0.007812500, -0.003906250, -0.001953125,
  1594.   -0.000976563, -0.000488281, -0.000244141, -0.000122070, -0.000061035,
  1595.   -0.000030518, -0.000015259 };
  1596.  
  1597. static double II_a[17] = {
  1598.   0.750000000, 0.625000000, 0.875000000, 0.562500000, 0.937500000,
  1599.   0.968750000, 0.984375000, 0.992187500, 0.996093750, 0.998046875,
  1600.   0.999023438, 0.999511719, 0.999755859, 0.999877930, 0.999938965,
  1601.   0.999969482, 0.999984741 };
  1602.  
  1603. static double II_b[17] = {
  1604.   -0.250000000, -0.375000000, -0.125000000, -0.437500000, -0.062500000,
  1605.   -0.031250000, -0.015625000, -0.007812500, -0.003906250, -0.001953125,
  1606.   -0.000976563, -0.000488281, -0.000244141, -0.000122070, -0.000061035,
  1607.   -0.000030518, -0.000015259 };
  1608.  
  1609. void I_subband_quantization (unsigned int   (*scalar)[3][32],
  1610.      double     (*sb_samples)[3][12][32],
  1611.      unsigned int   (*j_scale)[3][32],
  1612.      double     (*j_samps)[3][12][32],
  1613.      unsigned int   (*bit_alloc)[32],
  1614.      unsigned int   (*sbband)[3][12][32],
  1615.      frame_params   *fr_ps)
  1616. {
  1617.    int i, j, k, n, sig;
  1618.    int stereo  = fr_ps->stereo;
  1619.    int sblimit = fr_ps->sblimit;
  1620.    int jsbound = fr_ps->jsbound;
  1621.    double d;
  1622.    for (j=0;j<12;j++) for (i=0;i<SBLIMIT;i++)
  1623.      for (k=0;k<((i<jsbound)?stereo:1);k++)
  1624.        if (bit_alloc[k][i]) {
  1625.          /* for joint stereo mode, have to construct a single subband stream
  1626.             for the js channels.  At present, we calculate a set of mono
  1627.             subband samples and pass them through the scaling system to
  1628.             generate an alternate normalised sample stream.
  1629.  
  1630.             Could normalise both streams (divide by their scfs), then average
  1631.             them.  In bad conditions, this could give rise to spurious
  1632.             cancellations.  Instead, we could just select the sb stream from
  1633.             the larger channel (higher scf), in which case _that_ channel
  1634.             would be 'properly' reconstructed, and the mate would just be a
  1635.             scaled version.  Spec recommends averaging the two (unnormalised)
  1636.             subband channels, then normalising this new signal without
  1637.             actually sending this scale factor... This means looking ahead.
  1638.          */
  1639.          if(stereo == 2 && i>=jsbound)
  1640.            /* use the joint data passed in */
  1641.   d = j_samps[0][0][j][i] / multiple[j_scale[0][0][i]];
  1642.          else
  1643.            d = sb_samples[k][0][j][i] / multiple[scalar[k][0][i]];
  1644.          /* scale and quantize floating point sample */
  1645.          n = bit_alloc[k][i];
  1646.          d = d * I_a[n-1] + I_b[n-1];
  1647.          /* extract MSB N-1 bits from the floating point sample */
  1648.          if (d >= 0) sig = 1;
  1649.          else { sig = 0; d += 1.0; }
  1650.          sbband[k][0][j][i] = (unsigned int) (d * (double) (1L<<n));
  1651.          /* tag the inverted sign bit to sbband at position N */
  1652.          if (sig) sbband[k][0][j][i] |= 1<<n;
  1653.        }
  1654. }
  1655.  
  1656. /***************************** Layer II  ********************************/
  1657.  
  1658. void II_subband_quantization (unsigned int (*scalar)[3][32], double (*sb_samples)[3][12][32],
  1659.       unsigned int (*j_scale)[3][32], double (*j_samps)[3][12][32],
  1660.       unsigned int (*bit_alloc)[32], unsigned int (*sbband)[3][12][32],
  1661.       frame_params *fr_ps)
  1662. {
  1663.    int i, j, k, s, n, qnt, sig, l, m;
  1664.    int stereo = fr_ps->stereo;
  1665.    int stereomc = fr_ps->stereomc;
  1666.    int sblimit = fr_ps->sblimit;
  1667.    int jsbound = fr_ps->jsbound;
  1668.    unsigned int stps;
  1669.    double d;
  1670.    al_table *alloc = fr_ps->alloc;
  1671.    for (s=0;s<3;s++)
  1672.      for (j=0;j<12;j++)
  1673.        for (i=0;i<sblimit;i++)
  1674.          for (k=0;k<((i<jsbound)?stereo:1);k++)
  1675.  {
  1676.      if (bit_alloc[k][i])
  1677.      {
  1678.                /* scale and quantize floating point sample */
  1679.                if(stereo == 2 && i>=jsbound)       /* use j-stereo samples */
  1680.          d = j_samps[0][s][j][i] / multiple[j_scale[0][s][i]];
  1681.                else
  1682.                  d = sb_samples[k][s][j][i] / multiple[scalar[k][s][i]];
  1683.        if (mod(d) >= 1.0) /* > changed to >=, 1992-11-06 shn */
  1684.        {
  1685.           printf("In compatible part, not scaled properly, %d %d %d %dn",k,s,j,i);
  1686. printf("Value %1.10fn",sb_samples[k][s][j][i]);
  1687. printf("Channel %dn", k);
  1688.        }
  1689.        qnt = (*alloc)[i][bit_alloc[k][i]].quant;
  1690.                d = d * II_a[qnt] + II_b[qnt];
  1691.                /* extract MSB N-1 bits from the floating point sample */
  1692.                if (d >= 0) sig = 1;
  1693.                else { sig = 0; d += 1.0; }
  1694.                n = 0;
  1695. #ifndef MS_DOS
  1696.                stps = (*alloc)[i][bit_alloc[k][i]].steps;
  1697.                while ((1L<<n) < stps) n++;
  1698. #else
  1699.                while  ( ( (unsigned long)(1L<<(long)n) <
  1700.               ( (unsigned long) ((*alloc)[i][bit_alloc[k][i]].steps)
  1701.                           & 0xffff)) && ( n <16)) n++;
  1702. #endif
  1703.                n--;
  1704.                sbband[k][s][j][i] = (unsigned int) (d * (double) (1L<<n));
  1705.                /* tag the inverted sign bit to sbband at position N */
  1706.                /* The bit inversion is a must for grouping with 3,5,9 steps
  1707.                 so it is done for all subbands */
  1708.                if (sig) sbband[k][s][j][i] |= 1<<n;
  1709.      } 
  1710.           }
  1711.            for (s=0;s<3;s++)
  1712.              for (j=sblimit;j<SBLIMIT;j++)
  1713.                for (i=0;i<12;i++) 
  1714.          for (m=0;m<stereo;m++)
  1715.  sbband[m][s][i][j] = 0;
  1716. }
  1717. void II_subband_quantization_mc (unsigned int (*scalar)[3][32], double (*sb_samples)[3][12][32],
  1718.  unsigned int (*j_scale)[3][32], double (*j_samps)[3][12][32],
  1719.  unsigned int (*bit_alloc)[32], unsigned int (*sbband)[3][12][32],
  1720.  frame_params *fr_ps)
  1721. {
  1722.     int i, j, k, s, n, qnt, sig, m, l, ll;
  1723.     layer *info  = fr_ps->header;
  1724.     int center   = info->center;
  1725.     int surround = info->surround;
  1726.     int stereo = fr_ps->stereo;
  1727.     int stereomc = fr_ps->stereomc;
  1728.     int sblimit  = fr_ps->sblimit_mc;
  1729.     unsigned int stps;
  1730.     double d;
  1731.     al_table *alloc = fr_ps->alloc_mc;
  1732.     for (s = 0; s < 3; s++)
  1733.         for (j = 0; j < 12; j++)
  1734.     for (i = 0; i < sblimit; i++)
  1735.     {
  1736. ll = sbgrp[i];
  1737.                 for (m = stereo; m < stereo + stereomc; ++m)
  1738.         {
  1739.     k = transmission_channel (fr_ps, ll, m);
  1740.     if (fr_ps->header->dyn_cross_on == 1)
  1741.     {
  1742. /* 960627 FdB DynX dependent on configuration */
  1743. if (dyn_ch (fr_ps, ll, m) == 0)
  1744.     bit_alloc[k][i] = 0;
  1745.     }
  1746.     if (bit_alloc[k][i])
  1747.     {
  1748. d = sb_samples[k][s][j][i] / multiple[scalar[k][s][i]];
  1749. if (mod (d) >= 1.0) /* > changed to >=, 1992-11-06 shn */
  1750. {
  1751.     printf ("In MC, not scaled properly, %d %d %d %dn", k, s, j, i);
  1752.     printf ("Value %1.10fn", sb_samples[k][s][j][i]);
  1753. }
  1754. qnt = (*alloc)[i][bit_alloc[k][i]].quant;
  1755. d = d * II_a[qnt] + II_b[qnt];
  1756. /* extract MSB N-1 bits from the floating point sample */
  1757. if (d >= 0) sig = 1;
  1758. else { sig = 0; d += 1.0; }
  1759. n = 0;
  1760. #ifndef MS_DOS
  1761. stps = (*alloc)[i][bit_alloc[k][i]].steps;
  1762. while ((1L<<n) < stps) n++;
  1763. #else
  1764. while  ( ( (unsigned long)(1L<<(long)n) <
  1765.      ((unsigned long) ((*alloc)[i][bit_alloc[k][i]].steps)
  1766.       & 0xffff
  1767.      )
  1768.   ) && ( n <16)
  1769. ) n++;
  1770. #endif
  1771. n--;
  1772. sbband[k][s][j][i] = (unsigned int) (d * (double) (1L<<n));
  1773. /* tag the inverted sign bit to sbband at position N */
  1774. /* The bit inversion is a must for grouping with 3,5,9 steps
  1775.    so it is done for all subbands */
  1776. if (sig)
  1777.     sbband[k][s][j][i] |= 1 << n;
  1778.     }
  1779.     else
  1780. sbband[k][s][j][i] = 0;
  1781. }
  1782.     }
  1783.     for (s = 0; s < 3; s++)
  1784. for (j = sblimit; j < SBLIMIT; j++)
  1785.     for (i = 0; i < 12; i++)
  1786. for (k = stereo; k < 7; k++)
  1787.     sbband[k][s][i][j] = 0;
  1788. }
  1789. #ifdef Augmentation_7ch
  1790. void II_subband_quantization_aug (unsigned int (*scalar)[3][32], double (*sb_samples)[3][12][32],
  1791.   unsigned int (*j_scale)[3][32], double (*j_samps)[3][12][32],
  1792.   unsigned int (*bit_alloc)[32], unsigned int (*sbband)[3][12][32],
  1793.   frame_params *fr_ps)
  1794. {
  1795.     int i, j, k, s, n, qnt, sig, m, l, ll;
  1796.     layer *info  = fr_ps->header;
  1797.     int center   = info->center;
  1798.     int surround = info->surround;
  1799.     int stereo = fr_ps->stereo;
  1800.     int stereomc = fr_ps->stereomc;
  1801.     int sblimit  = fr_ps->sblimit_mc;
  1802.     unsigned int stps;
  1803.     double d;
  1804.     al_table *alloc = fr_ps->alloc_mc;
  1805.     for (s = 0; s < 3; s++)
  1806.         for (j = 0; j < 12; j++)
  1807.     for (i = 0; i < sblimit; i++)
  1808.     {
  1809. ll = sbgrp[i];
  1810.                 for (m = 5; m < 7; ++m)
  1811.         {
  1812.     k = transmission_channel (fr_ps, ll, m);
  1813.     if (fr_ps->header->aug_dyn_cross_on == 1)
  1814.     {
  1815. /* 960627 FdB DynX dependent on configuration */
  1816. if (dyn_ch (fr_ps, ll, m) == 0)
  1817.     bit_alloc[k][i] = 0;
  1818.     }
  1819.     if (bit_alloc[k][i])
  1820.     {
  1821. d = sb_samples[k][s][j][i] / multiple[scalar[k][s][i]];
  1822. if (mod (d) >= 1.0) /* > changed to >=, 1992-11-06 shn */
  1823. {
  1824.     printf ("In MC, not scaled properly, %d %d %d %dn", k, s, j, i);
  1825.     printf ("Value %1.10fn", sb_samples[k][s][j][i]);
  1826. }
  1827. qnt = (*alloc)[i][bit_alloc[k][i]].quant;
  1828. d = d * II_a[qnt] + II_b[qnt];
  1829. /* extract MSB N-1 bits from the floating point sample */
  1830. if (d >= 0) sig = 1;
  1831. else { sig = 0; d += 1.0; }
  1832. n = 0;
  1833. #ifndef MS_DOS
  1834. stps = (*alloc)[i][bit_alloc[k][i]].steps;
  1835. while ((1L<<n) < stps) n++;
  1836. #else
  1837. while  ( ( (unsigned long)(1L<<(long)n) <
  1838.      ((unsigned long) ((*alloc)[i][bit_alloc[k][i]].steps)
  1839.       & 0xffff
  1840.      )
  1841.   ) && ( n <16)
  1842. ) n++;
  1843. #endif
  1844. n--;
  1845. sbband[k][s][j][i] = (unsigned int) (d * (double) (1L<<n));
  1846. /* tag the inverted sign bit to sbband at position N */
  1847. /* The bit inversion is a must for grouping with 3,5,9 steps
  1848.    so it is done for all subbands */
  1849. if (sig)
  1850.     sbband[k][s][j][i] |= 1 << n;
  1851.     }
  1852.     else
  1853. sbband[k][s][j][i] = 0;
  1854. }
  1855.     }
  1856.     for (s = 0; s < 3; s++)
  1857. for (j = sblimit; j < SBLIMIT; j++)
  1858.     for (i = 0; i < 12; i++)
  1859. for (k = 7; k < 12; k++)
  1860.     sbband[k][s][i][j] = 0;
  1861. }
  1862. #endif
  1863. void II_subband_quantization_ml (unsigned int (*scalar)[3][32], double (*sb_samples)[3][12][32],
  1864.  unsigned int (*j_scale)[3][32], double (*j_samps)[3][12][32],
  1865.  unsigned int (*bit_alloc)[32], unsigned int (*sbband)[3][12][32],
  1866.  frame_params *fr_ps)
  1867. {
  1868.     int i, j, k, s, n, qnt, sig, m, l, ll;
  1869.     int n_ml_ch   = fr_ps->header->multiling_ch;
  1870.     int sblimit = fr_ps->sblimit_ml;
  1871.     int ml_lsf  = fr_ps->header->multiling_fs;
  1872.     unsigned int stps;
  1873.     double d;
  1874.     al_table *alloc = fr_ps->alloc_ml;
  1875.    
  1876.     for (s=0;s<3;s++)
  1877. for (j=0;j<((ml_lsf)?6:12);j++)    /* WtK half sample frequency 7/8/95 */
  1878.     for (i=0;i<sblimit;i++)
  1879.     {
  1880. for (m = 7; m < 7+n_ml_ch; ++m)
  1881. {
  1882.     k = m;
  1883.     if (bit_alloc[k][i])
  1884.     {
  1885. d = sb_samples[k][s][j][i] / multiple[scalar[k][s][i]];
  1886. if (mod(d) >= 1.0) /* > changed to >=, 1992-11-06 shn */
  1887. { printf("In ML, not scaled properly, %d %d %d %dn",k,s,j,i);
  1888.   printf("Value %1.10fn",sb_samples[k][s][j][i]);
  1889. }
  1890. qnt = (*alloc)[i][bit_alloc[k][i]].quant;
  1891. d = d * II_a[qnt] + II_b[qnt];
  1892. /* extract MSB N-1 bits from the floating point sample */
  1893. if (d >= 0) sig = 1;
  1894. else { sig = 0; d += 1.0; }
  1895. n = 0;
  1896. stps = (*alloc)[i][bit_alloc[k][i]].steps;
  1897. while ((1L<<n) < stps) n++;
  1898. n--;
  1899. sbband[k][s][j][i] = (unsigned int) (d * (double) (1L<<n));
  1900. /* tag the inverted sign bit to sbband at position N */
  1901. /* The bit inversion is a must for grouping with 3,5,9 steps
  1902.    so it is done for all subbands */
  1903. if (sig) sbband[k][s][j][i] |= 1<<n;
  1904.     }
  1905.     else
  1906. sbband[k][s][j][i] = 0;
  1907. }
  1908.     }
  1909.     for (s=0;s<3;s++)
  1910. for (j=sblimit;j<SBLIMIT;j++)
  1911.     for (i=0;i<((ml_lsf)?6:12);i++)
  1912. for (k = 7; k < 7+n_ml_ch; k++)
  1913.     sbband[k][s][i][j] = 0;
  1914. }
  1915.  
  1916. /************************************************************************
  1917. /*
  1918. /* I_encode_bit_alloc  (Layer I)
  1919. /* II_encode_bit_alloc (Layer II)
  1920. /* II_encode_bit_alloc_mc (Layer II multichannel)
  1921. #ifdef Augmentation_7ch
  1922. /* II_encode_bit_alloc_aug (Layer II multichannel 7ch-augmentation)
  1923. #endif
  1924. /*
  1925. /* PURPOSE:Writes bit allocation information onto bitstream
  1926. /*
  1927. /* Layer I uses 4 bits/subband for bit allocation information,
  1928. /* and Layer II uses 4,3,2, or 0 bits depending on the
  1929. /* quantization table used.
  1930. /*
  1931. /************************************************************************/
  1932.  
  1933. void I_encode_bit_alloc(unsigned int (*bit_alloc)[32], frame_params *fr_ps, Bit_stream_struc *bs)
  1934. {
  1935.    int i,k;
  1936.    int stereo  = fr_ps->stereo;
  1937.    int sblimit = fr_ps->sblimit;
  1938.    int jsbound = fr_ps->jsbound;
  1939.  
  1940.    for (i=0;i<SBLIMIT;i++)
  1941.      for (k=0;k<((i<jsbound)?stereo:1);k++) putbits(bs,bit_alloc[k][i],4);
  1942. }
  1943.  
  1944. /***************************** Layer II  ********************************/
  1945.  
  1946. void II_encode_bit_alloc (unsigned int (*bit_alloc)[32], frame_params *fr_ps, Bit_stream_struc *bs)
  1947. {
  1948.    int i,k;
  1949.    int stereo  = fr_ps->stereo;
  1950.    int sblimit = fr_ps->sblimit;
  1951.    int jsbound = fr_ps->jsbound;
  1952.    al_table *alloc = fr_ps->alloc;
  1953.  
  1954.    for (i=0;i<sblimit;i++)
  1955. for (k=0;k<((i<jsbound)?stereo:1);k++)
  1956. putbits(bs,bit_alloc[k][i],(*alloc)[i][0].bits);
  1957. }
  1958. void II_encode_bit_alloc_mc (unsigned int (*bit_alloc)[32], frame_params *fr_ps, Bit_stream_struc *bs)
  1959. {
  1960.     int i, k, l, m;
  1961.     layer *info     = fr_ps->header;
  1962.     int center      = info->center;
  1963.     int stereo      = fr_ps->stereo;
  1964.     int stereomc    = fr_ps->stereomc;
  1965.     int sblimit     = fr_ps->sblimit_mc;
  1966.     al_table *alloc = fr_ps->alloc_mc;
  1967.  
  1968.     for (i = 0; i < sblimit; i++)
  1969.     {
  1970. l = sbgrp[i];
  1971. for (m = stereo; m < stereo + stereomc; ++m)
  1972.         {        
  1973.     k = transmission_channel (fr_ps, l, m);
  1974.             if ((fr_ps->header->center != 3) || (i < 12) || (k !=2))
  1975. /* 960627 FdB DynX dependent on configuration */
  1976. if (dyn_ch (fr_ps, l, m) == 1)
  1977.     putbits (bs, bit_alloc[k][i], (*alloc)[i][0].bits);
  1978. }
  1979.     }
  1980. }
  1981. #ifdef Augmentation_7ch
  1982. void II_encode_bit_alloc_aug (unsigned int (*bit_alloc)[32], frame_params *fr_ps, Bit_stream_struc *bs)
  1983. {
  1984.     int i, k, l, m;
  1985.     layer *info     = fr_ps->header;
  1986.     int center      = info->center;
  1987.     int stereomc    = fr_ps->stereomc;
  1988.     int sblimit     = fr_ps->sblimit_mc;
  1989.     al_table *alloc = fr_ps->alloc_mc;
  1990.  
  1991.     for (i = 0; i < sblimit; i++)
  1992.     {
  1993. l = sbgrp[i];
  1994. for (m = 5; m < 7; ++m)
  1995.         {        
  1996.     k = transmission_channel (fr_ps, l, m);
  1997.     if (dyn_ch (fr_ps, l, m) == 1)
  1998. putbits (bs, bit_alloc[k][i], (*alloc)[i][0].bits);
  1999. }
  2000.     }
  2001. }
  2002. #endif
  2003. /************************************************************************
  2004. /*
  2005. /* I_sample_encoding   (Layer I)
  2006. /* II_sample_encoding  (Layer II)
  2007. /* II_sample_encoding_mc  (Layer II) SR
  2008. #ifdef Augmentation_7ch
  2009. /* II_sample_encoding_aug  (Layer II) FdB
  2010. #endif
  2011. /*
  2012. /* PURPOSE:Put one frame of subband samples on to the bitstream
  2013. /*
  2014. /* SEMANTICS:  The number of bits allocated per sample is read from
  2015. /* the bit allocation information #bit_alloc#.  Layer 2
  2016. /* supports writing grouped samples for quantization steps
  2017. /* that are not a power of 2.
  2018. /*
  2019. /************************************************************************/
  2020.  
  2021. void I_sample_encoding (unsigned int (*sbband)[3][12][32], unsigned int (*bit_alloc)[32],
  2022. frame_params *fr_ps, Bit_stream_struc *bs)
  2023. {
  2024.    int i,j,k;
  2025.    int stereo  = fr_ps->stereo;
  2026.    int sblimit = fr_ps->sblimit;
  2027.    int jsbound = fr_ps->jsbound;
  2028.  
  2029.    for(j=0;j<12;j++) {
  2030.      for(i=0;i<SBLIMIT;i++)
  2031.        for(k=0;k<((i<jsbound)?stereo:1);k++)
  2032.          if(bit_alloc[k][i]) putbits(bs,sbband[k][0][j][i],bit_alloc[k][i]+1);
  2033.    }
  2034. }
  2035.  
  2036. /***************************** Layer II  ********************************/
  2037.  
  2038. void II_sample_encoding (unsigned int (*sbband)[3][12][32], unsigned int (*bit_alloc)[32],
  2039.  frame_params *fr_ps, Bit_stream_struc *bs)
  2040. {
  2041.    unsigned int temp;
  2042.    unsigned int i,j,k,s,x,y;
  2043.    int stereo = fr_ps->stereo;
  2044.    int stereomc = fr_ps->stereomc;
  2045.    int sblimit = fr_ps->sblimit;
  2046.    int jsbound = fr_ps->jsbound;
  2047.    al_table *alloc = fr_ps->alloc;
  2048.  
  2049.    for (s=0;s<3;s++)
  2050.      for (j=0;j<12;j+=3)
  2051.        for (i=0;i<sblimit;i++)
  2052.          for (k=0;k<((i<jsbound)?stereo:1);k++)
  2053.            if (bit_alloc[k][i]) {
  2054.              if ((*alloc)[i][bit_alloc[k][i]].group == 3) {
  2055.                for (x=0;x<3;x++) putbits(bs,sbband[k][s][j+x][i],
  2056.                                       (*alloc)[i][bit_alloc[k][i]].bits);
  2057.             }
  2058.              else {
  2059.                y =(*alloc)[i][bit_alloc[k][i]].steps;
  2060.                temp = sbband[k][s][j][i] +
  2061.                       sbband[k][s][j+1][i] * y +
  2062.                       sbband[k][s][j+2][i] * y * y;
  2063.                putbits(bs,temp,(*alloc)[i][bit_alloc[k][i]].bits);
  2064.              }
  2065.            }
  2066. }
  2067. /******************* Layer II five channels ******************************/
  2068. void II_sample_encoding_mc (unsigned int (*sbband)[3][12][32], unsigned int lfe_sbband[12],
  2069.     unsigned int (*bit_alloc)[32], unsigned int lfe_alloc,
  2070.     frame_params *fr_ps, Bit_stream_struc *bs)
  2071. {
  2072.     unsigned int temp;
  2073.     unsigned int i,j,k,s,x,y, l, m;
  2074.     layer *info     = fr_ps->header;
  2075.     int center      = info->center;
  2076.     int stereo      = fr_ps->stereo;
  2077.     int stereomc    = fr_ps->stereomc;
  2078.     int sblimit     = fr_ps->sblimit_mc;
  2079.     al_table *alloc = fr_ps->alloc_mc;
  2080.     int lfe  =     fr_ps->header->lfe;
  2081.     
  2082.     for (s = 0; s < 3; s++)
  2083.         for (j = 0; j < 12; j += 3)
  2084. {
  2085.     if (lfe)
  2086.         putbits (bs, lfe_sbband[s*4+j/3], (*alloc)[0][lfe_alloc].bits);
  2087.     for (i = 0; i < sblimit; i++)
  2088.     {
  2089. l = sbgrp[i];
  2090. for (m = stereo; m < stereo+stereomc; m++)
  2091. {
  2092.     k = transmission_channel (fr_ps, l, m);
  2093.      
  2094.     if (bit_alloc[k][i] && (i < 12 || m != 2 || center != 3)) 
  2095.     {
  2096.         if ((*alloc)[i][bit_alloc[k][i]].group == 3) 
  2097.     for (x = 0; x < 3; x++)
  2098. putbits (bs, sbband[k][s][j+x][i],
  2099.  (*alloc)[i][bit_alloc[k][i]].bits);
  2100.         else 
  2101. {
  2102.   y = (*alloc)[i][bit_alloc[k][i]].steps;
  2103.   temp = sbband[k][s][j][i] +
  2104.  sbband[k][s][j+1][i] * y +
  2105.  sbband[k][s][j+2][i] * y * y;
  2106.   putbits (bs, temp, (*alloc)[i][bit_alloc[k][i]].bits);
  2107.    
  2108. }
  2109.     }
  2110. }
  2111.     }
  2112. }  
  2113. }
  2114. #ifdef Augmentation_7ch
  2115. void II_sample_encoding_aug (unsigned int (*sbband)[3][12][32], unsigned int (*bit_alloc)[32],
  2116.      frame_params *fr_ps, Bit_stream_struc *bs)
  2117. {
  2118.     unsigned int temp;
  2119.     unsigned int i,j,k,s,x,y, l, m;
  2120.     int sblimit = fr_ps->sblimit_mc;
  2121.     al_table *alloc = fr_ps->alloc_mc;
  2122.     
  2123.     for (s = 0; s < 3; s++)
  2124.         for (j = 0; j < 12; j += 3)
  2125.     for (i = 0; i < sblimit; i++)
  2126.     {
  2127. l = sbgrp[i];
  2128. for (m = 5; m < 7; m++)
  2129. {
  2130.     k = transmission_channel (fr_ps, l, m);
  2131.      
  2132.     if (bit_alloc[k][i]) 
  2133.     {
  2134.         if ((*alloc)[i][bit_alloc[k][i]].group == 3) 
  2135.     for (x = 0; x < 3; x++)
  2136. putbits (bs, sbband[k][s][j+x][i],
  2137.  (*alloc)[i][bit_alloc[k][i]].bits);
  2138.         else 
  2139. {
  2140.   y = (*alloc)[i][bit_alloc[k][i]].steps;
  2141.   temp = sbband[k][s][j][i] +
  2142.  sbband[k][s][j+1][i] * y +
  2143.  sbband[k][s][j+2][i] * y * y;
  2144.   putbits (bs, temp, (*alloc)[i][bit_alloc[k][i]].bits);
  2145. }
  2146.     }
  2147. }
  2148.     }
  2149. }
  2150. #endif
  2151. /************************************************************************
  2152. /*
  2153. /* encode_CRC
  2154. /*
  2155. /************************************************************************/
  2156.  
  2157. void encode_CRC (unsigned int crc, Bit_stream_struc *bs)
  2158. {
  2159.    putbits (bs, crc, 16);
  2160. }
  2161. /***************************************************************************
  2162. /*
  2163. /* ancillary_encode 
  2164. /*
  2165. /* PURPOSE: The use of ancillary part of the bitstream for information  
  2166. /*          storage.
  2167. /*         
  2168. /*        
  2169. /**************************************************************************/
  2170. void ancillary_encode(fr_ps,bs,adb)
  2171. frame_params *fr_ps;
  2172. Bit_stream_struc *bs;
  2173. int adb;
  2174. {
  2175.     int bitsPerSlot; 
  2176.     int samplesPerFrame;
  2177.     int bit_rate;
  2178.     int avg_slots_per_frame;
  2179.     int whole_SpF;
  2180.     int usedAdb;
  2181.     int adbNumberStart;
  2182.     int l;
  2183.     char *mesg="This bitstream use ancillary part.";
  2184.     extern int mesg_index;
  2185.     register int i;
  2186.     double frac_SpF;
  2187.     double slot_lag;
  2188.     layer *info = fr_ps->header;
  2189.     if (info->lay == 1) { bitsPerSlot = 32; samplesPerFrame = 384;  }
  2190.     else               { bitsPerSlot = 8;  samplesPerFrame = 1152; }
  2191.     bit_rate = bitrate[info->lay-1][info->bitrate_index];
  2192.     avg_slots_per_frame = ((double)samplesPerFrame /
  2193.                            s_freq[info->sampling_frequency]) *
  2194.                           ((double)bit_rate / (double)bitsPerSlot);
  2195.     whole_SpF = (int) avg_slots_per_frame;  
  2196.     adbNumberStart = (whole_SpF+info->padding) * bitsPerSlot;
  2197.     usedAdb = adbNumberStart - adb;
  2198.     if(usedAdb <= (adbNumberStart-8)) {
  2199. if(usedAdb % 8) {
  2200.    for(i=0;i<(8-(usedAdb%8));i++)
  2201.       put1bit(bs,0);
  2202.    usedAdb += (8 - (usedAdb % 8));
  2203. }
  2204. while(usedAdb < adbNumberStart - 8) {
  2205.    for(i=0;i<8;i++)
  2206.       put1bit(bs,0);
  2207.    usedAdb += 8;
  2208. }
  2209. if(mesg_index >= strlen(mesg)){
  2210.    for(i=0;i<8;i++)
  2211.       put1bit(bs,0);
  2212. } else {
  2213.    putbits(bs,(int)(mesg[mesg_index++]), 8);
  2214. }
  2215.    } else {
  2216. for(i=0;i<adb;i++)
  2217.    put1bit(bs,0);
  2218.    }
  2219. }
  2220.    
  2221.