layer3.cpp
上传用户:tuheem
上传日期:2007-05-01
资源大小:21889k
文件大小:38k
源码类别:

多媒体编程

开发平台:

Visual C++

  1. /* layer3.cpp
  2. Implementation of the layer III decoder
  3.    01/31/97 : Layer III routines adopted from the ISO MPEG Audio Subgroup
  4.    Software Simulation Group's public c source for its MPEG audio decoder.
  5.    These routines were in the file "decoder.c". Rearrangement of the routines
  6.    as member functions of a layer III decoder object, and optimizations by
  7.    Jeff Tsay (ctsay@pasteur.eecs.berkeley.edu).
  8.    04/14/97 : Several performance improvements. Inverse IMDCT moved to
  9.    an external source file. No huffman tables needed, so no need for
  10.    initialization. Put get_side_info() in this source file, and made
  11.    one function inline for better speed and elegance. Also added support
  12.    for mono decoding of stereo streams as well as downmixing. Bug fix
  13.    in dequantize_samples().
  14.    06/26/97 : Added MPEG2 LSF capability and made a few minor speedups.
  15.    The optimized reording function must be fixed, so right now the
  16.    one from 1.81 is used. */
  17. #include <math.h>
  18. #include "all.h"
  19. #include "l3type.h"
  20. #include "ibitstr.h"
  21. #include "obuffer.h"
  22. #include "bit_res.h"
  23. #include "header.h"
  24. #include "synfilt.h"
  25. #include "huffman.h"
  26. #include "layer3.h"
  27. #include "l3table.h"
  28. #include "inv_mdct.h"
  29. LayerIII_Decoder::LayerIII_Decoder(Ibitstream *stream0,
  30.                                    Header *header0,
  31.                                    SynthesisFilter *filtera,
  32.                                    SynthesisFilter *filterb,
  33.                     Obuffer *buffer0,
  34.                                    enum e_channels which_ch0)
  35. {
  36.   stream         = stream0;
  37.   header         = header0;
  38.   filter1        = filtera;
  39.   filter2        = filterb;
  40.   buffer         = buffer0;
  41.   which_channels = which_ch0;
  42.   frame_start = 0;
  43.   channels    = (header->mode() == single_channel) ? 1 : 2;
  44.   max_gr      = (header->version() == MPEG1) ? 2 : 1;
  45.   sfreq       =  header->sample_frequency() +
  46.                  ((header->version() == MPEG1) ? 3 : 0);
  47.   if (channels == 2) {
  48.      switch (which_channels) {
  49.      case left:
  50.      case downmix:
  51.      first_channel = last_channel = 0;
  52.      break;
  53.      case right:
  54.      first_channel = last_channel = 1;
  55.      break;
  56.      case both:
  57.   default:
  58.      first_channel  = 0;
  59.      last_channel   = 1;
  60.      break;
  61.      }
  62.   } else {
  63.     first_channel = last_channel = 0;
  64.   }
  65.   for(int32 ch=0;ch<2;ch++)
  66.      for (int32 j=0; j<576; j++)
  67.     prevblck[ch][j] = 0.0f;
  68.   nonzero[0] = nonzero[1] = 576;
  69.   br = new Bit_Reserve();
  70.   si = new III_side_info_t;
  71. }
  72. LayerIII_Decoder::~LayerIII_Decoder()
  73. {
  74.    delete br;
  75.    delete si;
  76. }
  77. void LayerIII_Decoder::seek_notify()
  78. {
  79. frame_start = 0;
  80.   for(int32 ch=0;ch<2;ch++)
  81.   for (int32 j=0; j<576; j++)
  82.        prevblck[ch][j] = 0.0f;
  83.    delete br;
  84.    br = new Bit_Reserve;
  85. }
  86. bool LayerIII_Decoder::get_side_info()
  87. // Reads the side info from the stream, assuming the entire
  88. // frame has been read already.
  89. // Mono   : 136 bits (= 17 bytes)
  90. // Stereo : 256 bits (= 32 bytes)
  91. {
  92. uint32 ch;
  93. int32 gr;
  94. if (header->version() == MPEG1) {
  95. si->main_data_begin = stream->get_bits(9);
  96. if (channels == 1)
  97. si->private_bits = stream->get_bits(5);
  98. else si->private_bits = stream->get_bits(3);
  99. for (ch=0; ch<channels; ch++) {
  100. si->ch[ch].scfsi[0] = stream->get_bits(1);
  101. si->ch[ch].scfsi[1] = stream->get_bits(1);
  102. si->ch[ch].scfsi[2] = stream->get_bits(1);
  103. si->ch[ch].scfsi[3] = stream->get_bits(1);
  104.    }
  105. for (gr=0; gr<2; gr++) {
  106. for (ch=0; ch<channels; ch++) {
  107. si->ch[ch].gr[gr].part2_3_length = stream->get_bits(12);
  108.    si->ch[ch].gr[gr].big_values = stream->get_bits(9);
  109. si->ch[ch].gr[gr].global_gain = stream->get_bits(8);
  110. si->ch[ch].gr[gr].scalefac_compress = stream->get_bits(4);
  111. si->ch[ch].gr[gr].window_switching_flag = stream->get_bits(1);
  112. if (si->ch[ch].gr[gr].window_switching_flag) {
  113. si->ch[ch].gr[gr].block_type       = stream->get_bits(2);
  114. si->ch[ch].gr[gr].mixed_block_flag = stream->get_bits(1);
  115. si->ch[ch].gr[gr].table_select[0]  = stream->get_bits(5);
  116. si->ch[ch].gr[gr].table_select[1]  = stream->get_bits(5);
  117. si->ch[ch].gr[gr].subblock_gain[0] = stream->get_bits(3);
  118. si->ch[ch].gr[gr].subblock_gain[1] = stream->get_bits(3);
  119. si->ch[ch].gr[gr].subblock_gain[2] = stream->get_bits(3);
  120. // Set region_count parameters since they are implicit in this case.
  121. if (si->ch[ch].gr[gr].block_type == 0) {
  122. //  Side info bad: block_type == 0 in split block
  123. return false;
  124. } else if (si->ch[ch].gr[gr].block_type == 2
  125.      && si->ch[ch].gr[gr].mixed_block_flag == 0) {
  126. si->ch[ch].gr[gr].region0_count = 8;
  127.                } else {
  128.                si->ch[ch].gr[gr].region0_count = 7;
  129.                }
  130. si->ch[ch].gr[gr].region1_count = 20 -
  131. si->ch[ch].gr[gr].region0_count;
  132. } else {
  133. si->ch[ch].gr[gr].table_select[0] = stream->get_bits(5);
  134. si->ch[ch].gr[gr].table_select[1] = stream->get_bits(5);
  135. si->ch[ch].gr[gr].table_select[2] = stream->get_bits(5);
  136. si->ch[ch].gr[gr].region0_count = stream->get_bits(4);
  137. si->ch[ch].gr[gr].region1_count = stream->get_bits(3);
  138. si->ch[ch].gr[gr].block_type = 0;
  139. }
  140. si->ch[ch].gr[gr].preflag = stream->get_bits(1);
  141. si->ch[ch].gr[gr].scalefac_scale = stream->get_bits(1);
  142. si->ch[ch].gr[gr].count1table_select = stream->get_bits(1);
  143.          }
  144.       }
  145.    } else {   // MPEG-2 LSF
  146.       si->main_data_begin = stream->get_bits(8);
  147.       if (channels == 1)
  148.        si->private_bits = stream->get_bits(1);
  149.       else si->private_bits = stream->get_bits(2);
  150.       for (ch=0; ch<channels; ch++) {
  151.           si->ch[ch].gr[0].part2_3_length = stream->get_bits(12);
  152.           si->ch[ch].gr[0].big_values = stream->get_bits(9);
  153.           si->ch[ch].gr[0].global_gain = stream->get_bits(8);
  154.           si->ch[ch].gr[0].scalefac_compress = stream->get_bits(9);
  155.           si->ch[ch].gr[0].window_switching_flag = stream->get_bits(1);
  156.           if (si->ch[ch].gr[0].window_switching_flag) {
  157.              si->ch[ch].gr[0].block_type = stream->get_bits(2);
  158.              si->ch[ch].gr[0].mixed_block_flag = stream->get_bits(1);
  159.              si->ch[ch].gr[0].table_select[0] = stream->get_bits(5);
  160.              si->ch[ch].gr[0].table_select[1] = stream->get_bits(5);
  161.              si->ch[ch].gr[0].subblock_gain[0] = stream->get_bits(3);
  162.              si->ch[ch].gr[0].subblock_gain[1] = stream->get_bits(3);
  163.              si->ch[ch].gr[0].subblock_gain[2] = stream->get_bits(3);
  164.             // Set region_count parameters since they are implicit in this case.
  165.              if (si->ch[ch].gr[0].block_type == 0) {
  166.                 // Side info bad: block_type == 0 in split block
  167.                 return false;
  168.              } else if (si->ch[ch].gr[0].block_type == 2
  169.                       && si->ch[ch].gr[0].mixed_block_flag == 0) {
  170.                si->ch[ch].gr[0].region0_count = 8;
  171.  } else {
  172.                si->ch[ch].gr[0].region0_count = 7;
  173.                 si->ch[ch].gr[0].region1_count = 20 -
  174.                  si->ch[ch].gr[0].region0_count;
  175.              }
  176.           } else {
  177.              si->ch[ch].gr[0].table_select[0] = stream->get_bits(5);
  178.              si->ch[ch].gr[0].table_select[1] = stream->get_bits(5);
  179.              si->ch[ch].gr[0].table_select[2] = stream->get_bits(5);
  180.              si->ch[ch].gr[0].region0_count = stream->get_bits(4);
  181.              si->ch[ch].gr[0].region1_count = stream->get_bits(3);
  182.              si->ch[ch].gr[0].block_type = 0;
  183.           }
  184.           si->ch[ch].gr[0].scalefac_scale = stream->get_bits(1);
  185.           si->ch[ch].gr[0].count1table_select = stream->get_bits(1);
  186.       }   // for(ch=0; ch<channels; ch++)
  187.    } // if (header->version() == MPEG1)
  188. return true;
  189. }
  190. struct {
  191. int32 l[5];
  192. int32 s[3];} sfbtable = {{0, 6, 11, 16, 21},
  193.     {0, 6, 12}};
  194. void LayerIII_Decoder::get_scale_factors(uint32 ch, uint32 gr)
  195. {
  196. int32 sfb, window;
  197. gr_info_s *gr_info = &(si->ch[ch].gr[gr]);
  198.    int32 scale_comp   = gr_info->scalefac_compress;
  199.    int32 length0      = slen[0][scale_comp];
  200.    int32 length1      = slen[1][scale_comp];
  201. if (gr_info->window_switching_flag && (gr_info->block_type == 2)) {
  202. if (gr_info->mixed_block_flag) { // MIXED
  203. for (sfb = 0; sfb < 8; sfb++)
  204. scalefac[ch].l[sfb] = br->hgetbits(
  205.   slen[0][gr_info->scalefac_compress]);
  206. for (sfb = 3; sfb < 6; sfb++)
  207. for (window=0; window<3; window++)
  208. scalefac[ch].s[window][sfb] = br->hgetbits(
  209.   slen[0][gr_info->scalefac_compress]);
  210. for (sfb = 6; sfb < 12; sfb++)
  211. for (window=0; window<3; window++)
  212. scalefac[ch].s[window][sfb] = br->hgetbits(
  213.   slen[1][gr_info->scalefac_compress]);
  214. for (sfb=12,window=0; window<3; window++)
  215. scalefac[ch].s[window][sfb] = 0;
  216.       } else {  // SHORT
  217.          scalefac[ch].s[0][0]  = br->hgetbits(length0);
  218.          scalefac[ch].s[1][0]  = br->hgetbits(length0);
  219.          scalefac[ch].s[2][0]  = br->hgetbits(length0);
  220.          scalefac[ch].s[0][1]  = br->hgetbits(length0);
  221.          scalefac[ch].s[1][1]  = br->hgetbits(length0);
  222.          scalefac[ch].s[2][1]  = br->hgetbits(length0);
  223.          scalefac[ch].s[0][2]  = br->hgetbits(length0);
  224.          scalefac[ch].s[1][2]  = br->hgetbits(length0);
  225.          scalefac[ch].s[2][2]  = br->hgetbits(length0);
  226.          scalefac[ch].s[0][3]  = br->hgetbits(length0);
  227.          scalefac[ch].s[1][3]  = br->hgetbits(length0);
  228.          scalefac[ch].s[2][3]  = br->hgetbits(length0);
  229.          scalefac[ch].s[0][4]  = br->hgetbits(length0);
  230.          scalefac[ch].s[1][4]  = br->hgetbits(length0);
  231.          scalefac[ch].s[2][4]  = br->hgetbits(length0);
  232.          scalefac[ch].s[0][5]  = br->hgetbits(length0);
  233.          scalefac[ch].s[1][5]  = br->hgetbits(length0);
  234.          scalefac[ch].s[2][5]  = br->hgetbits(length0);
  235.          scalefac[ch].s[0][6]  = br->hgetbits(length1);
  236.          scalefac[ch].s[1][6]  = br->hgetbits(length1);
  237.          scalefac[ch].s[2][6]  = br->hgetbits(length1);
  238.          scalefac[ch].s[0][7]  = br->hgetbits(length1);
  239.          scalefac[ch].s[1][7]  = br->hgetbits(length1);
  240.          scalefac[ch].s[2][7]  = br->hgetbits(length1);
  241.          scalefac[ch].s[0][8]  = br->hgetbits(length1);
  242.          scalefac[ch].s[1][8]  = br->hgetbits(length1);
  243.          scalefac[ch].s[2][8]  = br->hgetbits(length1);
  244.          scalefac[ch].s[0][9]  = br->hgetbits(length1);
  245.          scalefac[ch].s[1][9]  = br->hgetbits(length1);
  246.          scalefac[ch].s[2][9]  = br->hgetbits(length1);
  247.          scalefac[ch].s[0][10] = br->hgetbits(length1);
  248.          scalefac[ch].s[1][10] = br->hgetbits(length1);
  249.          scalefac[ch].s[2][10] = br->hgetbits(length1);
  250.          scalefac[ch].s[0][11] = br->hgetbits(length1);
  251.          scalefac[ch].s[1][11] = br->hgetbits(length1);
  252.          scalefac[ch].s[2][11] = br->hgetbits(length1);
  253.          scalefac[ch].s[0][12] = 0;
  254. scalefac[ch].s[1][12] = 0;
  255. scalefac[ch].s[2][12] = 0;
  256. } // SHORT
  257. } else {   // LONG types 0,1,3
  258.       if ((si->ch[ch].scfsi[0] == 0) || (gr == 0)) {
  259.            scalefac[ch].l[0]  = br->hgetbits(length0);
  260.            scalefac[ch].l[1]  = br->hgetbits(length0);
  261.            scalefac[ch].l[2]  = br->hgetbits(length0);
  262.            scalefac[ch].l[3]  = br->hgetbits(length0);
  263.            scalefac[ch].l[4]  = br->hgetbits(length0);
  264.            scalefac[ch].l[5]  = br->hgetbits(length0);
  265. }
  266.       if ((si->ch[ch].scfsi[1] == 0) || (gr == 0)) {
  267.            scalefac[ch].l[6]  = br->hgetbits(length0);
  268.            scalefac[ch].l[7]  = br->hgetbits(length0);
  269.            scalefac[ch].l[8]  = br->hgetbits(length0);
  270.            scalefac[ch].l[9]  = br->hgetbits(length0);
  271.            scalefac[ch].l[10] = br->hgetbits(length0);
  272. }
  273.       if ((si->ch[ch].scfsi[2] == 0) || (gr == 0)) {
  274.            scalefac[ch].l[11] = br->hgetbits(length1);
  275.            scalefac[ch].l[12] = br->hgetbits(length1);
  276.            scalefac[ch].l[13] = br->hgetbits(length1);
  277.            scalefac[ch].l[14] = br->hgetbits(length1);
  278.            scalefac[ch].l[15] = br->hgetbits(length1);
  279. }
  280.       if ((si->ch[ch].scfsi[3] == 0) || (gr == 0)) {
  281.            scalefac[ch].l[16] = br->hgetbits(length1);
  282.            scalefac[ch].l[17] = br->hgetbits(length1);
  283.            scalefac[ch].l[18] = br->hgetbits(length1);
  284.            scalefac[ch].l[19] = br->hgetbits(length1);
  285.            scalefac[ch].l[20] = br->hgetbits(length1);
  286. }
  287.       scalefac[ch].l[21] = 0;
  288. scalefac[ch].l[22] = 0;
  289. }
  290. }
  291. uint32 nr_of_sfb_block[6][3][4] =
  292. {{{ 6, 5, 5, 5} , { 9, 9, 9, 9} , { 6, 9, 9, 9}},
  293.     {{ 6, 5, 7, 3} , { 9, 9,12, 6} , { 6, 9,12, 6}},
  294.     {{11,10, 0, 0} , {18,18, 0, 0} , {15,18, 0, 0}},
  295.     {{ 7, 7, 7, 0} , {12,12,12, 0} , { 6,15,12, 0}},
  296.     {{ 6, 6, 6, 3} , {12, 9, 9, 6} , { 6,12, 9, 6}},
  297.     {{ 8, 8, 5, 0} , {15,12, 9, 0} , { 6,18, 9, 0}}};
  298. uint32 scalefac_buffer[54];
  299. void LayerIII_Decoder::get_LSF_scale_data(uint32 ch, uint32 gr)
  300. {
  301. uint32 new_slen[4];
  302.    uint32 scalefac_comp, int_scalefac_comp;
  303.    uint32 mode_ext = header->mode_extension();
  304. int32 m;
  305. int32 blocktypenumber, blocknumber;
  306. gr_info_s *gr_info = &(si->ch[ch].gr[gr]);
  307. scalefac_comp =  gr_info->scalefac_compress;
  308.    if (gr_info->block_type == 2) {
  309.     if (gr_info->mixed_block_flag == 0)
  310.        blocktypenumber = 1;
  311.       else if (gr_info->mixed_block_flag == 1)
  312. blocktypenumber = 2;
  313.       else
  314.        blocktypenumber = 0;
  315.    } else {
  316.     blocktypenumber = 0;
  317.    }
  318.    if(!(((mode_ext == 1) || (mode_ext == 3)) && (ch == 1))) {
  319. if(scalefac_comp < 400) {
  320. new_slen[0] = (scalefac_comp >> 4) / 5 ;
  321. new_slen[1] = (scalefac_comp >> 4) % 5 ;
  322. new_slen[2] = (scalefac_comp & 0xF) >> 2 ;
  323. new_slen[3] = (scalefac_comp & 3);
  324.          si->ch[ch].gr[gr].preflag = 0;
  325.          blocknumber = 0;
  326.       } else if (scalefac_comp  < 500) {
  327. new_slen[0] = ((scalefac_comp - 400) >> 2) / 5 ;
  328. new_slen[1] = ((scalefac_comp - 400) >> 2) % 5 ;
  329. new_slen[2] = (scalefac_comp - 400 ) & 3 ;
  330. new_slen[3] = 0;
  331.          si->ch[ch].gr[gr].preflag = 0;
  332.          blocknumber = 1;
  333.    } else if (scalefac_comp < 512) {
  334. new_slen[0] = (scalefac_comp - 500 ) / 3 ;
  335. new_slen[1] = (scalefac_comp - 500)  % 3 ;
  336. new_slen[2] = 0;
  337. new_slen[3] = 0;
  338.        si->ch[ch].gr[gr].preflag = 1;
  339.       blocknumber = 2;
  340.      }
  341.    }
  342.    if((((mode_ext == 1) || (mode_ext == 3)) && (ch == 1)))
  343.    {
  344.       int_scalefac_comp = scalefac_comp >> 1;
  345.       if (int_scalefac_comp < 180)
  346.       {
  347. new_slen[0] = int_scalefac_comp  / 36 ;
  348. new_slen[1] = (int_scalefac_comp % 36 ) / 6 ;
  349. new_slen[2] = (int_scalefac_comp % 36) % 6;
  350. new_slen[3] = 0;
  351.          si->ch[ch].gr[gr].preflag = 0;
  352.          blocknumber = 3;
  353.       } else if (int_scalefac_comp < 244) {
  354. new_slen[0] = ((int_scalefac_comp - 180 )  & 0x3F) >> 4 ;
  355. new_slen[1] = ((int_scalefac_comp - 180) & 0xF) >> 2 ;
  356. new_slen[2] = (int_scalefac_comp - 180 ) & 3 ;
  357. new_slen[3] = 0;
  358.          si->ch[ch].gr[gr].preflag = 0;
  359.          blocknumber = 4;
  360.       } else if (int_scalefac_comp < 255) {
  361. new_slen[0] = (int_scalefac_comp - 244 ) / 3 ;
  362. new_slen[1] = (int_scalefac_comp - 244 )  % 3 ;
  363. new_slen[2] = 0 ;
  364. new_slen[3] = 0;
  365.          si->ch[ch].gr[gr].preflag = 0;
  366.          blocknumber = 5;
  367.       }
  368.    }
  369.    for (uint32 x=0; x<45; x++) // why 45, not 54?
  370.     scalefac_buffer[x] = 0;
  371.    m = 0;
  372.    for (uint32 i=0; i<4;i++) {
  373.       for (uint32 j = 0; j < nr_of_sfb_block[blocknumber][blocktypenumber][i];
  374.         j++)
  375.       {
  376.         scalefac_buffer[m] = (new_slen[i] == 0) ? 0 :
  377.            br->hgetbits(new_slen[i]);
  378.         m++;
  379.       } // for (unint32 j ...
  380.    } // for (uint32 i ...
  381. }
  382. void LayerIII_Decoder::get_LSF_scale_factors(uint32 ch, uint32 gr)
  383. {
  384. uint32 m = 0;
  385.    uint32 sfb, window;
  386. gr_info_s *gr_info = &(si->ch[ch].gr[gr]);
  387.    get_LSF_scale_data(ch, gr);
  388.    if (gr_info->window_switching_flag && (gr_info->block_type == 2)) {
  389.       if (gr_info->mixed_block_flag) {  // MIXED
  390.          for (sfb = 0; sfb < 8; sfb++)
  391.          {
  392.               scalefac[ch].l[sfb] = scalefac_buffer[m];
  393.               m++;
  394.          }
  395.          for (sfb = 3; sfb < 12; sfb++) {
  396.             for (window=0; window<3; window++)
  397.             {
  398.                scalefac[ch].s[window][sfb] = scalefac_buffer[m];
  399.                m++;
  400.             }
  401.          }
  402.          for (window=0; window<3; window++)
  403.             scalefac[ch].s[window][12] = 0;
  404.       } else {  // SHORT
  405.            for (sfb = 0; sfb < 12; sfb++) {
  406.                for (window=0; window<3; window++)
  407.                {
  408.                   scalefac[ch].s[window][sfb] = scalefac_buffer[m];
  409.                   m++;
  410.                }
  411.            }
  412.            for (window=0; window<3; window++)
  413.                scalefac[ch].s[window][12] = 0;
  414.       }
  415.    } else {   // LONG types 0,1,3
  416.       for (sfb = 0; sfb < 21; sfb++) {
  417.           scalefac[ch].l[sfb] = scalefac_buffer[m];
  418.           m++;
  419.       }
  420.       scalefac[ch].l[21] = 0; // Jeff
  421.       scalefac[ch].l[22] = 0;
  422. }
  423. }
  424. void LayerIII_Decoder::huffman_decode(uint32 ch, uint32 gr)
  425. {
  426. int32 x, y;
  427. int32 v, w;
  428.    int32 part2_3_end = part2_start + si->ch[ch].gr[gr].part2_3_length;
  429.    int32 num_bits;
  430. int32 region1Start;
  431. int32 region2Start;
  432.    int32 index;
  433.   struct huffcodetab *h;
  434. // Find region boundary for short block case
  435. if ( (si->ch[ch].gr[gr].window_switching_flag) &&
  436.   (si->ch[ch].gr[gr].block_type == 2) ) {
  437. // Region2.
  438. region1Start = 36;  // sfb[9/3]*3=36
  439. region2Start = 576; // No Region2 for short block case
  440. } else {          // Find region boundary for long block case
  441. region1Start = sfBandIndex[sfreq].l[si->ch[ch].gr[gr].region0_count
  442.                                              + 1];
  443. region2Start = sfBandIndex[sfreq].l[si->ch[ch].gr[gr].region0_count +
  444.    si->ch[ch].gr[gr].region1_count + 2]; /* MI */
  445.    }
  446.    index = 0;
  447. // Read bigvalues area
  448. for (uint32 i=0; i<(si->ch[ch].gr[gr].big_values<<1); i+=2) {
  449. if      (i<region1Start) h = &ht[si->ch[ch].gr[gr].table_select[0]];
  450. else if (i<region2Start) h = &ht[si->ch[ch].gr[gr].table_select[1]];
  451.   else                h = &ht[si->ch[ch].gr[gr].table_select[2]];
  452. huffman_decoder(h, &x, &y, &v, &w, br);
  453.       is_1d[index++] = x;
  454.       is_1d[index++] = y;
  455. }
  456. // Read count1 area
  457. h = &ht[si->ch[ch].gr[gr].count1table_select+32];
  458.    num_bits = br->hsstell();
  459. while ((num_bits < part2_3_end) && (index < 576)) {
  460. huffman_decoder(h, &x, &y, &v, &w, br);
  461.       is_1d[index++] = v;
  462.       is_1d[index++] = w;
  463.       is_1d[index++] = x;
  464.       is_1d[index++] = y;
  465.       num_bits = br->hsstell();
  466.    }
  467. if (num_bits > part2_3_end) {
  468. br->rewindNbits(num_bits - part2_3_end);
  469.       index-=4;
  470.    }
  471.    num_bits = br->hsstell();
  472. // Dismiss stuffing bits
  473. if (num_bits < part2_3_end)
  474.     br->hgetbits(part2_3_end - num_bits);
  475. // Zero out rest
  476.    if (index < 576)
  477.    nonzero[ch] = index;
  478.    else
  479.     nonzero[ch] = 576;
  480.    // may not be necessary
  481.    for (; index<576; index++)
  482.     is_1d[index] = 0;
  483. }
  484. void LayerIII_Decoder::dequantize_sample(real xr[SBLIMIT][SSLIMIT],
  485.      uint32 ch, uint32 gr)
  486. {
  487. gr_info_s *gr_info = &(si->ch[ch].gr[gr]);
  488. int32  cb=0;
  489. int32  next_cb_boundary, cb_begin, cb_width;
  490. int32  index=0, t_index, j;
  491.    real   g_gain;
  492.    real  *xr_1d = &xr[0][0];
  493. // choose correct scalefactor band per block type, initalize boundary
  494. if (gr_info->window_switching_flag && (gr_info->block_type == 2) ) {
  495. if (gr_info->mixed_block_flag)
  496. next_cb_boundary=sfBandIndex[sfreq].l[1];  // LONG blocks: 0,1,3
  497. else {
  498.          cb_width = sfBandIndex[sfreq].s[1];
  499.    next_cb_boundary = (cb_width << 2) - cb_width;
  500.      cb_begin = 0;
  501. }
  502. } else {
  503. next_cb_boundary=sfBandIndex[sfreq].l[1];  // LONG blocks: 0,1,3
  504.    }
  505.    // Compute overall (global) scaling.
  506. g_gain = (real) pow(2.0 , (0.25 * (gr_info->global_gain - 210.0)));
  507.    for (j=0; j<nonzero[ch]; j++) {
  508.      if (is_1d[j] == 0) {
  509. xr_1d[j] = 0.0f;
  510.       } else {
  511.          int32 abv = is_1d[j];
  512.          if (is_1d[j] > 0)
  513.       xr_1d[j] = g_gain * t_43[abv];
  514.          else
  515.           xr_1d[j] = -g_gain * t_43[-abv];
  516.       }
  517.    }
  518. // apply formula per block type
  519.    for (j=0; j<nonzero[ch]; j++) {
  520. if (index == next_cb_boundary)  { /* Adjust critical band boundary */
  521.        if (gr_info->window_switching_flag && (gr_info->block_type == 2)) {
  522.           if (gr_info->mixed_block_flag)  {
  523.              if (index == sfBandIndex[sfreq].l[8])  {
  524.                   next_cb_boundary = sfBandIndex[sfreq].s[4];
  525.                   next_cb_boundary = (next_cb_boundary << 2) -
  526.                                 next_cb_boundary;
  527.                   cb = 3;
  528.                   cb_width = sfBandIndex[sfreq].s[4] -
  529.                        sfBandIndex[sfreq].s[3];
  530.                   cb_begin = sfBandIndex[sfreq].s[3];
  531.                   cb_begin = (cb_begin << 2) - cb_begin;
  532.                } else if (index < sfBandIndex[sfreq].l[8]) {
  533.                 next_cb_boundary = sfBandIndex[sfreq].l[(++cb)+1];
  534.                } else {
  535.                 next_cb_boundary = sfBandIndex[sfreq].s[(++cb)+1];
  536.                   next_cb_boundary = (next_cb_boundary << 2) -
  537.                              next_cb_boundary;
  538.                   cb_begin = sfBandIndex[sfreq].s[cb];
  539. cb_width = sfBandIndex[sfreq].s[cb+1] -
  540.                              cb_begin;
  541.                   cb_begin = (cb_begin << 2) - cb_begin;
  542.                }
  543.             } else  {
  544.                next_cb_boundary = sfBandIndex[sfreq].s[(++cb)+1];
  545.                next_cb_boundary = (next_cb_boundary << 2) -
  546.                                   next_cb_boundary;
  547.                cb_begin = sfBandIndex[sfreq].s[cb];
  548. cb_width = sfBandIndex[sfreq].s[cb+1] -
  549.                           cb_begin;
  550.                cb_begin = (cb_begin << 2) - cb_begin;
  551.             }
  552.          } else  { // long blocks
  553. next_cb_boundary = sfBandIndex[sfreq].l[(++cb)+1];
  554.          }
  555.       }
  556. // Do long/short dependent scaling operations
  557. if (gr_info->window_switching_flag &&
  558.  (((gr_info->block_type == 2) && (gr_info->mixed_block_flag == 0)) ||
  559.   ((gr_info->block_type == 2) && gr_info->mixed_block_flag && (j >= 36)) ))
  560.       {
  561. t_index = (index - cb_begin) / cb_width;
  562. /*            xr[sb][ss] *= pow(2.0, ((-2.0 * gr_info->subblock_gain[t_index])
  563.                                     -(0.5 * (1.0 + gr_info->scalefac_scale)
  564.                                       * scalefac[ch].s[t_index][cb]))); */
  565. uint32 idx = scalefac[ch].s[t_index][cb]
  566.              << gr_info->scalefac_scale;
  567.          idx += (gr_info->subblock_gain[t_index] << 2);
  568. xr_1d[j] *= two_to_negative_half_pow[idx];
  569. } else {   // LONG block types 0,1,3 & 1st 2 subbands of switched blocks
  570. /* xr[sb][ss] *= pow(2.0, -0.5 * (1.0+gr_info->scalefac_scale)
  571.  * (scalefac[ch].l[cb]
  572.  + gr_info->preflag * pretab[cb])); */
  573. uint32 idx = scalefac[ch].l[cb];
  574.     if (gr_info->preflag)
  575.     idx += pretab[cb];
  576.    idx = idx << gr_info->scalefac_scale;
  577.          xr_1d[j] *= two_to_negative_half_pow[idx];
  578. }
  579.       index++;
  580. }
  581.    for (j=nonzero[ch]; j<576; j++)
  582.       xr_1d[j] = 0.0f;
  583.    return;
  584. }
  585. void LayerIII_Decoder::reorder(real xr[SBLIMIT][SSLIMIT], uint32 ch, uint32 gr)
  586. {
  587. gr_info_s *gr_info = &(si->ch[ch].gr[gr]);
  588.    uint32 freq, freq3;
  589.    int32 index;
  590. int32 sfb, sfb_start, sfb_lines;
  591.    int32 src_line, des_line;
  592.    real *xr_1d = &xr[0][0];
  593. if (gr_info->window_switching_flag && (gr_info->block_type == 2)) {
  594.       for(index=0; index<576; index++)
  595.          out_1d[index] = 0.0f;
  596. if (gr_info->mixed_block_flag) {
  597. // NO REORDER FOR LOW 2 SUBBANDS
  598.             for (index = 0; index < 36; index++)
  599.                out_1d[index] = xr_1d[index];
  600. // REORDERING FOR REST SWITCHED SHORT
  601. for(sfb=3,sfb_start=sfBandIndex[sfreq].s[3],
  602.     sfb_lines=sfBandIndex[sfreq].s[4] - sfb_start;
  603.     sfb < 13; sfb++,sfb_start = sfBandIndex[sfreq].s[sfb],
  604.     (sfb_lines=sfBandIndex[sfreq].s[sfb+1] - sfb_start))
  605.             {
  606.    int32 sfb_start3 = (sfb_start << 2) - sfb_start;
  607. for(freq=0, freq3=0; freq<sfb_lines;
  608.                       freq++, freq3+=3) {
  609. src_line = sfb_start3 + freq;
  610. des_line = sfb_start3 + freq3;
  611. out_1d[des_line] = xr_1d[src_line];
  612. src_line += sfb_lines;
  613. des_line++;
  614. out_1d[des_line] = xr_1d[src_line];
  615. src_line += sfb_lines;
  616. des_line++;
  617. out_1d[des_line] = xr_1d[src_line];
  618.    }
  619.             }
  620. } else {  // pure short
  621.        for(index=0;index<576;index++)
  622.             out_1d[index] = xr_1d[reorder_table[sfreq][index]];
  623. }
  624. }
  625. else {   // long blocks
  626.       for(index=0; index<576; index++)
  627.        out_1d[index] = xr_1d[index];
  628. }
  629. }
  630. void LayerIII_Decoder::i_stereo_k_values(uint32 is_pos, uint32 io_type,
  631.      uint32 i)
  632. {
  633.    if (is_pos == 0) {
  634.       k[0][i] = 1.0f;
  635.       k[1][i] = 1.0f;
  636.    } else if (is_pos & 1) {
  637. k[0][i] = io[io_type][(is_pos + 1) >> 1];
  638.       k[1][i] = 1.0f;
  639.    } else {
  640.       k[0][i] = 1.0f;
  641.       k[1][i] = io[io_type][is_pos >> 1];
  642.    }
  643. }
  644. void LayerIII_Decoder::stereo(uint32 gr)
  645. {
  646.    int32 sb, ss;
  647. if  (channels == 1) { // mono , bypass xr[0][][] to lr[0][][]
  648. for(sb=0;sb<SBLIMIT;sb++)
  649. for(ss=0;ss<SSLIMIT;ss+=3) {
  650. lr[0][sb][ss]   = ro[0][sb][ss];
  651.             lr[0][sb][ss+1] = ro[0][sb][ss+1];
  652. lr[0][sb][ss+2] = ro[0][sb][ss+2];
  653.          }
  654.    } else {
  655. uint32 is_pos[576];
  656. real  is_ratio[576];
  657. gr_info_s *gr_info = &(si->ch[0].gr[gr]);
  658.    uint32 mode_ext = header->mode_extension();
  659. int32 sfb;
  660. int32 i;
  661.    int32 lines, temp, temp2;
  662. bool ms_stereo = (header->mode() == joint_stereo) && (mode_ext & 0x2);
  663. bool i_stereo  = (header->mode() == joint_stereo) && (mode_ext & 0x1);
  664.    bool lsf = (header->version() == MPEG2_LSF);
  665. uint32 io_type = (gr_info->scalefac_compress & 1);
  666.   // initialization
  667.    for (i=0; i<576; i++)
  668.     is_pos[i] = 7;
  669. if (i_stereo) {
  670.     if (gr_info->window_switching_flag && (gr_info->block_type == 2)) {
  671.        if (gr_info->mixed_block_flag) {
  672.            int32 max_sfb = 0;
  673.  for (uint32 j=0; j<3; j++) {
  674.              int32 sfbcnt;
  675. sfbcnt = 2;
  676. for( sfb=12; sfb >=3; sfb-- ) {
  677.                 i = sfBandIndex[sfreq].s[sfb];
  678. lines = sfBandIndex[sfreq].s[sfb+1] - i;
  679.                   i = (i << 2) - i + (j+1) * lines - 1;
  680. while (lines > 0) {
  681.                    if (ro[1][ss_div[i]][ss_mod[i]] != 0.0f) {
  682.                       sfbcnt = sfb;
  683. sfb = -10;
  684. lines = -10;
  685. }
  686. lines--;
  687. i--;
  688. } // while (lines > 0)
  689. } // for (sfb=12 ...
  690. sfb = sfbcnt + 1;
  691. if (sfb > max_sfb)
  692. max_sfb = sfb;
  693. while(sfb < 12) {
  694.                 temp = sfBandIndex[sfreq].s[sfb];
  695.                 sb   = sfBandIndex[sfreq].s[sfb+1] - temp;
  696.                   i    = (temp << 2) - temp + j * sb;
  697. for ( ; sb > 0; sb--) {
  698.                    is_pos[i] = scalefac[1].s[j][sfb];
  699. if (is_pos[i] != 7)
  700.                       if (lsf)
  701.                            i_stereo_k_values(is_pos[i], io_type, i);
  702.                         else
  703.                          is_ratio[i] = TAN12[is_pos[i]];
  704. i++;
  705. } // for (; sb>0...
  706. sfb++;
  707. } // while (sfb < 12)
  708. sfb = sfBandIndex[sfreq].s[10];
  709.                sb  = sfBandIndex[sfreq].s[11] - sfb;
  710.                sfb = (sfb << 2) - sfb + j * sb;
  711.                temp  = sfBandIndex[sfreq].s[11];
  712.                sb = sfBandIndex[sfreq].s[12] - temp;
  713.                i = (temp << 2) - temp + j * sb;
  714. for (; sb > 0; sb--) {
  715.                 is_pos[i] = is_pos[sfb];
  716.             if (lsf) {
  717.                k[0][i] = k[0][sfb];
  718.          k[1][i] = k[1][sfb];
  719.             } else {
  720.       is_ratio[i] = is_ratio[sfb];
  721.                   }
  722. i++;
  723. } // for (; sb > 0 ...
  724.  }
  725.  if (max_sfb <= 3) {
  726.                 i = 2;
  727.  ss = 17;
  728.  sb = -1;
  729.  while (i >= 0) {
  730.                  if (ro[1][i][ss] != 0.0f) {
  731.                      sb = (i<<4) + (i<<1) + ss;
  732.  i = -1;
  733. } else {
  734.                       ss--;
  735.  if (ss < 0) {
  736.                          i--;
  737.  ss = 17;
  738.  }
  739. } // if (ro ...
  740.  } // while (i>=0)
  741.  i = 0;
  742.  while (sfBandIndex[sfreq].l[i] <= sb)
  743.  i++;
  744.  sfb = i;
  745.  i = sfBandIndex[sfreq].l[i];
  746.  for (; sfb<8; sfb++) {
  747.                    sb = sfBandIndex[sfreq].l[sfb+1]-sfBandIndex[sfreq].l[sfb];
  748.  for (; sb>0; sb--) {
  749.                       is_pos[i] = scalefac[1].l[sfb];
  750.                      if (is_pos[i] != 7)
  751.                       if (lsf)
  752.                            i_stereo_k_values(is_pos[i], io_type, i);
  753.                          else
  754.                          is_ratio[i] = TAN12[is_pos[i]];
  755.  i++;
  756.  } // for (; sb>0 ...
  757.  } // for (; sfb<8 ...
  758.  } // for (j=0 ...
  759. } else { // if (gr_info->mixed_block_flag)
  760.           for (uint32 j=0; j<3; j++) {
  761.              int32 sfbcnt;
  762. sfbcnt = -1;
  763. for( sfb=12; sfb >=0; sfb-- )
  764. {
  765. temp = sfBandIndex[sfreq].s[sfb];
  766.                   lines = sfBandIndex[sfreq].s[sfb+1] - temp;
  767.                   i = (temp << 2) - temp + (j+1) * lines - 1;
  768. while (lines > 0) {
  769. if (ro[1][ss_div[i]][ss_mod[i]] != 0.0f) {
  770.                       sfbcnt = sfb;
  771. sfb = -10;
  772. lines = -10;
  773. }
  774. lines--;
  775. i--;
  776. } // while (lines > 0) */
  777. } // for (sfb=12 ...
  778. sfb = sfbcnt + 1;
  779. while(sfb<12) {
  780. temp = sfBandIndex[sfreq].s[sfb];
  781.                   sb   = sfBandIndex[sfreq].s[sfb+1] - temp;
  782.                   i    = (temp << 2) - temp + j * sb;
  783. for ( ; sb > 0; sb--) {
  784.                    is_pos[i] = scalefac[1].s[j][sfb];
  785. if (is_pos[i] != 7)
  786.                       if (lsf)
  787.                            i_stereo_k_values(is_pos[i], io_type, i);
  788.                          else
  789.                          is_ratio[i] = TAN12[is_pos[i]];
  790. i++;
  791. } // for (; sb>0 ...
  792. sfb++;
  793. } // while (sfb<12)
  794. temp = sfBandIndex[sfreq].s[10];
  795.                temp2= sfBandIndex[sfreq].s[11];
  796.                sb   = temp2 - temp;
  797.                sfb  = (temp << 2) - temp + j * sb;
  798.                sb   = sfBandIndex[sfreq].s[12] - temp2;
  799.                i    = (temp2 << 2) - temp2 + j * sb;
  800. for (; sb>0; sb--) {
  801.                 is_pos[i] = is_pos[sfb];
  802.             if (lsf) {
  803.                k[0][i] = k[0][sfb];
  804.          k[1][i] = k[1][sfb];
  805.              } else {
  806.                 is_ratio[i] = is_ratio[sfb];
  807.                   }
  808. i++;
  809. } // for (; sb>0 ...
  810. } // for (sfb=12
  811. } // for (j=0 ...
  812. } else { // if (gr_info->window_switching_flag ...
  813.        i = 31;
  814. ss = 17;
  815. sb = 0;
  816. while (i >= 0) {
  817.           if (ro[1][i][ss] != 0.0f) {
  818.              sb = (i<<4) + (i<<1) + ss;
  819. i = -1;
  820. } else {
  821.              ss--;
  822. if (ss < 0) {
  823.                 i--;
  824. ss = 17;
  825. }
  826. }
  827. }
  828. i = 0;
  829. while (sfBandIndex[sfreq].l[i] <= sb)
  830. i++;
  831. sfb = i;
  832. i = sfBandIndex[sfreq].l[i];
  833. for (; sfb<21; sfb++) {
  834.           sb = sfBandIndex[sfreq].l[sfb+1] - sfBandIndex[sfreq].l[sfb];
  835.           for (; sb > 0; sb--) {
  836.              is_pos[i] = scalefac[1].l[sfb];
  837. if (is_pos[i] != 7)
  838.                   if (lsf)
  839.                      i_stereo_k_values(is_pos[i], io_type, i);
  840.                   else
  841.                     is_ratio[i] = TAN12[is_pos[i]];
  842. i++;
  843. }
  844. }
  845. sfb = sfBandIndex[sfreq].l[20];
  846. for (sb = 576 - sfBandIndex[sfreq].l[21]; (sb > 0) && (i<576); sb--)
  847. {
  848.           is_pos[i] = is_pos[sfb]; // error here : i >=576
  849.             if (lsf) {
  850.                k[0][i] = k[0][sfb];
  851.          k[1][i] = k[1][sfb];
  852.             } else {
  853.    is_ratio[i] = is_ratio[sfb];
  854.             }
  855. i++;
  856. } // if (gr_info->mixed_block_flag)
  857. } // if (gr_info->window_switching_flag ...
  858. } // if (i_stereo)
  859.     i = 0;
  860. for(sb=0;sb<SBLIMIT;sb++)
  861. for(ss=0;ss<SSLIMIT;ss++) {
  862. if (is_pos[i] == 7) {
  863. if (ms_stereo) {
  864. lr[0][sb][ss] = (ro[0][sb][ss]+ro[1][sb][ss]) * 0.707106781f;
  865. lr[1][sb][ss] = (ro[0][sb][ss]-ro[1][sb][ss]) * 0.707106781f;
  866. } else {
  867. lr[0][sb][ss] = ro[0][sb][ss];
  868. lr[1][sb][ss] = ro[1][sb][ss];
  869. }
  870. }
  871. else if (i_stereo) {
  872.              if (lsf) {
  873.                   lr[0][sb][ss] = ro[0][sb][ss] * k[0][i];
  874.                   lr[1][sb][ss] = ro[0][sb][ss] * k[1][i];
  875.                } else {
  876.                 lr[1][sb][ss] = ro[0][sb][ss] / (real) (1 + is_ratio[i]);
  877.       lr[0][sb][ss] = lr[1][sb][ss] * is_ratio[i];
  878.                }
  879. }
  880. /* else {
  881. printf("Error in stereo processingn");
  882. } */
  883.             i++;
  884. }
  885.     } // channels == 2
  886. }
  887. void LayerIII_Decoder::antialias(uint32 ch, uint32 gr)
  888. {
  889. int32 sb18, ss, sb18lim;
  890.    gr_info_s *gr_info = &(si->ch[ch].gr[gr]);
  891. // 31 alias-reduction operations between each pair of sub-bands
  892. // with 8 butterflies between each pair
  893. if  (gr_info->window_switching_flag && (gr_info->block_type == 2) &&
  894.  !gr_info->mixed_block_flag )
  895.        return;
  896. if (gr_info->window_switching_flag && gr_info->mixed_block_flag &&
  897.     (gr_info->block_type == 2)) {
  898.       sb18lim = 18;
  899. } else {
  900. sb18lim = 558;
  901.    }
  902.    for (sb18=0; sb18 < sb18lim; sb18+=18) {
  903.       for (ss=0;ss<8;ss++) {
  904.        int32 src_idx1 = sb18 + 17 - ss;
  905.          int32 src_idx2 = sb18 + 18 + ss;
  906.        real bu = out_1d[src_idx1];
  907. real bd = out_1d[src_idx2];
  908. out_1d[src_idx1] = (bu * cs[ss]) - (bd * ca[ss]);
  909. out_1d[src_idx2] = (bd * cs[ss]) + (bu * ca[ss]);
  910.       }
  911.    }
  912. }
  913. void LayerIII_Decoder::hybrid(uint32 ch, uint32 gr)
  914. {
  915. real rawout[36];
  916.    uint32 bt;
  917.    int32 sb18;
  918.    gr_info_s *gr_info = &(si->ch[ch].gr[gr]);
  919.    real *tsOut;
  920.    real *prvblk;
  921.    for(sb18=0;sb18<576;sb18+=18) {
  922. bt = (gr_info->window_switching_flag && gr_info->mixed_block_flag &&
  923.  (sb18 < 36)) ? 0 : gr_info->block_type;
  924. tsOut = out_1d + sb18;
  925. inv_mdct(tsOut, rawout, bt);
  926. // overlap addition
  927. prvblk = &prevblck[ch][sb18];
  928.    tsOut[0]   = rawout[0]  + prvblk[0];
  929.    prvblk[0]  = rawout[18];
  930.    tsOut[1]   = rawout[1]  + prvblk[1];
  931.    prvblk[1]  = rawout[19];
  932.    tsOut[2]   = rawout[2]  + prvblk[2];
  933.    prvblk[2]  = rawout[20];
  934.    tsOut[3]   = rawout[3]  + prvblk[3];
  935.    prvblk[3]  = rawout[21];
  936.    tsOut[4]   = rawout[4]  + prvblk[4];
  937.    prvblk[4]  = rawout[22];
  938.    tsOut[5]   = rawout[5]  + prvblk[5];
  939.    prvblk[5]  = rawout[23];
  940.    tsOut[6]   = rawout[6]  + prvblk[6];
  941.    prvblk[6]  = rawout[24];
  942.    tsOut[7]   = rawout[7]  + prvblk[7];
  943.    prvblk[7]  = rawout[25];
  944.    tsOut[8]   = rawout[8]  + prvblk[8];
  945.    prvblk[8]  = rawout[26];
  946.    tsOut[9]   = rawout[9]  + prvblk[9];
  947.    prvblk[9]  = rawout[27];
  948.     tsOut[10]  = rawout[10] + prvblk[10];
  949.     prvblk[10] = rawout[28];
  950.     tsOut[11]  = rawout[11] + prvblk[11];
  951.       prvblk[11] = rawout[29];
  952.     tsOut[12]  = rawout[12] + prvblk[12];
  953.     prvblk[12] = rawout[30];
  954.     tsOut[13]  = rawout[13] + prvblk[13];
  955.     prvblk[13] = rawout[31];
  956.     tsOut[14]  = rawout[14] + prvblk[14];
  957.     prvblk[14] = rawout[32];
  958.     tsOut[15]  = rawout[15] + prvblk[15];
  959.     prvblk[15] = rawout[33];
  960.     tsOut[16]  = rawout[16] + prvblk[16];
  961.     prvblk[16] = rawout[34];
  962.     tsOut[17]  = rawout[17] + prvblk[17];
  963.     prvblk[17] = rawout[35];
  964.    }
  965. }
  966. void LayerIII_Decoder::do_downmix()
  967. {
  968. for (uint32 sb=0; sb<SSLIMIT; sb++) {
  969.     for (uint32 ss=0; ss<SSLIMIT; ss+=3) {
  970.        lr[0][sb][ss]   = (lr[0][sb][ss]   + lr[1][sb][ss])   * 0.5f;
  971.        lr[0][sb][ss+1] = (lr[0][sb][ss+1] + lr[1][sb][ss+1]) * 0.5f;
  972.        lr[0][sb][ss+2] = (lr[0][sb][ss+2] + lr[1][sb][ss+2]) * 0.5f;
  973.       }
  974.    }
  975. }
  976. void LayerIII_Decoder::decode()
  977. {
  978.  uint32 nSlots = header->slots();
  979.     uint32 flush_main;
  980.     uint32 gr, ch, ss, sb, sb18;
  981.     int32 main_data_end;
  982.  int32 bytes_to_discard;
  983.     uint32 i;
  984.  get_side_info();
  985.     for (i=0; i<nSlots; i++)
  986.      br->hputbuf(stream->get_bits(8));
  987.     main_data_end = br->hsstell() >> 3; // of previous frame
  988.     if (flush_main = (br->hsstell() & 7)) {
  989.          br->hgetbits(8 - flush_main);
  990. main_data_end++;
  991.  }
  992.  bytes_to_discard = frame_start - main_data_end
  993.   - si->main_data_begin;
  994.  frame_start += nSlots;
  995.     if (bytes_to_discard < 0)
  996. return;
  997.  if (main_data_end > 4096) {
  998. frame_start -= 4096;
  999. br->rewindNbytes(4096);
  1000.  }
  1001.  for (; bytes_to_discard > 0; bytes_to_discard--)
  1002.      br->hgetbits(8);
  1003.  for (gr=0;gr<max_gr;gr++) {
  1004. for (ch=0; ch<channels; ch++) {
  1005.            part2_start = br->hsstell();
  1006.            if (header->version() == MPEG1)
  1007.   get_scale_factors(ch, gr);
  1008.            else  // MPEG-2 LSF
  1009.               get_LSF_scale_factors(ch, gr);
  1010.   huffman_decode(ch, gr);
  1011.   dequantize_sample(ro[ch], ch, gr);
  1012. }
  1013.          stereo(gr);
  1014.          if ((which_channels == downmix) && (channels > 1))
  1015.           do_downmix();
  1016.          for (ch=first_channel; ch<=last_channel; ch++) {
  1017.           reorder(lr[ch], ch, gr);
  1018. antialias(ch, gr);
  1019.                hybrid(ch, gr);
  1020. for (sb18=18;sb18<576;sb18+=36) // Frequency inversion
  1021.                    for (ss=1;ss<SSLIMIT;ss+=2)
  1022.                      out_1d[sb18 + ss] = -out_1d[sb18 + ss];
  1023. if ((ch == 0) || (which_channels == right)) {
  1024.   for (ss=0;ss<SSLIMIT;ss++) { // Polyphase synthesis
  1025.                    sb = 0;
  1026.                   for (sb18=0; sb18<576; sb18+=18) {
  1027.  filter1->input_sample(out_1d[sb18+ss], sb);
  1028.                          sb++;
  1029.                      }
  1030.                      filter1->calculate_pcm_samples(buffer);
  1031.   }
  1032. } else {
  1033.   for (ss=0;ss<SSLIMIT;ss++) { // Polyphase synthesis
  1034.                    sb = 0;
  1035.                   for (sb18=0; sb18<576; sb18+=18) {
  1036.  filter2->input_sample(out_1d[sb18+ss], sb);
  1037.                          sb++;
  1038.                      }
  1039.                      filter2->calculate_pcm_samples(buffer);
  1040.   }
  1041.                }
  1042. } // channels
  1043.  } // granule
  1044.     buffer->write_buffer(1);
  1045. }