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

mpeg/mp3

开发平台:

C/C++

  1. /**********************************************************************
  2.  * ISO MPEG Audio Subgroup Software Simulation Group (1996)
  3.  * ISO 13818-3 MPEG-2 Audio Encoder - Lower Sampling Frequency Extension
  4.  *
  5.  * $Id: loop.c,v 1.2 1997/01/19 22:28:29 rowlands Exp $
  6.  *
  7.  * $Log: loop.c,v $
  8.  * Revision 1.2  1997/01/19 22:28:29  rowlands
  9.  * Layer 3 bug fixes from Seymour Shlien
  10.  *
  11.  * Revision 1.1  1996/02/14 04:04:23  rowlands
  12.  * Initial revision
  13.  *
  14.  * Received from Mike Coleman
  15.  **********************************************************************/
  16. /**********************************************************************
  17.  *   date   programmers                comment                        *
  18.  *25. 6.92  Toshiyuki Ishino           Ver 1.0                        *
  19.  *29.10.92  Masahiro Iwadare           Ver 2.0                        *
  20.  *17. 4.93  Masahiro Iwadare           Updated for IS Modification    *
  21.  *04.11.93  Seymour Shlien             Speed up inner loop            *
  22.  *09.09.95  mc@fivebats.com            Several changes for updated IS,*
  23.  *                                     and some MPEG2-LSF support     *
  24.  *20.12.96  seymour.shlien@crc.doc.ca  Fixed some bugs and improved   *
  25.  *                                     the appearance                 *
  26.  *********************************************************************/ 
  27. #include <stdio.h>
  28. #include <stdlib.h>
  29. #include <math.h>
  30. #include <assert.h>
  31. #include "l3side.h"
  32. #include "loop.h"
  33. #include "huffman.h"
  34. #include "l3bitstream.h"
  35. #include "reservoir.h"
  36. #include "loop-pvt.h"
  37. /* #define DEBUG */
  38. /* #define DEBUGSC */
  39. /* #define PERFORM 3 */
  40. /* If PERFORM is defined to some number, then a file encode.log
  41.    is preduced showing the intermediate results produced by the
  42.    outer_loop code for the frame number = PERFORM.
  43. */
  44. #define BIN_SEARCH 
  45. /* for speeding up the iteration_loop algorithm */
  46. #ifdef PERFORM
  47. FILE *log_output;
  48. extern int frameNum;
  49. float worst_xfsf_to_xmin_ratio(III_psy_xmin *l3_xmin, double xfsf[4][CBLIMIT]
  50.                              ,int block_type,int gr,int ch);
  51. #endif
  52. /* New SS 20-12-96 */
  53. #ifdef BIN_SEARCH 
  54. int bin_search_StepSize(int desired_rate, double start, int ix[576],
  55.            double xrs[576], gr_info * cod_info);
  56. int count_bits();
  57. float worst_xfsf_to_xmin_ratio();
  58. #endif
  59. /*
  60.   Here are MPEG1 Table B.8 and MPEG2 Table B.1
  61.   -- Layer III scalefactor bands.
  62.   Index into this using a method such as:
  63.     idx  = fr_ps->header->sampling_frequency
  64.            + (fr_ps->header->version * 3)
  65. */
  66. struct scalefac_struct sfBandIndex[6] =
  67. {
  68.   { /* Table B.2.b: 22.05 kHz */
  69.     {0,6,12,18,24,30,36,44,54,66,80,96,116,140,168,200,238,284,336,396,464,522,576},
  70.     {0,4,8,12,18,24,32,42,56,74,100,132,174,192}
  71.   },
  72.   { /* Table B.2.c: 24 kHz */
  73.     {0,6,12,18,24,30,36,44,54,66,80,96,114,136,162,194,232,278,330,394,464,540,576},
  74.     {0,4,8,12,18,26,36,48,62,80,104,136,180,192}
  75.   },
  76.   { /* Table B.2.a: 16 kHz */
  77.     {0,6,12,18,24,30,36,44,45,66,80,96,116,140,168,200,238,248,336,396,464,522,576},
  78.     {0,4,8,12,18,26,36,48,62,80,104,134,174,192}
  79.   },
  80.   { /* Table B.8.b: 44.1 kHz */
  81.     {0,4,8,12,16,20,24,30,36,44,52,62,74,90,110,134,162,196,238,288,342,418,576},
  82.     {0,4,8,12,16,22,30,40,52,66,84,106,136,192}
  83.   },
  84.   { /* Table B.8.c: 48 kHz */
  85.     {0,4,8,12,16,20,24,30,36,42,50,60,72,88,106,128,156,190,230,276,330,384,576},
  86.     {0,4,8,12,16,22,28,38,50,64,80,100,126,192}
  87.   },
  88.   { /* Table B.8.a: 32 kHz */
  89.     {0,4,8,12,16,20,24,30,36,44,54,66,82,102,126,156,194,240,296,364,448,550,576},
  90.     {0,4,8,12,16,22,30,42,58,78,104,138,180,192}
  91.   }
  92. };
  93. /*
  94.   The following table is used to implement the scalefactor
  95.   partitioning for MPEG2 as described in section
  96.   2.4.3.2 of the IS. The indexing corresponds to the
  97.   way the tables are presented in the IS:
  98.   [table_number][row_in_table][column of nr_of_sfb]
  99. */
  100. static unsigned nr_of_sfb_block[6][3][4] =
  101. {
  102.   {
  103.     {6, 5, 5, 5},
  104.     {9, 9, 9, 9},
  105.     {6, 9, 9, 9}
  106.   },
  107.   {
  108.     {6, 5, 7, 3},
  109.     {9, 9, 12, 6},
  110.     {6, 9, 12, 6}
  111.   },
  112.   {
  113.     {11, 10, 0, 0},
  114.     {18, 18, 0, 0},
  115.     {15,18,0,0}
  116.   },
  117.   {
  118.     {7, 7, 7, 0},
  119.     {12, 12, 12, 0},
  120.     {6, 15, 12, 0}
  121.   },
  122.   {
  123.     {6, 6, 6, 3},
  124.     {12, 9, 9, 6},
  125.     {6, 12, 9, 6}
  126.   },
  127.   {
  128.     {8, 8, 5, 0},
  129.     {15,12,9,0},
  130.     {6,18,9,0}
  131.   }
  132. };
  133. /*
  134.   table of largest scalefactors for MPEG2
  135. */
  136. static unsigned max_sfac_tab[6][4] =
  137. {
  138.     {4, 4, 3, 3},
  139.     {4, 4, 3, 0},
  140.     {3, 2, 0, 0},
  141.     {4, 5, 5, 0},
  142.     {3, 3, 3, 0},
  143.     {2, 2, 0, 0}
  144. };
  145. /* Table B.6: layer3 preemphasis */
  146. int  pretab[21] =
  147. {
  148.     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  149.     1, 1, 1, 1, 2, 2, 3, 3, 3, 2
  150. };
  151. /* This is the scfsi_band table from 2.4.2.7 of the IS */
  152. int scfsi_band_long[5] = { 0, 6, 11, 16, 21 };
  153. int *scalefac_band_long  = &sfBandIndex[3].l[0];
  154. int *scalefac_band_short = &sfBandIndex[3].s[0];
  155. /************************************************************************/
  156. /*  iteration_loop()                                                    */
  157. /************************************************************************/
  158. void
  159. iteration_loop( double pe[][2], double xr_org[2][2][576], III_psy_ratio *ratio,
  160. III_side_info_t *l3_side, int l3_enc[2][2][576],
  161. int mean_bits, int stereo, double xr_dec[2][2][576],
  162. III_scalefac_t *scalefac, frame_params *fr_ps,
  163. int ancillary_pad, int bitsPerFrame ) 
  164. {
  165.     static int firstcall = 1;
  166.     III_psy_xmin l3_xmin;
  167.     gr_info *cod_info;
  168.     layer *info;
  169.     int *main_data_begin;
  170.     int max_bits;
  171.     int ch, gr, sfb, i, mode_gr;
  172.     static int huffman_read_flag = 0; 
  173.     double xr[2][2][576];
  174.     I576  *ix;
  175.     main_data_begin = &l3_side->main_data_begin;
  176.     l3_side->resvDrain = 0;
  177.     if ( firstcall )
  178.     {
  179. *main_data_begin = 0;
  180. firstcall = 0;
  181. #ifdef PERFORM
  182. log_output = fopen("encode.log","w");
  183. #endif
  184.     }
  185.     info = fr_ps->header;
  186.     mode_gr = (info->version == 1) ? 2 : 1;
  187.     scalefac_band_long  = &sfBandIndex[info->sampling_frequency + (info->version * 3)].l[0];
  188.     scalefac_band_short = &sfBandIndex[info->sampling_frequency + (info->version * 3)].s[0];
  189.     /* reading huffman code table */
  190.     if (huffman_read_flag == 0) {
  191.         FILE *fi = OpenTableFile( "huffcode" );
  192.         if ( fi == NULL )
  193.             exit( EXIT_FAILURE );
  194.         read_huffcodetab( fi );
  195.         huffman_read_flag++;
  196.         fclose( fi );
  197.     }
  198.     for ( gr = 0; gr < mode_gr; gr++ )
  199.     {
  200.         for ( ch = 0; ch < stereo; ch++ )
  201. {
  202.             for ( i = 0; i < 576; i++ ) 
  203.                 xr[gr][ch][i] = xr_org[gr][ch][i];
  204. }
  205.     }
  206.     ResvFrameBegin( fr_ps, l3_side, mean_bits, bitsPerFrame );
  207.     for ( gr = 0; gr < mode_gr; gr++ )
  208.     {
  209.         for ( ch = 0; ch < stereo; ch++ )
  210.         {
  211.             ix = (I576 *) l3_enc[gr][ch];
  212.             cod_info = (gr_info *) &(l3_side->gr[gr].ch[ch]);
  213.             gr_deco(cod_info);
  214.             calc_xmin( xr, ratio, cod_info, &l3_xmin, gr, ch );
  215.     
  216. #ifdef DEBUG
  217.             printf( "----- start gr[%d] ch[%1d] : block_type=%1d, window_switching_flag=%1d (loop)n",
  218.                     gr,ch, cod_info->block_type, cod_info->window_switching_flag ); 
  219. #endif
  220.     
  221.             if ( info->version == 1 )
  222.                 calc_scfsi( xr[gr][ch], l3_side, &l3_xmin, ch, gr );
  223.     
  224.             /* calculation of number of available bit( per granule ) */
  225.     max_bits = ResvMaxBits( fr_ps, l3_side, &pe[gr][ch], mean_bits );
  226. #ifdef DEBUG
  227.             printf( " max_bits = %d, mean_bits = %d (iteration_loop)n", max_bits, mean_bits ); 
  228. #endif
  229.     
  230.             /* reset of iteration variables */
  231.     
  232.             for ( sfb = 0; sfb < 21; sfb++ )
  233.                 scalefac->l[gr][ch][sfb] = 0;
  234.             for ( sfb = 0; sfb < 13; sfb++ )
  235.                 for ( i = 0; i < 3; i++ )
  236.                     scalefac->s[gr][ch][sfb][i] = 0;
  237.     for ( i = 0; i < 4; i++ )
  238. cod_info->slen[i] = 0;
  239.     cod_info->sfb_partition_table = &nr_of_sfb_block[0][0][0];
  240.             cod_info->part2_3_length    = 0;
  241.             cod_info->big_values        = 0;
  242.             cod_info->count1            = 0;
  243.             cod_info->scalefac_compress = 0;
  244.             cod_info->table_select[0]   = 0;
  245.             cod_info->table_select[1]   = 0;
  246.             cod_info->table_select[2]   = 0;
  247.             cod_info->subblock_gain[0]  = 0;
  248.             cod_info->subblock_gain[1]  = 0;
  249.             cod_info->subblock_gain[2]  = 0;
  250.             cod_info->region0_count     = 0;
  251.             cod_info->region1_count     = 0;
  252.             cod_info->part2_length      = 0;
  253.             cod_info->preflag           = 0;
  254.             cod_info->scalefac_scale    = 0;
  255.             cod_info->quantizerStepSize = 0.0;
  256.             cod_info->count1table_select= 0;
  257.             
  258.             /* all spectral values zero ? */
  259.             if ( fabs(xr_max(xr[gr][ch], 0, 576)) != 0.0 )
  260.             {
  261.                 cod_info->quantizerStepSize =
  262.  (double) quantanf_init( xr[gr][ch] );
  263.                 cod_info->part2_3_length = outer_loop( xr, max_bits, &l3_xmin,
  264.                                                        l3_enc, fr_ps, scalefac,
  265.                                                        gr, ch, l3_side );
  266.             }
  267.     ResvAdjust( fr_ps, cod_info, l3_side, mean_bits );
  268.     cod_info->global_gain = nint( cod_info->quantizerStepSize + 210.0 );
  269.     assert( cod_info->global_gain < 256 );
  270.         } /* for ch */
  271.     } /* for gr */
  272.     ResvFrameEnd( fr_ps, l3_side, mean_bits );
  273. }
  274. /************************************************************************/
  275. /*  quantanf_init                                                       */
  276. /************************************************************************/
  277. int quantanf_init( double xr[576] )
  278. /* Function: Calculate the first quantization step quantanf.       */
  279. {
  280.     int i, tp = 0;
  281.     double system_const, minlimit;
  282.     double sfm = 0.0, sum1 = 0.0, sum2 = 0.0;
  283.     
  284.     system_const = 8.0;
  285.     minlimit = -100.0;
  286.     for ( i = 0; i < 576; i++ )
  287.     {
  288.         if ( xr[i] != 0 )
  289. {
  290.             double tpd = xr[i] * xr[i];
  291.             sum1 += log( tpd );
  292.             sum2 += tpd;
  293.         }
  294.     }
  295.     if ( sum2 != 0.0 )
  296.     {
  297.         sfm = exp( sum1 / 576.0 ) / (sum2 / 576.0);
  298.         tp = nint( system_const * log(sfm) );
  299. if ( tp < minlimit )
  300.     tp = minlimit;
  301. #ifdef DEBUG
  302.         printf(" quantanf = %d (quantanf_init)n",tp );
  303. #endif
  304.     }
  305.       return(tp-70.0); /* SS 19-12-96. Starting value of
  306.                           global_gain or quantizerStepSize 
  307.                           has to be reduced for iteration_loop
  308.                        */
  309. }
  310. /************************************************************************/
  311. /*  outer_loop                                                          */
  312. /************************************************************************/
  313. /*  Function: The outer iteration loop controls the masking conditions  */
  314. /*  of all scalefactorbands. It computes the best scalefac and          */
  315. /*  global gain. This module calls the inner iteration loop             */
  316. /************************************************************************/
  317. int outer_loop(
  318.     double xr[2][2][576],     /*  magnitudes of the spectral values */
  319.     int max_bits,
  320.     III_psy_xmin  *l3_xmin,   /* the allowed distortion of the scalefactor */
  321.     int l3_enc[2][2][576],    /* vector of quantized values ix(0..575) */
  322.     frame_params *fr_ps,
  323.     III_scalefac_t *scalefac, /* scalefactors */
  324.     int gr, int ch, III_side_info_t *l3_side )
  325. {
  326.     int status ;
  327.     int scalesave_l[CBLIMIT], scalesave_s[CBLIMIT][3];
  328.     int sfb, bits, huff_bits, save_preflag, save_compress;
  329.     double xfsf[4][CBLIMIT];
  330.     int i, over, iteration;
  331.     float max_ratio;
  332. /* D576 *xrs; */ /* to eliminate warning messages from gcc compiler */
  333. /* I576 *ix; */  /* replace this code with below. S. Shlien 15-1-97 */
  334.   double *xrs; 
  335.   int *ix;  
  336.   gr_info *cod_info = &l3_side->gr[gr].ch[ch].tt;
  337. /* xrs = (D576 *) &xr[gr][ch][0]; */ 
  338. /* ix  = (I576 *) l3_enc[gr][ch]; */
  339.  
  340. xrs = (double *) &(xr[gr][ch][0]); 
  341. ix  = (int *) &(l3_enc[gr][ch][0]);
  342.     iteration = 0;
  343. #ifdef PERFORM
  344.     if(frameNum == PERFORM)
  345.     fprintf(log_output,"nnframe = %d ch = %d gr= %dn",frameNum,ch,gr);
  346. #endif
  347.     do 
  348.     {
  349. iteration += 1;
  350. cod_info->part2_length = part2_length( scalefac, fr_ps, gr, ch, l3_side );
  351.         huff_bits = max_bits - cod_info->part2_length;
  352. #ifdef BIN_SEARCH
  353. if(iteration == 1)
  354.         {
  355.        bin_search_StepSize(max_bits,cod_info->quantizerStepSize,
  356.           ix,xrs,cod_info); /* speeds things up a bit */
  357.         }
  358. #endif
  359. #ifdef PERFORM
  360. if(frameNum==PERFORM)
  361.           fprintf(log_output,"n    Interim Results %dnn",iteration);
  362.         bits = test_inner_loop( xr, l3_enc, huff_bits, cod_info, gr, ch,
  363.          xfsf,l3_xmin);
  364. #else
  365.         bits = inner_loop( xr, l3_enc, huff_bits, cod_info, gr, ch );
  366. #endif
  367.         calc_noise( &xr[gr][ch][0], &l3_enc[gr][ch][0], cod_info, xfsf ); /* distortion calculation */
  368.         for ( sfb = 0; sfb < CBLIMIT; sfb++ ) /* save scaling factors */
  369.             scalesave_l[sfb] = scalefac->l[gr][ch][sfb];
  370.         for ( sfb = 0; sfb < SFB_SMAX; sfb++ )
  371.             for ( i = 0; i < 3; i++ )
  372.                 scalesave_s[sfb][i] = scalefac->s[gr][ch][sfb][i];
  373.         
  374.         save_preflag  = cod_info->preflag;
  375.         save_compress = cod_info->scalefac_compress;
  376.         preemphasis( &xr[gr][ch][0], xfsf, l3_xmin, gr, ch, l3_side );
  377. #ifdef PERFORM 
  378.     if(frameNum == PERFORM)  
  379.     {
  380.     fprintf(log_output,"nbits = %d  huff_bits= %d ", bits,huff_bits);
  381.     fprintf(log_output," max_bits = %dn",max_bits);
  382.     fprintf(log_output,"Stepsize = %f ",cod_info->quantizerStepSize);
  383.     fprintf(log_output," scale_bits    = %d n", cod_info->part2_length );  
  384.     print_scalefacs(log_output,scalefac,cod_info->block_type,gr,ch);
  385.     /*if (gr==0 && ch==0)
  386.       print_quantized_values(log_output,l3_enc[gr][ch] ,cod_info);*/
  387.     max_ratio = worst_xfsf_to_xmin_ratio(l3_xmin,xfsf,cod_info->block_type,gr,ch);
  388.     fprintf(log_output,"max_ratio = %6.2fn",max_ratio );
  389.     print_ratios(log_output,l3_xmin,xfsf,cod_info->block_type,gr,ch);
  390.     fprintf(log_output,"nn");
  391.     fflush(log_output);
  392.     }
  393. #endif
  394.         over = amp_scalefac_bands( &xr[gr][ch][0], xfsf, l3_xmin,
  395.                                    l3_side, scalefac, gr, ch, iteration );
  396. #if 1
  397.         if ( (status = loop_break(scalefac, cod_info, gr, ch)) == 0 )
  398. {
  399.     if ( fr_ps->header->version == 1 )
  400. status = scale_bitcount( scalefac, cod_info, gr, ch );
  401.     else
  402. status = scale_bitcount_lsf( scalefac, cod_info, gr, ch );
  403. }
  404. #else
  405.         status = loop_break( scalefac, cod_info, gr, ch );
  406. if ( fr_ps->header->version == 1 )
  407.     status += scale_bitcount( scalefac, cod_info, gr, ch );
  408. else
  409.     status += scale_bitcount_lsf( scalefac, cod_info, gr, ch );
  410. #endif
  411.     }
  412.     while ( (status == 0) && (over > 0) );
  413.     cod_info->preflag = save_preflag;
  414.     cod_info->scalefac_compress = save_compress;
  415.     for ( sfb = 0; sfb < 21; sfb++ )
  416.         scalefac->l[gr][ch][sfb] = scalesave_l[sfb];    
  417.     for ( i = 0; i < 3; i++ )
  418.         for ( sfb = 0; sfb < 12; sfb++ )
  419.             scalefac->s[gr][ch][sfb][i] = scalesave_s[sfb][i];    
  420.     cod_info->part2_length   = part2_length( scalefac, fr_ps, gr, ch, l3_side );
  421.     cod_info->part2_3_length = cod_info->part2_length + bits;
  422. #ifdef PERFORM 
  423.     if(frameNum == PERFORM)
  424.     {
  425.     fprintf(log_output,"n  Final Resultsn");
  426.     fprintf(log_output,"bits = %d  huff_bits= %d", bits,huff_bits);
  427.     fprintf(log_output," max_bits = %dn",max_bits);
  428.     fprintf(log_output," Stepsize = %f ",cod_info->quantizerStepSize);
  429.     fprintf(log_output, " scale_bits    = %d n", cod_info->part2_length );  
  430.     max_ratio = worst_xfsf_to_xmin_ratio(l3_xmin,xfsf,cod_info->block_type,gr,ch);
  431.     print_scalefacs(log_output,scalefac,cod_info->block_type,gr,ch);
  432.     fprintf(log_output,"max_ratio = %6.2fn",max_ratio );
  433.     print_ratios(log_output,l3_xmin,xfsf,cod_info->block_type,gr,ch);
  434.     fflush(log_output);
  435.     }
  436. #endif    
  437.     return cod_info->part2_3_length;
  438. }
  439. /***************************************************************************/ 
  440. /*         inner_loop                                                      */ 
  441. /***************************************************************************/ 
  442. /* The code selects the best quantizerStepSize for a particular set
  443. /* of scalefacs                                                            */
  444.  
  445. int
  446. inner_loop( double xr[2][2][576], int l3_enc[2][2][576], int max_bits,
  447.     gr_info *cod_info, int gr, int ch )
  448. {
  449.     int bits, c1bits, bvbits;
  450.     double *xrs;  /*  D576  *xr; */
  451.     int *ix;  /*  I576  *ix; */
  452.     xrs = &xr[gr][ch][0];
  453.     ix = l3_enc[gr][ch];
  454.     assert( max_bits >= 0 );
  455.     cod_info->quantizerStepSize -= 1.0;;
  456.     do
  457.     {
  458.         do
  459.         {
  460.             cod_info->quantizerStepSize += 1.0;
  461.             quantize( xrs, ix, cod_info );
  462.         }
  463.         while ( ix_max(ix, 0, 576) > 8191 + 14 ); /* within table range? */
  464.         calc_runlen( ix, cod_info );  /*rzero,count1,big_values*/
  465.         bits = c1bits = count1_bitcount( ix, cod_info );  /*count1_table selection*/
  466.         subdivide( cod_info );  /* bigvalues sfb division */
  467.         bigv_tab_select( ix, cod_info );  /* codebook selection*/
  468.         bits += bvbits = bigv_bitcount( ix, cod_info );  /* bit count */
  469. #ifdef PERFORM
  470.         if(frameNum == PERFORM)
  471. fprintf(log_output,"StepSize=%f bits = %d huff_bits = %dn",
  472.            cod_info->quantizerStepSize,bits,max_bits);
  473. #endif
  474.     }
  475.     while ( bits > max_bits );
  476.     return bits;
  477. }
  478. /***************************************************************************/ 
  479. /*        calc_scfsi                                                       */ 
  480. /***************************************************************************/ 
  481. /* calculation of the scalefactor select information ( scfsi )        */
  482. void calc_scfsi( double  xr[576], III_side_info_t *l3_side,
  483.     III_psy_xmin *l3_xmin, int ch, int gr )
  484. {
  485.     static int en_tot[2][2]; /* ch,gr */
  486.     static int en[2][2][21];
  487.     static int xm[2][2][21];
  488.     static int xrmax[2][2];
  489.     int en_tot_krit        = 10;
  490.     int en_dif_krit        = 100;
  491.     int en_scfsi_band_krit = 10;
  492.     int xm_scfsi_band_krit = 10;
  493.     int scfsi_band;
  494.     unsigned scfsi_set;
  495.     int sfb, start, end, i;
  496.     int condition = 0;
  497.     double temp, log2 = log( 2.0 );
  498.     gr_info *cod_info = &l3_side->gr[gr].ch[ch].tt;
  499.     xrmax[gr][ch] = xr_max( xr, 0, 576 );
  500.     scfsi_set = 0;
  501.     /* the total energy of the granule */    
  502.     for ( temp = 0.0, i = 0; i < 576; i++ )
  503.         temp += xr[i] * xr[i];
  504.     if ( temp == 0.0 )
  505.         en_tot[gr][ch] = 0.0;
  506.     else
  507.         en_tot[gr][ch] = log( temp ) / log2 ;
  508.     /* the energy of each scalefactor band, en */
  509.     /* the allowed distortion of each scalefactor band, xm */
  510.     if ( cod_info->window_switching_flag == 0 ||
  511.          cod_info->block_type != 2 )
  512.         for ( sfb = 0; sfb < 21; sfb++ )
  513.         {
  514.             start = scalefac_band_long[ sfb ];
  515.             end   = scalefac_band_long[ sfb+1 ];
  516.             for ( temp = 0.0, i = start; i < end; i++ )
  517.                 temp += xr[i] * xr[i];
  518.             if ( temp == 0.0 )
  519.                 en[gr][ch][sfb] = 0.0;
  520.             else
  521.                 en[gr][ch][sfb] = log( temp )/ log2;
  522.             if ( l3_xmin->l[gr][ch][sfb] == 0.0 )
  523.                 xm[gr][ch][sfb] = 0.0;
  524.             else
  525.                 xm[gr][ch][sfb] = log( l3_xmin->l[gr][ch][sfb] ) / log2;
  526.         }
  527.     if ( gr == 1 )
  528.     {
  529.         int gr2, tp;
  530.         for ( gr2 = 0; gr2 < 2; gr2++ )
  531.         {
  532.             /* The spectral values are not all zero */
  533.             if ( xrmax[ch][gr2] != 0.0 )
  534.                 condition++;
  535.             /* None of the granules contains short blocks */
  536.             if ( (cod_info->window_switching_flag == 0) ||
  537.                  (cod_info->block_type != 2) )
  538.                 condition++;
  539.         }
  540.         if ( abs(en_tot[0] - en_tot[1]) < en_tot_krit )
  541.             condition++;
  542.         for ( tp = 0, sfb = 0; sfb < 21; sfb++ ) 
  543.             tp += abs( en[ch][0][sfb] - en[ch][1][sfb] );
  544.         if ( tp < en_dif_krit ) 
  545.             condition++;
  546.         if ( condition == 6 )
  547.         {
  548.             for ( scfsi_band = 0; scfsi_band < 4; scfsi_band++ )
  549.             {
  550.                 int sum0 = 0, sum1 = 0;
  551.                 l3_side->scfsi[ch][scfsi_band] = 0;
  552.                 start = scfsi_band_long[scfsi_band];
  553.                 end   = scfsi_band_long[scfsi_band+1];
  554.                 for ( sfb = start; sfb < end; sfb++ )
  555.                 { 
  556.                     sum0 += abs( en[ch][0][sfb] - en[ch][1][sfb] );
  557.                     sum1 += abs( xm[ch][0][sfb] - xm[ch][1][sfb] );
  558.                 }
  559.                 if ( sum0 < en_scfsi_band_krit && sum1 < xm_scfsi_band_krit )
  560. {
  561.                     l3_side->scfsi[ch][scfsi_band] = 1;
  562.     scfsi_set |= (1 << scfsi_band);
  563. }
  564.                 else
  565.                     l3_side->scfsi[ch][scfsi_band] = 0;
  566.             } /* for scfsi_band */
  567. #ifdef DEBUG
  568.     fprintf( stderr, "calc_scfsi: scfsi_set = 0x%02xn", scfsi_set );
  569. #endif
  570.         } /* if condition == 6 */
  571.         else
  572.             for ( scfsi_band = 0; scfsi_band < 4; scfsi_band++ )
  573.                 l3_side->scfsi[ch][scfsi_band] = 0;
  574.     } /* if gr == 1 */
  575. }
  576. /***************************************************************************/ 
  577. /*        part2_length                                                     */ 
  578. /***************************************************************************/ 
  579. /* calculates the number of bits needed to encode the scalefacs in the     */
  580. /* main data block                                                         */
  581. int part2_length( III_scalefac_t *scalefac, frame_params *fr_ps,
  582.       int gr, int ch, III_side_info_t *si )
  583. {
  584.     int slen1, slen2, slen3, slen4, bits, sfb, window, partition;
  585.     gr_info *gi = &si->gr[gr].ch[ch].tt;
  586.     bits = 0;
  587.     if ( fr_ps->header->version == 1 )
  588.     {
  589. static int slen1_tab[16] = { 0, 0, 0, 0, 3, 1, 1, 1, 2, 2, 2, 3, 3, 3, 4, 4 };
  590. static int slen2_tab[16] = { 0, 1, 2, 3, 0, 1, 2, 3, 1, 2, 3, 1, 2, 3, 2, 3 };
  591. slen1 = slen1_tab[ gi->scalefac_compress ];
  592. slen2 = slen2_tab[ gi->scalefac_compress ];
  593. if ( (gi->window_switching_flag == 1) && (gi->block_type == 2) )
  594. {
  595.     if ( gi->mixed_block_flag )
  596.     {
  597. bits += (8 * slen1) + (9 * slen1) + (18 * slen2);
  598.     }
  599.     else
  600.     {
  601. bits += (18 * slen1) + (18 * slen2);
  602.     }
  603. }
  604. else
  605. {
  606.     if ( (gr == 0) || (si->scfsi[ch][0] == 0) )
  607. bits += (6 * slen1);
  608.     if ( (gr == 0) || (si->scfsi[ch][1] == 0) )
  609. /*  bits += (6 * slen1);  This is wrong SS 19-12-96 */
  610. bits += (5 * slen1);
  611.     if ( (gr == 0) || (si->scfsi[ch][2] == 0) )
  612. /*  bits += (6 * slen1);   This is wrong SS 19-12-96 */
  613. bits += (5 * slen2);
  614.     if ( (gr == 0) || (si->scfsi[ch][3] == 0) )
  615. /* bits += (6 * slen1);   This is wrong SS 19-12-96 */
  616. bits += (5 * slen2);
  617. }
  618.     }
  619.     else
  620.     {   /* MPEG 2 */
  621. assert( gi->sfb_partition_table );
  622. for ( partition = 0; partition < 4; partition++ )
  623.     bits += gi->slen[partition] * gi->sfb_partition_table[partition];
  624.     }
  625.     return bits;
  626. }
  627. /*************************************************************************/
  628. /*            scale_bitcount                                             */
  629. /*************************************************************************/
  630. /* Also calculates the number of bits necessary to code the scalefactors. */
  631. int scale_bitcount( III_scalefac_t *scalefac, gr_info *cod_info,
  632. int gr, int ch )
  633. {
  634.     int i, k, sfb, max_slen1 = 0, max_slen2 = 0, /*a, b, */ ep = 2;
  635.     static int slen1[16] = { 0, 0, 0, 0, 3, 1, 1, 1, 2, 2, 2, 3, 3, 3, 4, 4 };
  636.     static int slen2[16] = { 0, 1, 2, 3, 0, 1, 2, 3, 1, 2, 3, 1, 2, 3, 2, 3 };
  637.     static int pow2[5]   = { 1, 2, 4, 8, 16 };
  638.     if ( cod_info->window_switching_flag != 0 && cod_info->block_type == 2 )
  639.     {
  640.         if ( cod_info->mixed_block_flag == 0 ) 
  641.         {
  642.             /* a = 18; b = 18;  */
  643.             for ( i = 0; i < 3; i++ )
  644.             {
  645.                 for ( sfb = 0; sfb < 6; sfb++ )
  646.                     if ( scalefac->s[gr][ch][sfb][i] > max_slen1 )
  647.                         max_slen1 = scalefac->s[gr][ch][sfb][i];
  648.                 for (sfb = 6; sfb < 12; sfb++ )
  649.                     if ( scalefac->s[gr][ch][sfb][i] > max_slen2 )
  650.                         max_slen2 = scalefac->s[gr][ch][sfb][i];
  651.             }
  652.         }
  653.         else
  654.         {/* mixed_block_flag = 1 */
  655.             /* a = 17; b = 18;  */
  656.             for ( sfb = 0; sfb < 8; sfb++ )
  657.                 if ( scalefac->l[gr][ch][sfb] > max_slen1 )
  658.                     max_slen1 = scalefac->l[gr][ch][sfb];
  659.             for ( i = 0; i < 3; i++ )
  660.             {
  661.                 for ( sfb = 3; sfb < 6; sfb++ )
  662.                     if ( scalefac->s[gr][ch][sfb][i] > max_slen1 )
  663.                         max_slen1 = scalefac->s[gr][ch][sfb][i];
  664.                 for ( sfb = 6; sfb < 12; sfb++ )
  665.                     if ( scalefac->s[gr][ch][sfb][i] > max_slen2 )
  666.                         max_slen2 = scalefac->s[gr][ch][sfb][i];
  667.             }
  668.         }
  669.     }
  670.     else
  671.     { /* block_type == 1,2,or 3 */
  672.         /* a = 11; b = 10;   */
  673.         for ( sfb = 0; sfb < 11; sfb++ )
  674.             if ( scalefac->l[gr][ch][sfb] > max_slen1 )
  675.                 max_slen1 = scalefac->l[gr][ch][sfb];
  676.         for ( sfb = 11; sfb < 21; sfb++ )
  677.             if ( scalefac->l[gr][ch][sfb] > max_slen2 )
  678.                 max_slen2 = scalefac->l[gr][ch][sfb];
  679.     }
  680.     for ( k = 0; k < 16; k++ )
  681.     {
  682.         if ( (max_slen1 < pow2[slen1[k]]) && (max_slen2 < pow2[slen2[k]]) )
  683.         { 
  684.             ep = 0;
  685.             break;
  686.         } 
  687.     }
  688.     if ( ep == 0 )
  689.         cod_info->scalefac_compress = k;
  690. #ifdef DEBUG
  691.     if ( ep != 0 ) 
  692.         printf( "---WARNING !! Amplification of some bands over limitsn" );
  693. #endif
  694.     return ep;
  695. }
  696. /*************************************************************************/
  697. /*            scale_bitcount_lsf                                         */
  698. /*************************************************************************/
  699. /* Also counts the number of bits to encode the scalefacs but for MPEG 2 */ 
  700. /* Lower sampling frequencies  (24, 22.05 and 16 kHz.)                   */
  701.  
  702. /*  This is reverse-engineered from section 2.4.3.2 of the MPEG2 IS,     */
  703. /* "Audio Decoding Layer III"                                            */
  704. int scale_bitcount_lsf( III_scalefac_t *scalefac, gr_info *cod_info,
  705.     int gr, int ch )
  706. {
  707.     int table_number, row_in_table, partition, nr_sfb, window, over;
  708.     int i, k, sfb, max_sfac[ 4 ];
  709.     unsigned *partition_table;
  710.     /*
  711.       Set partition table. Note that should try to use table one,
  712.       but do not yet...
  713.     */
  714.     if ( cod_info->preflag )
  715. table_number = 2;
  716.     else
  717. table_number = 0;
  718.     for ( i = 0; i < 4; i++ )
  719. max_sfac[i] = 0;
  720.     if ( cod_info->window_switching_flag != 0 && cod_info->block_type == 2 )
  721.     {
  722.         if ( cod_info->mixed_block_flag == 0 ) 
  723.         {
  724.     row_in_table = 1;
  725.     partition_table = &nr_of_sfb_block[table_number][row_in_table][0];
  726.     for ( sfb = 0, partition = 0; partition < 4; partition++ )
  727.     {
  728. nr_sfb = partition_table[ partition ] / 3;
  729. for ( i = 0; i < nr_sfb; i++, sfb++ )
  730.     for ( window = 0; window < 3; window++ )
  731. if ( scalefac->s[gr][ch][sfb][window] > max_sfac[partition] )
  732.     max_sfac[partition] = scalefac->s[gr][ch][sfb][window];
  733.     }
  734.         }
  735.         else
  736.         {/* mixed_block_flag = 1 */
  737.     row_in_table = 2;
  738.     partition_table = &nr_of_sfb_block[table_number][row_in_table][0];
  739.     partition = 0;
  740.     nr_sfb = partition_table[ partition ];
  741.     for ( i = 0; i < nr_sfb; i++, sfb++ )
  742. if ( scalefac->l[gr][ch][sfb] > max_sfac[partition] )
  743.     max_sfac[partition] = scalefac->l[gr][ch][sfb];
  744.     
  745.     for ( sfb = 0, partition = 1; partition < 4; partition++ )
  746.     {
  747. nr_sfb = partition_table[ partition ] / 3;
  748. for ( i = 0; i < nr_sfb; i++, sfb++ )
  749.     for ( window = 0; window < 3; window++ )
  750. if ( scalefac->s[gr][ch][sfb][window] > max_sfac[partition] )
  751.     max_sfac[partition] = scalefac->s[gr][ch][sfb][window];
  752.     }
  753.         }
  754.     }
  755.     else
  756.     {
  757. row_in_table = 0;
  758. partition_table = &nr_of_sfb_block[table_number][row_in_table][0];
  759. partition = 0;
  760. for ( sfb = 0, partition = 0; partition < 4; partition++ )
  761. {
  762.     nr_sfb = partition_table[ partition ];
  763.     for ( i = 0; i < nr_sfb; i++, sfb++ )
  764. if ( scalefac->l[gr][ch][sfb] > max_sfac[partition] )
  765.     max_sfac[partition] = scalefac->l[gr][ch][sfb];
  766. }
  767.     }
  768.     for ( over = 0, partition = 0; partition < 4; partition++ )
  769.     {
  770. if ( max_sfac[partition] > max_sfac_tab[table_number][partition] )
  771.     over++;
  772.     }
  773.     if ( !over )
  774.     {
  775. /*
  776.   Since no bands have been over-amplified, we can set scalefac_compress
  777.   and slen[] for the formatter
  778. */
  779. static int log2tab[] = { 0, 1, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 4, 4 };
  780. unsigned slen1, slen2, slen3, slen4;
  781.         cod_info->sfb_partition_table = &nr_of_sfb_block[table_number][row_in_table][0];
  782. for ( partition = 0; partition < 4; partition++ )
  783.     cod_info->slen[partition] = log2tab[max_sfac[partition]];
  784. /* set scalefac_compress */
  785. slen1 = cod_info->slen[ 0 ];
  786. slen2 = cod_info->slen[ 1 ];
  787. slen3 = cod_info->slen[ 2 ];
  788. slen4 = cod_info->slen[ 3 ];
  789. switch ( table_number )
  790. {
  791.   case 0:
  792.     cod_info->scalefac_compress = (((slen1 * 5) + slen2) << 4)
  793. + (slen3 << 2)
  794. + slen4;
  795.     break;
  796.   case 1:
  797.     cod_info->scalefac_compress = 400
  798. + (((slen1 * 5) + slen2) << 2)
  799. + slen3;
  800.     break;
  801.   case 2:
  802.     cod_info->scalefac_compress = 500 + (slen1 * 3) + slen2;
  803.     break;
  804.   default:
  805.     fprintf( stderr, "intensity stereo not implemented yetn" );
  806.     exit( EXIT_FAILURE );
  807.     break;
  808. }
  809.     }
  810. #ifdef DEBUG
  811.     if ( over ) 
  812.         printf( "---WARNING !! Amplification of some bands over limitsn" );
  813. #endif
  814.     return over;
  815. }
  816. /*************************************************************************/
  817. /*            calc_noise                                                 */
  818. /*************************************************************************/
  819. /*   Function: Calculate the distortion introduced by the quantization   */
  820. /*   in each scale factor band.                                          */
  821. void calc_noise( double xr[576], int ix[576], gr_info *cod_info,
  822.     double xfsf[4][CBLIMIT] )
  823. {
  824.     int start, end, sfb, l, i;
  825.     double sum,step,bw;
  826.     D192_3 *xr_s;
  827.     I192_3 *ix_s;
  828.     xr_s = (D192_3 *) xr;
  829.     ix_s = (I192_3 *) ix;
  830.     step = pow( 2.0, (cod_info->quantizerStepSize) * 0.25 );
  831.     for ( sfb = 0; sfb < cod_info->sfb_lmax; sfb++ )
  832.     {
  833.         start = scalefac_band_long[ sfb ];
  834.         end   = scalefac_band_long[ sfb+1 ];
  835. bw = end - start;
  836.         for ( sum = 0.0, l = start; l < end; l++ )
  837.         {
  838.             double temp;
  839.             temp = fabs( xr[l] ) - pow( (double) ix[l], 4.0 / 3.0 ) * step;
  840.             sum += temp * temp; 
  841.         }
  842.         xfsf[0][sfb] = sum / bw;
  843.     }
  844.     for ( i = 0; i < 3; i++ )
  845.     {
  846.         step = pow( 2.0, (cod_info->quantizerStepSize) * 0.25 ); /* subblock_gain ? */
  847.         for ( sfb = cod_info->sfb_smax; sfb < 12; sfb++ )
  848.         {
  849.             start = scalefac_band_short[ sfb ];
  850.             end   = scalefac_band_short[ sfb+1 ];
  851.     bw = end - start;
  852.             
  853.             for ( sum = 0.0, l = start; l < end; l++ )
  854.             {
  855.                 double temp;
  856.                 temp = fabs( (*xr_s)[l][i] ) - pow( (double) (*ix_s)[l][i], 4.0 / 3.0 ) * step;
  857.                 sum += temp * temp;
  858.             }       
  859.             xfsf[i+1][sfb] = sum / bw;
  860.         }
  861.     }
  862. }
  863. /*************************************************************************/
  864. /*            calc_xmin                                                  */
  865. /*************************************************************************/
  866. /*
  867.   Calculate the allowed distortion for each scalefactor band,
  868.   as determined by the psychoacoustic model.
  869.   xmin(sb) = ratio(sb) * en(sb) / bw(sb)
  870. */
  871. void calc_xmin( double xr[2][2][576], III_psy_ratio *ratio,
  872.    gr_info *cod_info, III_psy_xmin *l3_xmin,
  873.    int gr, int ch )
  874. {
  875.     int start, end, sfb, l, b;
  876.     double en, bw;
  877.     D192_3 *xr_s;
  878.     xr_s = (D192_3 *) xr[gr][ch] ;
  879.     for ( sfb = cod_info->sfb_smax; sfb < SFB_SMAX - 1; sfb++ )
  880.     {
  881.         start = scalefac_band_short[ sfb ];
  882.         end   = scalefac_band_short[ sfb + 1 ];
  883. bw = end - start;
  884.         for ( b = 0; b < 3; b++ )
  885.         {
  886.             for ( en = 0.0, l = start; l < end; l++ )
  887.                 en += (*xr_s)[l][b] * (*xr_s)[l][b];
  888.             l3_xmin->s[gr][ch][sfb][b] = ratio->s[gr][ch][sfb][b] * en / bw;
  889.         }
  890.     }
  891.     for ( sfb = 0; sfb < cod_info->sfb_lmax; sfb++ )
  892.     {
  893.         start = scalefac_band_long[ sfb ];
  894.         end   = scalefac_band_long[ sfb+1 ];
  895. bw = end - start;
  896.         for ( en = 0.0, l = start; l < end; l++ )
  897.             en += xr[gr][ch][l] * xr[gr][ch][l];
  898.         l3_xmin->l[gr][ch][sfb] = ratio->l[gr][ch][sfb] * en / bw;
  899.     }
  900. }
  901. /*************************************************************************/
  902. /*            loop_break                                                 */
  903. /*************************************************************************/
  904. /*  Function: Returns zero if there is a scalefac which has not been
  905.     amplified. Otherwise it returns one. 
  906. */
  907. int loop_break( III_scalefac_t *scalefac, gr_info *cod_info,
  908.     int gr, int ch )
  909. {
  910.     int i, sfb, temp = 1;
  911.     for ( sfb = 0; sfb < cod_info->sfb_lmax; sfb++ )
  912.         if ( scalefac->l[gr][ch][sfb] == 0 )
  913.             temp = 0;
  914.     for ( sfb = cod_info->sfb_smax; sfb < 12; sfb++ )
  915.         for ( i = 0; i < 3; i++ )
  916.             if ( scalefac->s[gr][ch][sfb][i] == 0 )
  917.                 temp = 0;
  918. #ifdef DEBUG
  919.     if ( temp != 0 )
  920.         printf( "---WARNING !! All scalefactor bands amplifiedn" );
  921. #endif
  922.     return temp;
  923. }
  924. /*************************************************************************/
  925. /*            preemphasis                                                */
  926. /*************************************************************************/
  927. /*
  928.   See ISO 11172-3  section  C.1.5.4.3.4
  929. */
  930. void preemphasis( double xr[576], double xfsf[4][CBLIMIT],
  931.      III_psy_xmin  *l3_xmin,
  932.      int gr, int ch, III_side_info_t *l3_side )
  933. {
  934.     int i, sfb, start, end, scfsi_band, over;
  935.     double ifqstep;
  936.     gr_info *cod_info = &l3_side->gr[gr].ch[ch].tt;
  937.     if ( gr == 1 )
  938.     {
  939. /*
  940.   If the second granule is being coded and scfsi is active in
  941.   at least one scfsi_band, the preemphasis in the second granule
  942.   is set equal to the setting in the first granule
  943. */
  944. for ( scfsi_band = 0; scfsi_band < 4; scfsi_band++ )
  945.     if ( l3_side->scfsi[ch][scfsi_band] )
  946.     {
  947. cod_info->preflag = l3_side->gr[0].ch[ch].tt.preflag;
  948. return;
  949.     }
  950.     }
  951.     /*
  952.       Preemphasis is switched on if in all the upper four scalefactor
  953.       bands the actual distortion exceeds the threshold after the
  954.       first call of the inner loop
  955.     */
  956.     if ( cod_info->block_type != 2 && cod_info->preflag == 0 )
  957.     {
  958. over = 0;
  959. for ( sfb = 17; sfb < 21; sfb++ )
  960.     if ( xfsf[0][sfb] > l3_xmin->l[gr][ch][sfb] )
  961. over++;
  962. if (over == 4 )
  963. {
  964.     cod_info->preflag = 1;
  965.     ifqstep = ( cod_info->scalefac_scale == 0 ) ? sqrt(2.)
  966. : pow( 2.0, (0.5 * (1.0 + (double) cod_info->scalefac_scale)) );
  967.     for ( sfb = 0; sfb < cod_info->sfb_lmax; sfb++ )
  968.     {
  969. l3_xmin->l[gr][ch][sfb] *= pow( ifqstep, 2.0 * (double) pretab[sfb] );
  970. start = scalefac_band_long[ sfb ];
  971. end   = scalefac_band_long[ sfb+1 ];
  972. for( i = start; i < end; i++ )
  973.     xr[i] *= pow( ifqstep, (double) pretab[sfb] );
  974.     }
  975. }
  976.     }
  977. }
  978. /*************************************************************************/
  979. /*            amp_scalefac_bands                                         */
  980. /*************************************************************************/
  981. /* 
  982.   Amplify the scalefactor bands that violate the masking threshold.
  983.   See ISO 11172-3 Section C.1.5.4.3.5
  984. */
  985. int amp_scalefac_bands( double xr[576], double xfsf[4][CBLIMIT],
  986.     III_psy_xmin *l3_xmin, III_side_info_t *l3_side,
  987.     III_scalefac_t *scalefac,
  988.     int gr, int ch, int iteration )
  989. {
  990.     int start, end, l, sfb, i, scfsi_band, over = 0;
  991.     double ifqstep, ifqstep2;
  992.     D192_3 *xr_s;
  993.     gr_info *cod_info, *gr0;
  994.     int copySF, preventSF;
  995.     cod_info = &l3_side->gr[gr].ch[ch].tt;
  996.     gr0      = &l3_side->gr[0].ch[ch].tt;
  997.     xr_s = (D192_3 *) xr;
  998.     copySF = 0;
  999.     preventSF = 0;
  1000.     if ( cod_info->scalefac_scale == 0 )
  1001. ifqstep = sqrt( 2.0 );
  1002.     else
  1003. ifqstep = pow( 2.0, 0.5 * (1.0 + (double) cod_info->scalefac_scale) );
  1004.     if ( gr == 1 )
  1005.     {
  1006. /*
  1007.   If the second granule is being coded and scfsi is active in at
  1008.   least one scfsi_band...
  1009. */
  1010. for ( scfsi_band = 0; scfsi_band < 4; scfsi_band++ )
  1011.     if ( l3_side->scfsi[ch][scfsi_band] )
  1012.     {
  1013. /*
  1014.   a) ifqstep has to be set similar to the
  1015.    first granule...
  1016. */
  1017. if ( gr0->scalefac_scale == 0 )
  1018.     ifqstep = sqrt( 2.0 );
  1019. else
  1020.     ifqstep = pow( 2.0, 0.5 * (1.0 + (double) gr0->scalefac_scale) );
  1021. if ( iteration == 1 )
  1022. {
  1023.     /*
  1024.       b) If it is the first iteration, the scalefactors
  1025.       of scalefactor bands in which scfsi is enabled
  1026.       must be taken from the first granule
  1027.     */  
  1028.     copySF = 1;
  1029. }
  1030. else
  1031. {
  1032.     /*
  1033.       c) If it is not the first iteration, the amplification
  1034.       must be prevented for scalefactor bands in which
  1035.       scfsi is enabled
  1036.     */
  1037.     preventSF = 1;
  1038. }
  1039. break;
  1040.     }
  1041.     }
  1042.     ifqstep2 = ifqstep * ifqstep;
  1043.     scfsi_band = 0;
  1044.     
  1045.     for ( sfb = 0; sfb < cod_info->sfb_lmax; sfb++ )
  1046.     {
  1047. if ( copySF || preventSF )
  1048. {
  1049.     if ( sfb == scfsi_band_long[scfsi_band + 1] )
  1050. scfsi_band += 1;
  1051.     if ( l3_side->scfsi[ch][scfsi_band] )
  1052.     {
  1053. if ( copySF )
  1054.     scalefac->l[gr][ch][sfb] = scalefac->l[0][ch][sfb];
  1055. continue;
  1056.     }
  1057. }     
  1058. if ( xfsf[0][sfb] > l3_xmin->l[gr][ch][sfb] )
  1059. {
  1060.     over++;
  1061.     l3_xmin->l[gr][ch][sfb] *= ifqstep2;
  1062.     scalefac->l[gr][ch][sfb]++;
  1063.     start = scalefac_band_long[sfb];
  1064.     end   = scalefac_band_long[sfb+1];
  1065.     for ( l = start; l < end; l++ )
  1066. xr[l] *= ifqstep;
  1067. }
  1068.     }
  1069.     /*
  1070.       Note that scfsi is not enabled for frames containing
  1071.       short blocks
  1072.     */
  1073.     for ( i = 0; i < 3; i++ )
  1074.         for ( sfb = cod_info->sfb_smax; sfb < 12; sfb++ )
  1075.             if ( xfsf[i+1][sfb] > l3_xmin->s[gr][ch][sfb][i] )
  1076.             {
  1077.                 over++;
  1078.                 l3_xmin->s[gr][ch][sfb][i] *= ifqstep2;
  1079.                 scalefac->s[gr][ch][sfb][i]++;
  1080. #ifdef DEBUGSC
  1081.                 printf( "cod_info->scalefac[%d][%d] = %d (amp_scale)n",
  1082.                         i,sfb,scalefac->s[gr][ch][sfb][i] );
  1083. #endif
  1084.                 start = scalefac_band_short[sfb];
  1085.                 end   = scalefac_band_short[sfb+1];
  1086.                 for ( l = start; l < end; l++ )
  1087.                     (*xr_s)[l][i] *= ifqstep;
  1088.             }
  1089.     return over;
  1090. }
  1091. /*************************************************************************/
  1092. /*            quantize                                                   */
  1093. /*************************************************************************/
  1094. /*
  1095.   Function: Quantization of the vector xr ( -> ix)
  1096. */
  1097. void quantize( double xr[576], int ix[576], gr_info *cod_info )
  1098. {
  1099.     int i, b, l_end, s_start;
  1100.     double step, quantizerStepSize;
  1101.     D192_3 *xr_s;
  1102.     I192_3 *ix_s;
  1103.     xr_s = (D192_3 *) xr;
  1104.     ix_s = (I192_3 *) ix;
  1105.     quantizerStepSize = (double) cod_info->quantizerStepSize;
  1106.     for ( i = 0; i < 576; i++ )
  1107. ix[i] = 0;
  1108.     if ( cod_info->quantizerStepSize == 0.0 )
  1109. step = 1.0;
  1110.     else
  1111. step = pow ( 2.0, quantizerStepSize * 0.25 );
  1112.     if ( cod_info->window_switching_flag != 0 && cod_info->block_type == 2 )
  1113. if ( cod_info->mixed_block_flag == 0 )
  1114. {
  1115.     l_end = 0;
  1116.     s_start = 0;
  1117. }
  1118. else
  1119. {
  1120.     l_end = 18 * 2;
  1121.     s_start = 6 * 2;
  1122. }
  1123.     else
  1124.     {
  1125. l_end = 576;
  1126. s_start = 192;
  1127.     }
  1128.     for ( i = 0; i < l_end; i++ )
  1129. ix[i] = nint( pow(fabs(xr[i]) / step, 0.75) - 0.0946 );
  1130.     
  1131.     if ( s_start < 192 )
  1132. for ( b = 0; b < 3; b++ )
  1133. {
  1134.     step = pow( 2.0, (quantizerStepSize + 8.0 * (double) cod_info->subblock_gain[b]) * 0.25 );
  1135.     for ( i = s_start; i < 192; i++ )
  1136. (*ix_s)[i][b] = nint( pow(fabs((*xr_s)[i][b]) / step, 0.75) - 0.0946 );
  1137. }
  1138. }
  1139. /*************************************************************************/
  1140. /*            ix_max                                                     */
  1141. /*************************************************************************/
  1142. /*
  1143.   Function: Calculate the maximum of ix from 0 to 575
  1144. */
  1145. int ix_max( int ix[576], unsigned int begin, unsigned int end )
  1146. {
  1147.     int i, max = 0;
  1148.     for ( i = begin; i < end; i++ )
  1149.     {
  1150.         int x = abs( ix[i] );
  1151.         if ( x > max )
  1152.             max = x;
  1153.     }
  1154.     return max;
  1155. }
  1156. /*************************************************************************/
  1157. /*            xr_max                                                     */
  1158. /*************************************************************************/
  1159. /*
  1160.   Function: Calculate the maximum of xr[576]  from 0 to 575
  1161. */
  1162. double xr_max( double xr[576], unsigned int begin, unsigned int end )
  1163. {
  1164.     int i;
  1165.     double max = 0.0, temp;
  1166.     for ( i = begin; i < end; i++ )
  1167.         if( (temp = fabs(xr[i])) > max )
  1168.     max = temp;
  1169.     return max;
  1170. }
  1171. /*        Noiseless coding  -- Huffman coding   */
  1172. /*************************************************************************/
  1173. /*            calc_runlen                                                */
  1174. /*************************************************************************/
  1175. /*
  1176. Function: Calculation of rzero, count1, big_values
  1177. (Partitions ix into big values, quadruples and zeros).
  1178. */
  1179. void calc_runlen( int ix[576], gr_info *cod_info )
  1180. {
  1181.     int i;
  1182.     int rzero = 0; 
  1183.     if ( cod_info->window_switching_flag && (cod_info->block_type == 2) )
  1184.     {  /* short blocks */
  1185.         cod_info->count1 = 0;
  1186.         cod_info->big_values = 288;
  1187.     }
  1188.     else
  1189.     {
  1190.         for ( i = 576; i > 1; i -= 2 )
  1191.             if ( ix[i-1] == 0 && ix[i-2] == 0 )
  1192.                 rzero++;
  1193.             else
  1194.                 break;
  1195.         
  1196.         cod_info->count1 = 0 ;
  1197.         for ( ; i > 3; i -= 4 )
  1198.             if ( abs(ix[i-1]) <= 1
  1199.               && abs(ix[i-2]) <= 1
  1200.               && abs(ix[i-3]) <= 1
  1201.               && abs(ix[i-4]) <= 1 )
  1202.                 cod_info->count1++;
  1203.             else
  1204.                 break;
  1205.         
  1206.         cod_info->big_values = i/2;
  1207.     }
  1208.     assert( (2 * rzero + 4 * cod_info->count1 + 2 * cod_info->big_values) == 576 );
  1209. }
  1210. /*************************************************************************/
  1211. /*            count1_bitcount                                            */
  1212. /*************************************************************************/
  1213. /*
  1214.   Determines the number of bits to encode the quadruples.
  1215. */
  1216. int count1_bitcount( int ix[ 576 ], gr_info *cod_info )
  1217. {
  1218.     int abs_and_sign( int *x );
  1219.     int p, i, k, bitsum_count1;
  1220.     int v, w, x, y, signbits;
  1221.     int sum0 = 0, sum1 = 0;
  1222.     for ( i = cod_info->big_values * 2, k = 0; k < cod_info->count1; i += 4, k++ )
  1223.     {
  1224.         v = ix[ i ];
  1225.         w = ix[ i + 1 ];
  1226.         x = ix[ i + 2 ];
  1227.         y = ix[ i + 3 ];
  1228.         
  1229.         abs_and_sign( &v );
  1230.         abs_and_sign( &w );
  1231.         abs_and_sign( &x );
  1232.         abs_and_sign( &y );
  1233.         p = v + (w << 1) + (x << 2) + (y << 3);
  1234.         
  1235.         signbits = 0;
  1236.         if ( v != 0 )
  1237.             signbits += 1;
  1238.         if ( w != 0 )
  1239.             signbits += 1;
  1240.         if ( x != 0 )
  1241.             signbits += 1;
  1242.         if ( y != 0 )
  1243.             signbits += 1;
  1244.         sum0 += signbits;
  1245.         sum1 += signbits;
  1246.         sum0 += ht[ 32 ].hlen[ p ];
  1247.         sum1 += ht[ 33 ].hlen[ p ];
  1248.     }
  1249.     if ( sum0 < sum1 )
  1250.     {
  1251.         bitsum_count1 = sum0;
  1252.         cod_info->count1table_select = 0;
  1253.     }
  1254.     else
  1255.     {
  1256.         bitsum_count1 = sum1;
  1257.         cod_info->count1table_select = 1;
  1258.     }
  1259.     return( bitsum_count1 );
  1260. }
  1261. struct
  1262. {
  1263.     unsigned region0_count;
  1264.     unsigned region1_count;
  1265. } subdv_table[ 23 ] =
  1266. {
  1267. {0, 0}, /* 0 bands */
  1268. {0, 0}, /* 1 bands */
  1269. {0, 0}, /* 2 bands */
  1270. {0, 0}, /* 3 bands */
  1271. {0, 0}, /* 4 bands */
  1272. {0, 1}, /* 5 bands */
  1273. {1, 1}, /* 6 bands */
  1274. {1, 1}, /* 7 bands */
  1275. {1, 2}, /* 8 bands */
  1276. {2, 2}, /* 9 bands */
  1277. {2, 3}, /* 10 bands */
  1278. {2, 3}, /* 11 bands */
  1279. {3, 4}, /* 12 bands */
  1280. {3, 4}, /* 13 bands */
  1281. {3, 4}, /* 14 bands */
  1282. {4, 5}, /* 15 bands */
  1283. {4, 5}, /* 16 bands */
  1284. {4, 6}, /* 17 bands */
  1285. {5, 6}, /* 18 bands */
  1286. {5, 6}, /* 19 bands */
  1287. {5, 7}, /* 20 bands */
  1288. {6, 7}, /* 21 bands */
  1289. {6, 7}, /* 22 bands */
  1290. };
  1291. /*************************************************************************/
  1292. /*            subdivide                                                  */
  1293. /*************************************************************************/
  1294. /* presumable subdivides the bigvalue region which will
  1295.    use separate Huffman tables.
  1296. */
  1297. void subdivide( gr_info *cod_info )
  1298. {
  1299.     int scfb_anz = 0;
  1300.     int bigvalues_region;
  1301.     
  1302.     if ( cod_info->big_values == 0 )
  1303.     { /* no big_values region */
  1304.         cod_info->region0_count = 0;
  1305.         cod_info->region1_count = 0;
  1306.     }
  1307.     else
  1308.     {
  1309.         bigvalues_region = 2 * cod_info->big_values;
  1310.         if ( (cod_info->window_switching_flag == 0) )
  1311.         { /* long blocks */
  1312.             int thiscount, index;
  1313.             /* Calculate scfb_anz */
  1314.             while ( scalefac_band_long[scfb_anz] < bigvalues_region )
  1315.                 scfb_anz++;
  1316.             assert( scfb_anz < 23 );
  1317.             cod_info->region0_count = subdv_table[scfb_anz].region0_count;
  1318.             thiscount = cod_info->region0_count;
  1319.             index = thiscount + 1;
  1320.             while ( thiscount && (scalefac_band_long[index] > bigvalues_region) )
  1321.             {
  1322.                 thiscount -= 1;
  1323.                 index -= 1;
  1324.             }
  1325.             cod_info->region0_count = thiscount;
  1326.             cod_info->region1_count = subdv_table[scfb_anz].region1_count;
  1327.             index = cod_info->region0_count + cod_info->region1_count + 2;
  1328.             thiscount = cod_info->region1_count;
  1329.             while ( thiscount && (scalefac_band_long[index] > bigvalues_region) )
  1330.             {
  1331.                 thiscount -= 1;
  1332.                 index -= 1;
  1333.             }
  1334.             cod_info->region1_count = thiscount;
  1335.             cod_info->address1 = scalefac_band_long[cod_info->region0_count+1];
  1336.             cod_info->address2 = scalefac_band_long[cod_info->region0_count
  1337.                                                     + cod_info->region1_count + 2 ];
  1338.             cod_info->address3 = bigvalues_region;
  1339.         }
  1340.         else
  1341.         {
  1342.             if ( (cod_info->block_type == 2) && (cod_info->mixed_block_flag == 0) )
  1343.             { 
  1344.                 cod_info->region0_count =  8;
  1345.                 cod_info->region1_count =  36;
  1346.                 cod_info->address1 = 36;
  1347.                 cod_info->address2 = bigvalues_region;
  1348.                 cod_info->address3 = 0;  
  1349.             }
  1350.             else
  1351.             {
  1352.                 cod_info->region0_count = 7;
  1353.                 cod_info->region1_count = 13;
  1354.                 cod_info->address1 = scalefac_band_long[cod_info->region0_count+1];
  1355.                 cod_info->address2 = bigvalues_region;
  1356.                 cod_info->address3 = 0;
  1357.             }
  1358.         }
  1359.     }
  1360. }
  1361. /*************************************************************************/
  1362. /*            bigv_tab_select                                            */
  1363. /*************************************************************************/
  1364. /*
  1365. /*  Function: Select huffman code tables for bigvalues regions 
  1366. */
  1367. void bigv_tab_select( int ix[576], gr_info *cod_info )
  1368. {
  1369.     /* int max; */
  1370.     cod_info->table_select[0] = 0;
  1371.     cod_info->table_select[1] = 0;
  1372.     cod_info->table_select[2] = 0;
  1373.     
  1374.     if ( cod_info->window_switching_flag && (cod_info->block_type == 2) )
  1375.     {
  1376.         /*
  1377.           Within each scalefactor band, data is given for successive
  1378.           time windows, beginning with window 0 and ending with window 2.
  1379.           Within each window, the quantized values are then arranged in
  1380.           order of increasing frequency...
  1381.           */
  1382.         int sfb, window, line, start, end, max1, max2, x, y;
  1383.         int region1Start;
  1384.         int *pmax;
  1385.         region1Start = 12;
  1386.         max1 = max2 = 0;
  1387.         for ( sfb = 0; sfb < 13; sfb++ )
  1388.         {
  1389.             start = scalefac_band_short[ sfb ];
  1390.             end   = scalefac_band_short[ sfb+1 ];
  1391.             
  1392.             if ( start < region1Start )
  1393.                 pmax = &max1;
  1394.             else
  1395.                 pmax = &max2;
  1396.             
  1397.             for ( window = 0; window < 3; window++ )
  1398.                 for ( line = start; line < end; line += 2 )
  1399.                 {
  1400.                     assert( line >= 0 );
  1401.                     assert( line < 576 );
  1402.                     x = abs( ix[ (line * 3) + window ] );
  1403.                     y = abs( ix[ ((line + 1) * 3) + window ]);
  1404.                     *pmax = *pmax > x ? *pmax : x;
  1405.                     *pmax = *pmax > y ? *pmax : y;
  1406.                 }
  1407.         }
  1408.         cod_info->table_select[0] = choose_table( max1 );
  1409.         cod_info->table_select[1] = choose_table( max2 );
  1410.     }
  1411.     else
  1412.     {
  1413.         if ( cod_info->address1 > 0 )
  1414.             cod_info->table_select[0] = new_choose_table( ix, 0, cod_info->address1 );
  1415.         if ( cod_info->address2 > cod_info->address1 )
  1416.             cod_info->table_select[1] = new_choose_table( ix, cod_info->address1, cod_info->address2 );
  1417.         if ( cod_info->big_values * 2 > cod_info->address2 )
  1418.             cod_info->table_select[2] = new_choose_table( ix, cod_info->address2, cod_info->big_values * 2 );
  1419.     }
  1420. }
  1421. /*************************************************************************/
  1422. /*            new_choose table                                           */
  1423. /*************************************************************************/
  1424. /*
  1425.   Choose the Huffman table that will encode ix[begin..end] with
  1426.   the fewest bits.
  1427.   Note: This code contains knowledge about the sizes and characteristics
  1428.   of the Huffman tables as defined in the IS (Table B.7), and will not work
  1429.   with any arbitrary tables.
  1430. */
  1431. int new_choose_table( int ix[576], unsigned int begin, unsigned int end )
  1432. {
  1433.     int i, max;
  1434.     int choice[ 2 ];
  1435.     int sum[ 2 ];
  1436.     max = ix_max( ix, begin, end );
  1437.     if ( max == 0 )
  1438.         return 0;
  1439.     
  1440.     max = abs( max );
  1441.     choice[ 0 ] = 0;
  1442.     choice[ 1 ] = 0;
  1443.     if ( max < 15 )
  1444.     {
  1445. /* try tables with no linbits */
  1446.         for ( i = 0; i < 14; i++ )
  1447.             if ( ht[i].xlen > max )
  1448.     {
  1449. choice[ 0 ] = i;
  1450.                 break;
  1451.     }
  1452. assert( choice[0] );
  1453. sum[ 0 ] = count_bit( ix, begin, end, choice[0] );
  1454. switch ( choice[0] )
  1455. {
  1456.   case 2:
  1457.     sum[ 1 ] = count_bit( ix, begin, end, 3 );
  1458.     if ( sum[1] <= sum[0] )
  1459. choice[ 0 ] = 3;
  1460.     break;
  1461.   case 5:
  1462.     sum[ 1 ] = count_bit( ix, begin, end, 6 );
  1463.     if ( sum[1] <= sum[0] )
  1464. choice[ 0 ] = 6;
  1465.     break;
  1466.   case 7:
  1467.     sum[ 1 ] = count_bit( ix, begin, end, 8 );
  1468.     if ( sum[1] <= sum[0] )
  1469.     {
  1470. choice[ 0 ] = 8;
  1471. sum[ 0 ] = sum[ 1 ];
  1472.     }
  1473.     sum[ 1 ] = count_bit( ix, begin, end, 9 );
  1474.     if ( sum[1] <= sum[0] )
  1475. choice[ 0 ] = 9;
  1476.     break;
  1477.   case 10:
  1478.     sum[ 1 ] = count_bit( ix, begin, end, 11 );
  1479.     if ( sum[1] <= sum[0] )
  1480.     {
  1481. choice[ 0 ] = 11;
  1482. sum[ 0 ] = sum[ 1 ];
  1483.     }
  1484.     sum[ 1 ] = count_bit( ix, begin, end, 12 );
  1485.     if ( sum[1] <= sum[0] )
  1486. choice[ 0 ] = 12;
  1487.     break;
  1488.   case 13:
  1489.     sum[ 1 ] = count_bit( ix, begin, end, 15 );
  1490.     if ( sum[1] <= sum[0] )
  1491. choice[ 0 ] = 15;
  1492.     break;
  1493.   default:
  1494.     break;
  1495. }
  1496.     }
  1497.     else
  1498.     {
  1499. /* try tables with linbits */
  1500. max -= 15;
  1501. for ( i = 15; i < 24; i++ )
  1502. {
  1503.     if ( ht[i].linmax >= max )
  1504.     {
  1505. choice[ 0 ] = i;
  1506. break;
  1507.     }
  1508. }
  1509. for ( i = 24; i < 32; i++ )
  1510. {
  1511.     if ( ht[i].linmax >= max )
  1512.     {
  1513. choice[ 1 ] = i;
  1514. break;
  1515.     }
  1516. }
  1517. assert( choice[0] );
  1518. assert( choice[1] );
  1519. sum[ 0 ] = count_bit( ix, begin, end, choice[0] );
  1520. sum[ 1 ] = count_bit( ix, begin, end, choice[1] );
  1521. if ( sum[1] < sum[0] )
  1522.     choice[ 0 ] = choice[ 1 ];
  1523.     }
  1524.     return choice[ 0 ];
  1525. }
  1526. /*************************************************************************/
  1527. /*            choose table                                               */
  1528. /*************************************************************************/
  1529. int choose_table( int max )
  1530. {
  1531.     int  i, choice;
  1532.     if ( max == 0 )
  1533.         return 0;
  1534.     
  1535.     max = abs( max );    
  1536.     choice = 0;
  1537.     if ( max < 15 )
  1538.     {
  1539.         for ( i = 0; i < 15; i++ )
  1540.         {
  1541.             if ( ht[i].xlen > max )
  1542.             {
  1543. choice = i;
  1544. break;
  1545.             }
  1546.         }
  1547.     }
  1548.     else
  1549.     {
  1550. max -= 15;
  1551. for (i = 15; i < 32; i++ )
  1552. {
  1553.     if ( ht[i].linmax >= max )
  1554.     {
  1555. choice = i;
  1556. break;
  1557.     }
  1558. }
  1559.     }
  1560.     assert( choice );
  1561.     return choice;
  1562. }
  1563. /*************************************************************************/
  1564. /*            bigv_bitcount                                              */
  1565. /*************************************************************************/
  1566. /*
  1567. Function: Count the number of bits necessary to code the bigvalues region.
  1568. */
  1569. int bigv_bitcount( int ix[576], gr_info *gi )
  1570. {
  1571.     int bits = 0;
  1572.     
  1573.     if ( gi->window_switching_flag && gi->block_type == 2 )
  1574.     {
  1575.         /*
  1576.           Within each scalefactor band, data is given for successive
  1577.           time windows, beginning with window 0 and ending with window 2.
  1578.           Within each window, the quantized values are then arranged in
  1579.           order of increasing frequency...
  1580.           */
  1581.         int sfb, window, line, start, end;
  1582.         I192_3 *ix_s;
  1583.         if ( gi->mixed_block_flag )
  1584.         {
  1585.             unsigned int table;
  1586.             if ( (table = gi->table_select[0]) != 0 )
  1587.                 bits += count_bit( ix, 0, gi->address1, table );
  1588.             sfb = 2;
  1589.         }
  1590.         else
  1591.             sfb = 0;
  1592.         ix_s = (I192_3 *) &ix[0];
  1593.         for ( ; sfb < 13; sfb++ )
  1594.         {
  1595.             unsigned tableindex = 100;
  1596.             start = scalefac_band_short[ sfb ];
  1597.             end   = scalefac_band_short[ sfb+1 ];
  1598.             if ( start < 12 )
  1599.                 tableindex = gi->table_select[ 0 ];
  1600.             else
  1601.                 tableindex = gi->table_select[ 1 ];
  1602.             assert( tableindex < 32 );
  1603.             for ( window = 0; window < 3; window++ )
  1604.                 for ( line = start; line < end; line += 2 )
  1605.                 {
  1606.                     unsigned int code, ext;
  1607.                     int cbits, xbits;
  1608.                     int x = (*ix_s)[line][window];
  1609.                     int y = (*ix_s)[line + 1][window];
  1610.                     bits += HuffmanCode( tableindex, x, y, &code, &ext, &cbits, &xbits );
  1611.                 }
  1612.         }
  1613.     }
  1614.     else
  1615.     {
  1616.         unsigned int table;
  1617.         
  1618.         if( (table=gi->table_select[0]) != 0 )  /* region0 */ 
  1619.             bits += count_bit(ix, 0, gi->address1, table );
  1620.         if( (table=gi->table_select[1]) != 0 )  /* region1 */ 
  1621.             bits += count_bit(ix, gi->address1, gi->address2, table );
  1622.         if( (table=gi->table_select[2]) != 0 )  /* region2 */ 
  1623.             bits += count_bit(ix, gi->address2, gi->address3, table );
  1624.     }
  1625.     return bits;
  1626. }
  1627. /*************************************************************************/
  1628. /*            count_bit                                                  */
  1629. /*************************************************************************/
  1630. /*
  1631.  Function: Count the number of bits necessary to code the subregion. 
  1632. */
  1633. int count_bit( int ix[576], unsigned int start, unsigned int end, unsigned int table )
  1634. {
  1635.     int i, sum;
  1636.     sum = 0;
  1637.     for ( i = start; i < end; i += 2 )
  1638.     {
  1639.         unsigned int code, ext;
  1640.         int cbits, xbits;
  1641.         sum += HuffmanCode( table, ix[i], ix[i+1], &code, &ext, &cbits, &xbits );
  1642.     }
  1643.     return sum;
  1644. }
  1645. #ifndef HAVE_NINT
  1646. int
  1647. nint( double in )
  1648. {
  1649.     int    temp;
  1650.     if( in < 0 )  temp = (int)(in - 0.5);
  1651.     else    temp = (int)(in + 0.5);
  1652.     return(temp);
  1653. }
  1654. double
  1655. aint(double in) {
  1656. return((long) in);
  1657. }
  1658. #endif
  1659. /*
  1660.   Seymour's comment:  Jan 8 1995
  1661.   When mixed_block_flag is set, the low subbands 0-1 undergo the long
  1662.   window transform and are each split into 18 frequency lines, while
  1663.   the remaining 30 subbands undergo the short window transform and are
  1664.   each split into 6 frequency lines. A problem now arises, as neither
  1665.   the short or long scale factor bands apply to this mixed spectrum.
  1666.   The standard resolves this situation by using the first 8 long scale
  1667.   factor bands for the low spectrum and the short scale factor bands
  1668.   in the range of 3 to 11 (inclusive) for the remaining frequency lines.
  1669.   These scale factor bands do not match exactly to the 0-1 subbands
  1670.   for all sampling frequencies (32,44.1 and 48 kHz); however they
  1671.   were designed so that there would not be a frequency gap or overlap
  1672.   at the switch over point. (Note multiply short frequency lines by 3
  1673.   to account for wider frequency line.) 
  1674.   */
  1675. /*************************************************************************/
  1676. /*            gr_deco                                                    */
  1677. /*************************************************************************/
  1678. void gr_deco( gr_info *cod_info )
  1679. {
  1680.     if ( cod_info->window_switching_flag != 0 && cod_info->block_type == 2 )
  1681.         if ( cod_info->mixed_block_flag == 0 )
  1682.         {
  1683.             cod_info->sfb_lmax = 0; /* No sb*/
  1684.             cod_info->sfb_smax = 0;
  1685.         }
  1686.         else
  1687.         {
  1688.             cod_info->sfb_lmax = 8;
  1689.             cod_info->sfb_smax = 3;
  1690.         }
  1691.     else
  1692.     {
  1693.         cod_info->sfb_lmax = SFB_LMAX - 1;
  1694.         cod_info->sfb_smax = SFB_SMAX - 1;    /* No sb */
  1695.     }
  1696. }
  1697. /* The following optional code written by Seymour Shlien
  1698.    will speed up the outer_loop code which is called
  1699.    by iteration_loop. When BIN_SEARCH is defined, the
  1700.    outer_loop function precedes the call to the function inner_loop
  1701.    with a call to bin_search gain defined below, which
  1702.    returns a good starting quantizerStepSize.
  1703. */
  1704. #if defined(BIN_SEARCH) || defined(PERFORM) 
  1705. int count_bits(ix,cod_info)  
  1706. int  *ix; /*  I576  *ix; */
  1707. gr_info *cod_info;
  1708. {
  1709. int bits,max;
  1710.   calc_runlen(ix,cod_info); /*rzero,count1,big_values*/
  1711.   max = ix_max( ix, 0,576);
  1712.   if(max > 8192) return 100000;         /* report unsuitable quantizer */
  1713.   bits = count1_bitcount(ix, cod_info); /*count1_table selection*/
  1714.   subdivide(cod_info); /* bigvalues sfb division */
  1715.   bigv_tab_select(ix,cod_info); /* codebook selection*/
  1716.   bits += bigv_bitcount(ix,cod_info); /* bit count */
  1717. /* printf("nglobal_gain = %f  bits= %d ",cod_info->quantizerStepSize,bits);*/
  1718. return bits;
  1719. }
  1720. #endif
  1721. #ifdef BIN_SEARCH
  1722. int bin_search_StepSize(int desired_rate, double start, int *ix,
  1723.            double xrs[576], gr_info * cod_info)
  1724. {
  1725. double top,bot,next,last;
  1726. int bit;
  1727. top = start;
  1728. bot = 200;
  1729. next = start;
  1730. do
  1731.   {
  1732.   last = next;
  1733.   next = aint((top+bot)/2.0);
  1734.   cod_info->quantizerStepSize = next;
  1735.   quantize(xrs,ix,cod_info);
  1736.   bit = count_bits(ix,cod_info);
  1737.   if (bit>desired_rate) top = next;
  1738.   else bot = next;
  1739. /*  printf("n%f %f %f %d %d",next, top,bot,bit,desired_rate);*/
  1740.   }
  1741.   while ((bit != desired_rate) && fabs(last - next) > 1.0);
  1742. return next;
  1743. }
  1744. #endif
  1745. #ifdef PERFORM
  1746. /* The following code is used for exposing some problems with
  1747.    the outer_loop code. PERFORM should be defined to the
  1748.    frame number you wish to have additional output recorded
  1749.    in the file encode.log  - Seymour Shlien 14-Jan-97
  1750. */
  1751. /*
  1752. float worst_xfsf_to_xmin_ratio(l3_xmin,xfsf,block_type,gr,ch)
  1753. double xfsf[4][CBLIMIT];
  1754. III_psy_xmin *l3_xmin;
  1755. int block_type,gr,ch;
  1756. */
  1757. float worst_xfsf_to_xmin_ratio(III_psy_xmin *l3_xmin, double xfsf[4][CBLIMIT]
  1758.                              ,int block_type,int gr,int ch)
  1759. {
  1760. float ratio,maxratio;
  1761. int i,j;
  1762. maxratio =-100.0;
  1763. if (block_type != 2)
  1764.   for(i=0;i<21;i++)
  1765.     {
  1766.     ratio = 10.*log10(xfsf[0][i] /l3_xmin->l[gr][ch][i]);
  1767.     if (ratio > maxratio) maxratio = ratio;
  1768.     }
  1769. else
  1770.   {
  1771.   for(j=0;j<3;j++)
  1772. /* for(i = cod_info->sfb_smax; i <SFB_SMAX; i++) */
  1773.      for(i = 0; i <11; i++)
  1774.     {
  1775.     ratio = 10.*log10(xfsf[j+1][i] /l3_xmin->s[gr][ch][i][j]);
  1776.     if (ratio > maxratio) maxratio = ratio;
  1777.     }
  1778.   }
  1779. return maxratio;
  1780. }
  1781.  
  1782. print_ratios(handle_out,l3_xmin,xfsf,block_type,gr,ch)
  1783. FILE *handle_out;
  1784. double xfsf[4][CBLIMIT];
  1785. III_psy_xmin *l3_xmin;
  1786. int gr,ch;
  1787. int block_type;
  1788. {
  1789. float ratio;
  1790. int i,j;
  1791. if(block_type !=2)
  1792.  for (i=0;i<21;i++)
  1793.   {
  1794.    ratio = 100.0; /* signals undefined value in output */
  1795.    if(l3_xmin->l[gr][ch][i] >1.0e-20)
  1796.      ratio = 10.*log10(xfsf[0][i] /l3_xmin->l[gr][ch][i]);
  1797.    fprintf(handle_out,"%6.2f ",ratio);
  1798.    if(i%5==4) fprintf(handle_out,"n");
  1799.   }
  1800. else
  1801.   
  1802.   for(j=0;j<3;j++)
  1803.    { fprintf(handle_out,"n  block %dn",j);
  1804.      for(i = 0; i <11; i++)
  1805.       {
  1806.       ratio = 10.*log10(xfsf[j+1][i] /l3_xmin->s[gr][ch][i][j]);
  1807.       fprintf(handle_out,"%6.2f ",ratio);
  1808.       if(i%5==4) fprintf(handle_out,"n");
  1809.       }
  1810.    }
  1811. fprintf(handle_out,"n");
  1812. }
  1813. print_scalefacs(handle_out,scalefac,block_type,gr,ch)
  1814. FILE *handle_out;
  1815. III_scalefac_t *scalefac;
  1816. int gr,ch;
  1817. int block_type;
  1818. {
  1819. int sfb,j;
  1820. if(block_type !=2)
  1821.  for ( sfb = 0; sfb < 21; sfb++ )
  1822.    {
  1823.    fprintf(handle_out,"%6d ", scalefac->l[gr][ch][sfb]);    
  1824.    if(sfb%5==4) fprintf(handle_out,"n");
  1825.    }
  1826. else
  1827.  for (j=0;j<3;j++)
  1828.   {
  1829.   fprintf(handle_out,"n block %dn",j);
  1830.   for (sfb=0;sfb<11;sfb++)
  1831.    {
  1832.    fprintf(handle_out,"%6d ",scalefac->s[gr][ch][sfb][j]);
  1833.    if(sfb%5==4) fprintf(handle_out,"n");
  1834.    }
  1835.   }
  1836. fprintf(handle_out,"n");
  1837. }
  1838. print_quantized_values(FILE *handle, int ix[576], gr_info *cod_info)
  1839. {
  1840. int sfb,start,end,i,bw;
  1841. for (sfb=0;sfb<cod_info->sfb_lmax;sfb++)
  1842.   {
  1843.   start = scalefac_band_long[sfb];
  1844.   end = scalefac_band_long[sfb+1];
  1845.   bw = end - start;
  1846.   fprintf(handle,"scalefac band %d from %d to %dn",sfb,start,end);
  1847.   for (i=0;i<bw;i++)
  1848.     {
  1849.     fprintf(handle,"%8d",ix[start+i]);
  1850.     if(i%5==4) fprintf(handle,"n");
  1851.     }
  1852.   fprintf(handle,"n");
  1853.   }
  1854. }
  1855. test_inner_loop(double xr[2][2][576], int l3_enc[2][2][576], int max_bits,
  1856.             gr_info *cod_info, int gr, int ch, double xfsf[4][CBLIMIT], 
  1857.             III_psy_xmin  *l3_xmin) 
  1858. {
  1859.     int bits, c1bits, bvbits;
  1860.     double *xrs;  /*  D576  *xr; */
  1861.     int *ix;  /*  I576  *ix; */
  1862.     xrs = &xr[gr][ch][0];
  1863.     ix = l3_enc[gr][ch];
  1864.  
  1865.     assert( max_bits >= 0 );
  1866.     cod_info->quantizerStepSize -= 1.0;;
  1867.     do
  1868.     {
  1869.         do
  1870.         {
  1871.             cod_info->quantizerStepSize += 1.0;
  1872.             quantize( xrs, ix, cod_info );
  1873.         }  
  1874.         while ( ix_max(ix, 0, 576) > 8191 + 14 ); /* within table range? */
  1875.  
  1876.     bits = count_bits(ix,cod_info);       
  1877.         if(frameNum == PERFORM)
  1878.         {
  1879.           fprintf(log_output,"StepSize=%f bits = %d huff_bits = %dn",
  1880.             cod_info->quantizerStepSize,bits,max_bits);
  1881.           calc_noise( &xr[gr][ch][0], &l3_enc[gr][ch][0], cod_info, xfsf );
  1882.                                              /* distortion calculation */
  1883.           print_ratios(log_output,l3_xmin,xfsf,cod_info->block_type,gr,ch);
  1884.           fprintf(log_output,"nn");
  1885.           }
  1886.     }
  1887.     while ( bits > max_bits );
  1888.  
  1889.     return bits;
  1890. }
  1891.  
  1892. #endif PERFORM