layer3.c
上传用户:xjjlds
上传日期:2015-12-05
资源大小:22823k
文件大小:66k
源码类别:

多媒体编程

开发平台:

Visual C++

  1. /*
  2.  * libmad - MPEG audio decoder library
  3.  * Copyright (C) 2000-2003 Underbit Technologies, Inc.
  4.  *
  5.  * This program is free software; you can redistribute it and/or modify
  6.  * it under the terms of the GNU General Public License as published by
  7.  * the Free Software Foundation; either version 2 of the License, or
  8.  * (at your option) any later version.
  9.  *
  10.  * This program is distributed in the hope that it will be useful,
  11.  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  12.  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  13.  * GNU General Public License for more details.
  14.  *
  15.  * You should have received a copy of the GNU General Public License
  16.  * along with this program; if not, write to the Free Software
  17.  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  18.  *
  19.  * $Id: layer3.c,v 1.1 2003/08/31 18:59:46 gabest Exp $
  20.  */
  21. # ifdef HAVE_CONFIG_H
  22. #  include "config.h"
  23. # endif
  24. # include "global.h"
  25. # include <stdlib.h>
  26. # include <string.h>
  27. # ifdef HAVE_ASSERT_H
  28. #  include <assert.h>
  29. # endif
  30. # ifdef HAVE_LIMITS_H
  31. #  include <limits.h>
  32. # else
  33. #  define CHAR_BIT  8
  34. # endif
  35. # include "fixed.h"
  36. # include "bit.h"
  37. # include "stream.h"
  38. # include "frame.h"
  39. # include "huffman.h"
  40. # include "layer3.h"
  41. /* --- Layer III ----------------------------------------------------------- */
  42. enum {
  43.   count1table_select = 0x01,
  44.   scalefac_scale     = 0x02,
  45.   preflag      = 0x04,
  46.   mixed_block_flag   = 0x08
  47. };
  48. enum {
  49.   I_STEREO  = 0x1,
  50.   MS_STEREO = 0x2
  51. };
  52. struct sideinfo {
  53.   unsigned int main_data_begin;
  54.   unsigned int private_bits;
  55.   unsigned char scfsi[2];
  56.   struct granule {
  57.     struct channel {
  58.       /* from side info */
  59.       unsigned short part2_3_length;
  60.       unsigned short big_values;
  61.       unsigned short global_gain;
  62.       unsigned short scalefac_compress;
  63.       unsigned char flags;
  64.       unsigned char block_type;
  65.       unsigned char table_select[3];
  66.       unsigned char subblock_gain[3];
  67.       unsigned char region0_count;
  68.       unsigned char region1_count;
  69.       /* from main_data */
  70.       unsigned char scalefac[39]; /* scalefac_l and/or scalefac_s */
  71.     } ch[2];
  72.   } gr[2];
  73. };
  74. /*
  75.  * scalefactor bit lengths
  76.  * derived from section 2.4.2.7 of ISO/IEC 11172-3
  77.  */
  78. static
  79. struct {
  80.   unsigned char slen1;
  81.   unsigned char slen2;
  82. } const sflen_table[16] = {
  83.   { 0, 0 }, { 0, 1 }, { 0, 2 }, { 0, 3 },
  84.   { 3, 0 }, { 1, 1 }, { 1, 2 }, { 1, 3 },
  85.   { 2, 1 }, { 2, 2 }, { 2, 3 }, { 3, 1 },
  86.   { 3, 2 }, { 3, 3 }, { 4, 2 }, { 4, 3 }
  87. };
  88. /*
  89.  * number of LSF scalefactor band values
  90.  * derived from section 2.4.3.2 of ISO/IEC 13818-3
  91.  */
  92. static
  93. unsigned char const nsfb_table[6][3][4] = {
  94.   { {  6,  5,  5, 5 },
  95.     {  9,  9,  9, 9 },
  96.     {  6,  9,  9, 9 } },
  97.   { {  6,  5,  7, 3 },
  98.     {  9,  9, 12, 6 },
  99.     {  6,  9, 12, 6 } },
  100.   { { 11, 10,  0, 0 },
  101.     { 18, 18,  0, 0 },
  102.     { 15, 18,  0, 0 } },
  103.   { {  7,  7,  7, 0 },
  104.     { 12, 12, 12, 0 },
  105.     {  6, 15, 12, 0 } },
  106.   { {  6,  6,  6, 3 },
  107.     { 12,  9,  9, 6 },
  108.     {  6, 12,  9, 6 } },
  109.   { {  8,  8,  5, 0 },
  110.     { 15, 12,  9, 0 },
  111.     {  6, 18,  9, 0 } }
  112. };
  113. /*
  114.  * MPEG-1 scalefactor band widths
  115.  * derived from Table B.8 of ISO/IEC 11172-3
  116.  */
  117. static
  118. unsigned char const sfb_48000_long[] = {
  119.    4,  4,  4,  4,  4,  4,  6,  6,  6,   8,  10,
  120.   12, 16, 18, 22, 28, 34, 40, 46, 54,  54, 192
  121. };
  122. static
  123. unsigned char const sfb_44100_long[] = {
  124.    4,  4,  4,  4,  4,  4,  6,  6,  8,   8,  10,
  125.   12, 16, 20, 24, 28, 34, 42, 50, 54,  76, 158
  126. };
  127. static
  128. unsigned char const sfb_32000_long[] = {
  129.    4,  4,  4,  4,  4,  4,  6,  6,  8,  10,  12,
  130.   16, 20, 24, 30, 38, 46, 56, 68, 84, 102,  26
  131. };
  132. static
  133. unsigned char const sfb_48000_short[] = {
  134.    4,  4,  4,  4,  4,  4,  4,  4,  4,  4,  4,  4,  6,
  135.    6,  6,  6,  6,  6, 10, 10, 10, 12, 12, 12, 14, 14,
  136.   14, 16, 16, 16, 20, 20, 20, 26, 26, 26, 66, 66, 66
  137. };
  138. static
  139. unsigned char const sfb_44100_short[] = {
  140.    4,  4,  4,  4,  4,  4,  4,  4,  4,  4,  4,  4,  6,
  141.    6,  6,  8,  8,  8, 10, 10, 10, 12, 12, 12, 14, 14,
  142.   14, 18, 18, 18, 22, 22, 22, 30, 30, 30, 56, 56, 56
  143. };
  144. static
  145. unsigned char const sfb_32000_short[] = {
  146.    4,  4,  4,  4,  4,  4,  4,  4,  4,  4,  4,  4,  6,
  147.    6,  6,  8,  8,  8, 12, 12, 12, 16, 16, 16, 20, 20,
  148.   20, 26, 26, 26, 34, 34, 34, 42, 42, 42, 12, 12, 12
  149. };
  150. static
  151. unsigned char const sfb_48000_mixed[] = {
  152.   /* long */   4,  4,  4,  4,  4,  4,  6,  6,
  153.   /* short */  4,  4,  4,  6,  6,  6,  6,  6,  6, 10,
  154.               10, 10, 12, 12, 12, 14, 14, 14, 16, 16,
  155.               16, 20, 20, 20, 26, 26, 26, 66, 66, 66
  156. };
  157. static
  158. unsigned char const sfb_44100_mixed[] = {
  159.   /* long */   4,  4,  4,  4,  4,  4,  6,  6,
  160.   /* short */  4,  4,  4,  6,  6,  6,  8,  8,  8, 10,
  161.               10, 10, 12, 12, 12, 14, 14, 14, 18, 18,
  162.               18, 22, 22, 22, 30, 30, 30, 56, 56, 56
  163. };
  164. static
  165. unsigned char const sfb_32000_mixed[] = {
  166.   /* long */   4,  4,  4,  4,  4,  4,  6,  6,
  167.   /* short */  4,  4,  4,  6,  6,  6,  8,  8,  8, 12,
  168.               12, 12, 16, 16, 16, 20, 20, 20, 26, 26,
  169.               26, 34, 34, 34, 42, 42, 42, 12, 12, 12
  170. };
  171. /*
  172.  * MPEG-2 scalefactor band widths
  173.  * derived from Table B.2 of ISO/IEC 13818-3
  174.  */
  175. static
  176. unsigned char const sfb_24000_long[] = {
  177.    6,  6,  6,  6,  6,  6,  8, 10, 12,  14,  16,
  178.   18, 22, 26, 32, 38, 46, 54, 62, 70,  76,  36
  179. };
  180. static
  181. unsigned char const sfb_22050_long[] = {
  182.    6,  6,  6,  6,  6,  6,  8, 10, 12,  14,  16,
  183.   20, 24, 28, 32, 38, 46, 52, 60, 68,  58,  54
  184. };
  185. # define sfb_16000_long  sfb_22050_long
  186. static
  187. unsigned char const sfb_24000_short[] = {
  188.    4,  4,  4,  4,  4,  4,  4,  4,  4,  6,  6,  6,  8,
  189.    8,  8, 10, 10, 10, 12, 12, 12, 14, 14, 14, 18, 18,
  190.   18, 24, 24, 24, 32, 32, 32, 44, 44, 44, 12, 12, 12
  191. };
  192. static
  193. unsigned char const sfb_22050_short[] = {
  194.    4,  4,  4,  4,  4,  4,  4,  4,  4,  6,  6,  6,  6,
  195.    6,  6,  8,  8,  8, 10, 10, 10, 14, 14, 14, 18, 18,
  196.   18, 26, 26, 26, 32, 32, 32, 42, 42, 42, 18, 18, 18
  197. };
  198. static
  199. unsigned char const sfb_16000_short[] = {
  200.    4,  4,  4,  4,  4,  4,  4,  4,  4,  6,  6,  6,  8,
  201.    8,  8, 10, 10, 10, 12, 12, 12, 14, 14, 14, 18, 18,
  202.   18, 24, 24, 24, 30, 30, 30, 40, 40, 40, 18, 18, 18
  203. };
  204. static
  205. unsigned char const sfb_24000_mixed[] = {
  206.   /* long */   6,  6,  6,  6,  6,  6,
  207.   /* short */  6,  6,  6,  8,  8,  8, 10, 10, 10, 12,
  208.               12, 12, 14, 14, 14, 18, 18, 18, 24, 24,
  209.               24, 32, 32, 32, 44, 44, 44, 12, 12, 12
  210. };
  211. static
  212. unsigned char const sfb_22050_mixed[] = {
  213.   /* long */   6,  6,  6,  6,  6,  6,
  214.   /* short */  6,  6,  6,  6,  6,  6,  8,  8,  8, 10,
  215.               10, 10, 14, 14, 14, 18, 18, 18, 26, 26,
  216.               26, 32, 32, 32, 42, 42, 42, 18, 18, 18
  217. };
  218. static
  219. unsigned char const sfb_16000_mixed[] = {
  220.   /* long */   6,  6,  6,  6,  6,  6,
  221.   /* short */  6,  6,  6,  8,  8,  8, 10, 10, 10, 12,
  222.               12, 12, 14, 14, 14, 18, 18, 18, 24, 24,
  223.               24, 30, 30, 30, 40, 40, 40, 18, 18, 18
  224. };
  225. /*
  226.  * MPEG 2.5 scalefactor band widths
  227.  * derived from public sources
  228.  */
  229. # define sfb_12000_long  sfb_16000_long
  230. # define sfb_11025_long  sfb_12000_long
  231. static
  232. unsigned char const sfb_8000_long[] = {
  233.   12, 12, 12, 12, 12, 12, 16, 20, 24,  28,  32,
  234.   40, 48, 56, 64, 76, 90,  2,  2,  2,   2,   2
  235. };
  236. # define sfb_12000_short  sfb_16000_short
  237. # define sfb_11025_short  sfb_12000_short
  238. static
  239. unsigned char const sfb_8000_short[] = {
  240.    8,  8,  8,  8,  8,  8,  8,  8,  8, 12, 12, 12, 16,
  241.   16, 16, 20, 20, 20, 24, 24, 24, 28, 28, 28, 36, 36,
  242.   36,  2,  2,  2,  2,  2,  2,  2,  2,  2, 26, 26, 26
  243. };
  244. # define sfb_12000_mixed  sfb_16000_mixed
  245. # define sfb_11025_mixed  sfb_12000_mixed
  246. /* the 8000 Hz short block scalefactor bands do not break after
  247.    the first 36 frequency lines, so this is probably wrong */
  248. static
  249. unsigned char const sfb_8000_mixed[] = {
  250.   /* long */  12, 12, 12,
  251.   /* short */  4,  4,  4,  8,  8,  8, 12, 12, 12, 16, 16, 16,
  252.               20, 20, 20, 24, 24, 24, 28, 28, 28, 36, 36, 36,
  253.                2,  2,  2,  2,  2,  2,  2,  2,  2, 26, 26, 26
  254. };
  255. static
  256. struct {
  257.   unsigned char const *l;
  258.   unsigned char const *s;
  259.   unsigned char const *m;
  260. } const sfbwidth_table[9] = {
  261.   { sfb_48000_long, sfb_48000_short, sfb_48000_mixed },
  262.   { sfb_44100_long, sfb_44100_short, sfb_44100_mixed },
  263.   { sfb_32000_long, sfb_32000_short, sfb_32000_mixed },
  264.   { sfb_24000_long, sfb_24000_short, sfb_24000_mixed },
  265.   { sfb_22050_long, sfb_22050_short, sfb_22050_mixed },
  266.   { sfb_16000_long, sfb_16000_short, sfb_16000_mixed },
  267.   { sfb_12000_long, sfb_12000_short, sfb_12000_mixed },
  268.   { sfb_11025_long, sfb_11025_short, sfb_11025_mixed },
  269.   {  sfb_8000_long,  sfb_8000_short,  sfb_8000_mixed }
  270. };
  271. /*
  272.  * scalefactor band preemphasis (used only when preflag is set)
  273.  * derived from Table B.6 of ISO/IEC 11172-3
  274.  */
  275. static
  276. unsigned char const pretab[22] = {
  277.   0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 3, 3, 3, 2, 0
  278. };
  279. /*
  280.  * table for requantization
  281.  *
  282.  * rq_table[x].mantissa * 2^(rq_table[x].exponent) = x^(4/3)
  283.  */
  284. static
  285. struct fixedfloat {
  286.   unsigned long mantissa  : 27;
  287.   unsigned short exponent :  5;
  288. } const rq_table[8207] = {
  289. # include "rq_table.dat"
  290. };
  291. /*
  292.  * fractional powers of two
  293.  * used for requantization and joint stereo decoding
  294.  *
  295.  * root_table[3 + x] = 2^(x/4)
  296.  */
  297. static
  298. mad_fixed_t const root_table[7] = {
  299.   MAD_F(0x09837f05) /* 2^(-3/4) == 0.59460355750136 */,
  300.   MAD_F(0x0b504f33) /* 2^(-2/4) == 0.70710678118655 */,
  301.   MAD_F(0x0d744fcd) /* 2^(-1/4) == 0.84089641525371 */,
  302.   MAD_F(0x10000000) /* 2^( 0/4) == 1.00000000000000 */,
  303.   MAD_F(0x1306fe0a) /* 2^(+1/4) == 1.18920711500272 */,
  304.   MAD_F(0x16a09e66) /* 2^(+2/4) == 1.41421356237310 */,
  305.   MAD_F(0x1ae89f99) /* 2^(+3/4) == 1.68179283050743 */
  306. };
  307. /*
  308.  * coefficients for aliasing reduction
  309.  * derived from Table B.9 of ISO/IEC 11172-3
  310.  *
  311.  *  c[]  = { -0.6, -0.535, -0.33, -0.185, -0.095, -0.041, -0.0142, -0.0037 }
  312.  * cs[i] =    1 / sqrt(1 + c[i]^2)
  313.  * ca[i] = c[i] / sqrt(1 + c[i]^2)
  314.  */
  315. static
  316. mad_fixed_t const cs[8] = {
  317.   +MAD_F(0x0db84a81) /* +0.857492926 */, +MAD_F(0x0e1b9d7f) /* +0.881741997 */,
  318.   +MAD_F(0x0f31adcf) /* +0.949628649 */, +MAD_F(0x0fbba815) /* +0.983314592 */,
  319.   +MAD_F(0x0feda417) /* +0.995517816 */, +MAD_F(0x0ffc8fc8) /* +0.999160558 */,
  320.   +MAD_F(0x0fff964c) /* +0.999899195 */, +MAD_F(0x0ffff8d3) /* +0.999993155 */
  321. };
  322. static
  323. mad_fixed_t const ca[8] = {
  324.   -MAD_F(0x083b5fe7) /* -0.514495755 */, -MAD_F(0x078c36d2) /* -0.471731969 */,
  325.   -MAD_F(0x05039814) /* -0.313377454 */, -MAD_F(0x02e91dd1) /* -0.181913200 */,
  326.   -MAD_F(0x0183603a) /* -0.094574193 */, -MAD_F(0x00a7cb87) /* -0.040965583 */,
  327.   -MAD_F(0x003a2847) /* -0.014198569 */, -MAD_F(0x000f27b4) /* -0.003699975 */
  328. };
  329. /*
  330.  * IMDCT coefficients for short blocks
  331.  * derived from section 2.4.3.4.10.2 of ISO/IEC 11172-3
  332.  *
  333.  * imdct_s[i/even][k] = cos((PI / 24) * (2 *       (i / 2) + 7) * (2 * k + 1))
  334.  * imdct_s[i /odd][k] = cos((PI / 24) * (2 * (6 + (i-1)/2) + 7) * (2 * k + 1))
  335.  */
  336. static
  337. mad_fixed_t const imdct_s[6][6] = {
  338. # include "imdct_s.dat"
  339. };
  340. # if !defined(ASO_IMDCT)
  341. /*
  342.  * windowing coefficients for long blocks
  343.  * derived from section 2.4.3.4.10.3 of ISO/IEC 11172-3
  344.  *
  345.  * window_l[i] = sin((PI / 36) * (i + 1/2))
  346.  */
  347. static
  348. mad_fixed_t const window_l[36] = {
  349.   MAD_F(0x00b2aa3e) /* 0.043619387 */, MAD_F(0x0216a2a2) /* 0.130526192 */,
  350.   MAD_F(0x03768962) /* 0.216439614 */, MAD_F(0x04cfb0e2) /* 0.300705800 */,
  351.   MAD_F(0x061f78aa) /* 0.382683432 */, MAD_F(0x07635284) /* 0.461748613 */,
  352.   MAD_F(0x0898c779) /* 0.537299608 */, MAD_F(0x09bd7ca0) /* 0.608761429 */,
  353.   MAD_F(0x0acf37ad) /* 0.675590208 */, MAD_F(0x0bcbe352) /* 0.737277337 */,
  354.   MAD_F(0x0cb19346) /* 0.793353340 */, MAD_F(0x0d7e8807) /* 0.843391446 */,
  355.   MAD_F(0x0e313245) /* 0.887010833 */, MAD_F(0x0ec835e8) /* 0.923879533 */,
  356.   MAD_F(0x0f426cb5) /* 0.953716951 */, MAD_F(0x0f9ee890) /* 0.976296007 */,
  357.   MAD_F(0x0fdcf549) /* 0.991444861 */, MAD_F(0x0ffc19fd) /* 0.999048222 */,
  358.   MAD_F(0x0ffc19fd) /* 0.999048222 */, MAD_F(0x0fdcf549) /* 0.991444861 */,
  359.   MAD_F(0x0f9ee890) /* 0.976296007 */, MAD_F(0x0f426cb5) /* 0.953716951 */,
  360.   MAD_F(0x0ec835e8) /* 0.923879533 */, MAD_F(0x0e313245) /* 0.887010833 */,
  361.   MAD_F(0x0d7e8807) /* 0.843391446 */, MAD_F(0x0cb19346) /* 0.793353340 */,
  362.   MAD_F(0x0bcbe352) /* 0.737277337 */, MAD_F(0x0acf37ad) /* 0.675590208 */,
  363.   MAD_F(0x09bd7ca0) /* 0.608761429 */, MAD_F(0x0898c779) /* 0.537299608 */,
  364.   MAD_F(0x07635284) /* 0.461748613 */, MAD_F(0x061f78aa) /* 0.382683432 */,
  365.   MAD_F(0x04cfb0e2) /* 0.300705800 */, MAD_F(0x03768962) /* 0.216439614 */,
  366.   MAD_F(0x0216a2a2) /* 0.130526192 */, MAD_F(0x00b2aa3e) /* 0.043619387 */,
  367. };
  368. # endif  /* ASO_IMDCT */
  369. /*
  370.  * windowing coefficients for short blocks
  371.  * derived from section 2.4.3.4.10.3 of ISO/IEC 11172-3
  372.  *
  373.  * window_s[i] = sin((PI / 12) * (i + 1/2))
  374.  */
  375. static
  376. mad_fixed_t const window_s[12] = {
  377.   MAD_F(0x0216a2a2) /* 0.130526192 */, MAD_F(0x061f78aa) /* 0.382683432 */,
  378.   MAD_F(0x09bd7ca0) /* 0.608761429 */, MAD_F(0x0cb19346) /* 0.793353340 */,
  379.   MAD_F(0x0ec835e8) /* 0.923879533 */, MAD_F(0x0fdcf549) /* 0.991444861 */,
  380.   MAD_F(0x0fdcf549) /* 0.991444861 */, MAD_F(0x0ec835e8) /* 0.923879533 */,
  381.   MAD_F(0x0cb19346) /* 0.793353340 */, MAD_F(0x09bd7ca0) /* 0.608761429 */,
  382.   MAD_F(0x061f78aa) /* 0.382683432 */, MAD_F(0x0216a2a2) /* 0.130526192 */,
  383. };
  384. /*
  385.  * coefficients for intensity stereo processing
  386.  * derived from section 2.4.3.4.9.3 of ISO/IEC 11172-3
  387.  *
  388.  * is_ratio[i] = tan(i * (PI / 12))
  389.  * is_table[i] = is_ratio[i] / (1 + is_ratio[i])
  390.  */
  391. static
  392. mad_fixed_t const is_table[7] = {
  393.   MAD_F(0x00000000) /* 0.000000000 */,
  394.   MAD_F(0x0361962f) /* 0.211324865 */,
  395.   MAD_F(0x05db3d74) /* 0.366025404 */,
  396.   MAD_F(0x08000000) /* 0.500000000 */,
  397.   MAD_F(0x0a24c28c) /* 0.633974596 */,
  398.   MAD_F(0x0c9e69d1) /* 0.788675135 */,
  399.   MAD_F(0x10000000) /* 1.000000000 */
  400. };
  401. /*
  402.  * coefficients for LSF intensity stereo processing
  403.  * derived from section 2.4.3.2 of ISO/IEC 13818-3
  404.  *
  405.  * is_lsf_table[0][i] = (1 / sqrt(sqrt(2)))^(i + 1)
  406.  * is_lsf_table[1][i] = (1 /      sqrt(2)) ^(i + 1)
  407.  */
  408. static
  409. mad_fixed_t const is_lsf_table[2][15] = {
  410.   {
  411.     MAD_F(0x0d744fcd) /* 0.840896415 */,
  412.     MAD_F(0x0b504f33) /* 0.707106781 */,
  413.     MAD_F(0x09837f05) /* 0.594603558 */,
  414.     MAD_F(0x08000000) /* 0.500000000 */,
  415.     MAD_F(0x06ba27e6) /* 0.420448208 */,
  416.     MAD_F(0x05a8279a) /* 0.353553391 */,
  417.     MAD_F(0x04c1bf83) /* 0.297301779 */,
  418.     MAD_F(0x04000000) /* 0.250000000 */,
  419.     MAD_F(0x035d13f3) /* 0.210224104 */,
  420.     MAD_F(0x02d413cd) /* 0.176776695 */,
  421.     MAD_F(0x0260dfc1) /* 0.148650889 */,
  422.     MAD_F(0x02000000) /* 0.125000000 */,
  423.     MAD_F(0x01ae89fa) /* 0.105112052 */,
  424.     MAD_F(0x016a09e6) /* 0.088388348 */,
  425.     MAD_F(0x01306fe1) /* 0.074325445 */
  426.   }, {
  427.     MAD_F(0x0b504f33) /* 0.707106781 */,
  428.     MAD_F(0x08000000) /* 0.500000000 */,
  429.     MAD_F(0x05a8279a) /* 0.353553391 */,
  430.     MAD_F(0x04000000) /* 0.250000000 */,
  431.     MAD_F(0x02d413cd) /* 0.176776695 */,
  432.     MAD_F(0x02000000) /* 0.125000000 */,
  433.     MAD_F(0x016a09e6) /* 0.088388348 */,
  434.     MAD_F(0x01000000) /* 0.062500000 */,
  435.     MAD_F(0x00b504f3) /* 0.044194174 */,
  436.     MAD_F(0x00800000) /* 0.031250000 */,
  437.     MAD_F(0x005a827a) /* 0.022097087 */,
  438.     MAD_F(0x00400000) /* 0.015625000 */,
  439.     MAD_F(0x002d413d) /* 0.011048543 */,
  440.     MAD_F(0x00200000) /* 0.007812500 */,
  441.     MAD_F(0x0016a09e) /* 0.005524272 */
  442.   }
  443. };
  444. /*
  445.  * NAME: III_sideinfo()
  446.  * DESCRIPTION: decode frame side information from a bitstream
  447.  */
  448. static
  449. enum mad_error III_sideinfo(struct mad_bitptr *ptr, unsigned int nch,
  450.     int lsf, struct sideinfo *si,
  451.     unsigned int *data_bitlen,
  452.     unsigned int *priv_bitlen)
  453. {
  454.   unsigned int ngr, gr, ch, i;
  455.   enum mad_error result = MAD_ERROR_NONE;
  456.   *data_bitlen = 0;
  457.   *priv_bitlen = lsf ? ((nch == 1) ? 1 : 2) : ((nch == 1) ? 5 : 3);
  458.   si->main_data_begin = mad_bit_read(ptr, lsf ? 8 : 9);
  459.   si->private_bits    = mad_bit_read(ptr, *priv_bitlen);
  460.   ngr = 1;
  461.   if (!lsf) {
  462.     ngr = 2;
  463.     for (ch = 0; ch < nch; ++ch)
  464.       si->scfsi[ch] = mad_bit_read(ptr, 4);
  465.   }
  466.   for (gr = 0; gr < ngr; ++gr) {
  467.     struct granule *granule = &si->gr[gr];
  468.     for (ch = 0; ch < nch; ++ch) {
  469.       struct channel *channel = &granule->ch[ch];
  470.       channel->part2_3_length    = mad_bit_read(ptr, 12);
  471.       channel->big_values        = mad_bit_read(ptr, 9);
  472.       channel->global_gain       = mad_bit_read(ptr, 8);
  473.       channel->scalefac_compress = mad_bit_read(ptr, lsf ? 9 : 4);
  474.       *data_bitlen += channel->part2_3_length;
  475.       if (channel->big_values > 288 && result == 0)
  476. result = MAD_ERROR_BADBIGVALUES;
  477.       channel->flags = 0;
  478.       /* window_switching_flag */
  479.       if (mad_bit_read(ptr, 1)) {
  480. channel->block_type = mad_bit_read(ptr, 2);
  481. if (channel->block_type == 0 && result == 0)
  482.   result = MAD_ERROR_BADBLOCKTYPE;
  483. if (!lsf && channel->block_type == 2 && si->scfsi[ch] && result == 0)
  484.   result = MAD_ERROR_BADSCFSI;
  485. channel->region0_count = 7;
  486. channel->region1_count = 36;
  487. if (mad_bit_read(ptr, 1))
  488.   channel->flags |= mixed_block_flag;
  489. else if (channel->block_type == 2)
  490.   channel->region0_count = 8;
  491. for (i = 0; i < 2; ++i)
  492.   channel->table_select[i] = mad_bit_read(ptr, 5);
  493. # if defined(DEBUG)
  494. channel->table_select[2] = 4;  /* not used */
  495. # endif
  496. for (i = 0; i < 3; ++i)
  497.   channel->subblock_gain[i] = mad_bit_read(ptr, 3);
  498.       }
  499.       else {
  500. channel->block_type = 0;
  501. for (i = 0; i < 3; ++i)
  502.   channel->table_select[i] = mad_bit_read(ptr, 5);
  503. channel->region0_count = mad_bit_read(ptr, 4);
  504. channel->region1_count = mad_bit_read(ptr, 3);
  505.       }
  506.       /* [preflag,] scalefac_scale, count1table_select */
  507.       channel->flags |= mad_bit_read(ptr, lsf ? 2 : 3);
  508.     }
  509.   }
  510.   return result;
  511. }
  512. /*
  513.  * NAME: III_scalefactors_lsf()
  514.  * DESCRIPTION: decode channel scalefactors for LSF from a bitstream
  515.  */
  516. static
  517. unsigned int III_scalefactors_lsf(struct mad_bitptr *ptr,
  518.   struct channel *channel,
  519.   struct channel *gr1ch, int mode_extension)
  520. {
  521.   struct mad_bitptr start;
  522.   unsigned int scalefac_compress, index, slen[4], part, n, i;
  523.   unsigned char const *nsfb;
  524.   start = *ptr;
  525.   scalefac_compress = channel->scalefac_compress;
  526.   index = (channel->block_type == 2) ?
  527.     ((channel->flags & mixed_block_flag) ? 2 : 1) : 0;
  528.   if (!((mode_extension & I_STEREO) && gr1ch)) {
  529.     if (scalefac_compress < 400) {
  530.       slen[0] = (scalefac_compress >> 4) / 5;
  531.       slen[1] = (scalefac_compress >> 4) % 5;
  532.       slen[2] = (scalefac_compress % 16) >> 2;
  533.       slen[3] =  scalefac_compress %  4;
  534.       nsfb = nsfb_table[0][index];
  535.     }
  536.     else if (scalefac_compress < 500) {
  537.       scalefac_compress -= 400;
  538.       slen[0] = (scalefac_compress >> 2) / 5;
  539.       slen[1] = (scalefac_compress >> 2) % 5;
  540.       slen[2] =  scalefac_compress %  4;
  541.       slen[3] = 0;
  542.       nsfb = nsfb_table[1][index];
  543.     }
  544.     else {
  545.       scalefac_compress -= 500;
  546.       slen[0] = scalefac_compress / 3;
  547.       slen[1] = scalefac_compress % 3;
  548.       slen[2] = 0;
  549.       slen[3] = 0;
  550.       channel->flags |= preflag;
  551.       nsfb = nsfb_table[2][index];
  552.     }
  553.     n = 0;
  554.     for (part = 0; part < 4; ++part) {
  555.       for (i = 0; i < nsfb[part]; ++i)
  556. channel->scalefac[n++] = mad_bit_read(ptr, slen[part]);
  557.     }
  558.     while (n < 39)
  559.       channel->scalefac[n++] = 0;
  560.   }
  561.   else {  /* (mode_extension & I_STEREO) && gr1ch (i.e. ch == 1) */
  562.     scalefac_compress >>= 1;
  563.     if (scalefac_compress < 180) {
  564.       slen[0] =  scalefac_compress / 36;
  565.       slen[1] = (scalefac_compress % 36) / 6;
  566.       slen[2] = (scalefac_compress % 36) % 6;
  567.       slen[3] = 0;
  568.       nsfb = nsfb_table[3][index];
  569.     }
  570.     else if (scalefac_compress < 244) {
  571.       scalefac_compress -= 180;
  572.       slen[0] = (scalefac_compress % 64) >> 4;
  573.       slen[1] = (scalefac_compress % 16) >> 2;
  574.       slen[2] =  scalefac_compress %  4;
  575.       slen[3] = 0;
  576.       nsfb = nsfb_table[4][index];
  577.     }
  578.     else {
  579.       scalefac_compress -= 244;
  580.       slen[0] = scalefac_compress / 3;
  581.       slen[1] = scalefac_compress % 3;
  582.       slen[2] = 0;
  583.       slen[3] = 0;
  584.       nsfb = nsfb_table[5][index];
  585.     }
  586.     n = 0;
  587.     for (part = 0; part < 4; ++part) {
  588.       unsigned int max, is_pos;
  589.       max = (1 << slen[part]) - 1;
  590.       for (i = 0; i < nsfb[part]; ++i) {
  591. is_pos = mad_bit_read(ptr, slen[part]);
  592. channel->scalefac[n] = is_pos;
  593. gr1ch->scalefac[n++] = (is_pos == max);
  594.       }
  595.     }
  596.     while (n < 39) {
  597.       channel->scalefac[n] = 0;
  598.       gr1ch->scalefac[n++] = 0;  /* apparently not illegal */
  599.     }
  600.   }
  601.   return mad_bit_length(&start, ptr);
  602. }
  603. /*
  604.  * NAME: III_scalefactors()
  605.  * DESCRIPTION: decode channel scalefactors of one granule from a bitstream
  606.  */
  607. static
  608. unsigned int III_scalefactors(struct mad_bitptr *ptr, struct channel *channel,
  609.       struct channel const *gr0ch, unsigned int scfsi)
  610. {
  611.   struct mad_bitptr start;
  612.   unsigned int slen1, slen2, sfbi;
  613.   start = *ptr;
  614.   slen1 = sflen_table[channel->scalefac_compress].slen1;
  615.   slen2 = sflen_table[channel->scalefac_compress].slen2;
  616.   if (channel->block_type == 2) {
  617.     unsigned int nsfb;
  618.     sfbi = 0;
  619.     nsfb = (channel->flags & mixed_block_flag) ? 8 + 3 * 3 : 6 * 3;
  620.     while (nsfb--)
  621.       channel->scalefac[sfbi++] = mad_bit_read(ptr, slen1);
  622.     nsfb = 6 * 3;
  623.     while (nsfb--)
  624.       channel->scalefac[sfbi++] = mad_bit_read(ptr, slen2);
  625.     nsfb = 1 * 3;
  626.     while (nsfb--)
  627.       channel->scalefac[sfbi++] = 0;
  628.   }
  629.   else {  /* channel->block_type != 2 */
  630.     if (scfsi & 0x8) {
  631.       for (sfbi = 0; sfbi < 6; ++sfbi)
  632. channel->scalefac[sfbi] = gr0ch->scalefac[sfbi];
  633.     }
  634.     else {
  635.       for (sfbi = 0; sfbi < 6; ++sfbi)
  636. channel->scalefac[sfbi] = mad_bit_read(ptr, slen1);
  637.     }
  638.     if (scfsi & 0x4) {
  639.       for (sfbi = 6; sfbi < 11; ++sfbi)
  640. channel->scalefac[sfbi] = gr0ch->scalefac[sfbi];
  641.     }
  642.     else {
  643.       for (sfbi = 6; sfbi < 11; ++sfbi)
  644. channel->scalefac[sfbi] = mad_bit_read(ptr, slen1);
  645.     }
  646.     if (scfsi & 0x2) {
  647.       for (sfbi = 11; sfbi < 16; ++sfbi)
  648. channel->scalefac[sfbi] = gr0ch->scalefac[sfbi];
  649.     }
  650.     else {
  651.       for (sfbi = 11; sfbi < 16; ++sfbi)
  652. channel->scalefac[sfbi] = mad_bit_read(ptr, slen2);
  653.     }
  654.     if (scfsi & 0x1) {
  655.       for (sfbi = 16; sfbi < 21; ++sfbi)
  656. channel->scalefac[sfbi] = gr0ch->scalefac[sfbi];
  657.     }
  658.     else {
  659.       for (sfbi = 16; sfbi < 21; ++sfbi)
  660. channel->scalefac[sfbi] = mad_bit_read(ptr, slen2);
  661.     }
  662.     channel->scalefac[21] = 0;
  663.   }
  664.   return mad_bit_length(&start, ptr);
  665. }
  666. /*
  667.  * The Layer III formula for requantization and scaling is defined by
  668.  * section 2.4.3.4.7.1 of ISO/IEC 11172-3, as follows:
  669.  *
  670.  *   long blocks:
  671.  *   xr[i] = sign(is[i]) * abs(is[i])^(4/3) *
  672.  *           2^((1/4) * (global_gain - 210)) *
  673.  *           2^-(scalefac_multiplier *
  674.  *               (scalefac_l[sfb] + preflag * pretab[sfb]))
  675.  *
  676.  *   short blocks:
  677.  *   xr[i] = sign(is[i]) * abs(is[i])^(4/3) *
  678.  *           2^((1/4) * (global_gain - 210 - 8 * subblock_gain[w])) *
  679.  *           2^-(scalefac_multiplier * scalefac_s[sfb][w])
  680.  *
  681.  *   where:
  682.  *   scalefac_multiplier = (scalefac_scale + 1) / 2
  683.  *
  684.  * The routines III_exponents() and III_requantize() facilitate this
  685.  * calculation.
  686.  */
  687. /*
  688.  * NAME: III_exponents()
  689.  * DESCRIPTION: calculate scalefactor exponents
  690.  */
  691. static
  692. void III_exponents(struct channel const *channel,
  693.    unsigned char const *sfbwidth, signed int exponents[39])
  694. {
  695.   signed int gain;
  696.   unsigned int scalefac_multiplier, sfbi;
  697.   gain = (signed int) channel->global_gain - 210;
  698.   scalefac_multiplier = (channel->flags & scalefac_scale) ? 2 : 1;
  699.   if (channel->block_type == 2) {
  700.     unsigned int l;
  701.     signed int gain0, gain1, gain2;
  702.     sfbi = l = 0;
  703.     if (channel->flags & mixed_block_flag) {
  704.       unsigned int premask;
  705.       premask = (channel->flags & preflag) ? ~0 : 0;
  706.       /* long block subbands 0-1 */
  707.       while (l < 36) {
  708. exponents[sfbi] = gain -
  709.   (signed int) ((channel->scalefac[sfbi] + (pretab[sfbi] & premask)) <<
  710. scalefac_multiplier);
  711. l += sfbwidth[sfbi++];
  712.       }
  713.     }
  714.     /* this is probably wrong for 8000 Hz short/mixed blocks */
  715.     gain0 = gain - 8 * (signed int) channel->subblock_gain[0];
  716.     gain1 = gain - 8 * (signed int) channel->subblock_gain[1];
  717.     gain2 = gain - 8 * (signed int) channel->subblock_gain[2];
  718.     while (l < 576) {
  719.       exponents[sfbi + 0] = gain0 -
  720. (signed int) (channel->scalefac[sfbi + 0] << scalefac_multiplier);
  721.       exponents[sfbi + 1] = gain1 -
  722. (signed int) (channel->scalefac[sfbi + 1] << scalefac_multiplier);
  723.       exponents[sfbi + 2] = gain2 -
  724. (signed int) (channel->scalefac[sfbi + 2] << scalefac_multiplier);
  725.       l    += 3 * sfbwidth[sfbi];
  726.       sfbi += 3;
  727.     }
  728.   }
  729.   else {  /* channel->block_type != 2 */
  730.     if (channel->flags & preflag) {
  731.       for (sfbi = 0; sfbi < 22; ++sfbi) {
  732. exponents[sfbi] = gain -
  733.   (signed int) ((channel->scalefac[sfbi] + pretab[sfbi]) <<
  734. scalefac_multiplier);
  735.       }
  736.     }
  737.     else {
  738.       for (sfbi = 0; sfbi < 22; ++sfbi) {
  739. exponents[sfbi] = gain -
  740.   (signed int) (channel->scalefac[sfbi] << scalefac_multiplier);
  741.       }
  742.     }
  743.   }
  744. }
  745. /*
  746.  * NAME: III_requantize()
  747.  * DESCRIPTION: requantize one (positive) value
  748.  */
  749. static
  750. mad_fixed_t III_requantize(unsigned int value, signed int exp)
  751. {
  752.   mad_fixed_t requantized;
  753.   signed int frac;
  754.   struct fixedfloat const *power;
  755.   frac = exp % 4;  /* assumes sign(frac) == sign(exp) */
  756.   exp /= 4;
  757.   power = &rq_table[value];
  758.   requantized = power->mantissa;
  759.   exp += power->exponent;
  760.   if (exp < 0) {
  761.     if (-exp >= sizeof(mad_fixed_t) * CHAR_BIT) {
  762.       /* underflow */
  763.       requantized = 0;
  764.     }
  765.     else {
  766.       requantized += 1L << (-exp - 1);
  767.       requantized >>= -exp;
  768.     }
  769.   }
  770.   else {
  771.     if (exp >= 5) {
  772.       /* overflow */
  773. # if defined(DEBUG)
  774.       fprintf(stderr, "requantize overflow (%f * 2^%d)n",
  775.       mad_f_todouble(requantized), exp);
  776. # endif
  777.       requantized = MAD_F_MAX;
  778.     }
  779.     else
  780.       requantized <<= exp;
  781.   }
  782.   return frac ? mad_f_mul(requantized, root_table[3 + frac]) : requantized;
  783. }
  784. /* we must take care that sz >= bits and sz < sizeof(long) lest bits == 0 */
  785. # define MASK(cache, sz, bits)
  786.     (((cache) >> ((sz) - (bits))) & ((1 << (bits)) - 1))
  787. # define MASK1BIT(cache, sz)  
  788.     ((cache) & (1 << ((sz) - 1)))
  789. /*
  790.  * NAME: III_huffdecode()
  791.  * DESCRIPTION: decode Huffman code words of one channel of one granule
  792.  */
  793. static
  794. enum mad_error III_huffdecode(struct mad_bitptr *ptr, mad_fixed_t xr[576],
  795.       struct channel *channel,
  796.       unsigned char const *sfbwidth,
  797.       unsigned int part2_length)
  798. {
  799.   signed int exponents[39], exp;
  800.   signed int const *expptr;
  801.   struct mad_bitptr peek;
  802.   signed int bits_left, cachesz;
  803.   register mad_fixed_t *xrptr;
  804.   mad_fixed_t const *sfbound;
  805.   register unsigned long bitcache;
  806.   bits_left = (signed) channel->part2_3_length - (signed) part2_length;
  807.   if (bits_left < 0)
  808.     return MAD_ERROR_BADPART3LEN;
  809.   III_exponents(channel, sfbwidth, exponents);
  810.   peek = *ptr;
  811.   mad_bit_skip(ptr, bits_left);
  812.   /* align bit reads to byte boundaries */
  813.   cachesz  = mad_bit_bitsleft(&peek);
  814.   cachesz += ((32 - 1 - 24) + (24 - cachesz)) & ~7;
  815.   bitcache   = mad_bit_read(&peek, cachesz);
  816.   bits_left -= cachesz;
  817.   xrptr = &xr[0];
  818.   /* big_values */
  819.   {
  820.     unsigned int region, rcount;
  821.     struct hufftable const *entry;
  822.     union huffpair const *table;
  823.     unsigned int linbits, startbits, big_values, reqhits;
  824.     mad_fixed_t reqcache[16];
  825.     sfbound = xrptr + *sfbwidth++;
  826.     rcount  = channel->region0_count + 1;
  827.     entry     = &mad_huff_pair_table[channel->table_select[region = 0]];
  828.     table     = entry->table;
  829.     linbits   = entry->linbits;
  830.     startbits = entry->startbits;
  831.     if (table == 0)
  832.       return MAD_ERROR_BADHUFFTABLE;
  833.     expptr  = &exponents[0];
  834.     exp     = *expptr++;
  835.     reqhits = 0;
  836.     big_values = channel->big_values;
  837.     while (big_values-- && cachesz + bits_left > 0) {
  838.       union huffpair const *pair;
  839.       unsigned int clumpsz, value;
  840.       register mad_fixed_t requantized;
  841.       if (xrptr == sfbound) {
  842. sfbound += *sfbwidth++;
  843. /* change table if region boundary */
  844. if (--rcount == 0) {
  845.   if (region == 0)
  846.     rcount = channel->region1_count + 1;
  847.   else
  848.     rcount = 0;  /* all remaining */
  849.   entry     = &mad_huff_pair_table[channel->table_select[++region]];
  850.   table     = entry->table;
  851.   linbits   = entry->linbits;
  852.   startbits = entry->startbits;
  853.   if (table == 0)
  854.     return MAD_ERROR_BADHUFFTABLE;
  855. }
  856. if (exp != *expptr) {
  857.   exp = *expptr;
  858.   reqhits = 0;
  859. }
  860. ++expptr;
  861.       }
  862.       if (cachesz < 21) {
  863. unsigned int bits;
  864. bits       = ((32 - 1 - 21) + (21 - cachesz)) & ~7;
  865. bitcache   = (bitcache << bits) | mad_bit_read(&peek, bits);
  866. cachesz   += bits;
  867. bits_left -= bits;
  868.       }
  869.       /* hcod (0..19) */
  870.       clumpsz = startbits;
  871.       pair    = &table[MASK(bitcache, cachesz, clumpsz)];
  872.       while (!pair->final) {
  873. cachesz -= clumpsz;
  874. clumpsz = pair->ptr.bits;
  875. pair    = &table[pair->ptr.offset + MASK(bitcache, cachesz, clumpsz)];
  876.       }
  877.       cachesz -= pair->value.hlen;
  878.       if (linbits) {
  879. /* x (0..14) */
  880. value = pair->value.x;
  881. switch (value) {
  882. case 0:
  883.   xrptr[0] = 0;
  884.   break;
  885. case 15:
  886.   if (cachesz < linbits + 2) {
  887.     bitcache   = (bitcache << 16) | mad_bit_read(&peek, 16);
  888.     cachesz   += 16;
  889.     bits_left -= 16;
  890.   }
  891.   value += MASK(bitcache, cachesz, linbits);
  892.   cachesz -= linbits;
  893.   requantized = III_requantize(value, exp);
  894.   goto x_final;
  895. default:
  896.   if (reqhits & (1 << value))
  897.     requantized = reqcache[value];
  898.   else {
  899.     reqhits |= (1 << value);
  900.     requantized = reqcache[value] = III_requantize(value, exp);
  901.   }
  902. x_final:
  903.   xrptr[0] = MASK1BIT(bitcache, cachesz--) ?
  904.     -requantized : requantized;
  905. }
  906. /* y (0..14) */
  907. value = pair->value.y;
  908. switch (value) {
  909. case 0:
  910.   xrptr[1] = 0;
  911.   break;
  912. case 15:
  913.   if (cachesz < linbits + 1) {
  914.     bitcache   = (bitcache << 16) | mad_bit_read(&peek, 16);
  915.     cachesz   += 16;
  916.     bits_left -= 16;
  917.   }
  918.   value += MASK(bitcache, cachesz, linbits);
  919.   cachesz -= linbits;
  920.   requantized = III_requantize(value, exp);
  921.   goto y_final;
  922. default:
  923.   if (reqhits & (1 << value))
  924.     requantized = reqcache[value];
  925.   else {
  926.     reqhits |= (1 << value);
  927.     requantized = reqcache[value] = III_requantize(value, exp);
  928.   }
  929. y_final:
  930.   xrptr[1] = MASK1BIT(bitcache, cachesz--) ?
  931.     -requantized : requantized;
  932. }
  933.       }
  934.       else {
  935. /* x (0..1) */
  936. value = pair->value.x;
  937. if (value == 0)
  938.   xrptr[0] = 0;
  939. else {
  940.   if (reqhits & (1 << value))
  941.     requantized = reqcache[value];
  942.   else {
  943.     reqhits |= (1 << value);
  944.     requantized = reqcache[value] = III_requantize(value, exp);
  945.   }
  946.   xrptr[0] = MASK1BIT(bitcache, cachesz--) ?
  947.     -requantized : requantized;
  948. }
  949. /* y (0..1) */
  950. value = pair->value.y;
  951. if (value == 0)
  952.   xrptr[1] = 0;
  953. else {
  954.   if (reqhits & (1 << value))
  955.     requantized = reqcache[value];
  956.   else {
  957.     reqhits |= (1 << value);
  958.     requantized = reqcache[value] = III_requantize(value, exp);
  959.   }
  960.   xrptr[1] = MASK1BIT(bitcache, cachesz--) ?
  961.     -requantized : requantized;
  962. }
  963.       }
  964.       xrptr += 2;
  965.     }
  966.   }
  967.   if (cachesz + bits_left < 0)
  968.     return MAD_ERROR_BADHUFFDATA;  /* big_values overrun */
  969.   /* count1 */
  970.   {
  971.     union huffquad const *table;
  972.     register mad_fixed_t requantized;
  973.     table = mad_huff_quad_table[channel->flags & count1table_select];
  974.     requantized = III_requantize(1, exp);
  975.     while (cachesz + bits_left > 0 && xrptr <= &xr[572]) {
  976.       union huffquad const *quad;
  977.       /* hcod (1..6) */
  978.       if (cachesz < 10) {
  979. bitcache   = (bitcache << 16) | mad_bit_read(&peek, 16);
  980. cachesz   += 16;
  981. bits_left -= 16;
  982.       }
  983.       quad = &table[MASK(bitcache, cachesz, 4)];
  984.       /* quad tables guaranteed to have at most one extra lookup */
  985.       if (!quad->final) {
  986. cachesz -= 4;
  987. quad = &table[quad->ptr.offset +
  988.       MASK(bitcache, cachesz, quad->ptr.bits)];
  989.       }
  990.       cachesz -= quad->value.hlen;
  991.       if (xrptr == sfbound) {
  992. sfbound += *sfbwidth++;
  993. if (exp != *expptr) {
  994.   exp = *expptr;
  995.   requantized = III_requantize(1, exp);
  996. }
  997. ++expptr;
  998.       }
  999.       /* v (0..1) */
  1000.       xrptr[0] = quad->value.v ?
  1001. (MASK1BIT(bitcache, cachesz--) ? -requantized : requantized) : 0;
  1002.       /* w (0..1) */
  1003.       xrptr[1] = quad->value.w ?
  1004. (MASK1BIT(bitcache, cachesz--) ? -requantized : requantized) : 0;
  1005.       xrptr += 2;
  1006.       if (xrptr == sfbound) {
  1007. sfbound += *sfbwidth++;
  1008. if (exp != *expptr) {
  1009.   exp = *expptr;
  1010.   requantized = III_requantize(1, exp);
  1011. }
  1012. ++expptr;
  1013.       }
  1014.       /* x (0..1) */
  1015.       xrptr[0] = quad->value.x ?
  1016. (MASK1BIT(bitcache, cachesz--) ? -requantized : requantized) : 0;
  1017.       /* y (0..1) */
  1018.       xrptr[1] = quad->value.y ?
  1019. (MASK1BIT(bitcache, cachesz--) ? -requantized : requantized) : 0;
  1020.       xrptr += 2;
  1021.     }
  1022.     if (cachesz + bits_left < 0) {
  1023. # if 0 && defined(DEBUG)
  1024.       fprintf(stderr, "huffman count1 overrun (%d bits)n",
  1025.       -(cachesz + bits_left));
  1026. # endif
  1027.       /* technically the bitstream is misformatted, but apparently
  1028.  some encoders are just a bit sloppy with stuffing bits */
  1029.       xrptr -= 4;
  1030.     }
  1031.   }
  1032.   assert(-bits_left <= MAD_BUFFER_GUARD * CHAR_BIT);
  1033. # if 0 && defined(DEBUG)
  1034.   if (bits_left < 0)
  1035.     fprintf(stderr, "read %d bits too manyn", -bits_left);
  1036.   else if (cachesz + bits_left > 0)
  1037.     fprintf(stderr, "%d stuffing bitsn", cachesz + bits_left);
  1038. # endif
  1039.   /* rzero */
  1040.   while (xrptr < &xr[576]) {
  1041.     xrptr[0] = 0;
  1042.     xrptr[1] = 0;
  1043.     xrptr += 2;
  1044.   }
  1045.   return MAD_ERROR_NONE;
  1046. }
  1047. # undef MASK
  1048. # undef MASK1BIT
  1049. /*
  1050.  * NAME: III_reorder()
  1051.  * DESCRIPTION: reorder frequency lines of a short block into subband order
  1052.  */
  1053. static
  1054. void III_reorder(mad_fixed_t xr[576], struct channel const *channel,
  1055.  unsigned char const sfbwidth[39])
  1056. {
  1057.   mad_fixed_t tmp[32][3][6];
  1058.   unsigned int sb, l, f, w, sbw[3], sw[3];
  1059.   /* this is probably wrong for 8000 Hz mixed blocks */
  1060.   sb = 0;
  1061.   if (channel->flags & mixed_block_flag) {
  1062.     sb = 2;
  1063.     l = 0;
  1064.     while (l < 36)
  1065.       l += *sfbwidth++;
  1066.   }
  1067.   for (w = 0; w < 3; ++w) {
  1068.     sbw[w] = sb;
  1069.     sw[w]  = 0;
  1070.   }
  1071.   f = *sfbwidth++;
  1072.   w = 0;
  1073.   for (l = 18 * sb; l < 576; ++l) {
  1074.     if (f-- == 0) {
  1075.       f = *sfbwidth++ - 1;
  1076.       w = (w + 1) % 3;
  1077.     }
  1078.     tmp[sbw[w]][w][sw[w]++] = xr[l];
  1079.     if (sw[w] == 6) {
  1080.       sw[w] = 0;
  1081.       ++sbw[w];
  1082.     }
  1083.   }
  1084.   memcpy(&xr[18 * sb], &tmp[sb], (576 - 18 * sb) * sizeof(mad_fixed_t));
  1085. }
  1086. /*
  1087.  * NAME: III_stereo()
  1088.  * DESCRIPTION: perform joint stereo processing on a granule
  1089.  */
  1090. static
  1091. enum mad_error III_stereo(mad_fixed_t xr[2][576],
  1092.   struct granule const *granule,
  1093.   struct mad_header *header,
  1094.   unsigned char const *sfbwidth)
  1095. {
  1096.   short modes[39];
  1097.   unsigned int sfbi, l, n, i;
  1098.   if (granule->ch[0].block_type !=
  1099.       granule->ch[1].block_type ||
  1100.       (granule->ch[0].flags & mixed_block_flag) !=
  1101.       (granule->ch[1].flags & mixed_block_flag))
  1102.     return MAD_ERROR_BADSTEREO;
  1103.   for (i = 0; i < 39; ++i)
  1104.     modes[i] = header->mode_extension;
  1105.   /* intensity stereo */
  1106.   if (header->mode_extension & I_STEREO) {
  1107.     struct channel const *right_ch = &granule->ch[1];
  1108.     mad_fixed_t const *right_xr = xr[1];
  1109.     unsigned int is_pos;
  1110.     header->flags |= MAD_FLAG_I_STEREO;
  1111.     /* first determine which scalefactor bands are to be processed */
  1112.     if (right_ch->block_type == 2) {
  1113.       unsigned int lower, start, max, bound[3], w;
  1114.       lower = start = max = bound[0] = bound[1] = bound[2] = 0;
  1115.       sfbi = l = 0;
  1116.       if (right_ch->flags & mixed_block_flag) {
  1117. while (l < 36) {
  1118.   n = sfbwidth[sfbi++];
  1119.   for (i = 0; i < n; ++i) {
  1120.     if (right_xr[i]) {
  1121.       lower = sfbi;
  1122.       break;
  1123.     }
  1124.   }
  1125.   right_xr += n;
  1126.   l += n;
  1127. }
  1128. start = sfbi;
  1129.       }
  1130.       w = 0;
  1131.       while (l < 576) {
  1132. n = sfbwidth[sfbi++];
  1133. for (i = 0; i < n; ++i) {
  1134.   if (right_xr[i]) {
  1135.     max = bound[w] = sfbi;
  1136.     break;
  1137.   }
  1138. }
  1139. right_xr += n;
  1140. l += n;
  1141. w = (w + 1) % 3;
  1142.       }
  1143.       if (max)
  1144. lower = start;
  1145.       /* long blocks */
  1146.       for (i = 0; i < lower; ++i)
  1147. modes[i] = header->mode_extension & ~I_STEREO;
  1148.       /* short blocks */
  1149.       w = 0;
  1150.       for (i = start; i < max; ++i) {
  1151. if (i < bound[w])
  1152.   modes[i] = header->mode_extension & ~I_STEREO;
  1153. w = (w + 1) % 3;
  1154.       }
  1155.     }
  1156.     else {  /* right_ch->block_type != 2 */
  1157.       unsigned int bound;
  1158.       bound = 0;
  1159.       for (sfbi = l = 0; l < 576; l += n) {
  1160. n = sfbwidth[sfbi++];
  1161. for (i = 0; i < n; ++i) {
  1162.   if (right_xr[i]) {
  1163.     bound = sfbi;
  1164.     break;
  1165.   }
  1166. }
  1167. right_xr += n;
  1168.       }
  1169.       for (i = 0; i < bound; ++i)
  1170. modes[i] = header->mode_extension & ~I_STEREO;
  1171.     }
  1172.     /* now do the actual processing */
  1173.     if (header->flags & MAD_FLAG_LSF_EXT) {
  1174.       unsigned char const *illegal_pos = granule[1].ch[1].scalefac;
  1175.       mad_fixed_t const *lsf_scale;
  1176.       /* intensity_scale */
  1177.       lsf_scale = is_lsf_table[right_ch->scalefac_compress & 0x1];
  1178.       for (sfbi = l = 0; l < 576; ++sfbi, l += n) {
  1179. n = sfbwidth[sfbi];
  1180. if (!(modes[sfbi] & I_STEREO))
  1181.   continue;
  1182. if (illegal_pos[sfbi]) {
  1183.   modes[sfbi] &= ~I_STEREO;
  1184.   continue;
  1185. }
  1186. is_pos = right_ch->scalefac[sfbi];
  1187. for (i = 0; i < n; ++i) {
  1188.   register mad_fixed_t left;
  1189.   left = xr[0][l + i];
  1190.   if (is_pos == 0)
  1191.     xr[1][l + i] = left;
  1192.   else {
  1193.     register mad_fixed_t opposite;
  1194.     opposite = mad_f_mul(left, lsf_scale[(is_pos - 1) / 2]);
  1195.     if (is_pos & 1) {
  1196.       xr[0][l + i] = opposite;
  1197.       xr[1][l + i] = left;
  1198.     }
  1199.     else
  1200.       xr[1][l + i] = opposite;
  1201.   }
  1202. }
  1203.       }
  1204.     }
  1205.     else {  /* !(header->flags & MAD_FLAG_LSF_EXT) */
  1206.       for (sfbi = l = 0; l < 576; ++sfbi, l += n) {
  1207. n = sfbwidth[sfbi];
  1208. if (!(modes[sfbi] & I_STEREO))
  1209.   continue;
  1210. is_pos = right_ch->scalefac[sfbi];
  1211. if (is_pos >= 7) {  /* illegal intensity position */
  1212.   modes[sfbi] &= ~I_STEREO;
  1213.   continue;
  1214. }
  1215. for (i = 0; i < n; ++i) {
  1216.   register mad_fixed_t left;
  1217.   left = xr[0][l + i];
  1218.   xr[0][l + i] = mad_f_mul(left, is_table[    is_pos]);
  1219.   xr[1][l + i] = mad_f_mul(left, is_table[6 - is_pos]);
  1220. }
  1221.       }
  1222.     }
  1223.   }
  1224.   /* middle/side stereo */
  1225.   if (header->mode_extension & MS_STEREO) {
  1226.     register mad_fixed_t invsqrt2;
  1227.     header->flags |= MAD_FLAG_MS_STEREO;
  1228.     invsqrt2 = root_table[3 + -2];
  1229.     for (sfbi = l = 0; l < 576; ++sfbi, l += n) {
  1230.       n = sfbwidth[sfbi];
  1231.       if (modes[sfbi] != MS_STEREO)
  1232. continue;
  1233.       for (i = 0; i < n; ++i) {
  1234. register mad_fixed_t m, s;
  1235. m = xr[0][l + i];
  1236. s = xr[1][l + i];
  1237. xr[0][l + i] = mad_f_mul(m + s, invsqrt2);  /* l = (m + s) / sqrt(2) */
  1238. xr[1][l + i] = mad_f_mul(m - s, invsqrt2);  /* r = (m - s) / sqrt(2) */
  1239.       }
  1240.     }
  1241.   }
  1242.   return MAD_ERROR_NONE;
  1243. }
  1244. /*
  1245.  * NAME: III_aliasreduce()
  1246.  * DESCRIPTION: perform frequency line alias reduction
  1247.  */
  1248. static
  1249. void III_aliasreduce(mad_fixed_t xr[576], int lines)
  1250. {
  1251.   mad_fixed_t const *bound;
  1252.   int i;
  1253.   bound = &xr[lines];
  1254.   for (xr += 18; xr < bound; xr += 18) {
  1255.     for (i = 0; i < 8; ++i) {
  1256.       register mad_fixed_t a, b;
  1257.       register mad_fixed64hi_t hi;
  1258.       register mad_fixed64lo_t lo;
  1259.       a = xr[-1 - i];
  1260.       b = xr[     i];
  1261. # if defined(ASO_ZEROCHECK)
  1262.       if (a | b) {
  1263. # endif
  1264. MAD_F_ML0(hi, lo,  a, cs[i]);
  1265. MAD_F_MLA(hi, lo, -b, ca[i]);
  1266. xr[-1 - i] = MAD_F_MLZ(hi, lo);
  1267. MAD_F_ML0(hi, lo,  b, cs[i]);
  1268. MAD_F_MLA(hi, lo,  a, ca[i]);
  1269. xr[     i] = MAD_F_MLZ(hi, lo);
  1270. # if defined(ASO_ZEROCHECK)
  1271.       }
  1272. # endif
  1273.     }
  1274.   }
  1275. }
  1276. # if defined(ASO_IMDCT)
  1277. void III_imdct_l(mad_fixed_t const [18], mad_fixed_t [36], unsigned int);
  1278. # else
  1279. /*
  1280.  * NAME: imdct36
  1281.  * DESCRIPTION: perform X[18]->x[36] IMDCT
  1282.  */
  1283. static inline
  1284. void imdct36(mad_fixed_t const X[18], mad_fixed_t x[36])
  1285. {
  1286.   mad_fixed_t t0, t1, t2,  t3,  t4,  t5,  t6,  t7;
  1287.   mad_fixed_t t8, t9, t10, t11, t12, t13, t14, t15;
  1288.   register mad_fixed64hi_t hi;
  1289.   register mad_fixed64lo_t lo;
  1290.   MAD_F_ML0(hi, lo, X[4],  MAD_F(0x0ec835e8));
  1291.   MAD_F_MLA(hi, lo, X[13], MAD_F(0x061f78aa));
  1292.   t6 = MAD_F_MLZ(hi, lo);
  1293.   MAD_F_MLA(hi, lo, (t14 = X[1] - X[10]), -MAD_F(0x061f78aa));
  1294.   MAD_F_MLA(hi, lo, (t15 = X[7] + X[16]), -MAD_F(0x0ec835e8));
  1295.   t0 = MAD_F_MLZ(hi, lo);
  1296.   MAD_F_MLA(hi, lo, (t8  = X[0] - X[11] - X[12]),  MAD_F(0x0216a2a2));
  1297.   MAD_F_MLA(hi, lo, (t9  = X[2] - X[9]  - X[14]),  MAD_F(0x09bd7ca0));
  1298.   MAD_F_MLA(hi, lo, (t10 = X[3] - X[8]  - X[15]), -MAD_F(0x0cb19346));
  1299.   MAD_F_MLA(hi, lo, (t11 = X[5] - X[6]  - X[17]), -MAD_F(0x0fdcf549));
  1300.   x[7]  = MAD_F_MLZ(hi, lo);
  1301.   x[10] = -x[7];
  1302.   MAD_F_ML0(hi, lo, t8,  -MAD_F(0x0cb19346));
  1303.   MAD_F_MLA(hi, lo, t9,   MAD_F(0x0fdcf549));
  1304.   MAD_F_MLA(hi, lo, t10,  MAD_F(0x0216a2a2));
  1305.   MAD_F_MLA(hi, lo, t11, -MAD_F(0x09bd7ca0));
  1306.   x[19] = x[34] = MAD_F_MLZ(hi, lo) - t0;
  1307.   t12 = X[0] - X[3] + X[8] - X[11] - X[12] + X[15];
  1308.   t13 = X[2] + X[5] - X[6] - X[9]  - X[14] - X[17];
  1309.   MAD_F_ML0(hi, lo, t12, -MAD_F(0x0ec835e8));
  1310.   MAD_F_MLA(hi, lo, t13,  MAD_F(0x061f78aa));
  1311.   x[22] = x[31] = MAD_F_MLZ(hi, lo) + t0;
  1312.   MAD_F_ML0(hi, lo, X[1],  -MAD_F(0x09bd7ca0));
  1313.   MAD_F_MLA(hi, lo, X[7],   MAD_F(0x0216a2a2));
  1314.   MAD_F_MLA(hi, lo, X[10], -MAD_F(0x0fdcf549));
  1315.   MAD_F_MLA(hi, lo, X[16],  MAD_F(0x0cb19346));
  1316.   t1 = MAD_F_MLZ(hi, lo) + t6;
  1317.   MAD_F_ML0(hi, lo, X[0],   MAD_F(0x03768962));
  1318.   MAD_F_MLA(hi, lo, X[2],   MAD_F(0x0e313245));
  1319.   MAD_F_MLA(hi, lo, X[3],  -MAD_F(0x0ffc19fd));
  1320.   MAD_F_MLA(hi, lo, X[5],  -MAD_F(0x0acf37ad));
  1321.   MAD_F_MLA(hi, lo, X[6],   MAD_F(0x04cfb0e2));
  1322.   MAD_F_MLA(hi, lo, X[8],  -MAD_F(0x0898c779));
  1323.   MAD_F_MLA(hi, lo, X[9],   MAD_F(0x0d7e8807));
  1324.   MAD_F_MLA(hi, lo, X[11],  MAD_F(0x0f426cb5));
  1325.   MAD_F_MLA(hi, lo, X[12], -MAD_F(0x0bcbe352));
  1326.   MAD_F_MLA(hi, lo, X[14],  MAD_F(0x00b2aa3e));
  1327.   MAD_F_MLA(hi, lo, X[15], -MAD_F(0x07635284));
  1328.   MAD_F_MLA(hi, lo, X[17], -MAD_F(0x0f9ee890));
  1329.   x[6]  = MAD_F_MLZ(hi, lo) + t1;
  1330.   x[11] = -x[6];
  1331.   MAD_F_ML0(hi, lo, X[0],  -MAD_F(0x0f426cb5));
  1332.   MAD_F_MLA(hi, lo, X[2],  -MAD_F(0x00b2aa3e));
  1333.   MAD_F_MLA(hi, lo, X[3],   MAD_F(0x0898c779));
  1334.   MAD_F_MLA(hi, lo, X[5],   MAD_F(0x0f9ee890));
  1335.   MAD_F_MLA(hi, lo, X[6],   MAD_F(0x0acf37ad));
  1336.   MAD_F_MLA(hi, lo, X[8],  -MAD_F(0x07635284));
  1337.   MAD_F_MLA(hi, lo, X[9],  -MAD_F(0x0e313245));
  1338.   MAD_F_MLA(hi, lo, X[11], -MAD_F(0x0bcbe352));
  1339.   MAD_F_MLA(hi, lo, X[12], -MAD_F(0x03768962));
  1340.   MAD_F_MLA(hi, lo, X[14],  MAD_F(0x0d7e8807));
  1341.   MAD_F_MLA(hi, lo, X[15],  MAD_F(0x0ffc19fd));
  1342.   MAD_F_MLA(hi, lo, X[17],  MAD_F(0x04cfb0e2));
  1343.   x[23] = x[30] = MAD_F_MLZ(hi, lo) + t1;
  1344.   MAD_F_ML0(hi, lo, X[0],  -MAD_F(0x0bcbe352));
  1345.   MAD_F_MLA(hi, lo, X[2],   MAD_F(0x0d7e8807));
  1346.   MAD_F_MLA(hi, lo, X[3],  -MAD_F(0x07635284));
  1347.   MAD_F_MLA(hi, lo, X[5],   MAD_F(0x04cfb0e2));
  1348.   MAD_F_MLA(hi, lo, X[6],   MAD_F(0x0f9ee890));
  1349.   MAD_F_MLA(hi, lo, X[8],  -MAD_F(0x0ffc19fd));
  1350.   MAD_F_MLA(hi, lo, X[9],  -MAD_F(0x00b2aa3e));
  1351.   MAD_F_MLA(hi, lo, X[11],  MAD_F(0x03768962));
  1352.   MAD_F_MLA(hi, lo, X[12], -MAD_F(0x0f426cb5));
  1353.   MAD_F_MLA(hi, lo, X[14],  MAD_F(0x0e313245));
  1354.   MAD_F_MLA(hi, lo, X[15],  MAD_F(0x0898c779));
  1355.   MAD_F_MLA(hi, lo, X[17], -MAD_F(0x0acf37ad));
  1356.   x[18] = x[35] = MAD_F_MLZ(hi, lo) - t1;
  1357.   MAD_F_ML0(hi, lo, X[4],   MAD_F(0x061f78aa));
  1358.   MAD_F_MLA(hi, lo, X[13], -MAD_F(0x0ec835e8));
  1359.   t7 = MAD_F_MLZ(hi, lo);
  1360.   MAD_F_MLA(hi, lo, X[1],  -MAD_F(0x0cb19346));
  1361.   MAD_F_MLA(hi, lo, X[7],   MAD_F(0x0fdcf549));
  1362.   MAD_F_MLA(hi, lo, X[10],  MAD_F(0x0216a2a2));
  1363.   MAD_F_MLA(hi, lo, X[16], -MAD_F(0x09bd7ca0));
  1364.   t2 = MAD_F_MLZ(hi, lo);
  1365.   MAD_F_MLA(hi, lo, X[0],   MAD_F(0x04cfb0e2));
  1366.   MAD_F_MLA(hi, lo, X[2],   MAD_F(0x0ffc19fd));
  1367.   MAD_F_MLA(hi, lo, X[3],  -MAD_F(0x0d7e8807));
  1368.   MAD_F_MLA(hi, lo, X[5],   MAD_F(0x03768962));
  1369.   MAD_F_MLA(hi, lo, X[6],  -MAD_F(0x0bcbe352));
  1370.   MAD_F_MLA(hi, lo, X[8],  -MAD_F(0x0e313245));
  1371.   MAD_F_MLA(hi, lo, X[9],   MAD_F(0x07635284));
  1372.   MAD_F_MLA(hi, lo, X[11], -MAD_F(0x0acf37ad));
  1373.   MAD_F_MLA(hi, lo, X[12],  MAD_F(0x0f9ee890));
  1374.   MAD_F_MLA(hi, lo, X[14],  MAD_F(0x0898c779));
  1375.   MAD_F_MLA(hi, lo, X[15],  MAD_F(0x00b2aa3e));
  1376.   MAD_F_MLA(hi, lo, X[17],  MAD_F(0x0f426cb5));
  1377.   x[5]  = MAD_F_MLZ(hi, lo);
  1378.   x[12] = -x[5];
  1379.   MAD_F_ML0(hi, lo, X[0],   MAD_F(0x0acf37ad));
  1380.   MAD_F_MLA(hi, lo, X[2],  -MAD_F(0x0898c779));
  1381.   MAD_F_MLA(hi, lo, X[3],   MAD_F(0x0e313245));
  1382.   MAD_F_MLA(hi, lo, X[5],  -MAD_F(0x0f426cb5));
  1383.   MAD_F_MLA(hi, lo, X[6],  -MAD_F(0x03768962));
  1384.   MAD_F_MLA(hi, lo, X[8],   MAD_F(0x00b2aa3e));
  1385.   MAD_F_MLA(hi, lo, X[9],  -MAD_F(0x0ffc19fd));
  1386.   MAD_F_MLA(hi, lo, X[11],  MAD_F(0x0f9ee890));
  1387.   MAD_F_MLA(hi, lo, X[12], -MAD_F(0x04cfb0e2));
  1388.   MAD_F_MLA(hi, lo, X[14],  MAD_F(0x07635284));
  1389.   MAD_F_MLA(hi, lo, X[15],  MAD_F(0x0d7e8807));
  1390.   MAD_F_MLA(hi, lo, X[17], -MAD_F(0x0bcbe352));
  1391.   x[0]  = MAD_F_MLZ(hi, lo) + t2;
  1392.   x[17] = -x[0];
  1393.   MAD_F_ML0(hi, lo, X[0],  -MAD_F(0x0f9ee890));
  1394.   MAD_F_MLA(hi, lo, X[2],  -MAD_F(0x07635284));
  1395.   MAD_F_MLA(hi, lo, X[3],  -MAD_F(0x00b2aa3e));
  1396.   MAD_F_MLA(hi, lo, X[5],   MAD_F(0x0bcbe352));
  1397.   MAD_F_MLA(hi, lo, X[6],   MAD_F(0x0f426cb5));
  1398.   MAD_F_MLA(hi, lo, X[8],   MAD_F(0x0d7e8807));
  1399.   MAD_F_MLA(hi, lo, X[9],   MAD_F(0x0898c779));
  1400.   MAD_F_MLA(hi, lo, X[11], -MAD_F(0x04cfb0e2));
  1401.   MAD_F_MLA(hi, lo, X[12], -MAD_F(0x0acf37ad));
  1402.   MAD_F_MLA(hi, lo, X[14], -MAD_F(0x0ffc19fd));
  1403.   MAD_F_MLA(hi, lo, X[15], -MAD_F(0x0e313245));
  1404.   MAD_F_MLA(hi, lo, X[17], -MAD_F(0x03768962));
  1405.   x[24] = x[29] = MAD_F_MLZ(hi, lo) + t2;
  1406.   MAD_F_ML0(hi, lo, X[1],  -MAD_F(0x0216a2a2));
  1407.   MAD_F_MLA(hi, lo, X[7],  -MAD_F(0x09bd7ca0));
  1408.   MAD_F_MLA(hi, lo, X[10],  MAD_F(0x0cb19346));
  1409.   MAD_F_MLA(hi, lo, X[16],  MAD_F(0x0fdcf549));
  1410.   t3 = MAD_F_MLZ(hi, lo) + t7;
  1411.   MAD_F_ML0(hi, lo, X[0],   MAD_F(0x00b2aa3e));
  1412.   MAD_F_MLA(hi, lo, X[2],   MAD_F(0x03768962));
  1413.   MAD_F_MLA(hi, lo, X[3],  -MAD_F(0x04cfb0e2));
  1414.   MAD_F_MLA(hi, lo, X[5],  -MAD_F(0x07635284));
  1415.   MAD_F_MLA(hi, lo, X[6],   MAD_F(0x0898c779));
  1416.   MAD_F_MLA(hi, lo, X[8],   MAD_F(0x0acf37ad));
  1417.   MAD_F_MLA(hi, lo, X[9],  -MAD_F(0x0bcbe352));
  1418.   MAD_F_MLA(hi, lo, X[11], -MAD_F(0x0d7e8807));
  1419.   MAD_F_MLA(hi, lo, X[12],  MAD_F(0x0e313245));
  1420.   MAD_F_MLA(hi, lo, X[14],  MAD_F(0x0f426cb5));
  1421.   MAD_F_MLA(hi, lo, X[15], -MAD_F(0x0f9ee890));
  1422.   MAD_F_MLA(hi, lo, X[17], -MAD_F(0x0ffc19fd));
  1423.   x[8] = MAD_F_MLZ(hi, lo) + t3;
  1424.   x[9] = -x[8];
  1425.   MAD_F_ML0(hi, lo, X[0],  -MAD_F(0x0e313245));
  1426.   MAD_F_MLA(hi, lo, X[2],   MAD_F(0x0bcbe352));
  1427.   MAD_F_MLA(hi, lo, X[3],   MAD_F(0x0f9ee890));
  1428.   MAD_F_MLA(hi, lo, X[5],  -MAD_F(0x0898c779));
  1429.   MAD_F_MLA(hi, lo, X[6],  -MAD_F(0x0ffc19fd));
  1430.   MAD_F_MLA(hi, lo, X[8],   MAD_F(0x04cfb0e2));
  1431.   MAD_F_MLA(hi, lo, X[9],   MAD_F(0x0f426cb5));
  1432.   MAD_F_MLA(hi, lo, X[11], -MAD_F(0x00b2aa3e));
  1433.   MAD_F_MLA(hi, lo, X[12], -MAD_F(0x0d7e8807));
  1434.   MAD_F_MLA(hi, lo, X[14], -MAD_F(0x03768962));
  1435.   MAD_F_MLA(hi, lo, X[15],  MAD_F(0x0acf37ad));
  1436.   MAD_F_MLA(hi, lo, X[17],  MAD_F(0x07635284));
  1437.   x[21] = x[32] = MAD_F_MLZ(hi, lo) + t3;
  1438.   MAD_F_ML0(hi, lo, X[0],  -MAD_F(0x0d7e8807));
  1439.   MAD_F_MLA(hi, lo, X[2],   MAD_F(0x0f426cb5));
  1440.   MAD_F_MLA(hi, lo, X[3],   MAD_F(0x0acf37ad));
  1441.   MAD_F_MLA(hi, lo, X[5],  -MAD_F(0x0ffc19fd));
  1442.   MAD_F_MLA(hi, lo, X[6],  -MAD_F(0x07635284));
  1443.   MAD_F_MLA(hi, lo, X[8],   MAD_F(0x0f9ee890));
  1444.   MAD_F_MLA(hi, lo, X[9],   MAD_F(0x03768962));
  1445.   MAD_F_MLA(hi, lo, X[11], -MAD_F(0x0e313245));
  1446.   MAD_F_MLA(hi, lo, X[12],  MAD_F(0x00b2aa3e));
  1447.   MAD_F_MLA(hi, lo, X[14],  MAD_F(0x0bcbe352));
  1448.   MAD_F_MLA(hi, lo, X[15], -MAD_F(0x04cfb0e2));
  1449.   MAD_F_MLA(hi, lo, X[17], -MAD_F(0x0898c779));
  1450.   x[20] = x[33] = MAD_F_MLZ(hi, lo) - t3;
  1451.   MAD_F_ML0(hi, lo, t14, -MAD_F(0x0ec835e8));
  1452.   MAD_F_MLA(hi, lo, t15,  MAD_F(0x061f78aa));
  1453.   t4 = MAD_F_MLZ(hi, lo) - t7;
  1454.   MAD_F_ML0(hi, lo, t12, MAD_F(0x061f78aa));
  1455.   MAD_F_MLA(hi, lo, t13, MAD_F(0x0ec835e8));
  1456.   x[4]  = MAD_F_MLZ(hi, lo) + t4;
  1457.   x[13] = -x[4];
  1458.   MAD_F_ML0(hi, lo, t8,   MAD_F(0x09bd7ca0));
  1459.   MAD_F_MLA(hi, lo, t9,  -MAD_F(0x0216a2a2));
  1460.   MAD_F_MLA(hi, lo, t10,  MAD_F(0x0fdcf549));
  1461.   MAD_F_MLA(hi, lo, t11, -MAD_F(0x0cb19346));
  1462.   x[1]  = MAD_F_MLZ(hi, lo) + t4;
  1463.   x[16] = -x[1];
  1464.   MAD_F_ML0(hi, lo, t8,  -MAD_F(0x0fdcf549));
  1465.   MAD_F_MLA(hi, lo, t9,  -MAD_F(0x0cb19346));
  1466.   MAD_F_MLA(hi, lo, t10, -MAD_F(0x09bd7ca0));
  1467.   MAD_F_MLA(hi, lo, t11, -MAD_F(0x0216a2a2));
  1468.   x[25] = x[28] = MAD_F_MLZ(hi, lo) + t4;
  1469.   MAD_F_ML0(hi, lo, X[1],  -MAD_F(0x0fdcf549));
  1470.   MAD_F_MLA(hi, lo, X[7],  -MAD_F(0x0cb19346));
  1471.   MAD_F_MLA(hi, lo, X[10], -MAD_F(0x09bd7ca0));
  1472.   MAD_F_MLA(hi, lo, X[16], -MAD_F(0x0216a2a2));
  1473.   t5 = MAD_F_MLZ(hi, lo) - t6;
  1474.   MAD_F_ML0(hi, lo, X[0],   MAD_F(0x0898c779));
  1475.   MAD_F_MLA(hi, lo, X[2],   MAD_F(0x04cfb0e2));
  1476.   MAD_F_MLA(hi, lo, X[3],   MAD_F(0x0bcbe352));
  1477.   MAD_F_MLA(hi, lo, X[5],   MAD_F(0x00b2aa3e));
  1478.   MAD_F_MLA(hi, lo, X[6],   MAD_F(0x0e313245));
  1479.   MAD_F_MLA(hi, lo, X[8],  -MAD_F(0x03768962));
  1480.   MAD_F_MLA(hi, lo, X[9],   MAD_F(0x0f9ee890));
  1481.   MAD_F_MLA(hi, lo, X[11], -MAD_F(0x07635284));
  1482.   MAD_F_MLA(hi, lo, X[12],  MAD_F(0x0ffc19fd));
  1483.   MAD_F_MLA(hi, lo, X[14], -MAD_F(0x0acf37ad));
  1484.   MAD_F_MLA(hi, lo, X[15],  MAD_F(0x0f426cb5));
  1485.   MAD_F_MLA(hi, lo, X[17], -MAD_F(0x0d7e8807));
  1486.   x[2]  = MAD_F_MLZ(hi, lo) + t5;
  1487.   x[15] = -x[2];
  1488.   MAD_F_ML0(hi, lo, X[0],   MAD_F(0x07635284));
  1489.   MAD_F_MLA(hi, lo, X[2],   MAD_F(0x0acf37ad));
  1490.   MAD_F_MLA(hi, lo, X[3],   MAD_F(0x03768962));
  1491.   MAD_F_MLA(hi, lo, X[5],   MAD_F(0x0d7e8807));
  1492.   MAD_F_MLA(hi, lo, X[6],  -MAD_F(0x00b2aa3e));
  1493.   MAD_F_MLA(hi, lo, X[8],   MAD_F(0x0f426cb5));
  1494.   MAD_F_MLA(hi, lo, X[9],  -MAD_F(0x04cfb0e2));
  1495.   MAD_F_MLA(hi, lo, X[11],  MAD_F(0x0ffc19fd));
  1496.   MAD_F_MLA(hi, lo, X[12], -MAD_F(0x0898c779));
  1497.   MAD_F_MLA(hi, lo, X[14],  MAD_F(0x0f9ee890));
  1498.   MAD_F_MLA(hi, lo, X[15], -MAD_F(0x0bcbe352));
  1499.   MAD_F_MLA(hi, lo, X[17],  MAD_F(0x0e313245));
  1500.   x[3]  = MAD_F_MLZ(hi, lo) + t5;
  1501.   x[14] = -x[3];
  1502.   MAD_F_ML0(hi, lo, X[0],  -MAD_F(0x0ffc19fd));
  1503.   MAD_F_MLA(hi, lo, X[2],  -MAD_F(0x0f9ee890));
  1504.   MAD_F_MLA(hi, lo, X[3],  -MAD_F(0x0f426cb5));
  1505.   MAD_F_MLA(hi, lo, X[5],  -MAD_F(0x0e313245));
  1506.   MAD_F_MLA(hi, lo, X[6],  -MAD_F(0x0d7e8807));
  1507.   MAD_F_MLA(hi, lo, X[8],  -MAD_F(0x0bcbe352));
  1508.   MAD_F_MLA(hi, lo, X[9],  -MAD_F(0x0acf37ad));
  1509.   MAD_F_MLA(hi, lo, X[11], -MAD_F(0x0898c779));
  1510.   MAD_F_MLA(hi, lo, X[12], -MAD_F(0x07635284));
  1511.   MAD_F_MLA(hi, lo, X[14], -MAD_F(0x04cfb0e2));
  1512.   MAD_F_MLA(hi, lo, X[15], -MAD_F(0x03768962));
  1513.   MAD_F_MLA(hi, lo, X[17], -MAD_F(0x00b2aa3e));
  1514.   x[26] = x[27] = MAD_F_MLZ(hi, lo) + t5;
  1515. }
  1516. /*
  1517.  * NAME: III_imdct_l()
  1518.  * DESCRIPTION: perform IMDCT and windowing for long blocks
  1519.  */
  1520. static
  1521. void III_imdct_l(mad_fixed_t const X[18], mad_fixed_t z[36],
  1522.  unsigned int block_type)
  1523. {
  1524.   unsigned int i;
  1525.   /* IMDCT */
  1526.   imdct36(X, z);
  1527.   /* windowing */
  1528.   switch (block_type) {
  1529.   case 0:  /* normal window */
  1530. # if defined(ASO_INTERLEAVE1)
  1531.     {
  1532.       register mad_fixed_t tmp1, tmp2;
  1533.       tmp1 = window_l[0];
  1534.       tmp2 = window_l[1];
  1535.       for (i = 0; i < 34; i += 2) {
  1536. z[i + 0] = mad_f_mul(z[i + 0], tmp1);
  1537. tmp1 = window_l[i + 2];
  1538. z[i + 1] = mad_f_mul(z[i + 1], tmp2);
  1539. tmp2 = window_l[i + 3];
  1540.       }
  1541.       z[34] = mad_f_mul(z[34], tmp1);
  1542.       z[35] = mad_f_mul(z[35], tmp2);
  1543.     }
  1544. # elif defined(ASO_INTERLEAVE2)
  1545.     {
  1546.       register mad_fixed_t tmp1, tmp2;
  1547.       tmp1 = z[0];
  1548.       tmp2 = window_l[0];
  1549.       for (i = 0; i < 35; ++i) {
  1550. z[i] = mad_f_mul(tmp1, tmp2);
  1551. tmp1 = z[i + 1];
  1552. tmp2 = window_l[i + 1];
  1553.       }
  1554.       z[35] = mad_f_mul(tmp1, tmp2);
  1555.     }
  1556. # elif 1
  1557.     for (i = 0; i < 36; i += 4) {
  1558.       z[i + 0] = mad_f_mul(z[i + 0], window_l[i + 0]);
  1559.       z[i + 1] = mad_f_mul(z[i + 1], window_l[i + 1]);
  1560.       z[i + 2] = mad_f_mul(z[i + 2], window_l[i + 2]);
  1561.       z[i + 3] = mad_f_mul(z[i + 3], window_l[i + 3]);
  1562.     }
  1563. # else
  1564.     for (i =  0; i < 36; ++i) z[i] = mad_f_mul(z[i], window_l[i]);
  1565. # endif
  1566.     break;
  1567.   case 1:  /* start block */
  1568.     for (i =  0; i < 18; ++i) z[i] = mad_f_mul(z[i], window_l[i]);
  1569.     /*  (i = 18; i < 24; ++i) z[i] unchanged */
  1570.     for (i = 24; i < 30; ++i) z[i] = mad_f_mul(z[i], window_s[i - 18]);
  1571.     for (i = 30; i < 36; ++i) z[i] = 0;
  1572.     break;
  1573.   case 3:  /* stop block */
  1574.     for (i =  0; i <  6; ++i) z[i] = 0;
  1575.     for (i =  6; i < 12; ++i) z[i] = mad_f_mul(z[i], window_s[i - 6]);
  1576.     /*  (i = 12; i < 18; ++i) z[i] unchanged */
  1577.     for (i = 18; i < 36; ++i) z[i] = mad_f_mul(z[i], window_l[i]);
  1578.     break;
  1579.   }
  1580. }
  1581. # endif  /* ASO_IMDCT */
  1582. /*
  1583.  * NAME: III_imdct_s()
  1584.  * DESCRIPTION: perform IMDCT and windowing for short blocks
  1585.  */
  1586. static
  1587. void III_imdct_s(mad_fixed_t const X[18], mad_fixed_t z[36])
  1588. {
  1589.   mad_fixed_t y[36], *yptr;
  1590.   mad_fixed_t const *wptr;
  1591.   int w, i;
  1592.   register mad_fixed64hi_t hi;
  1593.   register mad_fixed64lo_t lo;
  1594.   /* IMDCT */
  1595.   yptr = &y[0];
  1596.   for (w = 0; w < 3; ++w) {
  1597.     register mad_fixed_t const (*s)[6];
  1598.     s = imdct_s;
  1599.     for (i = 0; i < 3; ++i) {
  1600.       MAD_F_ML0(hi, lo, X[0], (*s)[0]);
  1601.       MAD_F_MLA(hi, lo, X[1], (*s)[1]);
  1602.       MAD_F_MLA(hi, lo, X[2], (*s)[2]);
  1603.       MAD_F_MLA(hi, lo, X[3], (*s)[3]);
  1604.       MAD_F_MLA(hi, lo, X[4], (*s)[4]);
  1605.       MAD_F_MLA(hi, lo, X[5], (*s)[5]);
  1606.       yptr[i + 0] = MAD_F_MLZ(hi, lo);
  1607.       yptr[5 - i] = -yptr[i + 0];
  1608.       ++s;
  1609.       MAD_F_ML0(hi, lo, X[0], (*s)[0]);
  1610.       MAD_F_MLA(hi, lo, X[1], (*s)[1]);
  1611.       MAD_F_MLA(hi, lo, X[2], (*s)[2]);
  1612.       MAD_F_MLA(hi, lo, X[3], (*s)[3]);
  1613.       MAD_F_MLA(hi, lo, X[4], (*s)[4]);
  1614.       MAD_F_MLA(hi, lo, X[5], (*s)[5]);
  1615.       yptr[ i + 6] = MAD_F_MLZ(hi, lo);
  1616.       yptr[11 - i] = yptr[i + 6];
  1617.       ++s;
  1618.     }
  1619.     yptr += 12;
  1620.     X    += 6;
  1621.   }
  1622.   /* windowing, overlapping and concatenation */
  1623.   yptr = &y[0];
  1624.   wptr = &window_s[0];
  1625.   for (i = 0; i < 6; ++i) {
  1626.     z[i +  0] = 0;
  1627.     z[i +  6] = mad_f_mul(yptr[ 0 + 0], wptr[0]);
  1628.     MAD_F_ML0(hi, lo, yptr[ 0 + 6], wptr[6]);
  1629.     MAD_F_MLA(hi, lo, yptr[12 + 0], wptr[0]);
  1630.     z[i + 12] = MAD_F_MLZ(hi, lo);
  1631.     MAD_F_ML0(hi, lo, yptr[12 + 6], wptr[6]);
  1632.     MAD_F_MLA(hi, lo, yptr[24 + 0], wptr[0]);
  1633.     z[i + 18] = MAD_F_MLZ(hi, lo);
  1634.     z[i + 24] = mad_f_mul(yptr[24 + 6], wptr[6]);
  1635.     z[i + 30] = 0;
  1636.     ++yptr;
  1637.     ++wptr;
  1638.   }
  1639. }
  1640. /*
  1641.  * NAME: III_overlap()
  1642.  * DESCRIPTION: perform overlap-add of windowed IMDCT outputs
  1643.  */
  1644. static
  1645. void III_overlap(mad_fixed_t const output[36], mad_fixed_t overlap[18],
  1646.  mad_fixed_t sample[18][32], unsigned int sb)
  1647. {
  1648.   unsigned int i;
  1649. # if defined(ASO_INTERLEAVE2)
  1650.   {
  1651.     register mad_fixed_t tmp1, tmp2;
  1652.     tmp1 = overlap[0];
  1653.     tmp2 = overlap[1];
  1654.     for (i = 0; i < 16; i += 2) {
  1655.       sample[i + 0][sb] = output[i + 0 +  0] + tmp1;
  1656.       overlap[i + 0]    = output[i + 0 + 18];
  1657.       tmp1 = overlap[i + 2];
  1658.       sample[i + 1][sb] = output[i + 1 +  0] + tmp2;
  1659.       overlap[i + 1]    = output[i + 1 + 18];
  1660.       tmp2 = overlap[i + 3];
  1661.     }
  1662.     sample[16][sb] = output[16 +  0] + tmp1;
  1663.     overlap[16]    = output[16 + 18];
  1664.     sample[17][sb] = output[17 +  0] + tmp2;
  1665.     overlap[17]    = output[17 + 18];
  1666.   }
  1667. # elif 0
  1668.   for (i = 0; i < 18; i += 2) {
  1669.     sample[i + 0][sb] = output[i + 0 +  0] + overlap[i + 0];
  1670.     overlap[i + 0]    = output[i + 0 + 18];
  1671.     sample[i + 1][sb] = output[i + 1 +  0] + overlap[i + 1];
  1672.     overlap[i + 1]    = output[i + 1 + 18];
  1673.   }
  1674. # else
  1675.   for (i = 0; i < 18; ++i) {
  1676.     sample[i][sb] = output[i +  0] + overlap[i];
  1677.     overlap[i]    = output[i + 18];
  1678.   }
  1679. # endif
  1680. }
  1681. /*
  1682.  * NAME: III_overlap_z()
  1683.  * DESCRIPTION: perform "overlap-add" of zero IMDCT outputs
  1684.  */
  1685. static inline
  1686. void III_overlap_z(mad_fixed_t overlap[18],
  1687.    mad_fixed_t sample[18][32], unsigned int sb)
  1688. {
  1689.   unsigned int i;
  1690. # if defined(ASO_INTERLEAVE2)
  1691.   {
  1692.     register mad_fixed_t tmp1, tmp2;
  1693.     tmp1 = overlap[0];
  1694.     tmp2 = overlap[1];
  1695.     for (i = 0; i < 16; i += 2) {
  1696.       sample[i + 0][sb] = tmp1;
  1697.       overlap[i + 0]    = 0;
  1698.       tmp1 = overlap[i + 2];
  1699.       sample[i + 1][sb] = tmp2;
  1700.       overlap[i + 1]    = 0;
  1701.       tmp2 = overlap[i + 3];
  1702.     }
  1703.     sample[16][sb] = tmp1;
  1704.     overlap[16]    = 0;
  1705.     sample[17][sb] = tmp2;
  1706.     overlap[17]    = 0;
  1707.   }
  1708. # else
  1709.   for (i = 0; i < 18; ++i) {
  1710.     sample[i][sb] = overlap[i];
  1711.     overlap[i]    = 0;
  1712.   }
  1713. # endif
  1714. }
  1715. /*
  1716.  * NAME: III_freqinver()
  1717.  * DESCRIPTION: perform subband frequency inversion for odd sample lines
  1718.  */
  1719. static
  1720. void III_freqinver(mad_fixed_t sample[18][32], unsigned int sb)
  1721. {
  1722.   unsigned int i;
  1723. # if 1 || defined(ASO_INTERLEAVE1) || defined(ASO_INTERLEAVE2)
  1724.   {
  1725.     register mad_fixed_t tmp1, tmp2;
  1726.     tmp1 = sample[1][sb];
  1727.     tmp2 = sample[3][sb];
  1728.     for (i = 1; i < 13; i += 4) {
  1729.       sample[i + 0][sb] = -tmp1;
  1730.       tmp1 = sample[i + 4][sb];
  1731.       sample[i + 2][sb] = -tmp2;
  1732.       tmp2 = sample[i + 6][sb];
  1733.     }
  1734.     sample[13][sb] = -tmp1;
  1735.     tmp1 = sample[17][sb];
  1736.     sample[15][sb] = -tmp2;
  1737.     sample[17][sb] = -tmp1;
  1738.   }
  1739. # else
  1740.   for (i = 1; i < 18; i += 2)
  1741.     sample[i][sb] = -sample[i][sb];
  1742. # endif
  1743. }
  1744. /*
  1745.  * NAME: III_decode()
  1746.  * DESCRIPTION: decode frame main_data
  1747.  */
  1748. static
  1749. enum mad_error III_decode(struct mad_bitptr *ptr, struct mad_frame *frame,
  1750.   struct sideinfo *si, unsigned int nch)
  1751. {
  1752.   struct mad_header *header = &frame->header;
  1753.   unsigned int sfreqi, ngr, gr;
  1754.   {
  1755.     unsigned int sfreq;
  1756.     sfreq = header->samplerate;
  1757.     if (header->flags & MAD_FLAG_MPEG_2_5_EXT)
  1758.       sfreq *= 2;
  1759.     /* 48000 => 0, 44100 => 1, 32000 => 2,
  1760.        24000 => 3, 22050 => 4, 16000 => 5 */
  1761.     sfreqi = ((sfreq >>  7) & 0x000f) +
  1762.              ((sfreq >> 15) & 0x0001) - 8;
  1763.     if (header->flags & MAD_FLAG_MPEG_2_5_EXT)
  1764.       sfreqi += 3;
  1765.   }
  1766.   /* scalefactors, Huffman decoding, requantization */
  1767.   ngr = (header->flags & MAD_FLAG_LSF_EXT) ? 1 : 2;
  1768.   for (gr = 0; gr < ngr; ++gr) {
  1769.     struct granule *granule = &si->gr[gr];
  1770.     unsigned char const *sfbwidth[2];
  1771.     mad_fixed_t xr[2][576];
  1772.     unsigned int ch;
  1773.     enum mad_error error;
  1774.     for (ch = 0; ch < nch; ++ch) {
  1775.       struct channel *channel = &granule->ch[ch];
  1776.       unsigned int part2_length;
  1777.       sfbwidth[ch] = sfbwidth_table[sfreqi].l;
  1778.       if (channel->block_type == 2) {
  1779. sfbwidth[ch] = (channel->flags & mixed_block_flag) ?
  1780.   sfbwidth_table[sfreqi].m : sfbwidth_table[sfreqi].s;
  1781.       }
  1782.       if (header->flags & MAD_FLAG_LSF_EXT) {
  1783. part2_length = III_scalefactors_lsf(ptr, channel,
  1784.     ch == 0 ? 0 : &si->gr[1].ch[1],
  1785.     header->mode_extension);
  1786.       }
  1787.       else {
  1788. part2_length = III_scalefactors(ptr, channel, &si->gr[0].ch[ch],
  1789. gr == 0 ? 0 : si->scfsi[ch]);
  1790.       }
  1791.       error = III_huffdecode(ptr, xr[ch], channel, sfbwidth[ch], part2_length);
  1792.       if (error)
  1793. return error;
  1794.     }
  1795.     /* joint stereo processing */
  1796.     if (header->mode == MAD_MODE_JOINT_STEREO && header->mode_extension) {
  1797.       error = III_stereo(xr, granule, header, sfbwidth[0]);
  1798.       if (error)
  1799. return error;
  1800.     }
  1801.     /* reordering, alias reduction, IMDCT, overlap-add, frequency inversion */
  1802.     for (ch = 0; ch < nch; ++ch) {
  1803.       struct channel const *channel = &granule->ch[ch];
  1804.       mad_fixed_t (*sample)[32] = &frame->sbsample[ch][18 * gr];
  1805.       unsigned int sb, l, i, sblimit;
  1806.       mad_fixed_t output[36];
  1807.       if (channel->block_type == 2) {
  1808. III_reorder(xr[ch], channel, sfbwidth[ch]);
  1809. # if !defined(OPT_STRICT)
  1810. /*
  1811.  * According to ISO/IEC 11172-3, "Alias reduction is not applied for
  1812.  * granules with block_type == 2 (short block)." However, other
  1813.  * sources suggest alias reduction should indeed be performed on the
  1814.  * lower two subbands of mixed blocks. Most other implementations do
  1815.  * this, so by default we will too.
  1816.  */
  1817. if (channel->flags & mixed_block_flag)
  1818.   III_aliasreduce(xr[ch], 36);
  1819. # endif
  1820.       }
  1821.       else
  1822. III_aliasreduce(xr[ch], 576);
  1823.       l = 0;
  1824.       /* subbands 0-1 */
  1825.       if (channel->block_type != 2 || (channel->flags & mixed_block_flag)) {
  1826. unsigned int block_type;
  1827. block_type = channel->block_type;
  1828. if (channel->flags & mixed_block_flag)
  1829.   block_type = 0;
  1830. /* long blocks */
  1831. for (sb = 0; sb < 2; ++sb, l += 18) {
  1832.   III_imdct_l(&xr[ch][l], output, block_type);
  1833.   III_overlap(output, (*frame->overlap)[ch][sb], sample, sb);
  1834. }
  1835.       }
  1836.       else {
  1837. /* short blocks */
  1838. for (sb = 0; sb < 2; ++sb, l += 18) {
  1839.   III_imdct_s(&xr[ch][l], output);
  1840.   III_overlap(output, (*frame->overlap)[ch][sb], sample, sb);
  1841. }
  1842.       }
  1843.       III_freqinver(sample, 1);
  1844.       /* (nonzero) subbands 2-31 */
  1845.       i = 576;
  1846.       while (i > 36 && xr[ch][i - 1] == 0)
  1847. --i;
  1848.       sblimit = 32 - (576 - i) / 18;
  1849.       if (channel->block_type != 2) {
  1850. /* long blocks */
  1851. for (sb = 2; sb < sblimit; ++sb, l += 18) {
  1852.   III_imdct_l(&xr[ch][l], output, channel->block_type);
  1853.   III_overlap(output, (*frame->overlap)[ch][sb], sample, sb);
  1854.   if (sb & 1)
  1855.     III_freqinver(sample, sb);
  1856. }
  1857.       }
  1858.       else {
  1859. /* short blocks */
  1860. for (sb = 2; sb < sblimit; ++sb, l += 18) {
  1861.   III_imdct_s(&xr[ch][l], output);
  1862.   III_overlap(output, (*frame->overlap)[ch][sb], sample, sb);
  1863.   if (sb & 1)
  1864.     III_freqinver(sample, sb);
  1865. }
  1866.       }
  1867.       /* remaining (zero) subbands */
  1868.       for (sb = sblimit; sb < 32; ++sb) {
  1869. III_overlap_z((*frame->overlap)[ch][sb], sample, sb);
  1870. if (sb & 1)
  1871.   III_freqinver(sample, sb);
  1872.       }
  1873.     }
  1874.   }
  1875.   return MAD_ERROR_NONE;
  1876. }
  1877. /*
  1878.  * NAME: layer->III()
  1879.  * DESCRIPTION: decode a single Layer III frame
  1880.  */
  1881. int mad_layer_III(struct mad_stream *stream, struct mad_frame *frame)
  1882. {
  1883.   struct mad_header *header = &frame->header;
  1884.   unsigned int nch, priv_bitlen, next_md_begin = 0;
  1885.   unsigned int si_len, data_bitlen, md_len;
  1886.   unsigned int frame_space, frame_used, frame_free;
  1887.   struct mad_bitptr ptr;
  1888.   struct sideinfo si;
  1889.   enum mad_error error;
  1890.   int result = 0;
  1891.   /* allocate Layer III dynamic structures */
  1892.   if (stream->main_data == 0) {
  1893.     stream->main_data = malloc(MAD_BUFFER_MDLEN);
  1894.     if (stream->main_data == 0) {
  1895.       stream->error = MAD_ERROR_NOMEM;
  1896.       return -1;
  1897.     }
  1898.   }
  1899.   if (frame->overlap == 0) {
  1900.     frame->overlap = calloc(2 * 32 * 18, sizeof(mad_fixed_t));
  1901.     if (frame->overlap == 0) {
  1902.       stream->error = MAD_ERROR_NOMEM;
  1903.       return -1;
  1904.     }
  1905.   }
  1906.   nch = MAD_NCHANNELS(header);
  1907.   si_len = (header->flags & MAD_FLAG_LSF_EXT) ?
  1908.     (nch == 1 ? 9 : 17) : (nch == 1 ? 17 : 32);
  1909.   /* check frame sanity */
  1910.   if (stream->next_frame - mad_bit_nextbyte(&stream->ptr) <
  1911.       (signed int) si_len) {
  1912.     stream->error = MAD_ERROR_BADFRAMELEN;
  1913.     stream->md_len = 0;
  1914.     return -1;
  1915.   }
  1916.   /* check CRC word */
  1917.   if (header->flags & MAD_FLAG_PROTECTION) {
  1918.     header->crc_check =
  1919.       mad_bit_crc(stream->ptr, si_len * CHAR_BIT, header->crc_check);
  1920.     if (header->crc_check != header->crc_target &&
  1921. !(frame->options & MAD_OPTION_IGNORECRC)) {
  1922.       stream->error = MAD_ERROR_BADCRC;
  1923.       result = -1;
  1924.     }
  1925.   }
  1926.   /* decode frame side information */
  1927.   error = III_sideinfo(&stream->ptr, nch, header->flags & MAD_FLAG_LSF_EXT,
  1928.        &si, &data_bitlen, &priv_bitlen);
  1929.   if (error && result == 0) {
  1930.     stream->error = error;
  1931.     result = -1;
  1932.   }
  1933.   header->flags        |= priv_bitlen;
  1934.   header->private_bits |= si.private_bits;
  1935.   /* find main_data of next frame */
  1936.   {
  1937.     struct mad_bitptr peek;
  1938.     unsigned long header;
  1939.     mad_bit_init(&peek, stream->next_frame);
  1940.     header = mad_bit_read(&peek, 32);
  1941.     if ((header & 0xffe60000L) /* syncword | layer */ == 0xffe20000L) {
  1942.       if (!(header & 0x00010000L))  /* protection_bit */
  1943. mad_bit_skip(&peek, 16);  /* crc_check */
  1944.       next_md_begin =
  1945. mad_bit_read(&peek, (header & 0x00080000L) /* ID */ ? 9 : 8);
  1946.     }
  1947.     mad_bit_finish(&peek);
  1948.   }
  1949.   /* find main_data of this frame */
  1950.   frame_space = stream->next_frame - mad_bit_nextbyte(&stream->ptr);
  1951.   if (next_md_begin > si.main_data_begin + frame_space)
  1952.     next_md_begin = 0;
  1953.   md_len = si.main_data_begin + frame_space - next_md_begin;
  1954.   frame_used = 0;
  1955.   if (si.main_data_begin == 0) {
  1956.     ptr = stream->ptr;
  1957.     stream->md_len = 0;
  1958.     frame_used = md_len;
  1959.   }
  1960.   else {
  1961.     if (si.main_data_begin > stream->md_len) {
  1962.       if (result == 0) {
  1963. stream->error = MAD_ERROR_BADDATAPTR;
  1964. result = -1;
  1965.       }
  1966.     }
  1967.     else {
  1968.       mad_bit_init(&ptr,
  1969.    *stream->main_data + stream->md_len - si.main_data_begin);
  1970.       if (md_len > si.main_data_begin) {
  1971. assert(stream->md_len + md_len -
  1972.        si.main_data_begin <= MAD_BUFFER_MDLEN);
  1973. memcpy(*stream->main_data + stream->md_len,
  1974.        mad_bit_nextbyte(&stream->ptr),
  1975.        frame_used = md_len - si.main_data_begin);
  1976. stream->md_len += frame_used;
  1977.       }
  1978.     }
  1979.   }
  1980.   frame_free = frame_space - frame_used;
  1981.   /* decode main_data */
  1982.   if (result == 0) {
  1983.     error = III_decode(&ptr, frame, &si, nch);
  1984.     if (error) {
  1985.       stream->error = error;
  1986.       result = -1;
  1987.     }
  1988.     /* designate ancillary bits */
  1989.     stream->anc_ptr    = ptr;
  1990.     stream->anc_bitlen = md_len * CHAR_BIT - data_bitlen;
  1991.   }
  1992. # if 0 && defined(DEBUG)
  1993.   fprintf(stderr,
  1994.   "main_data_begin:%u, md_len:%u, frame_free:%u, "
  1995.   "data_bitlen:%u, anc_bitlen: %un",
  1996.   si.main_data_begin, md_len, frame_free,
  1997.   data_bitlen, stream->anc_bitlen);
  1998. # endif
  1999.   /* preload main_data buffer with up to 511 bytes for next frame(s) */
  2000.   if (frame_free >= next_md_begin) {
  2001.     memcpy(*stream->main_data,
  2002.    stream->next_frame - next_md_begin, next_md_begin);
  2003.     stream->md_len = next_md_begin;
  2004.   }
  2005.   else {
  2006.     if (md_len < si.main_data_begin) {
  2007.       unsigned int extra;
  2008.       extra = si.main_data_begin - md_len;
  2009.       if (extra + frame_free > next_md_begin)
  2010. extra = next_md_begin - frame_free;
  2011.       if (extra < stream->md_len) {
  2012. memmove(*stream->main_data,
  2013. *stream->main_data + stream->md_len - extra, extra);
  2014. stream->md_len = extra;
  2015.       }
  2016.     }
  2017.     else
  2018.       stream->md_len = 0;
  2019.     memcpy(*stream->main_data + stream->md_len,
  2020.    stream->next_frame - frame_free, frame_free);
  2021.     stream->md_len += frame_free;
  2022.   }
  2023.   return result;
  2024. }