loop.c
上传用户:bjsgzm
上传日期:2007-01-08
资源大小:256k
文件大小:50k
源码类别:

mpeg/mp3

开发平台:

Visual C++

  1. /*
  2. (c) Copyright 1998, 1999 - Tord Jansson
  3. =======================================
  4. This file is part of the BladeEnc MP3 Encoder, based on
  5. ISO's reference code for MPEG Layer 3 compression, and might
  6. contain smaller or larger sections that are directly taken
  7. from ISO's reference code.
  8. All changes to the ISO reference code herein are either
  9. copyrighted by Tord Jansson (tord.jansson@swipnet.se)
  10. or sublicensed to Tord Jansson by a third party.
  11. BladeEnc is free software; you can redistribute this file
  12. and/or modify it under the terms of the GNU Lesser General Public
  13. License as published by the Free Software Foundation; either
  14. version 2.1 of the License, or (at your option) any later version.
  15. */
  16. #include <stdio.h>
  17. #include <stdlib.h>
  18. #include <math.h>
  19. #include <assert.h>
  20. #include "system.h"
  21. #include "l3side.h"
  22. #include "loop.h"
  23. #include "huffman.h"
  24. #include "l3bitstream.h"
  25. #include "reservoir.h"
  26. #include "loop-pvt.h"
  27. int bin_search_StepSize(int desired_rate, double start, int ix[576],
  28.            double xrs[576], gr_info * cod_info);
  29. int count_bits();
  30. float worst_xfsf_to_xmin_ratio();
  31. int optimized_calculations_tj( int * abs_ix, gr_info *cod_info );
  32. int bigv_bitcount_tj( int * abs_ix, gr_info *gi );
  33. /*
  34.   Here are MPEG1 Table B.8 and MPEG2 Table B.1
  35.   -- Layer III scalefactor bands.
  36.   Index into this using a method such as:
  37.     idx  = fr_ps->header->sampling_frequency
  38.            + (fr_ps->header->version * 3)
  39. */
  40. struct scalefac_struct sfBandIndex[3] =
  41. {
  42.   { /* Table B.8.b: 44.1 kHz */
  43.     {0,4,8,12,16,20,24,30,36,44,52,62,74,90,110,134,162,196,238,288,342,418,576},
  44.     {0,4,8,12,16,22,30,40,52,66,84,106,136,192}
  45.   },
  46.   { /* Table B.8.c: 48 kHz */
  47.     {0,4,8,12,16,20,24,30,36,42,50,60,72,88,106,128,156,190,230,276,330,384,576},
  48.     {0,4,8,12,16,22,28,38,50,64,80,100,126,192}
  49.   },
  50.   { /* Table B.8.a: 32 kHz */
  51.     {0,4,8,12,16,20,24,30,36,44,54,66,82,102,126,156,194,240,296,364,448,550,576},
  52.     {0,4,8,12,16,22,30,42,58,78,104,138,180,192}
  53.   }
  54. };
  55. /*
  56.   The following table is used to implement the scalefactor
  57.   partitioning for MPEG2 as described in section
  58.   2.4.3.2 of the IS. The indexing corresponds to the
  59.   way the tables are presented in the IS:
  60.   [table_number][row_in_table][column of nr_of_sfb]
  61. */
  62. static unsigned nr_of_sfb_block[6][3][4] =
  63. {
  64.   {
  65.     {6, 5, 5, 5},
  66.     {9, 9, 9, 9},
  67.     {6, 9, 9, 9}
  68.   },
  69.   {
  70.     {6, 5, 7, 3},
  71.     {9, 9, 12, 6},
  72.     {6, 9, 12, 6}
  73.   },
  74.   {
  75.     {11, 10, 0, 0},
  76.     {18, 18, 0, 0},
  77.     {15,18,0,0}
  78.   },
  79.   {
  80.     {7, 7, 7, 0},
  81.     {12, 12, 12, 0},
  82.     {6, 15, 12, 0}
  83.   },
  84.   {
  85.     {6, 6, 6, 3},
  86.     {12, 9, 9, 6},
  87.     {6, 12, 9, 6}
  88.   },
  89.   {
  90.     {8, 8, 5, 0},
  91.     {15,12,9,0},
  92.     {6,18,9,0}
  93.   }
  94. };
  95. /* Table B.6: layer3 preemphasis */
  96. int  pretab[21] =
  97. {
  98.     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  99.     1, 1, 1, 1, 2, 2, 3, 3, 3, 2
  100. };
  101. /* This is the scfsi_band table from 2.4.2.7 of the IS */
  102. int scfsi_band_long[5] = { 0, 6, 11, 16, 21 };
  103. int *scalefac_band_long  = &sfBandIndex[0].l[0];
  104. int *scalefac_band_short = &sfBandIndex[0].s[0];
  105. int fInit_iteration_loop;
  106. int fInit_huffman_read_flag; 
  107. int tjBitOverflow1;
  108. int tjBitOverflow2;
  109. void fixStatic_loop( void )
  110. {
  111. scalefac_band_long  = &sfBandIndex[0].l[0];
  112. scalefac_band_short = &sfBandIndex[0].s[0];
  113. }
  114. /************************************************************************/
  115. /*  iteration_loop()                                                    */
  116. /************************************************************************/
  117. void
  118. iteration_loop( double pe[][2], double xr_org[2][2][576], III_psy_ratio *ratio,
  119. III_side_info_t *l3_side, int l3_enc[2][2][576],
  120. int mean_bits, int stereo, double xr_dec[2][2][576],
  121. III_scalefac_t *scalefac, frame_params *fr_ps,
  122. int ancillary_pad, int bitsPerFrame ) 
  123. {
  124.   III_psy_xmin l3_xmin;
  125.   gr_info *cod_info;
  126.   layer *info;
  127.   int *main_data_begin;
  128.   int max_bits;
  129.   int ch, gr, sfb, i, mode_gr;
  130.   double xr[2][2][576];
  131.   I576  *ix;
  132.   main_data_begin = &l3_side->main_data_begin;
  133.   l3_side->resvDrain = 0;
  134.   if ( !fInit_iteration_loop )
  135.   {
  136. *main_data_begin = 0;
  137. fInit_iteration_loop = 1;
  138.   }
  139.   info = fr_ps->header;
  140.   mode_gr = 2;
  141.   scalefac_band_long  = &sfBandIndex[info->sampling_frequency].l[0];
  142.   scalefac_band_short = &sfBandIndex[info->sampling_frequency].s[0];
  143.   /* reading huffman code table */
  144.   if (fInit_huffman_read_flag == 0) 
  145. {
  146.     read_huffcodetab();
  147.     fInit_huffman_read_flag++;
  148.   }
  149.   for ( gr = 0; gr < mode_gr; gr++ )
  150.   {
  151.     for ( ch = 0; ch < stereo; ch++ )
  152. {
  153.       for ( i = 0; i < 576; i++ ) 
  154.         xr[gr][ch][i] = xr_org[gr][ch][i];
  155. }
  156.   }
  157.   ResvFrameBegin( fr_ps, l3_side, mean_bits, bitsPerFrame );
  158.   for ( gr = 0; gr < mode_gr; gr++ )
  159.   {
  160.     for ( ch = 0; ch < stereo; ch++ )
  161.     {
  162.       ix = (I576 *) l3_enc[gr][ch];
  163.       cod_info = (gr_info *) &(l3_side->gr[gr].ch[ch]);
  164.       gr_deco(cod_info);
  165.       calc_xmin( xr, ratio, cod_info, &l3_xmin, gr, ch );
  166.       calc_scfsi( xr[gr][ch], l3_side, &l3_xmin, ch, gr );
  167.       /* calculation of number of available bit( per granule ) */
  168.   max_bits = ResvMaxBits( fr_ps, l3_side, &pe[gr][ch], mean_bits );
  169.   
  170.       /* reset of iteration variables */
  171.       for ( sfb = 0; sfb < 21; sfb++ )
  172.         scalefac->l[gr][ch][sfb] = 0;
  173.       for ( sfb = 0; sfb < 13; sfb++ )
  174.         for ( i = 0; i < 3; i++ )
  175.           scalefac->s[gr][ch][sfb][i] = 0;
  176.   for ( i = 0; i < 4; i++ )
  177. cod_info->slen[i] = 0;
  178.   cod_info->sfb_partition_table = &nr_of_sfb_block[0][0][0];
  179.       cod_info->part2_3_length    = 0;
  180.       cod_info->big_values        = 0;
  181.       cod_info->count1            = 0;
  182.       cod_info->scalefac_compress = 0;
  183.       cod_info->table_select[0]   = 0;
  184.       cod_info->table_select[1]   = 0;
  185.       cod_info->table_select[2]   = 0;
  186.       cod_info->subblock_gain[0]  = 0;
  187.       cod_info->subblock_gain[1]  = 0;
  188.       cod_info->subblock_gain[2]  = 0;
  189.       cod_info->region0_count     = 0;
  190.       cod_info->region1_count     = 0;
  191.       cod_info->part2_length      = 0;
  192.       cod_info->preflag           = 0;
  193.       cod_info->scalefac_scale    = 0;
  194.       cod_info->quantizerStepSize = 0.0;
  195.       cod_info->count1table_select= 0;
  196.           
  197.       /* all spectral values zero ? */
  198.       if ( xr_max(xr[gr][ch]) != 0.0 )
  199.       {
  200.         cod_info->quantizerStepSize = (double) quantanf_init( xr[gr][ch] );
  201.         cod_info->part2_3_length = outer_loop( xr, max_bits, &l3_xmin,
  202.                                                l3_enc, fr_ps, scalefac,
  203.                                                gr, ch, l3_side );
  204.       }
  205. ResvAdjust( fr_ps, cod_info, l3_side, mean_bits );
  206. cod_info->global_gain = nint( cod_info->quantizerStepSize + 210.0 );
  207. /* assert( cod_info->global_gain < 256 ); */
  208.     } /* for ch */
  209.   } /* for gr */
  210.   ResvFrameEnd( fr_ps, l3_side, mean_bits );
  211. }
  212. /************************************************************************/
  213. /*  quantanf_init                                                       */
  214. /************************************************************************/
  215. int quantanf_init( double xr[576] )
  216. /* Function: Calculate the first quantization step quantanf.       */
  217. {
  218.     int i, tp = 0;
  219.     double system_const, minlimit;
  220.     double sfm = 0.0, sum1 = 0.0, sum2 = 0.0;
  221.     
  222.     system_const = 8.0;
  223.     minlimit = -100.0;
  224.     for ( i = 0; i < 576; i++ )
  225.     {
  226.         if ( xr[i] != 0 )
  227. {
  228.             double tpd = xr[i] * xr[i];
  229.             sum1 += log( tpd );
  230.             sum2 += tpd;
  231.         }
  232.     }
  233.     if ( sum2 != 0.0 )
  234.     {
  235.         sfm = exp( sum1 / 576.0 ) / (sum2 / 576.0);
  236.         tp = nint( system_const * log(sfm) );
  237. if ( tp < minlimit )
  238.     tp = minlimit;
  239.     }
  240.       return(tp-70.0); /* SS 19-12-96. Starting value of
  241.                           global_gain or quantizerStepSize 
  242.                           has to be reduced for iteration_loop
  243.                        */
  244. }
  245. /************************************************************************/
  246. /*  outer_loop                                                          */
  247. /************************************************************************/
  248. /*  Function: The outer iteration loop controls the masking conditions  */
  249. /*  of all scalefactorbands. It computes the best scalefac and          */
  250. /*  global gain. This module calls the inner iteration loop             */
  251. /************************************************************************/
  252. int outer_loop(
  253.   double xr[2][2][576],     /*  magnitudes of the spectral values */
  254.   int max_bits,
  255.   III_psy_xmin  *l3_xmin,   /* the allowed distortion of the scalefactor */
  256.   int l3_enc[2][2][576],    /* vector of quantized values ix(0..575) */
  257.   frame_params *fr_ps,
  258.   III_scalefac_t *scalefac, /* scalefactors */
  259.   int gr, int ch, III_side_info_t *l3_side )
  260. {
  261.   int status ;
  262.   int scalesave_l[CBLIMIT], scalesave_s[CBLIMIT][3];
  263.   int sfb, bits, huff_bits, save_preflag, save_compress;
  264.   double xfsf[4][CBLIMIT];
  265.   int i, over, iteration;
  266.   double *xrs; 
  267.   int *ix;  
  268.   gr_info *cod_info = &l3_side->gr[gr].ch[ch].tt;
  269.  
  270. xrs = (double *) &(xr[gr][ch][0]); 
  271. ix  = (int *) &(l3_enc[gr][ch][0]);
  272.   iteration = 0;
  273.   do 
  274.   {
  275. iteration += 1;
  276. cod_info->part2_length = part2_length( scalefac, fr_ps, gr, ch, l3_side );
  277.     huff_bits = max_bits - cod_info->part2_length;
  278. if(iteration == 1)
  279.     {
  280. bin_search_StepSize(max_bits,cod_info->quantizerStepSize,
  281.         ix,xrs,cod_info); /* speeds things up a bit */
  282.     }
  283.     bits = inner_loop( &xr[gr][ch][0], &l3_enc[gr][ch][0], huff_bits, cod_info );
  284.     calc_noise( &xr[gr][ch][0], &l3_enc[gr][ch][0], cod_info, xfsf ); /* distortion calculation */
  285.     for ( sfb = 0; sfb < CBLIMIT; sfb++ ) /* save scaling factors */
  286.       scalesave_l[sfb] = scalefac->l[gr][ch][sfb];
  287.     for ( sfb = 0; sfb < SFB_SMAX; sfb++ )
  288.       for ( i = 0; i < 3; i++ )
  289.         scalesave_s[sfb][i] = scalefac->s[gr][ch][sfb][i];
  290.     save_preflag  = cod_info->preflag;
  291.     save_compress = cod_info->scalefac_compress;
  292.     preemphasis( &xr[gr][ch][0], xfsf, l3_xmin, gr, ch, l3_side );
  293.     over = amp_scalefac_bands( &xr[gr][ch][0], xfsf, l3_xmin,
  294.                                l3_side, scalefac, gr, ch, iteration );
  295.   if ( (status = loop_break(scalefac, cod_info, gr, ch)) == 0 )
  296. {
  297. status = scale_bitcount( scalefac, cod_info, gr, ch );
  298. }
  299.   }
  300.   while ( (status == 0) && (over > 0) );
  301.   cod_info->preflag = save_preflag;
  302.   cod_info->scalefac_compress = save_compress;
  303.   for ( sfb = 0; sfb < 21; sfb++ )
  304.     scalefac->l[gr][ch][sfb] = scalesave_l[sfb];    
  305.   for ( i = 0; i < 3; i++ )
  306.     for ( sfb = 0; sfb < 12; sfb++ )
  307.       scalefac->s[gr][ch][sfb][i] = scalesave_s[sfb][i];    
  308.   cod_info->part2_length   = part2_length( scalefac, fr_ps, gr, ch, l3_side );
  309.   cod_info->part2_3_length = cod_info->part2_length + bits;
  310.   return cod_info->part2_3_length;
  311. }
  312. /***************************************************************************
  313. *         inner_loop                                                      *
  314. ***************************************************************************
  315. * The code selects the best quantizerStepSize for a particular set
  316. * of scalefacs                                                            */
  317.  
  318. int inner_loop( double* xrs, int *ix, int max_bits, gr_info *cod_info )
  319. {
  320.     int bits;
  321.     cod_info->quantizerStepSize -= 1.0;
  322.     do
  323.     {
  324. do
  325.         {
  326. cod_info->quantizerStepSize += 1.0;
  327. tjBitOverflow2 = FALSE;
  328. quantize_tj( xrs, ix, cod_info );
  329.         }
  330.         while ( tjBitOverflow2 == TRUE ); /* within table range? */
  331. bits = optimized_calculations_tj( ix, cod_info );
  332.         subdivide( cod_info );  /* bigvalues sfb division */
  333.         bigv_tab_select_tj( ix, cod_info );  /* codebook selection*/
  334.         bits += bigv_bitcount_tj( ix, cod_info );  /* bit count */
  335.     }
  336.     while ( bits > max_bits );
  337.     return bits;
  338. }
  339. /***************************************************************************/ 
  340. /*        calc_scfsi                                                       */ 
  341. /***************************************************************************/ 
  342. /* calculation of the scalefactor select information ( scfsi )        */
  343. void calc_scfsi( double  xr[576], III_side_info_t *l3_side,
  344.     III_psy_xmin *l3_xmin, int ch, int gr )
  345. {
  346.     static int en_tot[2][2]; /* ch,gr */
  347.     static int en[2][2][21];
  348.     static int xm[2][2][21];
  349.     static int xrmax[2][2];
  350.     int en_tot_krit        = 10;
  351.     int en_dif_krit        = 100;
  352.     int en_scfsi_band_krit = 10;
  353.     int xm_scfsi_band_krit = 10;
  354.     int scfsi_band;
  355.     unsigned scfsi_set;
  356.     int sfb, start, end, i;
  357.     int condition = 0;
  358.     double temp, log2 = log( 2.0 );
  359.     gr_info *cod_info = &l3_side->gr[gr].ch[ch].tt;
  360.     xrmax[gr][ch] = xr_max( xr );
  361.     scfsi_set = 0;
  362.     /* the total energy of the granule */    
  363.     for ( temp = 0.0, i = 0; i < 576; i++ )
  364.         temp += xr[i] * xr[i];
  365.     if ( temp == 0.0 )
  366.         en_tot[gr][ch] = 0.0;
  367.     else
  368.         en_tot[gr][ch] = log( temp ) / log2 ;
  369.     /* the energy of each scalefactor band, en */
  370.     /* the allowed distortion of each scalefactor band, xm */
  371.     if ( cod_info->window_switching_flag == 0 ||
  372.          cod_info->block_type != 2 )
  373.         for ( sfb = 0; sfb < 21; sfb++ )
  374.         {
  375.             start = scalefac_band_long[ sfb ];
  376.             end   = scalefac_band_long[ sfb+1 ];
  377.             for ( temp = 0.0, i = start; i < end; i++ )
  378.                 temp += xr[i] * xr[i];
  379.             if ( temp == 0.0 )
  380.                 en[gr][ch][sfb] = 0.0;
  381.             else
  382.                 en[gr][ch][sfb] = log( temp )/ log2;
  383.             if ( l3_xmin->l[gr][ch][sfb] == 0.0 )
  384.                 xm[gr][ch][sfb] = 0.0;
  385.             else
  386.                 xm[gr][ch][sfb] = log( l3_xmin->l[gr][ch][sfb] ) / log2;
  387.         }
  388.     if ( gr == 1 )
  389.     {
  390.         int gr2, tp;
  391.         for ( gr2 = 0; gr2 < 2; gr2++ )
  392.         {
  393.             /* The spectral values are not all zero */
  394.             if ( xrmax[ch][gr2] != 0.0 )
  395.                 condition++;
  396.             /* None of the granules contains short blocks */
  397.             if ( (cod_info->window_switching_flag == 0) ||
  398.                  (cod_info->block_type != 2) )
  399.                 condition++;
  400.         }
  401.         if ( abs(en_tot[0] - en_tot[1]) < en_tot_krit )
  402.             condition++;
  403.         for ( tp = 0, sfb = 0; sfb < 21; sfb++ ) 
  404.             tp += abs( en[ch][0][sfb] - en[ch][1][sfb] );
  405.         if ( tp < en_dif_krit ) 
  406.             condition++;
  407.         if ( condition == 6 )
  408.         {
  409.             for ( scfsi_band = 0; scfsi_band < 4; scfsi_band++ )
  410.             {
  411.                 int sum0 = 0, sum1 = 0;
  412.                 l3_side->scfsi[ch][scfsi_band] = 0;
  413.                 start = scfsi_band_long[scfsi_band];
  414.                 end   = scfsi_band_long[scfsi_band+1];
  415.                 for ( sfb = start; sfb < end; sfb++ )
  416.                 { 
  417.                     sum0 += abs( en[ch][0][sfb] - en[ch][1][sfb] );
  418.                     sum1 += abs( xm[ch][0][sfb] - xm[ch][1][sfb] );
  419.                 }
  420.                 if ( sum0 < en_scfsi_band_krit && sum1 < xm_scfsi_band_krit )
  421. {
  422.                     l3_side->scfsi[ch][scfsi_band] = 1;
  423.     scfsi_set |= (1 << scfsi_band);
  424. }
  425.                 else
  426.                     l3_side->scfsi[ch][scfsi_band] = 0;
  427.             } /* for scfsi_band */
  428.         } /* if condition == 6 */
  429.         else
  430.             for ( scfsi_band = 0; scfsi_band < 4; scfsi_band++ )
  431.                 l3_side->scfsi[ch][scfsi_band] = 0;
  432.     } /* if gr == 1 */
  433. }
  434. /***************************************************************************/ 
  435. /*        part2_length                                                     */ 
  436. /***************************************************************************/ 
  437. /* calculates the number of bits needed to encode the scalefacs in the     */
  438. /* main data block                                                         */
  439. int part2_length( III_scalefac_t *scalefac, frame_params *fr_ps,
  440.       int gr, int ch, III_side_info_t *si )
  441. {
  442.   int slen1, slen2, bits;
  443.   gr_info *gi = &si->gr[gr].ch[ch].tt;
  444. static int slen1_tab[16] = { 0, 0, 0, 0, 3, 1, 1, 1, 2, 2, 2, 3, 3, 3, 4, 4 };
  445. static int slen2_tab[16] = { 0, 1, 2, 3, 0, 1, 2, 3, 1, 2, 3, 1, 2, 3, 2, 3 };
  446.   bits = 0;
  447. slen1 = slen1_tab[ gi->scalefac_compress ];
  448. slen2 = slen2_tab[ gi->scalefac_compress ];
  449. if ( (gi->window_switching_flag == 1) && (gi->block_type == 2) )
  450. {
  451.   if ( gi->mixed_block_flag )
  452.   {
  453. bits += (8 * slen1) + (9 * slen1) + (18 * slen2);
  454.   }
  455.   else
  456.   {
  457. bits += (18 * slen1) + (18 * slen2);
  458.   }
  459. }
  460. else
  461. {
  462.   if ( (gr == 0) || (si->scfsi[ch][0] == 0) )
  463. bits += (6 * slen1);
  464.   if ( (gr == 0) || (si->scfsi[ch][1] == 0) )
  465. bits += (5 * slen1);
  466.   if ( (gr == 0) || (si->scfsi[ch][2] == 0) )
  467. bits += (5 * slen2);
  468.   if ( (gr == 0) || (si->scfsi[ch][3] == 0) )
  469. bits += (5 * slen2);
  470. }
  471.     return bits;
  472. }
  473. /*************************************************************************/
  474. /*            scale_bitcount                                             */
  475. /*************************************************************************/
  476. /* Also calculates the number of bits necessary to code the scalefactors. */
  477. int scale_bitcount( III_scalefac_t *scalefac, gr_info *cod_info,
  478. int gr, int ch )
  479. {
  480.     int i, k, sfb, max_slen1 = 0, max_slen2 = 0, /*a, b, */ ep = 2;
  481.     static int slen1[16] = { 0, 0, 0, 0, 3, 1, 1, 1, 2, 2, 2, 3, 3, 3, 4, 4 };
  482.     static int slen2[16] = { 0, 1, 2, 3, 0, 1, 2, 3, 1, 2, 3, 1, 2, 3, 2, 3 };
  483.     static int pow2[5]   = { 1, 2, 4, 8, 16 };
  484.     if ( cod_info->window_switching_flag != 0 && cod_info->block_type == 2 )
  485.     {
  486.         if ( cod_info->mixed_block_flag == 0 ) 
  487.         {
  488.             /* a = 18; b = 18;  */
  489.             for ( i = 0; i < 3; i++ )
  490.             {
  491.                 for ( sfb = 0; sfb < 6; sfb++ )
  492.                     if ( scalefac->s[gr][ch][sfb][i] > max_slen1 )
  493.                         max_slen1 = scalefac->s[gr][ch][sfb][i];
  494.                 for (sfb = 6; sfb < 12; sfb++ )
  495.                     if ( scalefac->s[gr][ch][sfb][i] > max_slen2 )
  496.                         max_slen2 = scalefac->s[gr][ch][sfb][i];
  497.             }
  498.         }
  499.         else
  500.         {/* mixed_block_flag = 1 */
  501.             /* a = 17; b = 18;  */
  502.             for ( sfb = 0; sfb < 8; sfb++ )
  503.                 if ( scalefac->l[gr][ch][sfb] > max_slen1 )
  504.                     max_slen1 = scalefac->l[gr][ch][sfb];
  505.             for ( i = 0; i < 3; i++ )
  506.             {
  507.                 for ( sfb = 3; sfb < 6; sfb++ )
  508.                     if ( scalefac->s[gr][ch][sfb][i] > max_slen1 )
  509.                         max_slen1 = scalefac->s[gr][ch][sfb][i];
  510.                 for ( sfb = 6; sfb < 12; sfb++ )
  511.                     if ( scalefac->s[gr][ch][sfb][i] > max_slen2 )
  512.                         max_slen2 = scalefac->s[gr][ch][sfb][i];
  513.             }
  514.         }
  515.     }
  516.     else
  517.     { /* block_type == 1,2,or 3 */
  518.         /* a = 11; b = 10;   */
  519.         for ( sfb = 0; sfb < 11; sfb++ )
  520.             if ( scalefac->l[gr][ch][sfb] > max_slen1 )
  521.                 max_slen1 = scalefac->l[gr][ch][sfb];
  522.         for ( sfb = 11; sfb < 21; sfb++ )
  523.             if ( scalefac->l[gr][ch][sfb] > max_slen2 )
  524.                 max_slen2 = scalefac->l[gr][ch][sfb];
  525.     }
  526.     for ( k = 0; k < 16; k++ )
  527.     {
  528.         if ( (max_slen1 < pow2[slen1[k]]) && (max_slen2 < pow2[slen2[k]]) )
  529.         { 
  530.             ep = 0;
  531.             break;
  532.         } 
  533.     }
  534.     if ( ep == 0 )
  535.         cod_info->scalefac_compress = k;
  536.     return ep;
  537. }
  538. double noisePowTab[8191+15];
  539. void genNoisePowTab( void )
  540. {
  541. int i;
  542. for( i = 0 ; i < 8191+15 ; i++ )
  543. noisePowTab[i] = pow( i, 4.0/3.0 );
  544. }
  545. /*************************************************************************/
  546. /*            calc_noise                                                 */
  547. /*************************************************************************/
  548. /*   Function: Calculate the distortion introduced by the quantization   */
  549. /*   in each scale factor band.                                          */
  550. void calc_noise( double xr[576], int ix[576], gr_info *cod_info,
  551.     double xfsf[4][CBLIMIT] )
  552. {
  553.   int start, end, l, i;
  554. unsigned int sfb;
  555.   double sum,step,bw;
  556.   D192_3 *xr_s;
  557.   I192_3 *ix_s;
  558.   xr_s = (D192_3 *) xr;
  559.   ix_s = (I192_3 *) ix;
  560.   step = pow( 2.0, (cod_info->quantizerStepSize) * 0.25 );
  561.   for ( sfb = 0; sfb < cod_info->sfb_lmax; sfb++ )
  562.   {
  563.     start = scalefac_band_long[ sfb ];
  564.     end   = scalefac_band_long[ sfb+1 ];
  565. bw = end - start;
  566.     for ( sum = 0.0, l = start; l < end; l++ )
  567.     {
  568.       double temp;
  569.       temp = fabs( xr[l] ) - noisePowTab[ix[l]] * step;
  570.       sum += temp * temp; 
  571.     }
  572.     xfsf[0][sfb] = sum / bw;
  573.   }
  574.   for ( i = 0; i < 3; i++ )
  575.   {
  576.     for ( sfb = cod_info->sfb_smax; sfb < 12; sfb++ )
  577.     {
  578.       start = scalefac_band_short[ sfb ];
  579.       end   = scalefac_band_short[ sfb+1 ];
  580. bw = end - start;
  581.       
  582.       for ( sum = 0.0, l = start; l < end; l++ )
  583.       {
  584.         double temp;
  585.         temp = fabs( (*xr_s)[l][i] ) - noisePowTab[(*ix_s)[l][i]] * step;
  586.         sum += temp * temp;
  587.       }       
  588.       xfsf[i+1][sfb] = sum / bw;
  589.     }
  590.   }
  591. }
  592. /*************************************************************************/
  593. /*            calc_xmin                                                  */
  594. /*************************************************************************/
  595. /*
  596.   Calculate the allowed distortion for each scalefactor band,
  597.   as determined by the psychoacoustic model.
  598.   xmin(sb) = ratio(sb) * en(sb) / bw(sb)
  599. */
  600. void calc_xmin( double xr[2][2][576], III_psy_ratio *ratio,
  601.    gr_info *cod_info, III_psy_xmin *l3_xmin,
  602.    int gr, int ch )
  603. {
  604.     int start, end, l, b;
  605. uint sfb;
  606.     double en, bw;
  607.     D192_3 *xr_s;
  608.     xr_s = (D192_3 *) xr[gr][ch] ;
  609.     for ( sfb = cod_info->sfb_smax; sfb < SFB_SMAX - 1; sfb++ )
  610.     {
  611.         start = scalefac_band_short[ sfb ];
  612.         end   = scalefac_band_short[ sfb + 1 ];
  613. bw = end - start;
  614.         for ( b = 0; b < 3; b++ )
  615.         {
  616.             for ( en = 0.0, l = start; l < end; l++ )
  617.                 en += (*xr_s)[l][b] * (*xr_s)[l][b];
  618.             l3_xmin->s[gr][ch][sfb][b] = ratio->s[gr][ch][sfb][b] * en / bw;
  619.         }
  620.     }
  621.     for ( sfb = 0; sfb < cod_info->sfb_lmax; sfb++ )
  622.     {
  623.         start = scalefac_band_long[ sfb ];
  624.         end   = scalefac_band_long[ sfb+1 ];
  625. bw = end - start;
  626.         for ( en = 0.0, l = start; l < end; l++ )
  627.             en += xr[gr][ch][l] * xr[gr][ch][l];
  628.         l3_xmin->l[gr][ch][sfb] = ratio->l[gr][ch][sfb] * en / bw;
  629.     }
  630. }
  631. /*************************************************************************/
  632. /*            loop_break                                                 */
  633. /*************************************************************************/
  634. /*  Function: Returns zero if there is a scalefac which has not been
  635.     amplified. Otherwise it returns one. 
  636. */
  637. int loop_break( III_scalefac_t *scalefac, gr_info *cod_info,
  638.     int gr, int ch )
  639. {
  640.     uint i, sfb;
  641.     for ( sfb = 0; sfb < cod_info->sfb_lmax; sfb++ )
  642.         if ( scalefac->l[gr][ch][sfb] == 0 )
  643.             return 0;
  644.     for ( sfb = cod_info->sfb_smax; sfb < 12; sfb++ )
  645.         for ( i = 0; i < 3; i++ )
  646.             if ( scalefac->s[gr][ch][sfb][i] == 0 )
  647.                 return 0;
  648.     return 1;
  649. }
  650. /*************************************************************************/
  651. /*            preemphasis                                                */
  652. /*************************************************************************/
  653. /*
  654.   See ISO 11172-3  section  C.1.5.4.3.4
  655. */
  656. void preemphasis( double xr[576], double xfsf[4][CBLIMIT],
  657.      III_psy_xmin  *l3_xmin,
  658.      int gr, int ch, III_side_info_t *l3_side )
  659. {
  660.   int i, start, end, scfsi_band, over;
  661. uint sfb;
  662.   double ifqstep;
  663.   gr_info *cod_info = &l3_side->gr[gr].ch[ch].tt;
  664. double mulval;
  665.   if ( gr == 1 )
  666.   {
  667. /*
  668. If the second granule is being coded and scfsi is active in
  669. at least one scfsi_band, the preemphasis in the second granule
  670. is set equal to the setting in the first granule
  671. */
  672. for ( scfsi_band = 0; scfsi_band < 4; scfsi_band++ )
  673. if ( l3_side->scfsi[ch][scfsi_band] )
  674. {
  675. cod_info->preflag = l3_side->gr[0].ch[ch].tt.preflag;
  676. return;
  677. }
  678.   }
  679.   /*
  680.     Preemphasis is switched on if in all the upper four scalefactor
  681.     bands the actual distortion exceeds the threshold after the
  682.     first call of the inner loop
  683.   */
  684.   if ( cod_info->block_type != 2 && cod_info->preflag == 0 )
  685.   {
  686. over = 0;
  687. for ( sfb = 17; sfb < 21; sfb++ )
  688. if ( xfsf[0][sfb] > l3_xmin->l[gr][ch][sfb] )
  689. over++;
  690. if (over == 4 )
  691. {
  692. cod_info->preflag = 1;
  693. ifqstep = ( cod_info->scalefac_scale == 0 ) ? sqrt(2.)
  694. : pow( 2.0, (0.5 * (1.0 + (double) cod_info->scalefac_scale)) );
  695. for ( sfb = 0; sfb < cod_info->sfb_lmax; sfb++ )
  696. {
  697. l3_xmin->l[gr][ch][sfb] *= pow( ifqstep, 2.0 * (double) pretab[sfb] );
  698. start = scalefac_band_long[ sfb ];
  699. end   = scalefac_band_long[ sfb+1 ];
  700. mulval = pow( ifqstep, (double) pretab[sfb] );
  701. for( i = start; i < end; i++ )
  702. xr[i] *= mulval;
  703. }
  704. }
  705.   }
  706. }
  707. /*************************************************************************/
  708. /*            amp_scalefac_bands                                         */
  709. /*************************************************************************/
  710. /* 
  711.   Amplify the scalefactor bands that violate the masking threshold.
  712.   See ISO 11172-3 Section C.1.5.4.3.5
  713. */
  714. int amp_scalefac_bands( double xr[576], double xfsf[4][CBLIMIT],
  715.     III_psy_xmin *l3_xmin, III_side_info_t *l3_side,
  716.     III_scalefac_t *scalefac,
  717.     int gr, int ch, int iteration )
  718. {
  719.   int start, end, l, i, scfsi_band, over = 0;
  720. uint sfb;
  721.   double ifqstep, ifqstep2;
  722.   D192_3 *xr_s;
  723.   gr_info *cod_info, *gr0;
  724.   int copySF, preventSF;
  725.   cod_info = &l3_side->gr[gr].ch[ch].tt;
  726.   gr0      = &l3_side->gr[0].ch[ch].tt;
  727.   xr_s = (D192_3 *) xr;
  728.   copySF = 0;
  729.   preventSF = 0;
  730.   if ( cod_info->scalefac_scale == 0 )
  731. ifqstep = 1.414213562; /* sqrt( 2.0 ); */
  732.   else
  733. ifqstep = pow( 2.0, 0.5 * (1.0 + (double) cod_info->scalefac_scale) );
  734.   if ( gr == 1 )
  735.   {
  736. for ( scfsi_band = 0; scfsi_band < 4; scfsi_band++ )
  737.     if ( l3_side->scfsi[ch][scfsi_band] )
  738.     {
  739. if ( gr0->scalefac_scale == 0 )
  740. ifqstep = 1.414213562; /* sqrt( 2.0 ); */
  741. else
  742. ifqstep = pow( 2.0, 0.5 * (1.0 + (double) gr0->scalefac_scale) );
  743. if ( iteration == 1 )
  744. copySF = 1;
  745. else
  746.     preventSF = 1;
  747. break;
  748.     }
  749.   }
  750.   ifqstep2 = ifqstep * ifqstep;
  751.   scfsi_band = 0;
  752.     
  753.   for ( sfb = 0; sfb < cod_info->sfb_lmax; sfb++ )
  754.   {
  755. if ( copySF || preventSF )
  756. {
  757.     if ( (int) sfb == scfsi_band_long[scfsi_band + 1] )
  758. scfsi_band += 1;
  759.     if ( l3_side->scfsi[ch][scfsi_band] )
  760.     {
  761. if ( copySF )
  762.     scalefac->l[gr][ch][sfb] = scalefac->l[0][ch][sfb];
  763. continue;
  764.     }
  765. }     
  766. if ( xfsf[0][sfb] > l3_xmin->l[gr][ch][sfb] )
  767. {
  768.     over++;
  769.     l3_xmin->l[gr][ch][sfb] *= ifqstep2;
  770.     scalefac->l[gr][ch][sfb]++;
  771.     start = scalefac_band_long[sfb];
  772.     end   = scalefac_band_long[sfb+1];
  773.     for ( l = start; l < end; l++ )
  774. xr[l] *= ifqstep;
  775. }
  776.   }
  777.   for ( i = 0; i < 3; i++ )
  778.     for ( sfb = cod_info->sfb_smax; sfb < 12; sfb++ )
  779.       if ( xfsf[i+1][sfb] > l3_xmin->s[gr][ch][sfb][i] )
  780.       {
  781.         over++;
  782.         l3_xmin->s[gr][ch][sfb][i] *= ifqstep2;
  783.         scalefac->s[gr][ch][sfb][i]++;
  784.         start = scalefac_band_short[sfb];
  785.         end   = scalefac_band_short[sfb+1];
  786.         for ( l = start; l < end; l++ )
  787.             (*xr_s)[l][i] *= ifqstep;
  788.       }
  789.   return over;
  790. }
  791. /*************************************************************************/
  792. /*            quantize                                                   */
  793. /*************************************************************************/
  794. /*
  795.   Function: Quantization of the vector xr ( -> ix)
  796. */
  797. extern unsigned short bladeTablesh[];
  798. extern float bladeTablefloat[];
  799. /*____ bladTabValue() _________________________________________________________*/
  800. int __inline bladTabValue( float in )
  801. {
  802.   int in2 = *((int *) &in);
  803.   int in1;
  804.   int retVal;
  805.   
  806.   if( in2 >= 0x48213ba6 ) {
  807.     int i;
  808.     i = nint( pow( in, 0.75) - 0.0946 );
  809.     if( i > 8192 ) {
  810.         tjBitOverflow1 = TRUE;
  811.         if( i > 8191 + 14 )
  812.             tjBitOverflow2 = TRUE;
  813.     }
  814.     return i;
  815.   }
  816.   in1 = in2 - 0x3effff7a;
  817.   if( in1 < 0 )
  818.       return 0;
  819.   retVal = bladeTablesh[in1>>10];
  820.   if( retVal & (1<<15) ) {
  821.     int *pTabEntry = (int *)bladeTablefloat;
  822.     retVal &= 0x7fff;
  823.     if( in2 < pTabEntry[retVal] ) {
  824.         retVal--;
  825.     }
  826.   }
  827.   return retVal;
  828. }
  829. /*____ quantize_tj() __________________________________________________________*/
  830. void quantize_tj( double xr[576], int ix[576], gr_info *cod_info )
  831. {
  832.   int i, b, l_end, s_start;
  833.   double quantizerStepSize;
  834. double mulVal;
  835. float x,y;
  836.   D192_3 *xr_s;
  837.   I192_3 *ix_s;
  838.   xr_s = (D192_3 *) xr;
  839.   ix_s = (I192_3 *) ix;
  840.   quantizerStepSize = (double) cod_info->quantizerStepSize;
  841.   if ( cod_info->quantizerStepSize == 0.0 )
  842. mulVal = 1.0;
  843.   else
  844. mulVal = 1.0 / pow ( 2.0, quantizerStepSize * 0.25 );
  845.   if ( cod_info->window_switching_flag != 0 && cod_info->block_type == 2 )
  846. if ( cod_info->mixed_block_flag == 0 )
  847. {
  848. l_end = 0;
  849. s_start = 0;
  850. }
  851. else
  852. {
  853. l_end = 18 * 2;
  854. s_start = 6 * 2;
  855. }
  856.   else
  857.   {
  858. l_end = 576;
  859. s_start = 192;
  860.   }
  861.   for ( i = 0; i < l_end; i+=2 )
  862. {
  863. /* ix[i] = nint( pow(fabs(xr[i]) * mulVal, 0.75) - 0.0946 ); */
  864. x = fabs(xr[i])*mulVal;
  865. y = fabs(xr[i+1])*mulVal;
  866. ix[i] = bladTabValue( x );
  867. ix[i+1] = bladTabValue( y );
  868.   }
  869. /*  for ( ; i < 576; i++ )
  870. ix[i] = 0; */
  871.   if( i<576 )
  872.      memset( &ix[i], 0, (576-i) * sizeof(ix[0]) );
  873.   if ( s_start < 192 )
  874. for ( b = 0; b < 3; b++ )
  875. {
  876. mulVal = 1.0 / pow( 2.0, (quantizerStepSize + 8.0 * (double) cod_info->subblock_gain[b]) * 0.25 );
  877. for ( i = s_start; i < 192; i++ )
  878. {
  879. /* (*ix_s)[i][b] = nint( pow(fabs((*xr_s)[i][b]) * mulVal, 0.75) - 0.0946 ); */
  880. (*ix_s)[i][b] = bladTabValue(fabs((*xr_s)[i][b]) * mulVal);
  881. }
  882. }
  883. }
  884. /*************************************************************************/
  885. /*            ix_max                                                     */
  886. /*************************************************************************/
  887. /*
  888.   Function: Calculate the maximum of ix from 0 to 575
  889. */
  890. int ix_max_tj( int abs_ix[576], unsigned int begin, unsigned int end )
  891. {
  892.     uint i;
  893. int  max = 0;
  894.     for ( i = begin; i < end; i++ )
  895.     {
  896.         if ( abs_ix[i] > max )
  897.             max = abs_ix[i];
  898.     }
  899.     return max;
  900. }
  901. /*************************************************************************/
  902. /*            xr_max                                                     */
  903. /*************************************************************************/
  904. /*
  905.   Function: Calculate the maximum of xr[576]  from 0 to 575
  906. */
  907. double xr_max( double xr[576] )
  908. {
  909.     uint i;
  910.     double max = 0.0, temp;
  911.     for ( i = 0; i < 576/4; i+=4 )
  912.       if( (temp = fabs(xr[i])) > max )
  913.      max = temp;
  914.       if( (temp = fabs(xr[i+1])) > max )
  915.      max = temp;
  916.       if( (temp = fabs(xr[i+2])) > max )
  917.      max = temp;
  918.       if( (temp = fabs(xr[i+3])) > max )
  919.      max = temp;
  920.     return max;
  921. }
  922. /*        Noiseless coding  -- Huffman coding   */
  923. /*************************************************************************/
  924. /*            calc_runlen                                                */
  925. /*************************************************************************/
  926. /*
  927. Function: Calculation of rzero, count1, big_values
  928. (Partitions ix into big values, quadruples and zeros).
  929. */
  930. void calc_runlen( int ix[576], gr_info *cod_info )
  931. {
  932.   int i;
  933.   if ( cod_info->window_switching_flag && (cod_info->block_type == 2) )
  934.   {  /* short blocks */
  935.     cod_info->count1 = 0;
  936.     cod_info->big_values = 288;
  937.   }
  938.   else
  939.   {
  940.     for ( i = 576; i > 1; i -= 2 )
  941.       if ( (ix[i-1] | ix[i-2]) != 0 )
  942.         break;
  943.       
  944.     cod_info->count1 = 0 ;
  945.     for ( ; i > 3; i -= 4 )
  946. if ( (ix[i-1] | ix[i-2] | ix[i-3] | ix[i-4]) <= 1 )
  947.         cod_info->count1++;
  948.       else
  949.         break;
  950.       
  951.     cod_info->big_values = i/2;
  952.   }
  953. }
  954. /*************************************************************************/
  955. /*            count1_bitcount                                            */
  956. /*************************************************************************/
  957. /*
  958.   Determines the number of bits to encode the quadruples.
  959. */
  960. int count1_bitcount( int ix[ 576 ], gr_info *cod_info )
  961. {
  962.     int abs_and_sign( int *x );
  963.     uint k;
  964.     int i, p, bitsum_count1;
  965.     int v, w, x, y, signbits;
  966.     int sum0 = 0, sum1 = 0;
  967.     for ( i = cod_info->big_values * 2, k = 0; k < cod_info->count1; i += 4, k++ )
  968.     {
  969.         v = ix[ i ];
  970.         w = ix[ i + 1 ];
  971.         x = ix[ i + 2 ];
  972.         y = ix[ i + 3 ];
  973.         
  974.         p = v + (w << 1) + (x << 2) + (y << 3);
  975.         
  976. signbits = v + w + x + y;
  977.         sum0 += signbits;
  978.         sum1 += signbits;
  979.         sum0 += ht[ 32 ].hlen[ p ];
  980.         sum1 += ht[ 33 ].hlen[ p ];
  981.     }
  982.     if ( sum0 < sum1 )
  983.     {
  984.         bitsum_count1 = sum0;
  985.         cod_info->count1table_select = 0;
  986.     }
  987.     else
  988.     {
  989.         bitsum_count1 = sum1;
  990.         cod_info->count1table_select = 1;
  991.     }
  992.     return( bitsum_count1 );
  993. }
  994. int optimized_calculations_tj( int * abs_ix, gr_info *cod_info )
  995. {
  996. uint k;
  997.   int p, i, bitsum_count1;
  998.   int v, w, x, y, signbits;
  999.   int sum0 = 0, sum1 = 0;
  1000.     
  1001.   if ( cod_info->window_switching_flag && (cod_info->block_type == 2) )
  1002.   {  /* short blocks */
  1003.     cod_info->count1 = 0;
  1004.     cod_info->big_values = 288;
  1005.   }
  1006.   else
  1007.   {
  1008.     for ( i = 576; i > 1; i -= 2 )
  1009.       if ( (abs_ix[i-1] | abs_ix[i-2]) != 0 )
  1010.         break;
  1011.       
  1012.     cod_info->count1 = 0 ;
  1013.     for ( ; i > 3; i -= 4 )
  1014. if ( (abs_ix[i-1] | abs_ix[i-2] | abs_ix[i-3] | abs_ix[i-4]) <= 1 )
  1015. {
  1016. cod_info->count1++;
  1017. }
  1018. else
  1019.         break;
  1020.       
  1021.     cod_info->big_values = i/2;
  1022.   }
  1023. /*===================*/
  1024. for ( i = cod_info->big_values * 2, k = 0; k < cod_info->count1; i += 4, k++ )
  1025.   {
  1026.       v = abs_ix[ i ];
  1027.       w = abs_ix[ i + 1 ];
  1028.       x = abs_ix[ i + 2 ];
  1029.       y = abs_ix[ i + 3 ];
  1030.       
  1031.       p = v + (w << 1) + (x << 2) + (y << 3);
  1032.       
  1033. signbits = v + w + x + y;
  1034.       
  1035.       sum0 += signbits;
  1036.       sum1 += signbits;
  1037.       sum0 += ht[ 32 ].hlen[ p ];
  1038.       sum1 += ht[ 33 ].hlen[ p ];
  1039.   }
  1040.   if ( sum0 < sum1 )
  1041.   {
  1042.       bitsum_count1 = sum0;
  1043.       cod_info->count1table_select = 0;
  1044.   }
  1045.   else
  1046.   {
  1047.       bitsum_count1 = sum1;
  1048.       cod_info->count1table_select = 1;
  1049.   }
  1050.   return( bitsum_count1 );
  1051. }
  1052. struct
  1053. {
  1054.     unsigned region0_count;
  1055.     unsigned region1_count;
  1056. } subdv_table[ 23 ] =
  1057. {
  1058. {0, 0}, /* 0 bands */
  1059. {0, 0}, /* 1 bands */
  1060. {0, 0}, /* 2 bands */
  1061. {0, 0}, /* 3 bands */
  1062. {0, 0}, /* 4 bands */
  1063. {0, 1}, /* 5 bands */
  1064. {1, 1}, /* 6 bands */
  1065. {1, 1}, /* 7 bands */
  1066. {1, 2}, /* 8 bands */
  1067. {2, 2}, /* 9 bands */
  1068. {2, 3}, /* 10 bands */
  1069. {2, 3}, /* 11 bands */
  1070. {3, 4}, /* 12 bands */
  1071. {3, 4}, /* 13 bands */
  1072. {3, 4}, /* 14 bands */
  1073. {4, 5}, /* 15 bands */
  1074. {4, 5}, /* 16 bands */
  1075. {4, 6}, /* 17 bands */
  1076. {5, 6}, /* 18 bands */
  1077. {5, 6}, /* 19 bands */
  1078. {5, 7}, /* 20 bands */
  1079. {6, 7}, /* 21 bands */
  1080. {6, 7}, /* 22 bands */
  1081. };
  1082. /*************************************************************************/
  1083. /*            subdivide                                                  */
  1084. /*************************************************************************/
  1085. /* presumable subdivides the bigvalue region which will
  1086.    use separate Huffman tables.
  1087. */
  1088. void subdivide( gr_info *cod_info )
  1089. {
  1090.     int scfb_anz = 0;
  1091.     int bigvalues_region;
  1092.     
  1093.     if ( cod_info->big_values == 0 )
  1094.     { /* no big_values region */
  1095.         cod_info->region0_count = 0;
  1096.         cod_info->region1_count = 0;
  1097.     }
  1098.     else
  1099.     {
  1100.         bigvalues_region = 2 * cod_info->big_values;
  1101.         if ( (cod_info->window_switching_flag == 0) )
  1102.         { /* long blocks */
  1103.             int thiscount, index;
  1104.             /* Calculate scfb_anz */
  1105.             while ( scalefac_band_long[scfb_anz] < bigvalues_region )
  1106.                 scfb_anz++;
  1107. /*            assert( scfb_anz < 23 ); */
  1108.             cod_info->region0_count = subdv_table[scfb_anz].region0_count;
  1109.             thiscount = cod_info->region0_count;
  1110.             index = thiscount + 1;
  1111.             while ( thiscount && (scalefac_band_long[index] > bigvalues_region) )
  1112.             {
  1113.                 thiscount -= 1;
  1114.                 index -= 1;
  1115.             }
  1116.             cod_info->region0_count = thiscount;
  1117.             cod_info->region1_count = subdv_table[scfb_anz].region1_count;
  1118.             index = cod_info->region0_count + cod_info->region1_count + 2;
  1119.             thiscount = cod_info->region1_count;
  1120.             while ( thiscount && (scalefac_band_long[index] > bigvalues_region) )
  1121.             {
  1122.                 thiscount -= 1;
  1123.                 index -= 1;
  1124.             }
  1125.             cod_info->region1_count = thiscount;
  1126.             cod_info->address1 = scalefac_band_long[cod_info->region0_count+1];
  1127.             cod_info->address2 = scalefac_band_long[cod_info->region0_count
  1128.                                                     + cod_info->region1_count + 2 ];
  1129.             cod_info->address3 = bigvalues_region;
  1130.         }
  1131.         else
  1132.         {
  1133.             if ( (cod_info->block_type == 2) && (cod_info->mixed_block_flag == 0) )
  1134.             { 
  1135.                 cod_info->region0_count =  8;
  1136.                 cod_info->region1_count =  36;
  1137.                 cod_info->address1 = 36;
  1138.                 cod_info->address2 = bigvalues_region;
  1139.                 cod_info->address3 = 0;  
  1140.             }
  1141.             else
  1142.             {
  1143.                 cod_info->region0_count = 7;
  1144.                 cod_info->region1_count = 13;
  1145.                 cod_info->address1 = scalefac_band_long[cod_info->region0_count+1];
  1146.                 cod_info->address2 = bigvalues_region;
  1147.                 cod_info->address3 = 0;
  1148.             }
  1149.         }
  1150.     }
  1151. }
  1152. /*************************************************************************/
  1153. /*            bigv_tab_select                                            */
  1154. /*************************************************************************/
  1155. /* Function: Select huffman code tables for bigvalues regions */
  1156. void bigv_tab_select_tj( int abs_ix[576], gr_info *cod_info )
  1157. {
  1158.   /* int max; */
  1159.   cod_info->table_select[0] = 0;
  1160.   cod_info->table_select[1] = 0;
  1161.   cod_info->table_select[2] = 0;
  1162.     
  1163.   if ( cod_info->window_switching_flag && (cod_info->block_type == 2) )
  1164.   {
  1165.     /*
  1166.       Within each scalefactor band, data is given for successive
  1167.       time windows, beginning with window 0 and ending with window 2.
  1168.       Within each window, the quantized values are then arranged in
  1169.       order of increasing frequency...
  1170.       */
  1171.     int sfb, window, line, start, end, max1, max2, x, y;
  1172.     int *pmax;
  1173. int tMax;
  1174.     max1 = max2 = 0;
  1175.     for ( sfb = 0; sfb < 13; sfb++ )
  1176.     {
  1177.       start = scalefac_band_short[ sfb ];
  1178.       end   = scalefac_band_short[ sfb+1 ];
  1179.       
  1180.       if ( start < 12 )
  1181.         pmax = &max1;
  1182.       else
  1183.         pmax = &max2;
  1184.       tMax = * pmax;
  1185.       for ( window = 0; window < 3; window++ )
  1186.         for ( line = start; line < end; line += 2 )
  1187.         {
  1188.           x = abs_ix[ (line * 3) + window ];
  1189.           y = abs_ix[ ((line + 1) * 3) + window ];
  1190.           if( x > tMax )
  1191. tMax = x;
  1192. if( y > tMax )
  1193. tMax = y;
  1194.         }
  1195. * pmax = tMax;
  1196. }
  1197.     cod_info->table_select[0] = choose_table( max1 );
  1198.     cod_info->table_select[1] = choose_table( max2 );
  1199.   }
  1200.   else
  1201.   {
  1202.     if ( cod_info->address1 > 0 )
  1203.       cod_info->table_select[0] = new_choose_table_tj( abs_ix, 0, cod_info->address1 );
  1204.     if ( cod_info->address2 > cod_info->address1 )
  1205.       cod_info->table_select[1] = new_choose_table_tj( abs_ix, cod_info->address1, cod_info->address2 );
  1206.     if ( cod_info->big_values * 2 > cod_info->address2 )
  1207.       cod_info->table_select[2] = new_choose_table_tj( abs_ix, cod_info->address2, cod_info->big_values * 2 );
  1208.   }
  1209. }
  1210. /*************************************************************************/
  1211. /*            new_choose table                                           */
  1212. /*************************************************************************/
  1213. /*
  1214.   Choose the Huffman table that will encode ix[begin..end] with
  1215.   the fewest bits.
  1216.   Note: This code contains knowledge about the sizes and characteristics
  1217.   of the Huffman tables as defined in the IS (Table B.7), and will not work
  1218.   with any arbitrary tables.
  1219. */
  1220. int new_choose_table_tj( int abs_ix[576], unsigned int begin, unsigned int end )
  1221. {
  1222. uint max;
  1223.   int i;
  1224.   int choice[ 2 ];
  1225.   int sum[ 2 ];
  1226.   max = ix_max_tj( abs_ix, begin, end );
  1227.   if ( max == 0 )
  1228.     return 0;
  1229.     
  1230.   choice[ 0 ] = 0;
  1231.   choice[ 1 ] = 0;
  1232.   if ( max < 15 )
  1233.   {
  1234.     for ( i = 0; i < 14; i++ )
  1235.       if ( ht[i].xlen > max )
  1236.     {
  1237. choice[ 0 ] = i;
  1238.         break;
  1239.     }
  1240. /* assert( choice[0] ); */
  1241. sum[ 0 ] = count_bit_tj( abs_ix, begin, end, choice[0] );
  1242. switch ( choice[0] )
  1243. {
  1244. case 2:
  1245. sum[ 1 ] = count_bit_tj( abs_ix, begin, end, 3 );
  1246. if ( sum[1] <= sum[0] )
  1247. choice[ 0 ] = 3;
  1248. break;
  1249. case 5:
  1250. sum[ 1 ] = count_bit_tj( abs_ix, begin, end, 6 );
  1251. if ( sum[1] <= sum[0] )
  1252. choice[ 0 ] = 6;
  1253. break;
  1254. case 7:
  1255. sum[ 1 ] = count_bit_tj( abs_ix, begin, end, 8 );
  1256. if ( sum[1] <= sum[0] )
  1257. {
  1258. choice[ 0 ] = 8;
  1259. sum[ 0 ] = sum[ 1 ];
  1260. }
  1261. sum[ 1 ] = count_bit_tj( abs_ix, begin, end, 9 );
  1262. if ( sum[1] <= sum[0] )
  1263. choice[ 0 ] = 9;
  1264. break;
  1265. case 10:
  1266. sum[ 1 ] = count_bit_tj( abs_ix, begin, end, 11 );
  1267. if ( sum[1] <= sum[0] )
  1268. {
  1269. choice[ 0 ] = 11;
  1270. sum[ 0 ] = sum[ 1 ];
  1271. }
  1272. sum[ 1 ] = count_bit_tj( abs_ix, begin, end, 12 );
  1273. if ( sum[1] <= sum[0] )
  1274. choice[ 0 ] = 12;
  1275. break;
  1276. case 13:
  1277. sum[ 1 ] = count_bit_tj( abs_ix, begin, end, 15 );
  1278. if ( sum[1] <= sum[0] )
  1279. choice[ 0 ] = 15;
  1280. break;
  1281. default:
  1282. break;
  1283. }
  1284.   }
  1285.   else
  1286.   {
  1287. /* try tables with linbits */
  1288. max -= 15;
  1289. for ( i = 15; i < 24; i++ )
  1290. {
  1291.     if ( ht[i].linmax >= max )
  1292.     {
  1293. choice[ 0 ] = i;
  1294. break;
  1295.     }
  1296. }
  1297. for ( i = 24; i < 32; i++ )
  1298. {
  1299.     if ( ht[i].linmax >= max )
  1300.   {
  1301. choice[ 1 ] = i;
  1302. break;
  1303.     }
  1304. }
  1305. /* assert( choice[0] );
  1306. assert( choice[1] ); */
  1307. sum[ 0 ] = count_bit_tj( abs_ix, begin, end, choice[0] );
  1308. sum[ 1 ] = count_bit_tj( abs_ix, begin, end, choice[1] );
  1309. if ( sum[1] < sum[0] )
  1310.     choice[ 0 ] = choice[ 1 ];
  1311.   }
  1312.   return choice[ 0 ];
  1313. }
  1314. /*************************************************************************/
  1315. /*            choose table                                               */
  1316. /*************************************************************************/
  1317. int choose_table( int max )
  1318. {
  1319.     int  i, choice;
  1320.     if ( max == 0 )
  1321.         return 0;
  1322.     
  1323. max = abs( max );
  1324.     choice = 0;
  1325.     if ( max < 15 )
  1326.     {
  1327.       for ( i = 0; i < 15; i++ )
  1328.       {
  1329.         if ( ht[i].xlen > max )
  1330.         {
  1331. choice = i;
  1332. break;
  1333.         }
  1334.       }
  1335.     }
  1336.     else
  1337.     {
  1338. max -= 15;
  1339. for (i = 15; i < 32; i++ )
  1340. {
  1341.      if ( ht[i].linmax >= max )
  1342.      {
  1343. choice = i;
  1344. break;
  1345.      }
  1346. }
  1347.     }
  1348.     return choice;
  1349. }
  1350. /*************************************************************************/
  1351. /*            bigv_bitcount                                              */
  1352. /*************************************************************************/
  1353. /*
  1354. Function: Count the number of bits necessary to code the bigvalues region.
  1355. */
  1356. int bigv_bitcount_tj( int * abs_ix, gr_info *gi )
  1357. {
  1358.   int bits = 0;
  1359.     
  1360.   if ( gi->window_switching_flag && gi->block_type == 2 )
  1361.   {
  1362.     /*
  1363.       Within each scalefactor band, data is given for successive
  1364.       time windows, beginning with window 0 and ending with window 2.
  1365.       Within each window, the quantized values are then arranged in
  1366.       order of increasing frequency...
  1367.       */
  1368.     int sfb, window, line, start, end;
  1369.     I192_3 *ix_s;
  1370.     if ( gi->mixed_block_flag )
  1371.     {
  1372.       unsigned int table;
  1373.       if ( (table = gi->table_select[0]) != 0 )
  1374.           bits += count_bit_tj( abs_ix, 0, gi->address1, table );
  1375.       sfb = 2;
  1376.     }
  1377.     else
  1378.       sfb = 0;
  1379.     ix_s = (I192_3 *) &abs_ix[0];
  1380.     for ( ; sfb < 13; sfb++ )
  1381.     {
  1382.       unsigned tableindex = 100;
  1383. unsigned idx;
  1384. struct huffcodetab *h;
  1385.       start = scalefac_band_short[ sfb ];
  1386.       end   = scalefac_band_short[ sfb+1 ];
  1387.       if ( start < 12 )
  1388.         tableindex = gi->table_select[ 0 ];
  1389.       else
  1390.         tableindex = gi->table_select[ 1 ];
  1391. /*      assert( tableindex < 32 ); */
  1392. if ( tableindex != 0 )
  1393. {
  1394. h = &(ht[tableindex]);
  1395. for ( window = 0; window < 3; window++ )
  1396. for ( line = start; line < end; line += 2 )
  1397. {
  1398. int x = (*ix_s)[line][window];
  1399. int y = (*ix_s)[line + 1][window];
  1400. if ( tableindex > 15 )
  1401. { /* ESC-table is used */
  1402. if ( x > 14 )
  1403. {
  1404. x = 15;
  1405. bits += h->linbits;
  1406. }
  1407. if ( y > 14 )
  1408. {
  1409. y = 15;
  1410. bits += h->linbits;
  1411. }
  1412. }
  1413. idx = (x * h->ylen) + y;
  1414. bits += h->hlen[ idx ];
  1415. if ( x != 0 )
  1416. bits += 1;
  1417. if ( y != 0 )
  1418. bits += 1;
  1419. }
  1420. }
  1421.     }
  1422.   }
  1423.   else
  1424.   {
  1425. unsigned int table;
  1426.   
  1427. if( (table=gi->table_select[0]) != 0 )  /* region0 */ 
  1428. bits += count_bit_tj(abs_ix, 0, gi->address1, table );
  1429. if( (table=gi->table_select[1]) != 0 )  /* region1 */ 
  1430. bits += count_bit_tj(abs_ix, gi->address1, gi->address2, table );
  1431. if( (table=gi->table_select[2]) != 0 )  /* region2 */ 
  1432. bits += count_bit_tj(abs_ix, gi->address2, gi->address3, table );
  1433. }
  1434.   return bits;
  1435. }
  1436. /*************************************************************************/
  1437. /*            count_bit                                                  */
  1438. /*************************************************************************/
  1439. /*
  1440.  Function: Count the number of bits necessary to code the subregion. 
  1441. */
  1442. int count_bit_tj( int abs_ix[576], unsigned int start, unsigned int end, unsigned int table )
  1443. {
  1444.     int i, sum;
  1445. unsigned idx;
  1446. struct huffcodetab *h;
  1447. int x, y;
  1448. if ( table == 0 )
  1449. return 0;
  1450. h = &(ht[table]);
  1451.     sum = 0;
  1452. if( table > 15 )
  1453. {
  1454. for ( i = start; i < end; i += 2 )
  1455. {
  1456. x = abs_ix[i];
  1457. y = abs_ix[i+1];
  1458. if ( x > 14 )
  1459. {
  1460. x = 15;
  1461. sum += h->linbits;
  1462. }
  1463. if ( y > 14 )
  1464. {
  1465. y = 15;
  1466. sum += h->linbits;
  1467. }
  1468. idx = (x * h->ylen) + y;
  1469. sum += h->hlen[ idx ] + ( x != 0 ) + ( y != 0 );
  1470. }
  1471. }
  1472. else
  1473. {
  1474. for ( i = start; i < end; i += 2 )
  1475. {
  1476. x = abs_ix[i];
  1477. y = abs_ix[i+1];
  1478. idx = (x * h->ylen) + y;
  1479. sum += h->hlen[ idx ] + ( x != 0 ) + ( y != 0 );
  1480. }
  1481. }
  1482.     return sum;
  1483. }
  1484. #ifndef HAVE_NINT
  1485. int
  1486. nint( double in )
  1487. {
  1488.     int    temp;
  1489.     if( in < 0 )  temp = (int)(in - 0.5);
  1490.     else    temp = (int)(in + 0.5);
  1491.     return(temp);
  1492. }
  1493. double
  1494. aint(double in) {
  1495. return((int) in);
  1496. }
  1497. #endif
  1498. /*************************************************************************/
  1499. /*            gr_deco                                                    */
  1500. /*************************************************************************/
  1501. void gr_deco( gr_info *cod_info )
  1502. {
  1503.     if ( cod_info->window_switching_flag != 0 && cod_info->block_type == 2 )
  1504.         if ( cod_info->mixed_block_flag == 0 )
  1505.         {
  1506.             cod_info->sfb_lmax = 0; /* No sb*/
  1507.             cod_info->sfb_smax = 0;
  1508.         }
  1509.         else
  1510.         {
  1511.             cod_info->sfb_lmax = 8;
  1512.             cod_info->sfb_smax = 3;
  1513.         }
  1514.     else
  1515.     {
  1516.         cod_info->sfb_lmax = SFB_LMAX - 1;
  1517.         cod_info->sfb_smax = SFB_SMAX - 1;    /* No sb */
  1518.     }
  1519. }
  1520. /* The following optional code written by Seymour Shlien
  1521.    will speed up the outer_loop code which is called
  1522.    by iteration_loop. When BIN_SEARCH is defined, the
  1523.    outer_loop function precedes the call to the function inner_loop
  1524.    with a call to bin_search gain defined below, which
  1525.    returns a good starting quantizerStepSize.
  1526. */
  1527. int count_bits( int * ix,gr_info * cod_info)
  1528. {
  1529. int bits;
  1530.   calc_runlen(ix,cod_info); /*rzero,count1,big_values*/
  1531.   bits = count1_bitcount(ix, cod_info); /*count1_table selection*/
  1532.   subdivide(cod_info); /* bigvalues sfb division */
  1533.   bigv_tab_select_tj(ix,cod_info); /* codebook selection*/
  1534.   bits += bigv_bitcount_tj(ix,cod_info); /* bit count */
  1535. return bits;
  1536. }
  1537. int bin_search_StepSize(int desired_rate, double start, int *ix,
  1538.            double xrs[576], gr_info * cod_info)
  1539. {
  1540. double top,bot,next,last;
  1541. int bit;
  1542. top = start;
  1543. bot = 200;
  1544. next = start;
  1545. do
  1546.   {
  1547. last = next;
  1548. next = aint((top+bot)/2.0);
  1549. cod_info->quantizerStepSize = next;
  1550. tjBitOverflow1 = FALSE;
  1551. quantize_tj(xrs,ix,cod_info);
  1552. if( tjBitOverflow1 == TRUE )
  1553.   bit = 100000;
  1554. else
  1555.   bit = count_bits(ix,cod_info);
  1556. if (bit>desired_rate) 
  1557. top = next;
  1558. else 
  1559. bot = next;
  1560.   }
  1561.   while ((bit != desired_rate) && fabs(last - next) > 1.0);
  1562. return next;
  1563. }