PageRenderTime 753ms CodeModel.GetById 20ms RepoModel.GetById 0ms app.codeStats 0ms

/cdex1/branches/cdex_130/cdexos/MP3Dec/layer3.cpp

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