loop.c
上传用户:shenggui01
上传日期:2022-01-16
资源大小:54k
文件大小:15k
源码类别:

mpeg/mp3

开发平台:

C/C++

  1. /* loop.c */
  2. #include "types.h"
  3. #include "table2.h"
  4. //#define EXCESS_TO_PART3
  5. #define PART_2_3_LIMIT ((1<<12)-1)     /* 12 bit part_2_3_length */
  6. #define DEC_BUFF_LIMIT 7680            /* decoder buffer limit */
  7. extern int *scalefac_band_long;
  8. extern int cutoff;
  9. int count_bit(int ix[samp_per_frame2], unsigned int start, unsigned int end, unsigned int table );
  10. int bigv_bitcount(int ix[samp_per_frame2], gr_info *gi);
  11. int new_choose_table( int ix[samp_per_frame2], unsigned int begin, unsigned int end );
  12. void bigv_tab_select( int ix[samp_per_frame2], gr_info *gi );
  13. void subdivide(gr_info *gi);
  14. int count1_bitcount( int ix[ samp_per_frame2 ], gr_info *gi );
  15. void calc_runlen( int ix[samp_per_frame2], gr_info *gi );
  16. int quantize(int ix[samp_per_frame2], int stepsize);
  17. int ix_max( int ix[samp_per_frame2], unsigned int begin, unsigned int end );
  18. static long
  19.   *xr,                    /* magnitudes of the spectral values */
  20.   xrabs[samp_per_frame2], /* xr absolute */
  21.   xrmax;                  /* maximum of xrabs array */
  22. /*
  23.  * inner_loop:
  24.  * ----------
  25.  * Selects the quantizer stepsize that allows encoding of the entire
  26.  * spectrum with as many bits as possible up to the maximum allowed
  27.  * of max_bits. Bits used must never exceed max_bits.
  28.  * The lower the value of stepsize, the more bits are required.
  29.  * Each increment of stepsize is an increase of global gain by 1.5dB (2**0.25).
  30.  * The bit calculation functions are executed 7 or 8 times per call.
  31.  */
  32. static int inner_loop(int ix[samp_per_frame2],int max_bits,gr_info *gi)
  33. {
  34.   int step, stepsize, bits;
  35.   step = stepsize = 64;
  36.   /* This loop ends within 1 step of max_bits.
  37.    * It takes a fixed 7 times around because the tablesize is 128=2**7.
  38.    */
  39.   while(step)
  40.   {
  41.     if(!quantize(ix,stepsize))
  42.       bits = 0x7fffffff;     /* outside (our) table range, early fail exit */
  43.     else
  44.     {
  45.       calc_runlen(ix,gi);              /* rzero,count1,big_values */
  46.       bits = count1_bitcount(ix,gi);   /* count1_table selection */
  47.       subdivide(gi);                   /* bigvalues sfb division */
  48.       bigv_tab_select(ix,gi);          /* codebook selection */
  49.       bits += bigv_bitcount(ix,gi);    /* bit count */
  50.     }
  51.     step >>= 1;
  52.     if(bits > max_bits)
  53.       stepsize += step;
  54.     else
  55.       stepsize -= step;
  56.   };
  57.   /* this loop takes it over to the right side of max_bits.
  58.    * it usually only has to go through once, sometimes not
  59.    * at all. The while is just for safety.
  60.    */
  61.   while(bits > max_bits)
  62.   {
  63.     quantize(ix,++stepsize);         /* update ix */
  64.     calc_runlen(ix,gi);              /* rzero,count1,big_values */
  65.     bits = count1_bitcount(ix,gi);   /* count1_table selection */
  66.     subdivide(gi);                   /* bigvalues sfb division */
  67.     bigv_tab_select(ix,gi);          /* codebook selection */
  68.     bits += bigv_bitcount(ix,gi);    /* bit count */
  69.   }
  70.   gi->quantizerStepSize = stepsize;
  71.   return bits;
  72. }
  73. /*
  74.  * L3_iteration_loop:
  75.  * ------------------
  76.  */
  77. void L3_iteration_loop(long            mdct_freq_org[2][2][samp_per_frame2],
  78.                        L3_side_info_t *side_info,
  79.                        int             l3_enc[2][2][samp_per_frame2],
  80.                        int             mean_bits)
  81. {
  82.   gr_info *gi;
  83.   int ch, gr, i;
  84.   int *ix;
  85.   int max_bits;
  86.   int extra_bits;
  87.   int reservoir;
  88.   int resv_max;
  89.   static int main_data_begin;
  90.   reservoir = main_data_begin << 3;  /* calculate reservoir at the frame start */
  91.   side_info->main_data_begin = main_data_begin; /* set next frames back pointer */
  92.   for(gr=0; gr<config.mpeg.granules; gr++)
  93.     for(ch=config.mpeg.channels; ch--; )
  94.     {
  95.       /* setup pointers */
  96.       ix = l3_enc[gr][ch];
  97.       xr = mdct_freq_org[gr][ch];
  98.       gi = &side_info->gr[gr].ch[ch].tt;
  99.       /* calculate absolute and maximum */
  100.       for (i=cutoff, xrmax=0; i--;)
  101.         if(xrmax < (xrabs[i] = abs(xr[i])))
  102.           xrmax = xrabs[i];
  103.       gi->part2_3_length    = 0;
  104.       gi->big_values        = 0;
  105.       gi->count1            = 0;
  106.       gi->table_select[0]   = 0;
  107.       gi->table_select[1]   = 0;
  108.       gi->table_select[2]   = 0;
  109.       gi->region0_count     = 0;
  110.       gi->region1_count     = 0;
  111.       gi->count1table_select= 0;
  112.       /* calculate the available bits for the main data */
  113.       extra_bits = reservoir >> 1; /* simple scheme, give half each time */
  114.       reservoir -= extra_bits;
  115.       max_bits = mean_bits + extra_bits;
  116.       if(max_bits > PART_2_3_LIMIT)
  117.       {
  118.         reservoir += max_bits - PART_2_3_LIMIT;
  119.         max_bits = PART_2_3_LIMIT;
  120.       }
  121.       /* quantize the spectrum unless all spectral values zero */
  122.       if(xrmax)
  123.         gi->part2_3_length = inner_loop(ix, max_bits, gi);
  124.       reservoir += max_bits - gi->part2_3_length;  /* adjust for unused bits */
  125.       gi->global_gain = gi->quantizerStepSize + 89;  /* StepSize = 0..127 (1.5dB steps) */
  126.       /* restore sign of quantized spectral values */
  127.       for ( i = 0; i < cutoff; i++ )
  128.         if (xr[i] < 0)
  129.           ix[i] *= -1;
  130.     }
  131.   /* Sort out reservoir at frame end, limit the size and stuff the excess */
  132.   resv_max = DEC_BUFF_LIMIT - config.mpeg.bits_per_frame;
  133.   if(resv_max > config.mpeg.resv_limit)
  134.     resv_max = config.mpeg.resv_limit;
  135.   else if(resv_max < 0)
  136.     resv_max = 0;
  137.   main_data_begin = (reservoir < resv_max) ? (reservoir >> 3) : (resv_max >> 3);
  138.   extra_bits = reservoir - (main_data_begin << 3);
  139. #ifdef EXCESS_TO_PART3
  140.   /* distribute excess bits throughout granules/channels */
  141.   for(gr=0; gr<config.mpeg.granules; gr++)
  142.     for(ch=0; ch<config.mpeg.channels; ch++)
  143.     {
  144.       int spare;
  145.       if (!extra_bits)
  146.         break;
  147.       gi = &side_info->gr[gr].ch[ch].tt;
  148.       spare = PART_2_3_LIMIT - gi->part2_3_length;
  149.       if(spare > extra_bits)
  150.         spare = extra_bits;
  151.       gi->part2_3_length += spare;
  152.       extra_bits -= spare;
  153.     }
  154. #endif
  155.   side_info->resv_drain = extra_bits; /* remaining bits to ancillary data */
  156. }
  157. /*
  158.  * quantize:
  159.  * ---------
  160.  * Function: Quantization of the vector xr ( -> ix).
  161.  * Returns 1 if ixmax < 1000. (our table size)
  162.  */
  163. int quantize(int ix[samp_per_frame2], int stepsize )
  164. {
  165.   /* the -1 together with the 3 bit table shift gives a 4 bit shift.
  166.    * This compensates for using mulr instead of mulsr. The 1 bit shift
  167.    * is equal to a four bit shift in the fourth power of two table.
  168.    */
  169.   int i;
  170.   long scale = pow2_4[stepsize-1]; /* 2**(-stepsize/4) */
  171.   /* A quick check to see if ixmax will be less than 1000 (our table
  172.    * size is 10000) this speeds up the early calls
  173.    */
  174.   if(mulr(xrmax, scale) > 9999)
  175.     return 0; /* no point in continuing, stepsize not big enough */
  176.   for(i=0;i<cutoff;i++)
  177.     /* ix = (|xr| * 2**(-stepsize/4)) ** (3/4)
  178.      * The multiply must round it's result to emulate the 'nearest int'
  179.      * (nint) function in the spec.
  180.      */
  181.     ix[i] = pow3_4[mulr(xrabs[i], scale)];
  182.   return 1;
  183.  }
  184. /*
  185.  * ix_max:
  186.  * -------
  187.  * Function: Calculate the maximum of ix from 'begin' to 'end-1'
  188.  */
  189. int ix_max( int ix[samp_per_frame2], unsigned int begin, unsigned int end )
  190. {
  191.   register int i;
  192.   register int max = 0;
  193.   for(i=begin;i<end;i++)
  194.     if(max < ix[i])
  195.       max = ix[i];
  196.   return max;
  197. }
  198. /*
  199.  * calc_runlen:
  200.  * ------------
  201.  * Function: Calculation of rzero, count1, big_values
  202.  * (Partitions ix into big values, quadruples and zeros).
  203.  */
  204. void calc_runlen( int ix[samp_per_frame2], gr_info *gi )
  205. {
  206.   int i;
  207.   /* zeros */
  208.   for ( i = cutoff; i > 1; i -= 2 )
  209.     if (ix[i-1] | ix[i-2])
  210.       break;
  211.   /* quadruples */
  212.   gi->count1 = 0 ;
  213.   for ( ; i > 3; i -= 4 )
  214.     if (   ix[i-1] <= 1
  215.         && ix[i-2] <= 1
  216.         && ix[i-3] <= 1
  217.         && ix[i-4] <= 1 )
  218.       gi->count1++;
  219.     else
  220.       break;
  221.   /* what's left are big values */
  222.   gi->big_values = i>>1;
  223. }
  224. /*
  225.  * count1_bitcount:
  226.  * ----------------
  227.  * Determines the number of bits to encode the quadruples.
  228.  */
  229. int count1_bitcount(int ix[samp_per_frame2], gr_info *gi)
  230. {
  231.   int p, i, k;
  232.   int v, w, x, y, signbits;
  233.   int sum0 = 0,
  234.       sum1 = 0;
  235.   for(i=gi->big_values<<1, k=0; k<gi->count1; i+=4, k++)
  236.   {
  237.     v = ix[i];
  238.     w = ix[i+1];
  239.     x = ix[i+2];
  240.     y = ix[i+3];
  241.     p = v + (w<<1) + (x<<2) + (y<<3);
  242.     signbits = 0;
  243.     if(v!=0) signbits++;
  244.     if(w!=0) signbits++;
  245.     if(x!=0) signbits++;
  246.     if(y!=0) signbits++;
  247.     sum0 += signbits;
  248.     sum1 += signbits;
  249.     sum0 += ht[32].hlen[p];
  250.     sum1 += ht[33].hlen[p];
  251.   }
  252.   if(sum0<sum1)
  253.   {
  254.     gi->count1table_select = 0;
  255.     return sum0;
  256.   }
  257.   else
  258.   {
  259.     gi->count1table_select = 1;
  260.     return sum1;
  261.   }
  262. }
  263. /*
  264.  * subdivide:
  265.  * ----------
  266.  * presumable subdivides the bigvalue region which will use separate Huffman tables.
  267.  */
  268. void subdivide(gr_info *gi)
  269. {
  270.   static struct
  271.   {
  272.     unsigned region0_count;
  273.     unsigned region1_count;
  274.   } subdv_table[ 23 ] =
  275.   {
  276.     {0, 0}, /* 0 bands */
  277.     {0, 0}, /* 1 bands */
  278.     {0, 0}, /* 2 bands */
  279.     {0, 0}, /* 3 bands */
  280.     {0, 0}, /* 4 bands */
  281.     {0, 1}, /* 5 bands */
  282.     {1, 1}, /* 6 bands */
  283.     {1, 1}, /* 7 bands */
  284.     {1, 2}, /* 8 bands */
  285.     {2, 2}, /* 9 bands */
  286.     {2, 3}, /* 10 bands */
  287.     {2, 3}, /* 11 bands */
  288.     {3, 4}, /* 12 bands */
  289.     {3, 4}, /* 13 bands */
  290.     {3, 4}, /* 14 bands */
  291.     {4, 5}, /* 15 bands */
  292.     {4, 5}, /* 16 bands */
  293.     {4, 6}, /* 17 bands */
  294.     {5, 6}, /* 18 bands */
  295.     {5, 6}, /* 19 bands */
  296.     {5, 7}, /* 20 bands */
  297.     {6, 7}, /* 21 bands */
  298.     {6, 7}, /* 22 bands */
  299.   };
  300.   int scfb_anz = 0;
  301.   int bigvalues_region;
  302.   if ( !gi->big_values)
  303.   { /* no big_values region */
  304.     gi->region0_count = 0;
  305.     gi->region1_count = 0;
  306.   }
  307.   else
  308.   {
  309.     bigvalues_region = 2 * gi->big_values;
  310.     {
  311.       int thiscount, index;
  312.       /* Calculate scfb_anz */
  313.       while ( scalefac_band_long[scfb_anz] < bigvalues_region )
  314.         scfb_anz++;
  315.       gi->region0_count = subdv_table[scfb_anz].region0_count;
  316.       thiscount = gi->region0_count;
  317.       index = thiscount + 1;
  318.       while ( thiscount && (scalefac_band_long[index] > bigvalues_region) )
  319.       {
  320.         thiscount--;
  321.         index--;
  322.       }
  323.       gi->region0_count = thiscount;
  324.       gi->region1_count = subdv_table[scfb_anz].region1_count;
  325.       index = gi->region0_count + gi->region1_count + 2;
  326.       thiscount = gi->region1_count;
  327.       while ( thiscount && (scalefac_band_long[index] > bigvalues_region) )
  328.       {
  329.         thiscount--;
  330.         index--;
  331.       }
  332.       gi->region1_count = thiscount;
  333.       gi->address1 = scalefac_band_long[gi->region0_count+1];
  334.       gi->address2 = scalefac_band_long[gi->region0_count
  335.                                             + gi->region1_count + 2 ];
  336.       gi->address3 = bigvalues_region;
  337.     }
  338.   }
  339. }
  340. /*
  341.  * bigv_tab_select:
  342.  * ----------------
  343.  * Function: Select huffman code tables for bigvalues regions
  344.  */
  345. void bigv_tab_select( int ix[samp_per_frame2], gr_info *gi )
  346. {
  347.   gi->table_select[0] = 0;
  348.   gi->table_select[1] = 0;
  349.   gi->table_select[2] = 0;
  350.   if ( gi->address1 > 0 )
  351.     gi->table_select[0] = new_choose_table( ix, 0, gi->address1 );
  352.   if ( gi->address2 > gi->address1 )
  353.     gi->table_select[1] = new_choose_table( ix, gi->address1, gi->address2 );
  354.   if ( gi->big_values<<1 > gi->address2 )
  355.     gi->table_select[2] = new_choose_table( ix, gi->address2, gi->big_values<<1 );
  356. }
  357. /*
  358.  * new_choose_table:
  359.  * -----------------
  360.  * Choose the Huffman table that will encode ix[begin..end] with
  361.  * the fewest bits.
  362.  * Note: This code contains knowledge about the sizes and characteristics
  363.  * of the Huffman tables as defined in the IS (Table B.7), and will not work
  364.  * with any arbitrary tables.
  365.  */
  366. int new_choose_table( int ix[samp_per_frame2], unsigned int begin, unsigned int end )
  367. {
  368.   int i, max;
  369.   int choice[2];
  370.   int sum[2];
  371.   max = ix_max(ix,begin,end);
  372.   if(!max)
  373.     return 0;
  374.   choice[0] = 0;
  375.   choice[1] = 0;
  376.   if(max<15)
  377.   {
  378.     /* try tables with no linbits */
  379.     for ( i =14; i--; )
  380.       if ( ht[i].xlen > max )
  381.       {
  382.         choice[0] = i;
  383.         break;
  384.       }
  385.     sum[0] = count_bit( ix, begin, end, choice[0] );
  386.     switch (choice[0])
  387.     {
  388.       case 2:
  389.         sum[1] = count_bit( ix, begin, end, 3 );
  390.         if ( sum[1] <= sum[0] )
  391.           choice[0] = 3;
  392.         break;
  393.       case 5:
  394.         sum[1] = count_bit( ix, begin, end, 6 );
  395.         if ( sum[1] <= sum[0] )
  396.           choice[0] = 6;
  397.         break;
  398.       case 7:
  399.         sum[1] = count_bit( ix, begin, end, 8 );
  400.         if ( sum[1] <= sum[0] )
  401.         {
  402.           choice[0] = 8;
  403.           sum[0] = sum[1];
  404.         }
  405.         sum[1] = count_bit( ix, begin, end, 9 );
  406.         if ( sum[1] <= sum[0] )
  407.           choice[0] = 9;
  408.         break;
  409.       case 10:
  410.         sum[1] = count_bit( ix, begin, end, 11 );
  411.         if ( sum[1] <= sum[0] )
  412.         {
  413.           choice[0] = 11;
  414.           sum[0] = sum[1];
  415.         }
  416.         sum[1] = count_bit( ix, begin, end, 12 );
  417.         if ( sum[1] <= sum[0] )
  418.           choice[0] = 12;
  419.         break;
  420.       case 13:
  421.         sum[1] = count_bit( ix, begin, end, 15 );
  422.         if ( sum[1] <= sum[0] )
  423.           choice[0] = 15;
  424.         break;
  425.     }
  426.   }
  427.   else
  428.   {
  429.     /* try tables with linbits */
  430.     max -= 15;
  431.     for(i=15;i<24;i++)
  432.       if(ht[i].linmax>=max)
  433.       {
  434.         choice[0] = i;
  435.         break;
  436.       }
  437.     for(i=24;i<32;i++)
  438.       if(ht[i].linmax>=max)
  439.       {
  440.         choice[1] = i;
  441.         break;
  442.       }
  443.     sum[0] = count_bit(ix,begin,end,choice[0]);
  444.     sum[1] = count_bit(ix,begin,end,choice[1]);
  445.     if (sum[1]<sum[0])
  446.       choice[0] = choice[1];
  447.   }
  448.   return choice[0];
  449. }
  450. /*
  451.  * bigv_bitcount:
  452.  * --------------
  453.  * Function: Count the number of bits necessary to code the bigvalues region.
  454.  */
  455. int bigv_bitcount(int ix[samp_per_frame2], gr_info *gi)
  456. {
  457.   int bits = 0;
  458.   unsigned int table;
  459.   if((table = gi->table_select[0]) != 0)  /* region0 */
  460.     bits += count_bit(ix, 0, gi->address1, table );
  461.   if((table = gi->table_select[1]) != 0)  /* region1 */
  462.     bits += count_bit(ix, gi->address1, gi->address2, table );
  463.   if((table = gi->table_select[2]) != 0)  /* region2 */
  464.     bits += count_bit(ix, gi->address2, gi->address3, table );
  465.   return bits;
  466. }
  467. /*
  468.  * count_bit:
  469.  * ----------
  470.  * Function: Count the number of bits necessary to code the subregion.
  471.  */
  472. int count_bit(int ix[samp_per_frame2],
  473.               unsigned int start,
  474.               unsigned int end,
  475.               unsigned int table )
  476. {
  477.   unsigned            linbits, ylen;
  478.   register int        i, sum;
  479.   register int        x,y;
  480.   struct huffcodetab *h;
  481.   if(!table)
  482.     return 0;
  483.   h   = &(ht[table]);
  484.   sum = 0;
  485.   ylen    = h->ylen;
  486.   linbits = h->linbits;
  487.   if(table>15)
  488.   { /* ESC-table is used */
  489.     for(i=start;i<end;i+=2)
  490.     {
  491.       x = ix[i];
  492.       y = ix[i+1];
  493.       if(x>14)
  494.       {
  495.         x = 15;
  496.         sum += linbits;
  497.       }
  498.       if(y>14)
  499.       {
  500.         y = 15;
  501.         sum += linbits;
  502.       }
  503.       sum += h->hlen[(x*ylen)+y];
  504.       if(x)
  505.         sum++;
  506.       if(y)
  507.         sum++;
  508.     }
  509.   }
  510.   else
  511.   { /* No ESC-words */
  512.     for(i=start;i<end;i+=2)
  513.     {
  514.       x = ix[i];
  515.       y = ix[i+1];
  516.       sum  += h->hlen[(x*ylen)+y];
  517.       if(x!=0)
  518.         sum++;
  519.       if(y!=0)
  520.         sum++;
  521.     }
  522.   }
  523.   return sum;
  524. }