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

多媒体编程

开发平台:

Visual C++

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