shine.c
上传用户:kjfoods
上传日期:2020-07-06
资源大小:29949k
文件大小:98k
源码类别:

midi

开发平台:

Unix_Linux

  1. /***************************************************************************
  2.  *             __________               __   ___.
  3.  *   Open      ______    ____   ____ |  | __ |__   _______  ___
  4.  *   Source     |       _//  _ _/ ___|  |/ /| __  /  _   /  /
  5.  *   Jukebox    |    |   (  <_> )  ___|    < | _ (  <_> > <  <
  6.  *   Firmware   |____|_  /____/ ___  >__|_ |___  /____/__/_ 
  7.  *                     /            /     /    /            /
  8.  * $Id: fcc5b2645d194b0c10de6adf90ed7d9bd0ec4ae4 $
  9.  *
  10.  * Copyright (C) 2006 Antonius Hellmann
  11.  *
  12.  * This program is free software; you can redistribute it and/or
  13.  * modify it under the terms of the GNU General Public License
  14.  * as published by the Free Software Foundation; either version 2
  15.  * of the License, or (at your option) any later version.
  16.  *
  17.  * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
  18.  * KIND, either express or implied.
  19.  *
  20.  ****************************************************************************/
  21. //    Shine is an MP3 encoder
  22. //    Copyright (C) 1999-2000  Gabriel Bouvigne
  23. //
  24. //    This library is free software; you can redistribute it and/or
  25. //    modify it under the terms of the GNU Library General Public
  26. //    License as published by the Free Software Foundation; either
  27. //    version 2 of the License, or (at your option) any later version.
  28. //
  29. //    This library is distributed in the hope that it will be useful,
  30. //    but WITHOUT ANY WARRANTY; without even the implied warranty of
  31. //    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
  32. //    Library General Public License for more details.
  33. #define IBSS_ATTR
  34. #ifdef WORDS_BIGENDIAN
  35. #define ROCKBOX_BIG_ENDIAN
  36. #else
  37. #define ROCKBOX_LITTLE_ENDIAN
  38. #endif
  39. #include <stdbool.h>
  40. #include <stdlib.h>
  41. #include <inttypes.h>
  42. #include <string.h>
  43. #include <limits.h>
  44. #include <assert.h>
  45. #include "../wmafixed/bswap.h"
  46. #include "enc_base.h"
  47. #define ENC_PADDING_FRAMES1        2
  48. #define ENC_PADDING_FRAMES2        4
  49. #define ENC_DELAY_SAMP           576
  50. #define ENC_DELAY_SIZE          (ENC_DELAY_SAMP*4)
  51. #define SAMP_PER_FRAME1         1152
  52. #define SAMP_PER_FRAME2          576
  53. #define PCM_CHUNK_SIZE1         (SAMP_PER_FRAME1*4)
  54. #define PCM_CHUNK_SIZE2         (SAMP_PER_FRAME2*4)
  55. #define SAMPL2                576
  56. #define SBLIMIT                32
  57. #define HTN                    16
  58. #define putlong(c, s)  if(s+sz <= 32) { cc = (cc << s) | c;      sz+= s; } 
  59.                        else           { putbits(cc, sz); cc = c; sz = s; }
  60. typedef struct {
  61.     int   type; /* 0=(MPEG2 - 22.05,24,16kHz) 1=(MPEG1 - 44.1,48,32kHz) */
  62.     int   mode; /* 0=stereo, 1=jstereo, 2=dual, 3=mono  */
  63.     int   bitrate;
  64.     int   padding;
  65.     int   num_bands;
  66.     long  bitr_id;
  67.     int   smpl_id;
  68. } mpeg_t;
  69. /* Side information */
  70. typedef struct {
  71.     uint32_t part2_3_length;
  72.     int    count1;          /* number of 0-1-quadruples  */
  73.     uint32_t global_gain;
  74.     uint32_t table_select[4];
  75.     uint32_t region_0_1;
  76.     uint32_t address1;
  77.     uint32_t address2;
  78.     uint32_t address3;
  79.     long     quantStep;
  80.     long     additStep;
  81.     uint32_t max_val;
  82. } side_info_t;
  83. typedef struct {
  84.     side_info_t       cod_info[2][2];
  85.     mpeg_t            mpg;
  86.     long              frac_per_frame;
  87.     long              byte_per_frame;
  88.     long              slot_lag;
  89.     int               sideinfo_len;
  90.     int               mean_bits;
  91.     int               ResvSize;
  92.     int               channels;
  93.     int               granules;
  94.     long              samplerate;
  95. } config_t;
  96. typedef struct {
  97.     int       bitpos;   /* current bitpos for writing */
  98.     uint32_t  bbuf[263];
  99. } BF_Data;
  100. struct huffcodetab {
  101.   int            len;    /* max. index                  */
  102.   const uint8_t  *table; /* pointer to array[len][len]  */
  103.   const uint8_t  *hlen;  /* pointer to array[len][len]  */
  104. };
  105. struct huffcodebig {
  106.   int          len;     /* max. index                   */
  107.   int          linbits; /* number of linbits            */
  108.   int          linmax;  /* max number stored in linbits */
  109. };
  110. #define shft4(x)    ((x +     8) >>  4)
  111. #define shft9(x)    ((x +   256) >>  9)
  112. #define shft13(x)   ((x +  4096) >> 13)
  113. #define shft15(x)   ((x + 16384) >> 15)
  114. #define shft16(x)   ((x + 32768) >> 16)
  115. #define shft_n(x,n) ((x) >> n)
  116. #define SQRT        724 /* sqrt(2) * 512 */
  117. static short     mfbuf       [2*(1152+512)]      IBSS_ATTR; /*  3328 Bytes */
  118. static int       sb_data     [2][2][18][SBLIMIT] IBSS_ATTR; /* 13824 Bytes */
  119. static int       mdct_freq   [SAMPL2]            IBSS_ATTR; /*  2304 Bytes */
  120. static char      mdct_sign   [SAMPL2]            IBSS_ATTR; /*   576 Bytes */
  121. static short     enc_data    [SAMPL2]            IBSS_ATTR; /*  1152 Bytes */
  122. static uint32_t  scalefac    [23]                IBSS_ATTR; /*    92 Bytes */
  123. static BF_Data   CodedData                       IBSS_ATTR; /*  1056 Bytes */
  124. static int       ca          [8]                 IBSS_ATTR; /*    32 Bytes */
  125. static int       cs          [8]                 IBSS_ATTR; /*    32 Bytes */
  126. static int       cx          [9]                 IBSS_ATTR; /*    36 Bytes */
  127. static int       win         [18][4]             IBSS_ATTR; /*   288 Bytes */
  128. static short     enwindow    [15*27+24]          IBSS_ATTR; /*   862 Bytes */
  129. static short     int2idx     [4096]              IBSS_ATTR; /*  8192 Bytes */
  130. static uint8_t   ht_count    [2][2][16]          IBSS_ATTR; /*    64 Bytes */
  131. static uint32_t  tab01       [ 16]               IBSS_ATTR; /*    64 Bytes */
  132. static uint32_t  tab23       [  9]               IBSS_ATTR; /*    36 Bytes */
  133. static uint32_t  tab56       [ 16]               IBSS_ATTR; /*    64 Bytes */
  134. static uint32_t  tab1315     [256]               IBSS_ATTR; /*  1024 Bytes */
  135. static uint32_t  tab1624     [256]               IBSS_ATTR; /*  1024 Bytes */
  136. static uint32_t  tab789      [ 36]               IBSS_ATTR; /*   144 Bytes */
  137. static uint32_t  tabABC      [ 64]               IBSS_ATTR; /*   256 Bytes */
  138. static uint8_t   t1HB        [  4]               IBSS_ATTR;
  139. static uint8_t   t2HB        [  9]               IBSS_ATTR;
  140. static uint8_t   t3HB        [  9]               IBSS_ATTR;
  141. static uint8_t   t5HB        [ 16]               IBSS_ATTR;
  142. static uint8_t   t6HB        [ 16]               IBSS_ATTR;
  143. static uint8_t   t7HB        [ 36]               IBSS_ATTR;
  144. static uint8_t   t8HB        [ 36]               IBSS_ATTR;
  145. static uint8_t   t9HB        [ 36]               IBSS_ATTR;
  146. static uint8_t   t10HB       [ 64]               IBSS_ATTR;
  147. static uint8_t   t11HB       [ 64]               IBSS_ATTR;
  148. static uint8_t   t12HB       [ 64]               IBSS_ATTR;
  149. static uint8_t   t13HB       [256]               IBSS_ATTR;
  150. static uint8_t   t15HB       [256]               IBSS_ATTR;
  151. static uint16_t  t16HB       [256]               IBSS_ATTR;
  152. static uint16_t  t24HB       [256]               IBSS_ATTR;
  153. static uint8_t   t1l         [  8]               IBSS_ATTR;
  154. static uint8_t   t2l         [  9]               IBSS_ATTR;
  155. static uint8_t   t3l         [  9]               IBSS_ATTR;
  156. static uint8_t   t5l         [ 16]               IBSS_ATTR;
  157. static uint8_t   t6l         [ 16]               IBSS_ATTR;
  158. static uint8_t   t7l         [ 36]               IBSS_ATTR;
  159. static uint8_t   t8l         [ 36]               IBSS_ATTR;
  160. static uint8_t   t9l         [ 36]               IBSS_ATTR;
  161. static uint8_t   t10l        [ 64]               IBSS_ATTR;
  162. static uint8_t   t11l        [ 64]               IBSS_ATTR;
  163. static uint8_t   t12l        [ 64]               IBSS_ATTR;
  164. static uint8_t   t13l        [256]               IBSS_ATTR;
  165. static uint8_t   t15l        [256]               IBSS_ATTR;
  166. static uint8_t   t16l        [256]               IBSS_ATTR;
  167. static uint8_t   t24l        [256]               IBSS_ATTR;
  168. static struct huffcodetab ht [HTN]               IBSS_ATTR;
  169. static unsigned pcm_chunk_size                   IBSS_ATTR;
  170. static unsigned samp_per_frame                   IBSS_ATTR;
  171. static config_t          cfg                     IBSS_ATTR;
  172. //static char             *res_buffer;
  173. static int32_t           err                     IBSS_ATTR;
  174. static uint8_t           band_scale_f[22];
  175. static const uint8_t ht_count_const[2][2][16] =
  176. { { { 1,  5,  4,  5,  6,  5, 4, 4, 7, 3, 6, 0, 7, 2, 3, 1 },     /* table0 */
  177.     { 1,  5,  5,  7,  5,  8, 7, 9, 5, 7, 7, 9, 7, 9, 9,10 } },   /* hleng0 */
  178.   { {15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0 },     /* table1 */
  179.     { 4,  5,  5,  6,  5,  6, 6, 7, 5, 6, 6, 7, 6, 7, 7, 8 } } }; /* hleng1 */
  180. static const uint8_t  t1HB_const[4]  = {1,1,1,0};
  181. static const uint8_t  t2HB_const[9]  = {1,2,1,3,1,1,3,2,0};
  182. static const uint8_t  t3HB_const[9]  = {3,2,1,1,1,1,3,2,0};
  183. static const uint8_t  t5HB_const[16] = {1,2,6,5,3,1,4,4,7,5,7,1,6,1,1,0};
  184. static const uint8_t  t6HB_const[16] = {7,3,5,1,6,2,3,2,5,4,4,1,3,3,2,0};
  185. static const uint8_t  t7HB_const[36] =
  186. {  1, 2,10,19,16,10, 3, 3, 7,10, 5, 3,11, 4,13,17, 8, 4,
  187.   12,11,18,15,11, 2, 7, 6, 9,14, 3, 1, 6, 4, 5, 3, 2, 0 };
  188. static const uint8_t  t8HB_const[36] =
  189. {  3, 4, 6,18,12, 5, 5, 1, 2,16, 9, 3, 7, 3, 5,14, 7, 3,
  190.   19,17,15,13,10, 4,13, 5, 8,11, 5, 1,12, 4, 4, 1, 1, 0 };
  191. static const uint8_t  t9HB_const[36] =
  192. {  7, 5, 9,14,15, 7, 6, 4, 5, 5, 6, 7, 7, 6, 8, 8, 8, 5,
  193.   15, 6, 9,10, 5, 1,11, 7, 9, 6, 4, 1,14, 4, 6, 2, 6, 0 };
  194. static const uint8_t t10HB_const[64] =
  195. {1,2,10,23,35,30,12,17,3,3,8,12,18,21,12,7,11,9,15,21,32,
  196.  40,19,6,14,13,22,34,46,23,18,7,20,19,33,47,27,22,9,3,31,22,
  197.  41,26,21,20,5,3,14,13,10,11,16,6,5,1,9,8,7,8,4,4,2,0 };
  198. static const uint8_t t11HB_const[64] =
  199. {3,4,10,24,34,33,21,15,5,3,4,10,32,17,11,10,11,7,13,18,30,
  200.  31,20,5,25,11,19,59,27,18,12,5,35,33,31,58,30,16,7,5,28,26,
  201.  32,19,17,15,8,14,14,12,9,13,14,9,4,1,11,4,6,6,6,3,2,0 };
  202. static const uint8_t t12HB_const[64] =
  203. {9,6,16,33,41,39,38,26,7,5,6,9,23,16,26,11,17,7,11,14,21,
  204. 30,10,7,17,10,15,12,18,28,14,5,32,13,22,19,18,16,9,5,40,17,
  205. 31,29,17,13,4,2,27,12,11,15,10,7,4,1,27,12,8,12,6,3,1,0 };
  206. static const uint8_t t13HB_const[256] =
  207. {1,5,14,21,34,51,46,71,42,52,68,52,67,44,43,19,3,4,12,19,31,26,44,33,31,24,32,
  208.  24,31,35,22,14,15,13,23,36,59,49,77,65,29,40,30,40,27,33,42,16,22,20,37,61,56,
  209.  79,73,64,43,76,56,37,26,31,25,14,35,16,60,57,97,75,114,91,54,73,55,41,48,53,
  210.  23,24,58,27,50,96,76,70,93,84,77,58,79,29,74,49,41,17,47,45,78,74,115,94,90,
  211.  79,69,83,71,50,59,38,36,15,72,34,56,95,92,85,91,90,86,73,77,65,51,44,43,42,43,
  212.  20,30,44,55,78,72,87,78,61,46,54,37,30,20,16,53,25,41,37,44,59,54,81,66,76,57,
  213.  54,37,18,39,11,35,33,31,57,42,82,72,80,47,58,55,21,22,26,38,22,53,25,23,38,70,
  214.  60,51,36,55,26,34,23,27,14,9,7,34,32,28,39,49,75,30,52,48,40,52,28,18,17,9,5,
  215.  45,21,34,64,56,50,49,45,31,19,12,15,10,7,6,3,48,23,20,39,36,35,53,21,16,23,13,
  216.  10,6,1,4,2,16,15,17,27,25,20,29,11,17,12,16,8,1,1,0,1 };
  217. static const uint8_t t15HB_const[256] =
  218. {7,12,18,53,47,76,124,108,89,123,108,119,107,81,122,63,13,5,16,27,46,36,61,51,
  219.  42,70,52,83,65,41,59,36,19,17,15,24,41,34,59,48,40,64,50,78,62,80,56,33,29,28,
  220.  25,43,39,63,55,93,76,59,93,72,54,75,50,29,52,22,42,40,67,57,95,79,72,57,89,69,
  221.  49,66,46,27,77,37,35,66,58,52,91,74,62,48,79,63,90,62,40,38,125,32,60,56,50,
  222.  92,78,65,55,87,71,51,73,51,70,30,109,53,49,94,88,75,66,122,91,73,56,42,64,44,
  223.  21,25,90,43,41,77,73,63,56,92,77,66,47,67,48,53,36,20,71,34,67,60,58,49,88,76,
  224.  67,106,71,54,38,39,23,15,109,53,51,47,90,82,58,57,48,72,57,41,23,27,62,9,86,
  225.  42,40,37,70,64,52,43,70,55,42,25,29,18,11,11,118,68,30,55,50,46,74,65,49,39,
  226.  24,16,22,13,14,7,91,44,39,38,34,63,52,45,31,52,28,19,14,8,9,3,123,60,58,53,47,
  227.  43,32,22,37,24,17,12,15,10,2,1,71,37,34,30,28,20,17,26,21,16,10,6,8,6,2,0};
  228. static const uint16_t t16HB_const[256] =
  229. {1,5,14,44,74,63,110,93,172,149,138,242,225,195,376,17,3,4,12,20,35,62,53,47,
  230.  83,75,68,119,201,107,207,9,15,13,23,38,67,58,103,90,161,72,127,117,110,209,
  231.  206,16,45,21,39,69,64,114,99,87,158,140,252,212,199,387,365,26,75,36,68,65,
  232.  115,101,179,164,155,264,246,226,395,382,362,9,66,30,59,56,102,185,173,265,142,
  233.  253,232,400,388,378,445,16,111,54,52,100,184,178,160,133,257,244,228,217,385,
  234.  366,715,10,98,48,91,88,165,157,148,261,248,407,397,372,380,889,884,8,85,84,81,
  235.  159,156,143,260,249,427,401,392,383,727,713,708,7,154,76,73,141,131,256,245,
  236.  426,406,394,384,735,359,710,352,11,139,129,67,125,247,233,229,219,393,743,737,
  237.  720,885,882,439,4,243,120,118,115,227,223,396,746,742,736,721,712,706,223,436,
  238.  6,202,224,222,218,216,389,386,381,364,888,443,707,440,437,1728,4,747,211,210,
  239.  208,370,379,734,723,714,1735,883,877,876,3459,865,2,377,369,102,187,726,722,
  240.  358,711,709,866,1734,871,3458,870,434,0,12,10,7,11,10,17,11,9,13,12,10,7,5,3,
  241.  1,3};
  242. static const uint16_t t24HB_const[256] =
  243. {15,13,46,80,146,262,248,434,426,669,653,649,621,517,1032,88,14,12,21,38,71,
  244.  130,122,216,209,198,327,345,319,297,279,42,47,22,41,74,68,128,120,221,207,194,
  245.  182,340,315,295,541,18,81,39,75,70,134,125,116,220,204,190,178,325,311,293,
  246.  271,16,147,72,69,135,127,118,112,210,200,188,352,323,306,285,540,14,263,66,
  247.  129,126,119,114,214,202,192,180,341,317,301,281,262,12,249,123,121,117,113,
  248.  215,206,195,185,347,330,308,291,272,520,10,435,115,111,109,211,203,196,187,
  249.  353,332,313,298,283,531,381,17,427,212,208,205,201,193,186,177,169,320,303,
  250.  286,268,514,377,16,335,199,197,191,189,181,174,333,321,305,289,275,521,379,
  251.  371,11,668,184,183,179,175,344,331,314,304,290,277,530,383,373,366,10,652,346,
  252.  171,168,164,318,309,299,287,276,263,513,375,368,362,6,648,322,316,312,307,302,
  253.  292,284,269,261,512,376,370,364,359,4,620,300,296,294,288,282,273,266,515,380,
  254.  374,369,365,361,357,2,1033,280,278,274,267,264,259,382,378,372,367,363,360,
  255.  358,356,0,43,20,19,17,15,13,11,9,7,6,4,7,5,3,1,3};
  256. static const uint32_t tab1315_const[256] =
  257. { 0x010003,0x050005,0x070006,0x080008,0x090008,0x0a0009,0x0a000a,0x0b000a,
  258.   0x0a000a,0x0b000b,0x0c000b,0x0c000c,0x0d000c,0x0d000c,0x0e000d,0x0e000e,
  259.   0x040005,0x060005,0x080007,0x090008,0x0a0009,0x0a0009,0x0b000a,0x0b000a,
  260.   0x0b000a,0x0b000b,0x0c000b,0x0c000c,0x0d000c,0x0e000c,0x0e000d,0x0e000d,
  261.   0x070006,0x080007,0x090007,0x0a0008,0x0b0009,0x0b0009,0x0c000a,0x0c000a,
  262.   0x0b000a,0x0c000b,0x0c000b,0x0d000c,0x0d000c,0x0e000d,0x0f000d,0x0f000d,
  263.   0x080007,0x090008,0x0a0008,0x0b0009,0x0b0009,0x0c000a,0x0c000a,0x0c000b,
  264.   0x0c000b,0x0d000b,0x0d000c,0x0d000c,0x0d000c,0x0e000d,0x0f000d,0x0f000d,
  265.   0x090008,0x090008,0x0b0009,0x0b0009,0x0c000a,0x0c000a,0x0d000b,0x0d000b,
  266.   0x0c000b,0x0d000b,0x0d000c,0x0e000c,0x0e000c,0x0f000d,0x0f000d,0x10000d,
  267.   0x0a0009,0x0a0009,0x0b0009,0x0c000a,0x0c000a,0x0c000a,0x0d000b,0x0d000b,
  268.   0x0d000b,0x0d000b,0x0e000c,0x0d000c,0x0f000d,0x0f000d,0x10000d,0x10000e,
  269.   0x0a000a,0x0b0009,0x0c000a,0x0c000a,0x0d000a,0x0d000b,0x0d000b,0x0d000b,
  270.   0x0d000b,0x0e000c,0x0e000c,0x0e000c,0x0f000d,0x0f000d,0x10000e,0x10000e,
  271.   0x0b000a,0x0b000a,0x0c000a,0x0d000b,0x0d000b,0x0d000b,0x0e000b,0x0e000c,
  272.   0x0e000c,0x0e000c,0x0f000c,0x0f000c,0x0f000d,0x10000d,0x12000d,0x12000e,
  273.   0x0a000a,0x0a000a,0x0b000a,0x0c000b,0x0c000b,0x0d000b,0x0d000b,0x0e000c,
  274.   0x0e000c,0x0e000c,0x0e000c,0x0f000d,0x0f000d,0x10000e,0x11000e,0x11000e,
  275.   0x0b000a,0x0b000a,0x0c000b,0x0c000b,0x0d000b,0x0d000b,0x0d000c,0x0f000c,
  276.   0x0e000c,0x0f000d,0x0f000d,0x10000d,0x10000d,0x10000e,0x12000e,0x11000e,
  277.   0x0b000b,0x0c000b,0x0c000b,0x0d000b,0x0d000c,0x0e000c,0x0e000c,0x0f000c,
  278.   0x0e000c,0x0f000d,0x10000d,0x0f000d,0x10000d,0x11000e,0x12000f,0x13000e,
  279.   0x0c000b,0x0c000b,0x0c000b,0x0d000b,0x0e000c,0x0e000c,0x0e000c,0x0e000c,
  280.   0x0f000d,0x0f000d,0x0f000d,0x10000d,0x11000e,0x11000e,0x11000e,0x12000f,
  281.   0x0c000c,0x0d000c,0x0d000b,0x0e000c,0x0e000c,0x0f000c,0x0e000d,0x0f000d,
  282.   0x10000d,0x10000d,0x11000d,0x11000d,0x11000e,0x12000e,0x12000f,0x12000f,
  283.   0x0d000c,0x0d000c,0x0e000c,0x0f000c,0x0f000c,0x0f000d,0x10000d,0x10000d,
  284.   0x10000d,0x10000e,0x10000e,0x11000e,0x12000e,0x11000e,0x12000f,0x12000f,
  285.   0x0e000d,0x0e000d,0x0e000d,0x0f000d,0x0f000d,0x0f000d,0x11000d,0x10000d,
  286.   0x10000e,0x13000e,0x11000e,0x11000e,0x11000f,0x13000f,0x12000e,0x12000f,
  287.   0x0d000d,0x0e000d,0x0f000d,0x10000d,0x10000d,0x10000d,0x11000d,0x10000e,
  288.   0x11000e,0x11000e,0x12000e,0x12000e,0x15000f,0x14000f,0x15000f,0x12000f };
  289. static const uint32_t tab01_const[16] =
  290. { 0x10004,0x50005,0x50005,0x70006,0x50005,0x80006,0x70006,0x90007,
  291.   0x50005,0x70006,0x70006,0x90007,0x70006,0x90007,0x90007,0xa0008 };
  292. static const uint32_t tab23_const[ 9] =
  293. { 0x10002,0x40003,0x70007,0x40004,0x50004,0x70007,0x60006,0x70007,0x80008 };
  294. static const uint32_t tab56_const[16] =
  295. { 0x10003,0x40004,0x70006,0x80008,0x40004,0x50004,0x80006,0x90007,
  296.   0x70005,0x80006,0x90007,0xa0008,0x80007,0x80007,0x90008,0xa0009 };
  297. static const uint32_t tab789_const[36] =
  298. {0x00100803,0x00401004,0x00701c06,0x00902407,0x00902409,0x00a0280a,0x00401004,
  299.  0x00601005,0x00801806,0x00902807,0x00902808,0x00a0280a,0x00701c05,0x00701806,
  300.  0x00902007,0x00a02808,0x00a02809,0x00b02c0a,0x00802407,0x00902807,0x00a02808,
  301.  0x00b02c09,0x00b02c09,0x00b0300a,0x00802408,0x00902408,0x00a02809,0x00b02c09,
  302.  0x00b0300a,0x00c0300b,0x00902809,0x00a02809,0x00b02c0a,0x00c02c0a,0x00c0340b,
  303.  0x00c0340b};
  304. static const uint32_t tabABC_const[64] =
  305. {0x00100804,0x00401004,0x00701806,0x00902008,0x00a02409,0x00a0280a,0x00a0240a,
  306.  0x00b0280a,0x00401004,0x00601405,0x00801806,0x00902007,0x00a02809,0x00b02809,
  307.  0x00a0240a,0x00a0280a,0x00701806,0x00801c06,0x00902007,0x00a02408,0x00b02809,
  308.  0x00c02c0a,0x00b02809,0x00b0280a,0x00802007,0x00902007,0x00a02408,0x00b02c08,
  309.  0x00c02809,0x00c0300a,0x00b0280a,0x00c02c0a,0x00902408,0x00a02808,0x00b02809,
  310.  0x00c02c09,0x00c02c0a,0x00c0300a,0x00c02c0a,0x00c0300b,0x00a02409,0x00b02809,
  311.  0x00c02c0a,0x00c0300a,0x00d0300a,0x00d0340b,0x00c0300a,0x00d0340b,0x00902409,
  312.  0x00a02409,0x00b02409,0x00c0280a,0x00c02c0a,0x00c0300b,0x00d0300b,0x00d0300c,
  313.  0x00a0240a,0x00a0240a,0x00b0280a,0x00c02c0b,0x00c0300b,0x00d0300b,0x00d0300b,
  314.  0x00d0300c};
  315. static const uint32_t tab1624_const[256] =
  316. {0x00010004,0x00050005,0x00070007,0x00090008,0x000a0009,0x000a000a,0x000b000a,
  317.  0x000b000b,0x000c000b,0x000c000c,0x000c000c,0x000d000c,0x000d000c,0x000d000c,
  318.  0x000e000d,0x000a000a,0x00040005,0x00060006,0x00080007,0x00090008,0x000a0009,
  319.  0x000b000a,0x000b000a,0x000b000b,0x000c000b,0x000c000b,0x000c000c,0x000d000c,
  320.  0x000e000c,0x000d000c,0x000e000c,0x000a000a,0x00070007,0x00080007,0x00090008,
  321.  0x000a0009,0x000b0009,0x000b000a,0x000c000a,0x000c000b,0x000d000b,0x000c000b,
  322.  0x000d000b,0x000d000c,0x000d000c,0x000e000c,0x000e000d,0x000b0009,0x00090008,
  323.  0x00090008,0x000a0009,0x000b0009,0x000b000a,0x000c000a,0x000c000a,0x000c000b,
  324.  0x000d000b,0x000d000b,0x000e000b,0x000e000c,0x000e000c,0x000f000c,0x000f000c,
  325.  0x000c0009,0x000a0009,0x000a0009,0x000b0009,0x000b000a,0x000c000a,0x000c000a,
  326.  0x000d000a,0x000d000b,0x000d000b,0x000e000b,0x000e000c,0x000e000c,0x000f000c,
  327.  0x000f000c,0x000f000d,0x000b0009,0x000a000a,0x000a0009,0x000b000a,0x000b000a,
  328.  0x000c000a,0x000d000a,0x000d000b,0x000e000b,0x000d000b,0x000e000b,0x000e000c,
  329.  0x000f000c,0x000f000c,0x000f000c,0x0010000c,0x000c0009,0x000b000a,0x000b000a,
  330.  0x000b000a,0x000c000a,0x000d000a,0x000d000b,0x000d000b,0x000d000b,0x000e000b,
  331.  0x000e000c,0x000e000c,0x000e000c,0x000f000c,0x000f000c,0x0010000d,0x000c0009,
  332.  0x000b000b,0x000b000a,0x000c000a,0x000c000a,0x000d000b,0x000d000b,0x000d000b,
  333.  0x000e000b,0x000e000c,0x000f000c,0x000f000c,0x000f000c,0x000f000c,0x0011000d,
  334.  0x0011000d,0x000c000a,0x000b000b,0x000c000b,0x000c000b,0x000d000b,0x000d000b,
  335.  0x000d000b,0x000e000b,0x000e000b,0x000f000b,0x000f000c,0x000f000c,0x000f000c,
  336.  0x0010000c,0x0010000d,0x0010000d,0x000c000a,0x000c000b,0x000c000b,0x000c000b,
  337.  0x000d000b,0x000d000b,0x000e000b,0x000e000b,0x000f000c,0x000f000c,0x000f000c,
  338.  0x000f000c,0x0010000c,0x000f000d,0x0010000d,0x000f000d,0x000d000a,0x000c000c,
  339.  0x000d000b,0x000c000b,0x000d000b,0x000e000b,0x000e000c,0x000e000c,0x000e000c,
  340.  0x000f000c,0x0010000c,0x0010000c,0x0010000d,0x0011000d,0x0011000d,0x0010000d,
  341.  0x000c000a,0x000d000c,0x000d000c,0x000d000b,0x000d000b,0x000e000b,0x000e000c,
  342.  0x000f000c,0x0010000c,0x0010000c,0x0010000c,0x0010000c,0x0010000d,0x0010000d,
  343.  0x000f000d,0x0010000d,0x000d000a,0x000d000c,0x000e000c,0x000e000c,0x000e000c,
  344.  0x000e000c,0x000f000c,0x000f000c,0x000f000c,0x000f000c,0x0011000c,0x0010000d,
  345.  0x0010000d,0x0010000d,0x0010000d,0x0012000d,0x000d000a,0x000f000c,0x000e000c,
  346.  0x000e000c,0x000e000c,0x000f000c,0x000f000c,0x0010000c,0x0010000c,0x0010000d,
  347.  0x0012000d,0x0011000d,0x0011000d,0x0011000d,0x0013000d,0x0011000d,0x000d000a,
  348.  0x000e000d,0x000f000c,0x000d000c,0x000e000c,0x0010000c,0x0010000c,0x000f000c,
  349.  0x0010000d,0x0010000d,0x0011000d,0x0012000d,0x0011000d,0x0013000d,0x0011000d,
  350.  0x0010000d,0x000d000a,0x000a0009,0x000a0009,0x000a0009,0x000b0009,0x000b0009,
  351.  0x000c0009,0x000c0009,0x000c0009,0x000d0009,0x000d0009,0x000d0009,0x000d000a,
  352.  0x000d000a,0x000d000a,0x000d000a,0x000a0006};
  353. static const uint8_t t1l_const[8]  = {1,3,2,3,1,4,3,5};
  354. static const uint8_t t2l_const[9]  = {1,3,6,3,3,5,5,5,6};
  355. static const uint8_t t3l_const[9]  = {2,2,6,3,2,5,5,5,6};
  356. static const uint8_t t5l_const[16] = {1,3,6,7,3,3,6,7,6,6,7,8,7,6,7,8};
  357. static const uint8_t t6l_const[16] = {3,3,5,7,3,2,4,5,4,4,5,6,6,5,6,7};
  358. static const uint8_t t7l_const[36] =
  359. {1,3,6,8,8,9,3,4,6,7,7,8,6,5,7,8,8,9,7,7,8,9,9,9,7,7,8,9,9,10,8,8,9,10,10,10};
  360. static const uint8_t t8l_const[36] =
  361. {2,3,6,8,8,9,3,2,4,8,8,8,6,4,6,8,8,9,8,8,8,9,9,10,8,7,8,9,10,10,9,8,9,9,11,11};
  362. static const uint8_t t9l_const[36] =
  363. {3,3,5,6,8,9,3,3,4,5,6,8,4,4,5,6,7,8,6,5,6,7,7,8,7,6,7,7,8,9,8,7,8,8,9,9};
  364. static const uint8_t t10l_const[64] =
  365. {1,3,6,8,9,9,9,10,3,4,6,7,8,9,8,8,6,6,7,8,9,10,9,9,7,7,8,9,10,10,9,10,8,8,9,10,
  366.  10,10,10,10,9,9,10,10,11,11,10,11,8,8,9,10,10,10,11,11,9,8,9,10,10,11,11,11};
  367. static const uint8_t t11l_const[64] =
  368. {2,3,5,7,8,9,8,9,3,3,4,6,8,8,7,8,5,5,6,7,8,9,8,8,7,6,7,9,8,10,8,9,8,8,8,9,9,10,
  369.  9,10,8,8,9,10,10,11,10,11,8,7,7,8,9,10,10,10,8,7,8,9,10,10,10,10};
  370. static const uint8_t t12l_const[64] =
  371. {4,3,5,7,8,9,9,9,3,3,4,5,7,7,8,8,5,4,5,6,7,8,7,8,6,5,6,6,7,8,8,8,7,6,7,7,8,
  372.  8,8,9,8,7,8,8,8,9,8,9,8,7,7,8,8,9,9,10,9,8,8,9,9,9,9,10};
  373. static const uint8_t t13l_const[256] =
  374. {1,4,6,7,8,9,9,10,9,10,11,11,12,12,13,13,3,4,6,7,8,8,9,9,9,9,10,10,11,12,12,12,
  375.  6,6,7,8,9,9,10,10,9,10,10,11,11,12,13,13,7,7,8,9,9,10,10,10,10,11,11,11,11,12,
  376.  13,13,8,7,9,9,10,10,11,11,10,11,11,12,12,13,13,14,9,8,9,10,10,10,11,11,11,11,
  377.  12,11,13,13,14,14,9,9,10,10,11,11,11,11,11,12,12,12,13,13,14,14,10,9,10,11,11,
  378.  11,12,12,12,12,13,13,13,14,16,16,9,8,9,10,10,11,11,12,12,12,12,13,13,14,15,15,
  379.  10,9,10,10,11,11,11,13,12,13,13,14,14,14,16,15,10,10,10,11,11,12,12,13,12,13,
  380.  14,13,14,15,16,17,11,10,10,11,12,12,12,12,13,13,13,14,15,15,15,16,11,11,11,12,
  381.  12,13,12,13,14,14,15,15,15,16,16,16,12,11,12,13,13,13,14,14,14,14,14,15,16,15,
  382.  16,16,13,12,12,13,13,13,15,14,14,17,15,15,15,17,16,16,12,12,13,14,14,14,15,14,
  383.  15,15,16,16,19,18,19,16};
  384. static const uint8_t t15l_const[256] =
  385. {3,4,5,7,7,8,9,9,9,10,10,11,11,11,12,13,4,3,5,6,7,7,8,8,8,9,9,10,10,10,11,11,5,
  386.  5,5,6,7,7,8,8,8,9,9,10,10,11,11,11,6,6,6,7,7,8,8,9,9,9,10,10,10,11,11,11,7,6,
  387.  7,7,8,8,9,9,9,9,10,10,10,11,11,11,8,7,7,8,8,8,9,9,9,9,10,10,11,11,11,12,9,7,8,
  388.  8,8,9,9,9,9,10,10,10,11,11,12,12,9,8,8,9,9,9,9,10,10,10,10,10,11,11,11,12,9,8,
  389.  8,9,9,9,9,10,10,10,10,11,11,12,12,12,9,8,9,9,9,9,10,10,10,11,11,11,11,12,12,
  390.  12,10,9,9,9,10,10,10,10,10,11,11,11,11,12,13,12,10,9,9,9,10,10,10,10,11,11,11,
  391.  11,12,12,12,13,11,10,9,10,10,10,11,11,11,11,11,11,12,12,13,13,11,10,10,10,10,
  392.  11,11,11,11,12,12,12,12,12,13,13,12,11,11,11,11,11,11,11,12,12,12,12,13,13,12,
  393.  13,12,11,11,11,11,11,11,12,12,12,12,12,13,13,13,13};
  394. static const uint8_t t16l_const[256] =
  395. {1,4,6,8,9,9,10,10,11,11,11,12,12,12,13,9,3,4,6,7,8,9,9,9,10,10,10,11,12,11,12,
  396.  8,6,6,7,8,9,9,10,10,11,10,11,11,11,12,12,9,8,7,8,9,9,10,10,10,11,11,12,12,12,
  397.  13,13,10,9,8,9,9,10,10,11,11,11,12,12,12,13,13,13,9,9,8,9,9,10,11,11,12,11,12,
  398.  12,13,13,13,14,10,10,9,9,10,11,11,11,11,12,12,12,12,13,13,14,10,10,9,10,10,11,
  399.  11,11,12,12,13,13,13,13,15,15,10,10,10,10,11,11,11,12,12,13,13,13,13,14,14,14,
  400.  10,11,10,10,11,11,12,12,13,13,13,13,14,13,14,13,11,11,11,10,11,12,12,12,12,13,
  401.  14,14,14,15,15,14,10,12,11,11,11,12,12,13,14,14,14,14,14,14,13,14,11,12,12,12,
  402.  12,12,13,13,13,13,15,14,14,14,14,16,11,14,12,12,12,13,13,14,14,14,16,15,15,15,
  403.  17,15,11,13,13,11,12,14,14,13,14,14,15,16,15,17,15,14,11,9,8,8,9,9,10,10,10,
  404.  11,11,11,11,11,11,11,8};
  405. static const uint8_t t24l_const[256] =
  406. {4,4,6,7,8,9,9,10,10,11,11,11,11,11,12,9,4,4,5,6,7,8,8,9,9,9,10,10,10,10,10,8,
  407.  6,5,6,7,7,8,8,9,9,9,9,10,10,10,11,7,7,6,7,7,8,8,8,9,9,9,9,10,10,10,10,7,8,7,7,
  408.  8,8,8,8,9,9,9,10,10,10,10,11,7,9,7,8,8,8,8,9,9,9,9,10,10,10,10,10,7,9,8,8,8,8,
  409.  9,9,9,9,10,10,10,10,10,11,7,10,8,8,8,9,9,9,9,10,10,10,10,10,11,11,8,10,9,9,9,
  410.  9,9,9,9,9,10,10,10,10,11,11,8,10,9,9,9,9,9,9,10,10,10,10,10,11,11,11,8,11,9,9,
  411.  9,9,10,10,10,10,10,10,11,11,11,11,8,11,10,9,9,9,10,10,10,10,10,10,11,11,11,11,
  412.  8,11,10,10,10,10,10,10,10,10,10,11,11,11,11,11,8,11,10,10,10,10,10,10,10,11,
  413.  11,11,11,11,11,11,8,12,10,10,10,10,10,10,11,11,11,11,11,11,11,11,8,8,7,7,7,7,
  414.  7,7,7,7,7,7,8,8,8,8,4};
  415. static const struct huffcodetab ht_const[HTN] =
  416. { { 0, NULL, NULL}, /* Apparently not used */
  417.   { 2, t1HB,  t1l},
  418.   { 3, t2HB,  t2l},
  419.   { 3, t3HB,  t3l},
  420.   { 0, NULL, NULL}, /* Apparently not used */
  421.   { 4, t5HB,  t5l},
  422.   { 4, t6HB,  t6l},
  423.   { 6, t7HB,  t7l},
  424.   { 6, t8HB,  t8l},
  425.   { 6, t9HB,  t9l},
  426.   { 8, t10HB, t10l},
  427.   { 8, t11HB, t11l},
  428.   { 8, t12HB, t12l},
  429.   {16, t13HB, t13l},
  430.   { 0, NULL,  NULL}, /* Apparently not used */
  431.   {16, t15HB, t15l} };
  432. static const struct huffcodebig ht_big[HTN] =
  433. { { 16,  1,    1 },
  434.   { 16,  2,    3 },
  435.   { 16,  3,    7 },
  436.   { 16,  4,   15 },
  437.   { 16,  6,   63 },
  438.   { 16,  8,  255 },
  439.   { 16, 10, 1023 },
  440.   { 16, 13, 8191 },
  441.   { 16,  4,   15 },
  442.   { 16,  5,   31 },
  443.   { 16,  6,   63 },
  444.   { 16,  7,  127 },
  445.   { 16,  8,  255 },
  446.   { 16,  9,  511 },
  447.   { 16, 11, 2047 },
  448.   { 16, 13, 8191 } };
  449. static const struct
  450. {
  451.   uint32_t region0_cnt;
  452.   uint32_t region1_cnt;
  453. } subdv_table[23] =
  454. { {0, 0}, /*  0 bands */
  455.   {0, 0}, /*  1 bands */
  456.   {0, 0}, /*  2 bands */
  457.   {0, 0}, /*  3 bands */
  458.   {0, 0}, /*  4 bands */
  459.   {0, 1}, /*  5 bands */
  460.   {1, 1}, /*  6 bands */
  461.   {1, 1}, /*  7 bands */
  462.   {1, 2}, /*  8 bands */
  463.   {2, 2}, /*  9 bands */
  464.   {2, 3}, /* 10 bands */
  465.   {2, 3}, /* 11 bands */
  466.   {3, 4}, /* 12 bands */
  467.   {3, 4}, /* 13 bands */
  468.   {3, 4}, /* 14 bands */
  469.   {4, 5}, /* 15 bands */
  470.   {4, 5}, /* 16 bands */
  471.   {4, 6}, /* 17 bands */
  472.   {5, 6}, /* 18 bands */
  473.   {5, 6}, /* 19 bands */
  474.   {5, 7}, /* 20 bands */
  475.   {6, 7}, /* 21 bands */
  476.   {6, 7}, /* 22 bands */
  477. };
  478. static const uint32_t sfBand[6][23] =
  479. {
  480. /* Table B.2.b: 22.05 kHz */
  481. {0,6,12,18,24,30,36,44,54,66,80,96,116,140,168,200,238,284,336,396,464,522,576},
  482. /* Table B.2.c: 24 kHz */
  483. {0,6,12,18,24,30,36,44,54,66,80,96,114,136,162,194,232,278,330,394,464,540,576},
  484. /* Table B.2.a: 16 kHz */
  485. {0,6,12,18,24,30,36,44,45,66,80,96,116,140,168,200,238,248,336,396,464,522,576},
  486. /* Table B.8.b: 44.1 kHz */
  487. {0,4, 8,12,16,20,24,30,36,44,52,62, 74, 90,110,134,162,196,238,288,342,418,576},
  488. /* Table B.8.c: 48 kHz */
  489. {0,4, 8,12,16,20,24,30,36,42,50,60, 72, 88,106,128,156,190,230,276,330,384,576},
  490. /* Table B.8.a: 32 kHz */
  491. {0,4, 8,12,16,20,24,30,36,44,54,66, 82,102,126,156,194,240,296,364,448,550,576} };
  492. static const short int2idx_const[4096] = /*  int2idx[i] = sqrt(i*sqrt(i)); */
  493. {
  494.   0,  1,  2,  2,  3,  3,  4,  4,  5,  5,  6,  6,  6,  7,  7,  8,  8,  8,  9,  9,
  495.   9, 10, 10, 11, 11, 11, 12, 12, 12, 12, 13, 13, 13, 14, 14, 14, 15, 15, 15, 16,
  496.  16, 16, 16, 17, 17, 17, 18, 18, 18, 19, 19, 19, 19, 20, 20, 20, 20, 21, 21, 21,
  497.  22, 22, 22, 22, 23, 23, 23, 23, 24, 24, 24, 24, 25, 25, 25, 25, 26, 26, 26, 26,
  498.  27, 27, 27, 27, 28, 28, 28, 28, 29, 29, 29, 29, 30, 30, 30, 30, 31, 31, 31, 31,
  499.  32, 32, 32, 32, 33, 33, 33, 33, 34, 34, 34, 34, 34, 35, 35, 35, 35, 36, 36, 36,
  500.  36, 36, 37, 37, 37, 37, 38, 38, 38, 38, 38, 39, 39, 39, 39, 40, 40, 40, 40, 40,
  501.  41, 41, 41, 41, 42, 42, 42, 42, 42, 43, 43, 43, 43, 44, 44, 44, 44, 44, 45, 45,
  502.  45, 45, 45, 46, 46, 46, 46, 46, 47, 47, 47, 47, 47, 48, 48, 48, 48, 49, 49, 49,
  503.  49, 49, 50, 50, 50, 50, 50, 51, 51, 51, 51, 51, 52, 52, 52, 52, 52, 53, 53, 53,
  504.  53, 53, 54, 54, 54, 54, 54, 55, 55, 55, 55, 55, 56, 56, 56, 56, 56, 57, 57, 57,
  505.  57, 57, 58, 58, 58, 58, 58, 58, 59, 59, 59, 59, 59, 60, 60, 60, 60, 60, 61, 61,
  506.  61, 61, 61, 62, 62, 62, 62, 62, 62, 63, 63, 63, 63, 63, 64, 64, 64, 64, 64, 65,
  507.  65, 65, 65, 65, 65, 66, 66, 66, 66, 66, 67, 67, 67, 67, 67, 68, 68, 68, 68, 68,
  508.  68, 69, 69, 69, 69, 69, 70, 70, 70, 70, 70, 70, 71, 71, 71, 71, 71, 72, 72, 72,
  509.  72, 72, 72, 73, 73, 73, 73, 73, 74, 74, 74, 74, 74, 74, 75, 75, 75, 75, 75, 75,
  510.  76, 76, 76, 76, 76, 77, 77, 77, 77, 77, 77, 78, 78, 78, 78, 78, 78, 79, 79, 79,
  511.  79, 79, 80, 80, 80, 80, 80, 80, 81, 81, 81, 81, 81, 81, 82, 82, 82, 82, 82, 82,
  512.  83, 83, 83, 83, 83, 84, 84, 84, 84, 84, 84, 85, 85, 85, 85, 85, 85, 86, 86, 86,
  513.  86, 86, 86, 87, 87, 87, 87, 87, 87, 88, 88, 88, 88, 88, 88, 89, 89, 89, 89, 89,
  514.  89, 90, 90, 90, 90, 90, 90, 91, 91, 91, 91, 91, 91, 92, 92, 92, 92, 92, 92, 93,
  515.  93, 93, 93, 93, 93, 94, 94, 94, 94, 94, 94, 95, 95, 95, 95, 95, 95, 96, 96, 96,
  516.  96, 96, 96, 97, 97, 97, 97, 97, 97, 98, 98, 98, 98, 98, 98, 99, 99, 99, 99, 99,
  517.  99, 99,100,100,100,100,100,100,101,101,101,101,101,101,102,102,102,102,102,102,
  518. 103,103,103,103,103,103,104,104,104,104,104,104,104,105,105,105,105,105,105,106,
  519. 106,106,106,106,106,107,107,107,107,107,107,107,108,108,108,108,108,108,109,109,
  520. 109,109,109,109,110,110,110,110,110,110,110,111,111,111,111,111,111,112,112,112,
  521. 112,112,112,112,113,113,113,113,113,113,114,114,114,114,114,114,115,115,115,115,
  522. 115,115,115,116,116,116,116,116,116,117,117,117,117,117,117,117,118,118,118,118,
  523. 118,118,118,119,119,119,119,119,119,120,120,120,120,120,120,120,121,121,121,121,
  524. 121,121,122,122,122,122,122,122,122,123,123,123,123,123,123,123,124,124,124,124,
  525. 124,124,125,125,125,125,125,125,125,126,126,126,126,126,126,126,127,127,127,127,
  526. 127,127,128,128,128,128,128,128,128,129,129,129,129,129,129,129,130,130,130,130,
  527. 130,130,131,131,131,131,131,131,131,132,132,132,132,132,132,132,133,133,133,133,
  528. 133,133,133,134,134,134,134,134,134,134,135,135,135,135,135,135,136,136,136,136,
  529. 136,136,136,137,137,137,137,137,137,137,138,138,138,138,138,138,138,139,139,139,
  530. 139,139,139,139,140,140,140,140,140,140,140,141,141,141,141,141,141,141,142,142,
  531. 142,142,142,142,142,143,143,143,143,143,143,143,144,144,144,144,144,144,144,145,
  532. 145,145,145,145,145,145,146,146,146,146,146,146,146,147,147,147,147,147,147,147,
  533. 148,148,148,148,148,148,148,149,149,149,149,149,149,149,150,150,150,150,150,150,
  534. 150,151,151,151,151,151,151,151,152,152,152,152,152,152,152,153,153,153,153,153,
  535. 153,153,154,154,154,154,154,154,154,154,155,155,155,155,155,155,155,156,156,156,
  536. 156,156,156,156,157,157,157,157,157,157,157,158,158,158,158,158,158,158,159,159,
  537. 159,159,159,159,159,160,160,160,160,160,160,160,160,161,161,161,161,161,161,161,
  538. 162,162,162,162,162,162,162,163,163,163,163,163,163,163,163,164,164,164,164,164,
  539. 164,164,165,165,165,165,165,165,165,166,166,166,166,166,166,166,167,167,167,167,
  540. 167,167,167,167,168,168,168,168,168,168,168,169,169,169,169,169,169,169,169,170,
  541. 170,170,170,170,170,170,171,171,171,171,171,171,171,172,172,172,172,172,172,172,
  542. 172,173,173,173,173,173,173,173,174,174,174,174,174,174,174,174,175,175,175,175,
  543. 175,175,175,176,176,176,176,176,176,176,176,177,177,177,177,177,177,177,178,178,
  544. 178,178,178,178,178,178,179,179,179,179,179,179,179,180,180,180,180,180,180,180,
  545. 180,181,181,181,181,181,181,181,182,182,182,182,182,182,182,182,183,183,183,183,
  546. 183,183,183,184,184,184,184,184,184,184,184,185,185,185,185,185,185,185,186,186,
  547. 186,186,186,186,186,186,187,187,187,187,187,187,187,187,188,188,188,188,188,188,
  548. 188,189,189,189,189,189,189,189,189,190,190,190,190,190,190,190,190,191,191,191,
  549. 191,191,191,191,192,192,192,192,192,192,192,192,193,193,193,193,193,193,193,193,
  550. 194,194,194,194,194,194,194,195,195,195,195,195,195,195,195,196,196,196,196,196,
  551. 196,196,196,197,197,197,197,197,197,197,197,198,198,198,198,198,198,198,199,199,
  552. 199,199,199,199,199,199,200,200,200,200,200,200,200,200,201,201,201,201,201,201,
  553. 201,201,202,202,202,202,202,202,202,202,203,203,203,203,203,203,203,204,204,204,
  554. 204,204,204,204,204,205,205,205,205,205,205,205,205,206,206,206,206,206,206,206,
  555. 206,207,207,207,207,207,207,207,207,208,208,208,208,208,208,208,208,209,209,209,
  556. 209,209,209,209,209,210,210,210,210,210,210,210,210,211,211,211,211,211,211,211,
  557. 211,212,212,212,212,212,212,212,212,213,213,213,213,213,213,213,213,214,214,214,
  558. 214,214,214,214,214,215,215,215,215,215,215,215,215,216,216,216,216,216,216,216,
  559. 216,217,217,217,217,217,217,217,217,218,218,218,218,218,218,218,218,219,219,219,
  560. 219,219,219,219,219,220,220,220,220,220,220,220,220,221,221,221,221,221,221,221,
  561. 221,222,222,222,222,222,222,222,222,223,223,223,223,223,223,223,223,224,224,224,
  562. 224,224,224,224,224,225,225,225,225,225,225,225,225,226,226,226,226,226,226,226,
  563. 226,227,227,227,227,227,227,227,227,228,228,228,228,228,228,228,228,229,229,229,
  564. 229,229,229,229,229,229,230,230,230,230,230,230,230,230,231,231,231,231,231,231,
  565. 231,231,232,232,232,232,232,232,232,232,233,233,233,233,233,233,233,233,234,234,
  566. 234,234,234,234,234,234,234,235,235,235,235,235,235,235,235,236,236,236,236,236,
  567. 236,236,236,237,237,237,237,237,237,237,237,238,238,238,238,238,238,238,238,238,
  568. 239,239,239,239,239,239,239,239,240,240,240,240,240,240,240,240,241,241,241,241,
  569. 241,241,241,241,242,242,242,242,242,242,242,242,242,243,243,243,243,243,243,243,
  570. 243,244,244,244,244,244,244,244,244,245,245,245,245,245,245,245,245,245,246,246,
  571. 246,246,246,246,246,246,247,247,247,247,247,247,247,247,248,248,248,248,248,248,
  572. 248,248,248,249,249,249,249,249,249,249,249,250,250,250,250,250,250,250,250,250,
  573. 251,251,251,251,251,251,251,251,252,252,252,252,252,252,252,252,253,253,253,253,
  574. 253,253,253,253,253,254,254,254,254,254,254,254,254,255,255,255,255,255,255,255,
  575. 255,255,256,256,256,256,256,256,256,256,257,257,257,257,257,257,257,257,257,258,
  576. 258,258,258,258,258,258,258,259,259,259,259,259,259,259,259,259,260,260,260,260,
  577. 260,260,260,260,261,261,261,261,261,261,261,261,261,262,262,262,262,262,262,262,
  578. 262,263,263,263,263,263,263,263,263,263,264,264,264,264,264,264,264,264,265,265,
  579. 265,265,265,265,265,265,265,266,266,266,266,266,266,266,266,267,267,267,267,267,
  580. 267,267,267,267,268,268,268,268,268,268,268,268,268,269,269,269,269,269,269,269,
  581. 269,270,270,270,270,270,270,270,270,270,271,271,271,271,271,271,271,271,271,272,
  582. 272,272,272,272,272,272,272,273,273,273,273,273,273,273,273,273,274,274,274,274,
  583. 274,274,274,274,275,275,275,275,275,275,275,275,275,276,276,276,276,276,276,276,
  584. 276,276,277,277,277,277,277,277,277,277,277,278,278,278,278,278,278,278,278,279,
  585. 279,279,279,279,279,279,279,279,280,280,280,280,280,280,280,280,280,281,281,281,
  586. 281,281,281,281,281,282,282,282,282,282,282,282,282,282,283,283,283,283,283,283,
  587. 283,283,283,284,284,284,284,284,284,284,284,284,285,285,285,285,285,285,285,285,
  588. 286,286,286,286,286,286,286,286,286,287,287,287,287,287,287,287,287,287,288,288,
  589. 288,288,288,288,288,288,288,289,289,289,289,289,289,289,289,289,290,290,290,290,
  590. 290,290,290,290,291,291,291,291,291,291,291,291,291,292,292,292,292,292,292,292,
  591. 292,292,293,293,293,293,293,293,293,293,293,294,294,294,294,294,294,294,294,294,
  592. 295,295,295,295,295,295,295,295,295,296,296,296,296,296,296,296,296,296,297,297,
  593. 297,297,297,297,297,297,297,298,298,298,298,298,298,298,298,299,299,299,299,299,
  594. 299,299,299,299,300,300,300,300,300,300,300,300,300,301,301,301,301,301,301,301,
  595. 301,301,302,302,302,302,302,302,302,302,302,303,303,303,303,303,303,303,303,303,
  596. 304,304,304,304,304,304,304,304,304,305,305,305,305,305,305,305,305,305,306,306,
  597. 306,306,306,306,306,306,306,307,307,307,307,307,307,307,307,307,308,308,308,308,
  598. 308,308,308,308,308,309,309,309,309,309,309,309,309,309,310,310,310,310,310,310,
  599. 310,310,310,311,311,311,311,311,311,311,311,311,312,312,312,312,312,312,312,312,
  600. 312,313,313,313,313,313,313,313,313,313,314,314,314,314,314,314,314,314,314,315,
  601. 315,315,315,315,315,315,315,315,316,316,316,316,316,316,316,316,316,317,317,317,
  602. 317,317,317,317,317,317,318,318,318,318,318,318,318,318,318,318,319,319,319,319,
  603. 319,319,319,319,319,320,320,320,320,320,320,320,320,320,321,321,321,321,321,321,
  604. 321,321,321,322,322,322,322,322,322,322,322,322,323,323,323,323,323,323,323,323,
  605. 323,324,324,324,324,324,324,324,324,324,325,325,325,325,325,325,325,325,325,325,
  606. 326,326,326,326,326,326,326,326,326,327,327,327,327,327,327,327,327,327,328,328,
  607. 328,328,328,328,328,328,328,329,329,329,329,329,329,329,329,329,330,330,330,330,
  608. 330,330,330,330,330,330,331,331,331,331,331,331,331,331,331,332,332,332,332,332,
  609. 332,332,332,332,333,333,333,333,333,333,333,333,333,334,334,334,334,334,334,334,
  610. 334,334,335,335,335,335,335,335,335,335,335,335,336,336,336,336,336,336,336,336,
  611. 336,337,337,337,337,337,337,337,337,337,338,338,338,338,338,338,338,338,338,338,
  612. 339,339,339,339,339,339,339,339,339,340,340,340,340,340,340,340,340,340,341,341,
  613. 341,341,341,341,341,341,341,341,342,342,342,342,342,342,342,342,342,343,343,343,
  614. 343,343,343,343,343,343,344,344,344,344,344,344,344,344,344,344,345,345,345,345,
  615. 345,345,345,345,345,346,346,346,346,346,346,346,346,346,347,347,347,347,347,347,
  616. 347,347,347,347,348,348,348,348,348,348,348,348,348,349,349,349,349,349,349,349,
  617. 349,349,350,350,350,350,350,350,350,350,350,350,351,351,351,351,351,351,351,351,
  618. 351,352,352,352,352,352,352,352,352,352,352,353,353,353,353,353,353,353,353,353,
  619. 354,354,354,354,354,354,354,354,354,355,355,355,355,355,355,355,355,355,355,356,
  620. 356,356,356,356,356,356,356,356,357,357,357,357,357,357,357,357,357,357,358,358,
  621. 358,358,358,358,358,358,358,359,359,359,359,359,359,359,359,359,359,360,360,360,
  622. 360,360,360,360,360,360,361,361,361,361,361,361,361,361,361,361,362,362,362,362,
  623. 362,362,362,362,362,363,363,363,363,363,363,363,363,363,363,364,364,364,364,364,
  624. 364,364,364,364,365,365,365,365,365,365,365,365,365,365,366,366,366,366,366,366,
  625. 366,366,366,367,367,367,367,367,367,367,367,367,367,368,368,368,368,368,368,368,
  626. 368,368,369,369,369,369,369,369,369,369,369,369,370,370,370,370,370,370,370,370,
  627. 370,370,371,371,371,371,371,371,371,371,371,372,372,372,372,372,372,372,372,372,
  628. 372,373,373,373,373,373,373,373,373,373,374,374,374,374,374,374,374,374,374,374,
  629. 375,375,375,375,375,375,375,375,375,375,376,376,376,376,376,376,376,376,376,377,
  630. 377,377,377,377,377,377,377,377,377,378,378,378,378,378,378,378,378,378,379,379,
  631. 379,379,379,379,379,379,379,379,380,380,380,380,380,380,380,380,380,380,381,381,
  632. 381,381,381,381,381,381,381,382,382,382,382,382,382,382,382,382,382,383,383,383,
  633. 383,383,383,383,383,383,383,384,384,384,384,384,384,384,384,384,385,385,385,385,
  634. 385,385,385,385,385,385,386,386,386,386,386,386,386,386,386,386,387,387,387,387,
  635. 387,387,387,387,387,387,388,388,388,388,388,388,388,388,388,389,389,389,389,389,
  636. 389,389,389,389,389,390,390,390,390,390,390,390,390,390,390,391,391,391,391,391,
  637. 391,391,391,391,391,392,392,392,392,392,392,392,392,392,393,393,393,393,393,393,
  638. 393,393,393,393,394,394,394,394,394,394,394,394,394,394,395,395,395,395,395,395,
  639. 395,395,395,395,396,396,396,396,396,396,396,396,396,397,397,397,397,397,397,397,
  640. 397,397,397,398,398,398,398,398,398,398,398,398,398,399,399,399,399,399,399,399,
  641. 399,399,399,400,400,400,400,400,400,400,400,400,400,401,401,401,401,401,401,401,
  642. 401,401,402,402,402,402,402,402,402,402,402,402,403,403,403,403,403,403,403,403,
  643. 403,403,404,404,404,404,404,404,404,404,404,404,405,405,405,405,405,405,405,405,
  644. 405,405,406,406,406,406,406,406,406,406,406,406,407,407,407,407,407,407,407,407,
  645. 407,407,408,408,408,408,408,408,408,408,408,408,409,409,409,409,409,409,409,409,
  646. 409,410,410,410,410,410,410,410,410,410,410,411,411,411,411,411,411,411,411,411,
  647. 411,412,412,412,412,412,412,412,412,412,412,413,413,413,413,413,413,413,413,413,
  648. 413,414,414,414,414,414,414,414,414,414,414,415,415,415,415,415,415,415,415,415,
  649. 415,416,416,416,416,416,416,416,416,416,416,417,417,417,417,417,417,417,417,417,
  650. 417,418,418,418,418,418,418,418,418,418,418,419,419,419,419,419,419,419,419,419,
  651. 419,420,420,420,420,420,420,420,420,420,420,421,421,421,421,421,421,421,421,421,
  652. 421,422,422,422,422,422,422,422,422,422,422,423,423,423,423,423,423,423,423,423,
  653. 423,424,424,424,424,424,424,424,424,424,424,425,425,425,425,425,425,425,425,425,
  654. 425,426,426,426,426,426,426,426,426,426,426,427,427,427,427,427,427,427,427,427,
  655. 427,428,428,428,428,428,428,428,428,428,428,429,429,429,429,429,429,429,429,429,
  656. 429,430,430,430,430,430,430,430,430,430,430,431,431,431,431,431,431,431,431,431,
  657. 431,432,432,432,432,432,432,432,432,432,432,433,433,433,433,433,433,433,433,433,
  658. 433,434,434,434,434,434,434,434,434,434,434,435,435,435,435,435,435,435,435,435,
  659. 435,435,436,436,436,436,436,436,436,436,436,436,437,437,437,437,437,437,437,437,
  660. 437,437,438,438,438,438,438,438,438,438,438,438,439,439,439,439,439,439,439,439,
  661. 439,439,440,440,440,440,440,440,440,440,440,440,441,441,441,441,441,441,441,441,
  662. 441,441,442,442,442,442,442,442,442,442,442,442,443,443,443,443,443,443,443,443,
  663. 443,443,443,444,444,444,444,444,444,444,444,444,444,445,445,445,445,445,445,445,
  664. 445,445,445,446,446,446,446,446,446,446,446,446,446,447,447,447,447,447,447,447,
  665. 447,447,447,448,448,448,448,448,448,448,448,448,448,448,449,449,449,449,449,449,
  666. 449,449,449,449,450,450,450,450,450,450,450,450,450,450,451,451,451,451,451,451,
  667. 451,451,451,451,452,452,452,452,452,452,452,452,452,452,453,453,453,453,453,453,
  668. 453,453,453,453,453,454,454,454,454,454,454,454,454,454,454,455,455,455,455,455,
  669. 455,455,455,455,455,456,456,456,456,456,456,456,456,456,456,457,457,457,457,457,
  670. 457,457,457,457,457,457,458,458,458,458,458,458,458,458,458,458,459,459,459,459,
  671. 459,459,459,459,459,459,460,460,460,460,460,460,460,460,460,460,460,461,461,461,
  672. 461,461,461,461,461,461,461,462,462,462,462,462,462,462,462,462,462,463,463,463,
  673. 463,463,463,463,463,463,463,463,464,464,464,464,464,464,464,464,464,464,465,465,
  674. 465,465,465,465,465,465,465,465,466,466,466,466,466,466,466,466,466,466,466,467,
  675. 467,467,467,467,467,467,467,467,467,468,468,468,468,468,468,468,468,468,468,469,
  676. 469,469,469,469,469,469,469,469,469,469,470,470,470,470,470,470,470,470,470,470,
  677. 471,471,471,471,471,471,471,471,471,471,472,472,472,472,472,472,472,472,472,472,
  678. 472,473,473,473,473,473,473,473,473,473,473,474,474,474,474,474,474,474,474,474,
  679. 474,475,475,475,475,475,475,475,475,475,475,475,476,476,476,476,476,476,476,476,
  680. 476,476,477,477,477,477,477,477,477,477,477,477,477,478,478,478,478,478,478,478,
  681. 478,478,478,479,479,479,479,479,479,479,479,479,479,479,480,480,480,480,480,480,
  682. 480,480,480,480,481,481,481,481,481,481,481,481,481,481,482,482,482,482,482,482,
  683. 482,482,482,482,482,483,483,483,483,483,483,483,483,483,483,484,484,484,484,484,
  684. 484,484,484,484,484,484,485,485,485,485,485,485,485,485,485,485,486,486,486,486,
  685. 486,486,486,486,486,486,486,487,487,487,487,487,487,487,487,487,487,488,488,488,
  686. 488,488,488,488,488,488,488,488,489,489,489,489,489,489,489,489,489,489,490,490,
  687. 490,490,490,490,490,490,490,490,490,491,491,491,491,491,491,491,491,491,491,492,
  688. 492,492,492,492,492,492,492,492,492,492,493,493,493,493,493,493,493,493,493,493,
  689. 494,494,494,494,494,494,494,494,494,494,494,495,495,495,495,495,495,495,495,495,
  690. 495,496,496,496,496,496,496,496,496,496,496,496,497,497,497,497,497,497,497,497,
  691. 497,497,497,498,498,498,498,498,498,498,498,498,498,499,499,499,499,499,499,499,
  692. 499,499,499,499,500,500,500,500,500,500,500,500,500,500,501,501,501,501,501,501,
  693. 501,501,501,501,501,502,502,502,502,502,502,502,502,502,502,503,503,503,503,503,
  694. 503,503,503,503,503,503,504,504,504,504,504,504,504,504,504,504,504,505,505,505,
  695. 505,505,505,505,505,505,505,506,506,506,506,506,506,506,506,506,506,506,507,507,
  696. 507,507,507,507,507,507,507,507,507,508,508,508,508,508,508,508,508,508,508,509,
  697. 509,509,509,509,509,509,509,509,509,509,510,510,510,510,510,510,510,510,510,510,
  698. 510,511,511,511,511,511,511,511,511,511,511,512,512,512,512,512 };
  699. static const int order[32] =
  700. { 0, 1, 16, 17, 8, 9, 24, 25, 4, 5, 20, 21, 12, 13, 28, 29,
  701.   2, 3, 18, 19,10,11, 26, 27, 6, 7, 22, 23, 14, 15, 30, 31 };
  702. static const unsigned long sampr_index[2][3] =
  703. { { 22050, 24000, 16000 },      /* MPEG 2 */
  704.   { 44100, 48000, 32000 } };    /* MPEG 1 */
  705. static const long bitr_index[2][15] =
  706. { {0, 8,16,24,32,40,48,56, 64, 80, 96,112,128,144,160},    /* MPEG 2 */
  707.   {0,32,40,48,56,64,80,96,112,128,160,192,224,256,320} };  /* MPEG 1 */
  708. static const int num_bands[3][15]  =
  709. { {0,10,10,10,10,12,14,16, 20, 22, 24, 26, 28, 30, 32},
  710.   {0,10,10,10,10,10,12,14, 18, 24, 26, 28, 30, 32, 32},
  711.   {0,10,12,14,18,24,26,28, 30, 32, 32, 32, 32, 32, 32} };
  712. static const int cx_const[9] =
  713. { 16135, 10531,  5604, 15396, -2845,-12551, 14189,  8192, 16384 };
  714. static const int ca_const[8] =
  715. {-16859,-15458,-10269, -5961, -3099, -1342,  -465,  -121 };
  716. static const int cs_const[8] =
  717. { 28098, 28893, 31117, 32221, 32621, 32740, 32765, 32768 };
  718. static const short enwindow_const[15*27+24] =
  719. { 0,   65,  593,  1766, 22228, 2115, 611, 62,
  720.   8,  119, 1419, 10564,-11659,-1635,-154, -9,
  721.  -8, -119,-1419,-10564, 11659, 1635, 154,  9, 464,  100,  91,
  722.   0,   69,  604,  1635, 23148, 2363, 643, 62,
  723.   7,  107, 1368, 10449,-12733,-1818,-180,-11,
  724.  -7, -107,-1368,-10449, 12733, 1818, 180, 11, 420,  200, 164,
  725.   0,   72,  608,  1465, 23979, 2600, 671, 63,
  726.   7,   94, 1305, 10265,-13818,-2004,-207,-12,
  727.  -7,  -94,-1305,-10265, 13818, 2004, 207, 12, 380,  297, 220,
  728.   0,   76,  606,  1256, 24718, 2825, 693, 63,
  729.   6,   81, 1232, 10016,-14908,-2192,-236,-14,
  730.  -6,  -81,-1232,-10016, 14908, 2192, 236, 14, 342,  392, 262,
  731.   0,   78,  597,  1007, 25359, 3033, 712, 63,
  732.   6,   68, 1150,  9706,-15995,-2380,-267,-15,
  733.  -6,  -68,-1150, -9706, 15995, 2380, 267, 15, 307,  483, 289,
  734.   0,   80,  580,   719, 25901, 3224, 726, 62,
  735.   6,   54, 1060,  9343,-17072,-2565,-299,-17,
  736.  -6,  -54,-1060, -9343, 17072, 2565, 299, 17, 274,  569, 304,
  737.  -1,   82,  555,   391, 26339, 3395, 735, 61,
  738.   5,   40,  963,  8930,-18131,-2747,-332,-19,
  739.  -5,  -40, -963, -8930, 18131, 2747, 332, 19, 242,  650, 307,
  740.  -1,   83,  523,    26, 26672, 3545, 740, 60,
  741.   5,   27,  861,  8474,-19164,-2923,-366,-21,
  742.  -5,  -27, -861, -8474, 19164, 2923, 366, 21, 212,  724, 300,
  743.  -1,   83,  482,  -376, 26900, 3672, 739, 58,
  744.   4,   14,  756,  7981,-20163,-3092,-401,-24,
  745.  -4,  -14, -756, -7981, 20163, 3092, 401, 24, 183,  792, 283,
  746.  -1,   82,  433,  -812, 27022, 3776, 735, 56,
  747.   4,    1,  648,  7456,-21122,-3250,-435,-26,
  748.  -4,   -1, -648, -7456, 21122, 3250, 435, 26, 155,  851, 258,
  749.  -1,   81,  376, -1281, 27038, 3855, 726, 54,
  750.   3,  -11,  539,  6907,-22032,-3397,-470,-28,
  751.  -3,   11, -539, -6907, 22032, 3397, 470, 28, 128,  903, 226,
  752.  -1,   78,  312, -1778, 26951, 3910, 713, 52,
  753.   3,  -22,  430,  6338,-22887,-3530,-503,-31,
  754.  -3,   22, -430, -6338, 22887, 3530, 503, 31, 102,  946, 188,
  755.  -2,   75,  239, -2302, 26761, 3941, 696, 49,
  756.   3,  -33,  322,  5757,-23678,-3648,-537,-34,
  757.  -3,   33, -322, -5757, 23678, 3648, 537, 34,  76,  980, 145,
  758.  -2,   70,  160, -2848, 26472, 3948, 676, 47,
  759.   3,  -42,  217,  5167,-24399,-3749,-568,-36,
  760.  -3,   42, -217, -5167, 24399, 3749, 568, 36,  50, 1004,  99,
  761.  -2,   65,   74, -3412, 26087, 3931, 653, 44,
  762.   2,  -51,  115,  4577,-25045,-3830,-599,-39,
  763.  -2,   51, -115, -4577, 25045, 3830, 599, 39,  25, 1019,  50,
  764.  25610,3891,627,42,-3990,-18,58,-2,
  765.  21226,-21226,10604,-10604,1860,-1860,1458,-1458,576,-576,130,-130,60,-60,8,-8
  766. };
  767. static const int win_const[18][4] = {
  768.   { -3072, -134, -146, 3352 },
  769.   { -2747, -362, -471, 3579 },
  770.   { -2387, -529, -831, 3747 },
  771.   { -2004, -632,-1214, 3850 },
  772.   { -1609, -666,-1609, 3884 },
  773.   { -1214, -632,-2004, 3850 },
  774.   {  -831, -529,-2387, 3747 },
  775.   {  -471, -362,-2747, 3579 },
  776.   {  -146, -134,-3072, 3352 },
  777.   {   134,-3072,-3352, -146 },
  778.   {   362,-2747,-3579, -471 },
  779.   {   529,-2387,-3747, -831 },
  780.   {   632,-2004,-3850,-1214 },
  781.   {   666,-1609,-3884,-1609 },
  782.   {   632,-1214,-3850,-2004 },
  783.   {   529, -831,-3747,-2387 },
  784.   {   362, -471,-3579,-2747 },
  785.   {   134, -146,-3352,-3072 } };
  786. /* forward declarations */
  787. static int  HuffmanCode( short *ix, char *xr_sign, uint32_t begin, uint32_t end, int table);
  788. static int  HuffmanCod1( short *ix, char *xr_sign, uint32_t begin, uint32_t end, int table);
  789. static void putbits(uint32_t val, uint32_t nbit);
  790. static int  find_best_2( short *ix, uint32_t start, uint32_t end, const uint32_t *table,
  791.                           uint32_t len, int *bits);
  792. static int  find_best_3( short *ix, uint32_t start, uint32_t end, const uint32_t *table,
  793.                          uint32_t len, int *bits);
  794. static int  count_bit1 ( short *ix, uint32_t start, uint32_t end, int *bits );
  795. static int  count_bigv ( short *ix, uint32_t start, uint32_t end, int table0, int table1,
  796.                   int *bits);
  797. /* implementations */
  798. static void encodeSideInfo( side_info_t si[2][2] )
  799. {
  800.   int gr, ch, header;
  801.   uint32_t  cc=0, sz=0;
  802.   /*
  803.    * MPEG header layout:
  804.    * AAAAAAAA AAABBCCD EEEEFFGH IIJJKLMM
  805.    * A (31-21) = frame sync
  806.    * B (20-19) = MPEG type
  807.    * C (18-17) = MPEG layer
  808.    * D (16)    = protection bit
  809.    * E (15-12) = bitrate index
  810.    * F (11-10) = samplerate index
  811.    * G (9)     = padding bit
  812.    * H (8)     = private bit
  813.    * I (7-6)   = channel mode
  814.    * J (5-4)   = mode extension (jstereo only)
  815.    * K (3)     = copyright bit
  816.    * L (2)     = original
  817.    * M (1-0)   = emphasis
  818.    */
  819.   header  = (0xfff00000) | /* frame sync (AAAAAAAAA AAA)
  820.                               mp3 type (upper):  1 (B)  */
  821.             (0x01 << 17) | /* mp3 layer:        01 (CC) */
  822.             ( 0x1 << 16) | /* mp3 crc:           1 (D)  */
  823.             ( 0x1 <<  2);  /* mp3 org:           1 (L)  */
  824.   header |= cfg.mpg.type    << 19;
  825.   header |= cfg.mpg.bitr_id << 12;
  826.   header |= cfg.mpg.smpl_id << 10;
  827.   header |= cfg.mpg.padding <<  9;
  828.   header |= cfg.mpg.mode    <<  6;
  829.   /* no emphasis (bits 0-1) */
  830.   putbits( header, 32 );
  831.   if(cfg.mpg.type == 1)
  832.   { /* MPEG1 */
  833.     if(cfg.channels == 2)  { putlong( 0, 20); }
  834.     else                   { putlong( 0, 18); }
  835.     for(gr=0; gr<cfg.granules; gr++)
  836.       for(ch=0; ch<cfg.channels; ch++)
  837.       {
  838.         side_info_t *gi = &si[gr][ch];
  839.         putlong((gi->part2_3_length+42),12 ); /* add scale_facs array size */
  840.         putlong( gi->address3>>1,        9 );
  841.         putlong( gi->global_gain,        8 );
  842.         putlong( 9,                      4 ); /* set scale_facs compr type */
  843.         putlong( gi->table_select[0],    6 );
  844.         putlong( gi->table_select[1],    5 );
  845.         putlong( gi->table_select[2],    5 );
  846.         putlong( gi->region_0_1,         7 );
  847.         putlong( 1                  ,    2 ); /* set scale_facs to 1bit */
  848.         putlong( gi->table_select[3],    1 );
  849.       }
  850.   }
  851.   else
  852.   { /* MPEG2 */
  853.     if(cfg.channels == 2)  { putlong( 0, 10); }
  854.     else                   { putlong( 0,  9); }
  855.     for(ch=0; ch<cfg.channels; ch++)
  856.     {
  857.       side_info_t *gi = &si[0][ch];
  858.       putlong((gi->part2_3_length+42),12 ); /* add scale_facs array size */
  859.       putlong( gi->address3>>1,        9 );
  860.       putlong( gi->global_gain,        8 );
  861.       putlong( 0xCA,                   9 ); /* set scale_facs compr type */
  862.       putlong( gi->table_select[0],    6 );
  863.       putlong( gi->table_select[1],    5 );
  864.       putlong( gi->table_select[2],    5 );
  865.       putlong( gi->region_0_1     ,    7 );
  866.       putlong( 1                  ,    1 ); /* set scale_facs to 1bit */
  867.       putlong( gi->table_select[3],    1 );
  868.     }
  869.   }
  870.   /* flush remaining bits */
  871.   putbits(cc, sz);
  872. }
  873. /* Note the discussion of huffmancodebits() on pages 28 and 29 of the IS,
  874.    as well as the definitions of the side information on pages 26 and 27. */
  875. static void Huffmancodebits( short *ix, char *xr_sign, side_info_t *gi )
  876. {
  877.   int    region1   = gi->address1;
  878.   int    region2   = gi->address2;
  879.   int    bigvals   = gi->address3;
  880.   int    count1    = bigvals + (gi->count1 << 2);
  881.   int    stuffBits = 0;
  882.   int    bits      = 0;
  883.   int    i, v;
  884.   for(i=v=0; i<32; i+=2)
  885.     v |= band_scale_f[i>>1] << (30-i);
  886.   putbits(v, 32); // store scale_facs (part1)
  887.   for(v=0; i<42; i+=2)
  888.     v |= band_scale_f[i>>1] << (40-i);
  889.   putbits(v, 10); // store scale_facs (part2)
  890.   if(region1 > 0)
  891.     bits += HuffmanCode(ix, xr_sign,   0    , region1, gi->table_select[0]);
  892.   if(region2 > region1)
  893.     bits += HuffmanCode(ix, xr_sign, region1, region2, gi->table_select[1]);
  894.   if(bigvals > region2)
  895.     bits += HuffmanCode(ix, xr_sign, region2, bigvals, gi->table_select[2]);
  896.   if(count1 > bigvals)
  897.     bits += HuffmanCod1(ix, xr_sign, bigvals,  count1, gi->table_select[3]);
  898.   if((stuffBits = gi->part2_3_length - bits) > 0)
  899.   {
  900.     int stuffWords = stuffBits >> 5;
  901.     int remainBits = stuffBits & 31;
  902.     if( remainBits )
  903.       putbits( ~0, remainBits );
  904.     while( stuffWords-- )
  905.       putbits( ~0, 32 ); /* Huffman code tables leed to padding ones */
  906.   }
  907. }
  908. int HuffmanCod1( short *ix, char *xr_sign, uint32_t begin, uint32_t end, int tbl)
  909. {
  910.   uint32_t  cc=0, sz=0;
  911.   uint32_t  i, d, p;
  912.   int     sumbit=0, s=0, l=0, v, w, x, y;
  913.   #define sgnv xr_sign[i+0]
  914.   #define sgnw xr_sign[i+1]
  915.   #define sgnx xr_sign[i+2]
  916.   #define sgny xr_sign[i+3]
  917.   for(i=begin; i<end; i+=4)
  918.   {
  919.     v = ix[i+0];
  920.     w = ix[i+1];
  921.     x = ix[i+2];
  922.     y = ix[i+3];
  923.     p = (v << 3) + (w << 2) + (x << 1) + y;
  924.     switch(p)
  925.     {
  926.       case  0: l=0; s = 0; break;
  927.       case  1: l=1; s =                                           sgny; break;
  928.       case  2: l=1; s =                              sgnx;              break;
  929.       case  3: l=2; s =                             (sgnx << 1) + sgny; break;
  930.       case  4: l=1; s =                sgnw;                            break;
  931.       case  5: l=2; s =               (sgnw << 1)               + sgny; break;
  932.       case  6: l=2; s =               (sgnw << 1) +  sgnx;              break;
  933.       case  7: l=3; s =               (sgnw << 2) + (sgnx << 1) + sgny; break;
  934.       case  8: l=1; s =  sgnv;                                          break;
  935.       case  9: l=2; s = (sgnv << 1)                             + sgny; break;
  936.       case 10: l=2; s = (sgnv << 1)               +  sgnx;              break;
  937.       case 11: l=3; s = (sgnv << 2)               + (sgnx << 1) + sgny; break;
  938.       case 12: l=2; s = (sgnv << 1) +  sgnw;                            break;
  939.       case 13: l=3; s = (sgnv << 2) + (sgnw << 1)               + sgny; break;
  940.       case 14: l=3; s = (sgnv << 2) + (sgnw << 1) +  sgnx;              break;
  941.       case 15: l=4; s = (sgnv << 3) + (sgnw << 2) + (sgnx << 1) + sgny; break;
  942.     }
  943.     d = (ht_count[tbl][0][p] << l) + s;
  944.     l =  ht_count[tbl][1][p];
  945.     putlong( d, l );
  946.     sumbit += l;
  947.   }
  948.   /* flush remaining bits */
  949.   putbits(cc, sz);
  950.   return sumbit;
  951. }
  952. /* Implements the pseudocode of page 98 of the IS */
  953. int HuffmanCode(short *ix, char *xr_sign, uint32_t begin, uint32_t end, int table)
  954. {
  955.   uint32_t       cc=0, sz=0, code;
  956.   uint32_t       i, xl=0, yl=0, idx;
  957.   int            x, y, bit, sumbit=0;
  958.   #define sign_x xr_sign[i+0]
  959.   #define sign_y xr_sign[i+1]
  960.   if(table == 0)
  961.     return 0;
  962.   if( table > 15 )
  963.   { /* ESC-table is used */
  964.     uint32_t linbits  = ht_big[table-16].linbits;
  965.     uint16_t *hffcode = table < 24 ? t16HB : t24HB;
  966.     uint8_t  *hlen    = table < 24 ? t16l  : t24l;
  967.     for(i=begin; i<end; i+=2)
  968.     {
  969.       x = ix[ i ];
  970.       y = ix[i+1];
  971.       if(x > 14) { xl = x - 15;  x = 15; }
  972.       if(y > 14) { yl = y - 15;  y = 15; }
  973.       idx  = x * 16 + y;
  974.       code = hffcode[idx];
  975.       bit  = hlen   [idx];
  976.       if(x)
  977.       {
  978.         if(x > 14)
  979.         {
  980.           code = (code << linbits) | xl;
  981.           bit += linbits;
  982.         }
  983.         code = (code << 1) | sign_x;
  984.         bit += 1;
  985.       }
  986.       if(y)
  987.       {
  988.         if(y > 14)
  989.         {
  990.           if(bit + linbits + 1 > 32)
  991.           {
  992.             putlong( code, bit );
  993.             sumbit += bit;
  994.             code = bit = 0;
  995.           }
  996.           code = (code << linbits) | yl;
  997.           bit += linbits;
  998.         }
  999.         code = (code << 1) | sign_y;
  1000.         bit += 1;
  1001.       }
  1002.       putlong( code, bit );
  1003.       sumbit += bit;
  1004.     }
  1005.   }
  1006.   else
  1007.   { /* No ESC-words */
  1008.     const struct huffcodetab *h = &ht[table];
  1009.     for(i=begin; i<end; i+=2)
  1010.     {
  1011.       x = ix[i];
  1012.       y = ix[i+1];
  1013.       idx  = x * h->len + y;
  1014.       code = h->table[idx];
  1015.       bit  = h->hlen [idx];
  1016.       if(x)
  1017.       {
  1018.         code = (code << 1) | sign_x;
  1019.         bit += 1;
  1020.       }
  1021.       if(y)
  1022.       {
  1023.         code = (code << 1) | sign_y;
  1024.         bit += 1;
  1025.       }
  1026.       putlong( code, bit );
  1027.       sumbit += bit;
  1028.     }
  1029.   }
  1030.   /* flush remaining bits */
  1031.   putbits(cc, sz);
  1032.   return sumbit;
  1033. }
  1034. void putbits(uint32_t val, uint32_t nbit)
  1035. {
  1036.   int new_bitpos = CodedData.bitpos + nbit;
  1037.   int ptrpos     = CodedData.bitpos >> 5;
  1038.   val = val & (0xffffffff >> (32 - nbit));
  1039.   /* data fit in one uint32_t */
  1040.   if(((new_bitpos - 1) >> 5) == ptrpos)
  1041.     CodedData.bbuf[ptrpos] |= val << ((32 - new_bitpos) & 31);
  1042.   else
  1043.   {
  1044.     CodedData.bbuf[ptrpos  ] |= val >> ((new_bitpos - 32) & 31);
  1045.     CodedData.bbuf[ptrpos+1] |= val << ((32 - new_bitpos) & 31);
  1046.   }
  1047.   CodedData.bitpos = new_bitpos;
  1048. }
  1049. /***************************************************************************/
  1050. /*  Choose the Huffman table that will encode ix[begin..end] with          */
  1051. /*  the fewest bits.                                                       */
  1052. /*  Note: This code contains knowledge about the sizes and characteristic  */
  1053. /*  of the Huffman tables as defined in the IS (Table B.7), and will not   */
  1054. /*  work with any arbitrary tables.                                        */
  1055. /***************************************************************************/
  1056. static int choose_table( short *ix, uint32_t begin, uint32_t end, int *bits )
  1057. {
  1058.   uint32_t i;
  1059.   int    max, table0, table1;
  1060.   for(i=begin,max=0; i<end; i++)
  1061.     if(ix[i] > max)
  1062.       max = ix[i];
  1063.   if(max < 16)
  1064.   {
  1065.     /* tables without linbits */
  1066.     /* indx: 0  1  2  3  4  5  6  7  8  9 10 11 12  13 14  15 */
  1067.     /*  len: 0, 2, 3, 3, 0, 4, 4, 6, 6, 6, 8, 8, 8, 16, 0, 16 */
  1068.     switch(max)
  1069.     {
  1070.       case 0:  return  0;
  1071.       case 1:  return       count_bit1(ix, begin, end, bits);
  1072.       case 2:  return  2 + find_best_2(ix, begin, end, tab23, 3, bits);
  1073.       case 3:  return  5 + find_best_2(ix, begin, end, tab56, 4, bits);
  1074.       case 4:
  1075.       case 5:  return  7 + find_best_3(ix, begin, end, tab789, 6, bits);
  1076.       case 6:
  1077.       case 7:  return 10 + find_best_3(ix, begin, end, tabABC, 8, bits);
  1078.       default: return 13 + find_best_2(ix, begin, end, tab1315, 16, bits) * 2;
  1079.     }
  1080.   }
  1081.   else
  1082.   {
  1083.     /* tables with linbits */
  1084.     max -= 15;
  1085.     for(table0=0; table0<8; table0++)
  1086.       if(ht_big[table0].linmax >= max)
  1087.         break;
  1088.     for(table1=8; table1<16; table1++)
  1089.       if(ht_big[table1].linmax >= max)
  1090.         break;
  1091.     return 16 + count_bigv(ix, begin, end, table0, table1, bits);
  1092.   }
  1093. }
  1094. int find_best_2(short *ix, uint32_t start, uint32_t end, const uint32_t *table,
  1095.                 uint32_t len, int *bits)
  1096. {
  1097.   uint32_t i, sum = 0;
  1098.   for(i=start; i<end; i+=2)
  1099.     sum += table[ix[i] * len + ix[i+1]];
  1100.   if((sum & 0xffff) <= (sum >> 16))
  1101.   {
  1102.     *bits = (sum & 0xffff);
  1103.     return 1;
  1104.   }
  1105.   else
  1106.   {
  1107.     *bits = sum >> 16;
  1108.     return 0;
  1109.   }
  1110. }
  1111. int find_best_3(short *ix, uint32_t start, uint32_t end, const uint32_t *table,
  1112.                 uint32_t len, int *bits)
  1113. {
  1114.   uint32_t i, j, sum  = 0;
  1115.   int          sum1 = 0;
  1116.   int          sum2 = 0;
  1117.   int          sum3 = 0;
  1118.   /* avoid overflow in packed additions: 78*13 < 1024 */
  1119.   for(i=start; i<end; )
  1120.   {
  1121.     j = i + 2*78 > end ? end : i + 2*78;
  1122.     for(sum=0; i<j; i+=2)
  1123.       sum += table[ix[i] * len + ix[i+1]];
  1124.     sum1 += (sum >> 20);
  1125.     sum2 += (sum >> 10) & 0x3ff;
  1126.     sum3 += (sum >>  0) & 0x3ff;
  1127.   }
  1128.   i = 0;
  1129.   if(sum1 > sum2) { sum1 = sum2;  i = 1; }
  1130.   if(sum1 > sum3) { sum1 = sum3;  i = 2; }
  1131.   *bits = sum1;
  1132.   return i;
  1133. }
  1134. /*************************************************************************/
  1135. /* Function: Count the number of bits necessary to code the subregion.   */
  1136. /*************************************************************************/
  1137. int count_bit1(short *ix, uint32_t start, uint32_t end, int *bits )
  1138. {
  1139.   uint32_t i, sum = 0;
  1140.   for(i=start; i<end; i+=2)
  1141.     sum += t1l[4 + ix[i] * 2 + ix[i+1]];
  1142.   *bits = sum;
  1143.   return 1; /* this is table1 */
  1144. }
  1145. int count_bigv(short *ix, uint32_t start, uint32_t end, int table0,
  1146.                int table1, int *bits )
  1147. {
  1148.   uint32_t  i, sum0, sum1, sum=0, bigv=0, x, y;
  1149.   /* ESC-table is used */
  1150.   for(i=start; i<end; i+=2)
  1151.   {
  1152.     x = ix[i];
  1153.     y = ix[i+1];
  1154.     if(x > 14) { x = 15; bigv++; }
  1155.     if(y > 14) { y = 15; bigv++; }
  1156.     sum += tab1624[x * 16 + y];
  1157.   }
  1158.   sum0 = (sum  >>  16)  + bigv * ht_big[table0].linbits;
  1159.   sum1 = (sum & 0xffff) + bigv * ht_big[table1].linbits;
  1160.   if(sum0 <= sum1)
  1161.   {
  1162.     *bits = sum0;
  1163.     return table0;
  1164.   }
  1165.   else
  1166.   {
  1167.     *bits = sum1;
  1168.     return table1;
  1169.   }
  1170. }
  1171. /*************************************************************************/
  1172. /* Function: Calculation of rzero, count1, address3                      */
  1173. /* (Partitions ix into big values, quadruples and zeros).                */
  1174. /*************************************************************************/
  1175. static int calc_runlen( short *ix, side_info_t *si )
  1176. {
  1177.   int  p, i, sum = 0;
  1178.   for(i=SAMPL2; i-=2; )
  1179.     if(*(uint32_t*)&ix[i-2]) /* !!!! short *ix; !!!!! */
  1180.       break;
  1181.   si->count1 = 0;
  1182.   for( ; i>3; i-=4)
  1183.   {
  1184.     int v = ix[i-1];
  1185.     int w = ix[i-2];
  1186.     int x = ix[i-3];
  1187.     int y = ix[i-4];
  1188.     if((v | w | x | y) <= 1)
  1189.     {
  1190.       p = (y<<3) + (x<<2) + (w<<1) + (v);
  1191.       sum += tab01[p];
  1192.       si->count1++;
  1193.     }
  1194.     else break;
  1195.   }
  1196.   si->address3 = i;
  1197.   if((sum >> 16) < (sum & 0xffff))
  1198.   {
  1199.     si->table_select[3] = 0;
  1200.     return sum >> 16;
  1201.   }
  1202.   else
  1203.   {
  1204.     si->table_select[3] = 1;
  1205.     return sum & 0xffff;
  1206.   }
  1207. }
  1208. /*************************************************************************/
  1209. /*   Function: Quantization of the vector xr ( -> ix)                    */
  1210. /*************************************************************************/
  1211. static int quantize_int(int *xr, short *ix, side_info_t *si)
  1212. {
  1213.   unsigned int i, idx, s, frac_pow[] = { 0x10000, 0xd745, 0xb505, 0x9838 };
  1214.   s = frac_pow[si->quantStep & 3] >> si->quantStep / 4;
  1215.   /* check for possible 'out of range' values */
  1216.   if(((si->max_val + 256) >> 8) * s >= (65536 << 8))
  1217.     return 0;
  1218.   if(((si->max_val + 256) >> 8) * s < (4096 << 8))
  1219.   { /* all values fit the table size */
  1220.     for(i=SAMPL2; i--; )
  1221.       ix[i] = int2idx[(xr[i] * s + 0x8000) >> 16];
  1222.   }
  1223.   else
  1224.   { /* check each index wether it fits the table */
  1225.     for(i=SAMPL2; i--; )
  1226.     {
  1227.       idx = (xr[i] * s + 0x08000) >> 16;
  1228.       if(idx > 4095)  ix[i] = int2idx[(idx + 8) >> 4] << 3;
  1229.       else            ix[i] = int2idx[idx];
  1230.     }
  1231.   }
  1232.   return 1;
  1233. }
  1234. /*************************************************************************/
  1235. /* subdivides the bigvalue region which will use separate Huffman tables */
  1236. /*************************************************************************/
  1237. static void subdivide(side_info_t *si)
  1238. {
  1239.   int scfb, count0, count1;
  1240.   if( !si->address3 )
  1241.   { /* no bigvalue region */
  1242.     si->region_0_1 = 0;
  1243.     si->address1   = 0;
  1244.     si->address2   = 0;
  1245.   }
  1246.   else
  1247.   {
  1248.     /* Calculate scale factor band index */
  1249.     for(scfb=0; scalefac[scfb] < si->address3; )
  1250.       scfb++;
  1251.     count0 = subdv_table[scfb].region0_cnt;
  1252.     count1 = subdv_table[scfb].region1_cnt;
  1253.     si->region_0_1 = (count0 << 3) | count1;
  1254.     si->address1   = scalefac[count0 + 1];
  1255.     si->address2   = scalefac[count0 + 1 + count1 + 1];
  1256.   }
  1257. }
  1258. /*******************************************************************/
  1259. /* Count the number of bits necessary to code the bigvalues region */
  1260. /*******************************************************************/
  1261. static int bigv_bitcount(short *ix, side_info_t *gi)
  1262. {
  1263.   int b1=0, b2=0, b3=0;
  1264.   /* Select huffman code tables for bigvalues regions */
  1265.   gi->table_select[0] = 0;
  1266.   gi->table_select[1] = 0;
  1267.   gi->table_select[2] = 0;
  1268.   if( gi->address1 > 0 )            /* region0 */
  1269.     gi->table_select[0] = choose_table(ix, 0           , gi->address1, &b1);
  1270.   if( gi->address2 > gi->address1 ) /* region1 */
  1271.     gi->table_select[1] = choose_table(ix, gi->address1, gi->address2, &b2);
  1272.   if( gi->address3 > gi->address2 ) /* region2 */
  1273.     gi->table_select[2] = choose_table(ix, gi->address2, gi->address3, &b3);
  1274.   return b1+b2+b3;
  1275. }
  1276. static int quantize_and_count_bits(int *xr, short *ix, side_info_t *si)
  1277. {
  1278.   int bits = 10000;
  1279.   if(quantize_int(xr, ix, si))
  1280.   {
  1281.     bits = calc_runlen(ix, si);      /* rzero,count1,address3  */
  1282.     subdivide(si);                   /* bigvalues sfb division */
  1283.     bits += bigv_bitcount(ix,si);    /* bit count */
  1284.   }
  1285.   return bits;
  1286. }
  1287. /************************************************************************/
  1288. /* The code selects the best quantStep for a particular set of scalefacs*/
  1289. /************************************************************************/
  1290. static int inner_loop(int *xr, int max_bits, side_info_t *si)
  1291. {
  1292.   int bits;
  1293.   while((bits=quantize_and_count_bits(xr, enc_data, si)) < max_bits-64)
  1294.   {
  1295.     if(si->quantStep == 0)
  1296.       break;
  1297.     if(si->quantStep <= 2)
  1298.       si->quantStep  = 0;
  1299.     else
  1300.       si->quantStep -= 2;
  1301.   }
  1302.   while(bits > max_bits)
  1303.   {
  1304.     si->quantStep++;
  1305.     bits = quantize_and_count_bits(xr, enc_data, si);
  1306.   }
  1307.   return bits;
  1308. }
  1309. static void iteration_loop(int *xr, side_info_t *si, int gr_cnt)
  1310. {
  1311.   int remain, tar_bits, max_bits = cfg.mean_bits;
  1312.   /* distribute reserved bits to remaining granules */
  1313.   tar_bits = max_bits + (cfg.ResvSize / gr_cnt & ~7);
  1314.   if(tar_bits > max_bits + max_bits/2)
  1315.     tar_bits = max_bits + max_bits/2;
  1316.   si->part2_3_length = inner_loop(xr, tar_bits, si);
  1317.   si->global_gain    = si->quantStep + 142 - si->additStep;
  1318.   /* unused bits of the reservoir can be used for remaining granules */
  1319.   cfg.ResvSize += max_bits - si->part2_3_length;
  1320.   /* end: distribute the reserved bits to one or two granules */
  1321.   if(gr_cnt == 1)
  1322.   {
  1323.     si->part2_3_length += cfg.ResvSize;
  1324.     /* mp3 format allows max 12bits for granule length */
  1325.     if(si->part2_3_length > 4092)
  1326.     {
  1327.       remain = (si->part2_3_length - 4092 + 31) >> 5;
  1328.       si->part2_3_length    -= remain << 5;
  1329.       si[-1].part2_3_length += remain << 5;
  1330.       while(remain--)
  1331.         putbits(~0, 32);
  1332.     }
  1333.   }
  1334. }
  1335. /* returns sum_j=0^31 a[j]*cos(PI*j*(k+1/2)/32), 0<=k<32 */
  1336. static void window_subband1(short *wk, int sb0[SBLIMIT], int sb1[SBLIMIT])
  1337. {
  1338.   int   k, i, u, v;
  1339.   short *wp, *x1, *x2;
  1340. #ifdef CPU_COLDFIRE
  1341.   int s0, s1, t0, t1;
  1342.   for(k=0; k<18; k++, wk+=64, sb0+=SBLIMIT, sb1+=SBLIMIT)
  1343.   {
  1344.     wp = enwindow;
  1345.     x1 = wk;
  1346.     x2 = x1 - 124;
  1347.     for(i=-15; i<0; i++)
  1348.     {
  1349.       asm volatile(
  1350.       "move.l (-224*4,%[x2]), %%d4n"   /* d4 = x2[-224] */
  1351.       "movem.l (%[wp]), %%d0-%%d3n"    /* load 8 values */
  1352.       "mac.w %%d0u, %%d4u,                       %%acc0n"
  1353.       "mac.w %%d0u, %%d4l, (-160*4,%[x2]), %%d4, %%acc1n"
  1354.       "mac.w %%d0l, %%d4u,                       %%acc0n"
  1355.       "mac.w %%d0l, %%d4l, ( -96*4,%[x2]), %%d4, %%acc1n"
  1356.       "mac.w %%d1u, %%d4u,                       %%acc0n"
  1357.       "mac.w %%d1u, %%d4l, ( -32*4,%[x2]), %%d4, %%acc1n"
  1358.       "mac.w %%d1l, %%d4u,                       %%acc0n"
  1359.       "mac.w %%d1l, %%d4l, (  32*4,%[x2]), %%d4, %%acc1n"
  1360.       "mac.w %%d2u, %%d4u,                       %%acc0n"
  1361.       "mac.w %%d2u, %%d4l, (  96*4,%[x2]), %%d4, %%acc1n"
  1362.       "mac.w %%d2l, %%d4u,                       %%acc0n"
  1363.       "mac.w %%d2l, %%d4l, ( 160*4,%[x2]), %%d4, %%acc1n"
  1364.       "mac.w %%d3u, %%d4u,                       %%acc0n"
  1365.       "mac.w %%d3u, %%d4l, ( 224*4,%[x2]), %%d4, %%acc1n"
  1366.       "mac.w %%d3l, %%d4u,                       %%acc0n"
  1367.       "mac.w %%d3l, %%d4l, (-256*4,%[x1]), %%d4, %%acc1n"
  1368.       "movem.l (16,%[wp]), %%d0-%%d3n" /* load 8 values */
  1369.       "mac.w %%d0u, %%d4u,                       %%acc0n"
  1370.       "mac.w %%d0u, %%d4l, (-192*4,%[x1]), %%d4, %%acc1n"
  1371.       "mac.w %%d0l, %%d4u,                       %%acc0n"
  1372.       "mac.w %%d0l, %%d4l, (-128*4,%[x1]), %%d4, %%acc1n"
  1373.       "mac.w %%d1u, %%d4u,                       %%acc0n"
  1374.       "mac.w %%d1u, %%d4l, ( -64*4,%[x1]), %%d4, %%acc1n"
  1375.       "mac.w %%d1l, %%d4u,                       %%acc0n"
  1376.       "mac.w %%d1l, %%d4l, (   0*4,%[x1]), %%d4, %%acc1n"
  1377.       "mac.w %%d2u, %%d4u,                       %%acc0n"
  1378.       "mac.w %%d2u, %%d4l, (  64*4,%[x1]), %%d4, %%acc1n"
  1379.       "mac.w %%d2l, %%d4u,                       %%acc0n"
  1380.       "mac.w %%d2l, %%d4l, ( 128*4,%[x1]), %%d4, %%acc1n"
  1381.       "mac.w %%d3u, %%d4u,                       %%acc0n"
  1382.       "mac.w %%d3u, %%d4l, ( 192*4,%[x1]), %%d4, %%acc1n"
  1383.       "mac.w %%d3l, %%d4u,                       %%acc0n"
  1384.       "mac.w %%d3l, %%d4l, ( 224*4,%[x1]), %%d4, %%acc1n"
  1385.       "movclr.l %%acc0, %%d0n"
  1386.       "move.l %%d0, %[s0]n"
  1387.       "movclr.l %%acc1, %%d0n"
  1388.       "move.l %%d0, %[s1]n"
  1389.       "movem.l (%[wp]), %%d0-%%d3n"    /* load 8 values */
  1390.       "mac.w %%d0u, %%d4u,                       %%acc0n"
  1391.       "mac.w %%d0u, %%d4l, ( 160*4,%[x1]), %%d4, %%acc1n"
  1392.       "mac.w %%d0l, %%d4u,                       %%acc0n"
  1393.       "mac.w %%d0l, %%d4l, (  96*4,%[x1]), %%d4, %%acc1n"
  1394.       "mac.w %%d1u, %%d4u,                       %%acc0n"
  1395.       "mac.w %%d1u, %%d4l, (  32*4,%[x1]), %%d4, %%acc1n"
  1396.       "mac.w %%d1l, %%d4u,                       %%acc0n"
  1397.       "mac.w %%d1l, %%d4l, ( -32*4,%[x1]), %%d4, %%acc1n"
  1398.       "mac.w %%d2u, %%d4u,                       %%acc0n"
  1399.       "mac.w %%d2u, %%d4l, ( -96*4,%[x1]), %%d4, %%acc1n"
  1400.       "mac.w %%d2l, %%d4u,                       %%acc0n"
  1401.       "mac.w %%d2l, %%d4l, (-160*4,%[x1]), %%d4, %%acc1n"
  1402.       "mac.w %%d3u, %%d4u,                       %%acc0n"
  1403.       "mac.w %%d3u, %%d4l, (-224*4,%[x1]), %%d4, %%acc1n"
  1404.       "mac.w %%d3l, %%d4u,                       %%acc0n"
  1405.       "mac.w %%d3l, %%d4l, ( 256*4,%[x2]), %%d4, %%acc1n"
  1406.       "movem.l (32,%[wp]), %%d0-%%d3n"  /* load 8 values */
  1407.       "mac.w %%d0u, %%d4u,                       %%acc0n"
  1408.       "mac.w %%d0u, %%d4l, ( 192*4,%[x2]), %%d4, %%acc1n"
  1409.       "mac.w %%d0l, %%d4u,                       %%acc0n"
  1410.       "mac.w %%d0l, %%d4l, ( 128*4,%[x2]), %%d4, %%acc1n"
  1411.       "mac.w %%d1u, %%d4u,                       %%acc0n"
  1412.       "mac.w %%d1u, %%d4l, (  64*4,%[x2]), %%d4, %%acc1n"
  1413.       "mac.w %%d1l, %%d4u,                       %%acc0n"
  1414.       "mac.w %%d1l, %%d4l, (   0*4,%[x2]), %%d4, %%acc1n"
  1415.       "mac.w %%d2u, %%d4u,                       %%acc0n"
  1416.       "mac.w %%d2u, %%d4l, ( -64*4,%[x2]), %%d4, %%acc1n"
  1417.       "mac.w %%d2l, %%d4u,                       %%acc0n"
  1418.       "mac.w %%d2l, %%d4l, (-128*4,%[x2]), %%d4, %%acc1n"
  1419.       "mac.w %%d3u, %%d4u,                       %%acc0n"
  1420.       "mac.w %%d3u, %%d4l, (-192*4,%[x2]), %%d4, %%acc1n"
  1421.       "mac.w %%d3l, %%d4u,                       %%acc0n"
  1422.       "mac.w %%d3l, %%d4l,                       %%acc1n"
  1423.       "movclr.l %%acc0, %%d0n"
  1424.       "move.l %%d0, %[t0]n"
  1425.       "movclr.l %%acc1, %%d0n"
  1426.       "move.l %%d0, %[t1]n"
  1427.       : [x1] "+a" (x1), [x2] "+a" (x2), [s0] "+m" (s0), [t0] "+m" (t0),
  1428.                                         [s1] "+m" (s1), [t1] "+m" (t1)
  1429.       : [wp] "a" (wp) : "d0", "d1", "d2", "d3", "d4");
  1430.       sb0[30+i*2] =  shft4(t0)          + shft13(s0) * wp[24];
  1431.       sb0[31+i*2] = shft13(t0) * wp[25] - shft13(s0) * wp[26];
  1432.       sb1[30+i*2] =  shft4(t1)          + shft13(s1) * wp[24];
  1433.       sb1[31+i*2] = shft13(t1) * wp[25] - shft13(s1) * wp[26];
  1434.       wp += 27;
  1435.       x1 -=  2;
  1436.       x2 +=  2;
  1437.     }
  1438.     asm volatile(
  1439.     "move.l ( -32*4,%[x1]), %%d4n"   /* d4 = x1[-32] */
  1440.     "movem.l (%[wp]), %%d0-%%d3n" /* load 8 values */
  1441.     "mac.w %%d0u, %%d4u,                       %%acc0n"
  1442.     "mac.w %%d0u, %%d4l, ( -96*4,%[x1]), %%d4, %%acc1n"
  1443.     "mac.w %%d0l, %%d4u,                       %%acc0n"
  1444.     "mac.w %%d0l, %%d4l, (-160*4,%[x1]), %%d4, %%acc1n"
  1445.     "mac.w %%d1u, %%d4u,                       %%acc0n"
  1446.     "mac.w %%d1u, %%d4l, (-224*4,%[x1]), %%d4, %%acc1n"
  1447.     "mac.w %%d1l, %%d4u,                       %%acc0n"
  1448.     "mac.w %%d1l, %%d4l, (  32*4,%[x1]), %%d4, %%acc1n"
  1449.     "mac.w %%d2u, %%d4u,                       %%acc0n"
  1450.     "mac.w %%d2u, %%d4l, (  96*4,%[x1]), %%d4, %%acc1n"
  1451.     "mac.w %%d2l, %%d4u,                       %%acc0n"
  1452.     "mac.w %%d2l, %%d4l, ( 160*4,%[x1]), %%d4, %%acc1n"
  1453.     "mac.w %%d3u, %%d4u,                       %%acc0n"
  1454.     "mac.w %%d3u, %%d4l, ( 224*4,%[x1]), %%d4, %%acc1n"
  1455.     "mac.w %%d3l, %%d4u,                       %%acc0n"
  1456.     "mac.w %%d3l, %%d4l, ( -16*4,%[x1]), %%d4, %%acc1n"
  1457.     "movclr.l %%acc0, %%d0n"
  1458.     "move.l %%d0, %[s0]n"
  1459.     "movclr.l %%acc1, %%d0n"
  1460.     "move.l %%d0, %[s1]n"
  1461.     "movem.l (16,%[wp]), %%d0-%%d3n" /* load 8 values */
  1462.     "mac.w %%d0u, %%d4u,                       %%acc0n"
  1463.     "mac.w %%d0u, %%d4l, ( -48*4,%[x1]), %%d4, %%acc1n"
  1464.     "mac.w %%d1u, %%d4u,                       %%acc0n"
  1465.     "mac.w %%d1u, %%d4l, (  16*4,%[x1]), %%d4, %%acc1n"
  1466.     "mac.w %%d1l, %%d4u,                       %%acc0n"
  1467.     "mac.w %%d1l, %%d4l, ( -80*4,%[x1]), %%d4, %%acc1n"
  1468.     "mac.w %%d2u, %%d4u,                       %%acc0n"
  1469.     "mac.w %%d2u, %%d4l, (  48*4,%[x1]), %%d4, %%acc1n"
  1470.     "mac.w %%d2u, %%d4u,                       %%acc0n"
  1471.     "mac.w %%d2u, %%d4l, (-112*4,%[x1]), %%d4, %%acc1n"
  1472.     "mac.w %%d3u, %%d4u,                       %%acc0n"
  1473.     "mac.w %%d3u, %%d4l, (  80*4,%[x1]), %%d4, %%acc1n"
  1474.     "mac.w %%d3l, %%d4u,                       %%acc0n"
  1475.     "mac.w %%d3l, %%d4l, (-144*4,%[x1]), %%d4, %%acc1n"
  1476.     "movem.l (32,%[wp]), %%d0-%%d3n" /* load 8 values */
  1477.     "mac.w %%d0u, %%d4u,                       %%acc0n"
  1478.     "mac.w %%d0u, %%d4l, ( 112*4,%[x1]), %%d4, %%acc1n"
  1479.     "mac.w %%d0u, %%d4u,                       %%acc0n"
  1480.     "mac.w %%d0u, %%d4l, (-176*4,%[x1]), %%d4, %%acc1n"
  1481.     "mac.w %%d1u, %%d4u,                       %%acc0n"
  1482.     "mac.w %%d1u, %%d4l, ( 144*4,%[x1]), %%d4, %%acc1n"
  1483.     "mac.w %%d1l, %%d4u,                       %%acc0n"
  1484.     "mac.w %%d1l, %%d4l, (-208*4,%[x1]), %%d4, %%acc1n"
  1485.     "mac.w %%d2u, %%d4u,                       %%acc0n"
  1486.     "mac.w %%d2u, %%d4l, ( 176*4,%[x1]), %%d4, %%acc1n"
  1487.     "mac.w %%d2u, %%d4u,                       %%acc0n"
  1488.     "mac.w %%d2u, %%d4l, (-240*4,%[x1]), %%d4, %%acc1n"
  1489.     "mac.w %%d3u, %%d4u,                       %%acc0n"
  1490.     "mac.w %%d3u, %%d4l, ( 208*4,%[x1]), %%d4, %%acc1n"
  1491.     "mac.w %%d3l, %%d4u,                       %%acc0n"
  1492.     "mac.w %%d3l, %%d4l,                       %%acc1n"
  1493.     "movclr.l %%acc0, %%d0n"
  1494.     "move.l %%d0, %[t0]n"
  1495.     "movclr.l %%acc1, %%d0n"
  1496.     "move.l %%d0, %[t1]n"
  1497.     : [x1] "+a" (x1), [s0] "+m" (s0), [t0] "+m" (t0),
  1498.                       [s1] "+m" (s1), [t1] "+m" (t1)
  1499.     : [wp] "a" (wp) : "d0", "d1", "d2", "d3", "d4");
  1500.     u  = shft4(s0 - t0);
  1501.     v  = shft4(s0 + t0);
  1502.     t0 = sb0[14];
  1503.     s0 = sb0[15] - t0;
  1504.     sb0[31] = v + t0;   /* A0 */
  1505.     sb0[30] = u + s0;   /* A1 */
  1506.     sb0[15] = u - s0;   /* A2 */
  1507.     sb0[14] = v - t0;   /* A3 */
  1508.     u  = shft4(s1 - t1);
  1509.     v  = shft4(s1 + t1);
  1510.     t1 = sb1[14];
  1511.     s1 = sb1[15] - t1;
  1512.     sb1[31] = v + t1;   /* A0 */
  1513.     sb1[30] = u + s1;   /* A1 */
  1514.     sb1[15] = u - s1;   /* A2 */
  1515.     sb1[14] = v - t1;   /* A3 */
  1516.   }
  1517. #else
  1518.   int ch, s, t, *a;
  1519.   for(ch=0; ch<cfg.channels; ch++)
  1520.   {
  1521.     a = ch ? sb1 : sb0;
  1522.     for(k=0; k<18; k++, wk+=64, a+=SBLIMIT)
  1523.     {
  1524.       wp = enwindow;
  1525.       x1 = wk;
  1526.       x2 = x1 - 124;
  1527.       /* x1[-572] .... x1[448] = 1022 */
  1528.       /* 18*4*16*32 */
  1529.       for(i=-15; i<0; i++)
  1530.       {
  1531.         s  = (int)x2[-224*2] * wp[ 0];  t  = (int)x1[ 224*2] * wp[ 0];
  1532.         s += (int)x2[-160*2] * wp[ 1];  t += (int)x1[ 160*2] * wp[ 1];
  1533.         s += (int)x2[- 96*2] * wp[ 2];  t += (int)x1[  96*2] * wp[ 2];
  1534.         s += (int)x2[- 32*2] * wp[ 3];  t += (int)x1[  32*2] * wp[ 3];
  1535.         s += (int)x2[  32*2] * wp[ 4];  t += (int)x1[- 32*2] * wp[ 4];
  1536.         s += (int)x2[  96*2] * wp[ 5];  t += (int)x1[- 96*2] * wp[ 5];
  1537.         s += (int)x2[ 160*2] * wp[ 6];  t += (int)x1[-160*2] * wp[ 6];
  1538.         s += (int)x2[ 224*2] * wp[ 7];  t += (int)x1[-224*2] * wp[ 7];
  1539.         s += (int)x1[-256*2] * wp[ 8];  t += (int)x2[ 256*2] * wp[16];
  1540.         s += (int)x1[-192*2] * wp[ 9];  t += (int)x2[ 192*2] * wp[17];
  1541.         s += (int)x1[-128*2] * wp[10];  t += (int)x2[ 128*2] * wp[18];
  1542.         s += (int)x1[- 64*2] * wp[11];  t += (int)x2[  64*2] * wp[19];
  1543.         s += (int)x1[   0*2] * wp[12];  t += (int)x2[   0*2] * wp[20];
  1544.         s += (int)x1[  64*2] * wp[13];  t += (int)x2[- 64*2] * wp[21];
  1545.         s += (int)x1[ 128*2] * wp[14];  t += (int)x2[-128*2] * wp[22];
  1546.         s += (int)x1[ 192*2] * wp[15];  t += (int)x2[-192*2] * wp[23];
  1547.         a[30+i*2] =  shft4(t)          + shft13(s) * wp[24];
  1548.         a[31+i*2] = shft13(t) * wp[25] - shft13(s) * wp[26];
  1549.         wp += 27;
  1550.         x1 -=  2;
  1551.         x2 +=  2;
  1552.       }
  1553.       t  =  (int)x1[- 16*2]            * wp[ 8];  s  = (int)x1[ -32*2] * wp[0];
  1554.       t += ((int)x1[- 48*2]-x1[ 16*2]) * wp[10];  s += (int)x1[ -96*2] * wp[1];
  1555.       t += ((int)x1[- 80*2]+x1[ 48*2]) * wp[12];  s += (int)x1[-160*2] * wp[2];
  1556.       t += ((int)x1[-112*2]-x1[ 80*2]) * wp[14];  s += (int)x1[-224*2] * wp[3];
  1557.       t += ((int)x1[-144*2]+x1[112*2]) * wp[16];  s += (int)x1[  32*2] * wp[4];
  1558.       t += ((int)x1[-176*2]-x1[144*2]) * wp[18];  s += (int)x1[  96*2] * wp[5];
  1559.       t += ((int)x1[-208*2]+x1[176*2]) * wp[20];  s += (int)x1[ 160*2] * wp[6];
  1560.       t += ((int)x1[-240*2]-x1[208*2]) * wp[22];  s += (int)x1[ 224*2] * wp[7];
  1561.       u = shft4(s - t);
  1562.       v = shft4(s + t);
  1563.       t = a[14];
  1564.       s = a[15] - t;
  1565.       a[31] = v + t;   /* A0 */
  1566.       a[30] = u + s;   /* A1 */
  1567.       a[15] = u - s;   /* A2 */
  1568.       a[14] = v - t;   /* A3 */
  1569.     }
  1570.     wk -= 18 * 64 - 1; /* rewind wk (to next channel start) */
  1571.   }
  1572. #endif
  1573. }
  1574. static void window_subband2(short *x1, int a[SBLIMIT])
  1575. {
  1576.   int   xr;
  1577.   short *wp = enwindow;
  1578.   short *x2 = x1 - 124;
  1579.   wp += 27 * 15;
  1580.   x1 -=  2 * 15;
  1581.   x2 +=  2 * 15;
  1582.   xr = a[28] - a[0];  a[0] += a[28];  a[28] = shft9(xr) * wp[-2*27+25];
  1583.   xr = a[29] - a[1];  a[1] += a[29];  a[29] = shft9(xr) * wp[-2*27+25];
  1584.   xr = a[26] - a[2];  a[2] += a[26];  a[26] = shft9(xr) * wp[-4*27+25];
  1585.   xr = a[27] - a[3];  a[3] += a[27];  a[27] = shft9(xr) * wp[-4*27+25];
  1586.   xr = a[24] - a[4];  a[4] += a[24];  a[24] = shft9(xr) * wp[-6*27+25];
  1587.   xr = a[25] - a[5];  a[5] += a[25];  a[25] = shft9(xr) * wp[-6*27+25];
  1588.   xr = a[22] - a[6];  a[6] += a[22];  a[22] = shft9(xr) * SQRT        ;
  1589.   xr = a[23] - a[7];  a[7] += a[23];  a[23] = shft9(xr) * SQRT  - a[7];
  1590.   a[ 7] -= a[ 6];
  1591.   a[22] -= a[ 7];
  1592.   a[23] -= a[22];
  1593.   xr = a[ 6];  a[ 6] = a[31] - xr;  a[31] = a[31] + xr;
  1594.   xr = a[ 7];  a[ 7] = a[30] - xr;  a[30] = a[30] + xr;
  1595.   xr = a[22];  a[22] = a[15] - xr;  a[15] = a[15] + xr;
  1596.   xr = a[23];  a[23] = a[14] - xr;  a[14] = a[14] + xr;
  1597.   xr = a[20] - a[ 8];  a[ 8] += a[20];  a[20] = shft9(xr) * wp[-10*27+25];
  1598.   xr = a[21] - a[ 9];  a[ 9] += a[21];  a[21] = shft9(xr) * wp[-10*27+25];
  1599.   xr = a[18] - a[10];  a[10] += a[18];  a[18] = shft9(xr) * wp[-12*27+25];
  1600.   xr = a[19] - a[11];  a[11] += a[19];  a[19] = shft9(xr) * wp[-12*27+25];
  1601.   xr = a[16] - a[12];  a[12] += a[16];  a[16] = shft9(xr) * wp[-14*27+25];
  1602.   xr = a[17] - a[13];  a[13] += a[17];  a[17] = shft9(xr) * wp[-14*27+25];
  1603.   xr =-a[20] + a[24];  a[20] += a[24];  a[24] = shft9(xr) * wp[-12*27+25];
  1604.   xr =-a[21] + a[25];  a[21] += a[25];  a[25] = shft9(xr) * wp[-12*27+25];
  1605.   xr = a[ 4] - a[ 8];  a[ 4] += a[ 8];  a[ 8] = shft9(xr) * wp[-12*27+25];
  1606.   xr = a[ 5] - a[ 9];  a[ 5] += a[ 9];  a[ 9] = shft9(xr) * wp[-12*27+25];
  1607.   xr = a[ 0] - a[12];  a[ 0] += a[12];  a[12] = shft9(xr) * wp[ -4*27+25];
  1608.   xr = a[ 1] - a[13];  a[ 1] += a[13];  a[13] = shft9(xr) * wp[ -4*27+25];
  1609.   xr = a[16] - a[28];  a[16] += a[28];  a[28] = shft9(xr) * wp[ -4*27+25];
  1610.   xr =-a[17] + a[29];  a[17] += a[29];  a[29] = shft9(xr) * wp[ -4*27+25];
  1611.   xr = SQRT * shft9(a[ 2] - a[10]);  a[ 2] += a[10];  a[10] = xr;
  1612.   xr = SQRT * shft9(a[ 3] - a[11]);  a[ 3] += a[11];  a[11] = xr;
  1613.   xr = SQRT * shft9(a[26] - a[18]);  a[18] += a[26];  a[26] = xr - a[18];
  1614.   xr = SQRT * shft9(a[27] - a[19]);  a[19] += a[27];  a[27] = xr - a[19];
  1615.   xr = a[ 2];  a[19] -= a[ 3];  a[ 3] -= xr;  a[ 2] = a[31] - xr;  a[31] += xr;
  1616.   xr = a[ 3];  a[11] -= a[19];  a[18] -= xr;  a[ 3] = a[30] - xr;  a[30] += xr;
  1617.   xr = a[18];  a[27] -= a[11];  a[19] -= xr;  a[18] = a[15] - xr;  a[15] += xr;
  1618.   xr = a[19];  a[10] -= xr;  a[19] = a[14] - xr;  a[14] += xr;
  1619.   xr = a[10];  a[11] -= xr;  a[10] = a[23] - xr;  a[23] += xr;
  1620.   xr = a[11];  a[26] -= xr;  a[11] = a[22] - xr;  a[22] += xr;
  1621.   xr = a[26];  a[27] -= xr;  a[26] = a[ 7] - xr;  a[ 7] += xr;
  1622.   xr = a[27];  a[27] = a[6] - xr;  a[6] += xr;
  1623.   xr = SQRT * shft9(a[ 0] - a[ 4]);  a[ 0] += a[ 4];  a[ 4] = xr;
  1624.   xr = SQRT * shft9(a[ 1] - a[ 5]);  a[ 1] += a[ 5];  a[ 5] = xr;
  1625.   xr = SQRT * shft9(a[16] - a[20]);  a[16] += a[20];  a[20] = xr;
  1626.   xr = SQRT * shft9(a[17] - a[21]);  a[17] += a[21];  a[21] = xr;
  1627.   xr =-SQRT * shft9(a[ 8] - a[12]);  a[ 8] += a[12];  a[12] = xr - a[ 8];
  1628.   xr =-SQRT * shft9(a[ 9] - a[13]);  a[ 9] += a[13];  a[13] = xr - a[ 9];
  1629.   xr =-SQRT * shft9(a[25] - a[29]);  a[25] += a[29];  a[29] = xr - a[25];
  1630.   xr =-SQRT * shft9(a[24] + a[28]);  a[24] -= a[28];  a[28] = xr - a[24];
  1631.   xr = a[24] - a[16]; a[24] = xr;
  1632.   xr = a[20] - xr;    a[20] = xr;
  1633.   xr = a[28] - xr;    a[28] = xr;
  1634.   xr = a[25] - a[17]; a[25] = xr;
  1635.   xr = a[21] - xr;    a[21] = xr;
  1636.   xr = a[29] - xr;    a[29] = xr;
  1637.   xr = a[17] - a[1];  a[17] = xr;
  1638.   xr = a[ 9] - xr;    a[ 9] = xr;
  1639.   xr = a[25] - xr;    a[25] = xr;
  1640.   xr = a[ 5] - xr;    a[ 5] = xr;
  1641.   xr = a[21] - xr;    a[21] = xr;
  1642.   xr = a[13] - xr;    a[13] = xr;
  1643.   xr = a[29] - xr;    a[29] = xr;
  1644.   xr = a[ 1] - a[0];  a[ 1] = xr;
  1645.   xr = a[16] - xr;    a[16] = xr;
  1646.   xr = a[17] - xr;    a[17] = xr;
  1647.   xr = a[ 8] - xr;    a[ 8] = xr;
  1648.   xr = a[ 9] - xr;    a[ 9] = xr;
  1649.   xr = a[24] - xr;    a[24] = xr;
  1650.   xr = a[25] - xr;    a[25] = xr;
  1651.   xr = a[ 4] - xr;    a[ 4] = xr;
  1652.   xr = a[ 5] - xr;    a[ 5] = xr;
  1653.   xr = a[20] - xr;    a[20] = xr;
  1654.   xr = a[21] - xr;    a[21] = xr;
  1655.   xr = a[12] - xr;    a[12] = xr;
  1656.   xr = a[13] - xr;    a[13] = xr;
  1657.   xr = a[28] - xr;    a[28] = xr;
  1658.   xr = a[29] - xr;    a[29] = xr;
  1659.   xr = a[ 0];  a[ 0] += a[31];  a[31] -= xr;
  1660.   xr = a[ 1];  a[ 1] += a[30];  a[30] -= xr;
  1661.   xr = a[16];  a[16] += a[15];  a[15] -= xr;
  1662.   xr = a[17];  a[17] += a[14];  a[14] -= xr;
  1663.   xr = a[ 8];  a[ 8] += a[23];  a[23] -= xr;
  1664.   xr = a[ 9];  a[ 9] += a[22];  a[22] -= xr;
  1665.   xr = a[24];  a[24] += a[ 7];  a[ 7] -= xr;
  1666.   xr = a[25];  a[25] += a[ 6];  a[ 6] -= xr;
  1667.   xr = a[ 4];  a[ 4] += a[27];  a[27] -= xr;
  1668.   xr = a[ 5];  a[ 5] += a[26];  a[26] -= xr;
  1669.   xr = a[20];  a[20] += a[11];  a[11] -= xr;
  1670.   xr = a[21];  a[21] += a[10];  a[10] -= xr;
  1671.   xr = a[12];  a[12] += a[19];  a[19] -= xr;
  1672.   xr = a[13];  a[13] += a[18];  a[18] -= xr;
  1673.   xr = a[28];  a[28] += a[ 3];  a[ 3] -= xr;
  1674.   xr = a[29];  a[29] += a[ 2];  a[ 2] -= xr;
  1675. }
  1676. static void mdct_long(int *out, int *in)
  1677. {
  1678.   int ct,st;
  1679.   int tc1, tc2, tc3, tc4, ts5, ts6, ts7, ts8;
  1680.   int ts1, ts2, ts3, ts4, tc5, tc6, tc7, tc8;
  1681.   /* 1,2, 5,6, 9,10, 13,14, 17 */
  1682.   tc1 = in[17] - in[ 9];
  1683.   tc3 = in[15] - in[11];
  1684.   tc4 = in[14] - in[12];
  1685.   ts5 = in[ 0] + in[ 8];
  1686.   ts6 = in[ 1] + in[ 7];
  1687.   ts7 = in[ 2] + in[ 6];
  1688.   ts8 = in[ 3] + in[ 5];
  1689.   out[17] = (ts5 + ts7 - ts8) * cx[8] - (ts6 - in[4]) * cx[8];
  1690.   st      = (ts5 + ts7 - ts8) * cx[7] + (ts6 - in[4]) * cx[8];
  1691.   ct      = (tc1 - tc3 - tc4) * cx[6];
  1692.   out[5]  = ct + st;
  1693.   out[6]  = ct - st;
  1694.   tc2     = (in[16] - in[10]) * cx[6];
  1695.   ts6     =  ts6 * cx[7] + in[4] * cx[8];
  1696.   ct      =  tc1 * cx[0] + tc2 + tc3 * cx[1] + tc4 * cx[2];
  1697.   st      = -ts5 * cx[4] + ts6 - ts7 * cx[5] + ts8 * cx[3];
  1698.   out[1]  = ct + st;
  1699.   out[2]  = ct - st;
  1700.   ct      =  tc1 * cx[1] - tc2 - tc3 * cx[2] + tc4 * cx[0];
  1701.   st      = -ts5 * cx[5] + ts6 - ts7 * cx[3] + ts8 * cx[4];
  1702.   out[ 9] = ct + st;
  1703.   out[10] = ct - st;
  1704.   ct      = tc1 * cx[2] - tc2 + tc3 * cx[0] - tc4 * cx[1];
  1705.   st      = ts5 * cx[3] - ts6 + ts7 * cx[4] - ts8 * cx[5];
  1706.   out[13] = ct + st;
  1707.   out[14] = ct - st;
  1708.   ts1 = in[ 8] - in[ 0];
  1709.   ts3 = in[ 6] - in[ 2];
  1710.   ts4 = in[ 5] - in[ 3];
  1711.   tc5 = in[17] + in[ 9];
  1712.   tc6 = in[16] + in[10];
  1713.   tc7 = in[15] + in[11];
  1714.   tc8 = in[14] + in[12];
  1715.   out[0]  = (tc5 + tc7 + tc8) * cx[8] + (tc6 + in[13]) * cx[8];
  1716.   ct      = (tc5 + tc7 + tc8) * cx[7] - (tc6 + in[13]) * cx[8];
  1717.   st      = (ts1 - ts3 + ts4) * cx[6];
  1718.   out[11] = ct + st;
  1719.   out[12] = ct - st;
  1720.   ts2     = (in[7] - in[1]) * cx[6];
  1721.   tc6     = in[13] * cx[8] - tc6 * cx[7];
  1722.   ct      = tc5 * cx[3] - tc6 + tc7 * cx[4] + tc8 * cx[5];
  1723.   st      = ts1 * cx[2] + ts2 + ts3 * cx[0] + ts4 * cx[1];
  1724.   out[3]  = ct + st;
  1725.   out[4]  = ct - st;
  1726.   ct      =-tc5 * cx[5] + tc6 - tc7 * cx[3] - tc8 * cx[4];
  1727.   st      = ts1 * cx[1] + ts2 - ts3 * cx[2] - ts4 * cx[0];
  1728.   out[7]  = ct + st;
  1729.   out[8]  = ct - st;
  1730.   ct      =-tc5 * cx[4] + tc6 - tc7 * cx[5] - tc8 * cx[3];
  1731.   st      = ts1 * cx[0] - ts2 + ts3 * cx[1] - ts4 * cx[2];
  1732.   out[15] = ct + st;
  1733.   out[16] = ct - st;
  1734. }
  1735. static int find_bitrate_index(int type, int bitrate /*, bool stereo */)
  1736. {
  1737.     int i;
  1738.     for(i=0;i<14;i++)
  1739.         if(bitrate == bitr_index[type][i])
  1740.             break;
  1741.     return i;
  1742. }
  1743. static int find_samplerate_index(unsigned long freq, int *mp3_type)
  1744. {
  1745.     int mpeg = freq >= (32000+24000)/2 ? 1 : 0;
  1746.     unsigned long dmin = ULONG_MAX;
  1747.     int idmin = -1, i;
  1748.     for (i = 0; i < 3; i++)
  1749.     {
  1750.         unsigned long diff;
  1751.         if (sampr_index[mpeg][i] == freq)
  1752.         {
  1753.             idmin = i;
  1754.             break;
  1755.         }
  1756.         if ((long)sampr_index[mpeg][i] < (long)freq)
  1757.             diff = freq - sampr_index[mpeg][i];
  1758.         else
  1759.             diff = sampr_index[mpeg][i] - freq;
  1760.         if (diff < dmin)
  1761.         {
  1762.             dmin = diff;
  1763.             idmin = i;
  1764.         }
  1765.     }
  1766.     *mp3_type = mpeg;
  1767.     return idmin;
  1768. }
  1769. static bool init_mp3_encoder_engine(int sample_rate, int num_channels, int bitrate)
  1770. {
  1771.     const bool stereo = num_channels > 1;
  1772.     uint32_t avg_byte_per_frame;
  1773.     cfg.channels      = stereo ? 2 : 1;
  1774.     cfg.mpg.mode      = stereo ? 0 : 3; /* 0=stereo, 3=mono */
  1775.     cfg.mpg.smpl_id   = find_samplerate_index(sample_rate, &cfg.mpg.type);
  1776.     cfg.samplerate    = sampr_index[cfg.mpg.type][cfg.mpg.smpl_id];
  1777.     cfg.mpg.bitr_id   = find_bitrate_index(cfg.mpg.type, bitrate /*, stereo */);
  1778.     cfg.mpg.bitrate   = bitr_index[cfg.mpg.type][cfg.mpg.bitr_id];
  1779.     cfg.mpg.num_bands = num_bands[stereo ? cfg.mpg.type : 2][cfg.mpg.bitr_id];
  1780.     if (cfg.mpg.type == 1)
  1781.     {
  1782.         cfg.granules = 2;
  1783.         pcm_chunk_size = PCM_CHUNK_SIZE1;
  1784.         samp_per_frame = SAMP_PER_FRAME1;
  1785.     }
  1786.     else
  1787.     {
  1788.         cfg.granules = 1;
  1789.         pcm_chunk_size = PCM_CHUNK_SIZE2;
  1790.         samp_per_frame = SAMP_PER_FRAME2;
  1791.     }
  1792.     memcpy(scalefac, sfBand[cfg.mpg.smpl_id + 3*cfg.mpg.type], sizeof(scalefac));
  1793.     memset(mfbuf     , 0              , sizeof(mfbuf     ));
  1794.     memset(mdct_freq , 0              , sizeof(mdct_freq ));
  1795.     memset(enc_data  , 0              , sizeof(enc_data  ));
  1796.     memset(sb_data   , 0              , sizeof(sb_data   ));
  1797.     memset(&CodedData, 0              , sizeof(CodedData ));
  1798.     memcpy(ca        , ca_const       , sizeof(ca        ));
  1799.     memcpy(cs        , cs_const       , sizeof(cs        ));
  1800.     memcpy(cx        , cx_const       , sizeof(cx        ));
  1801.     memcpy(win       , win_const      , sizeof(win       ));
  1802.     memcpy(enwindow  , enwindow_const , sizeof(enwindow  ));
  1803.     memcpy(int2idx   , int2idx_const  , sizeof(int2idx   ));
  1804.     memcpy(ht_count  , ht_count_const , sizeof(ht_count  ));
  1805.     memcpy( tab01    , tab01_const    , sizeof(tab01     ));
  1806.     memcpy( tab23    , tab23_const    , sizeof(tab23     ));
  1807.     memcpy( tab56    , tab56_const    , sizeof(tab56     ));
  1808.     memcpy( tab1315  , tab1315_const  , sizeof(tab1315   ));
  1809.     memcpy( tab1624  , tab1624_const  , sizeof(tab1624   ));
  1810.     memcpy( tab789   , tab789_const   , sizeof(tab789    ));
  1811.     memcpy( tabABC   , tabABC_const   , sizeof(tabABC    ));
  1812.     memcpy( t1HB     , t1HB_const     , sizeof(t1HB      ));
  1813.     memcpy( t2HB     , t2HB_const     , sizeof(t2HB      ));
  1814.     memcpy( t3HB     , t3HB_const     , sizeof(t3HB      ));
  1815.     memcpy( t5HB     , t5HB_const     , sizeof(t5HB      ));
  1816.     memcpy( t6HB     , t6HB_const     , sizeof(t6HB      ));
  1817.     memcpy( t7HB     , t7HB_const     , sizeof(t7HB      ));
  1818.     memcpy( t8HB     , t8HB_const     , sizeof(t8HB      ));
  1819.     memcpy( t9HB     , t9HB_const     , sizeof(t9HB      ));
  1820.     memcpy(t10HB     , t10HB_const    , sizeof(t10HB     ));
  1821.     memcpy(t11HB     , t11HB_const    , sizeof(t11HB     ));
  1822.     memcpy(t12HB     , t12HB_const    , sizeof(t12HB     ));
  1823.     memcpy(t13HB     , t13HB_const    , sizeof(t13HB     ));
  1824.     memcpy(t15HB     , t15HB_const    , sizeof(t15HB     ));
  1825.     memcpy(t16HB     , t16HB_const    , sizeof(t16HB     ));
  1826.     memcpy(t24HB     , t24HB_const    , sizeof(t24HB     ));
  1827.     memcpy( t1l      , t1l_const      , sizeof(t1l       ));
  1828.     memcpy( t2l      , t2l_const      , sizeof(t2l       ));
  1829.     memcpy( t3l      , t3l_const      , sizeof(t3l       ));
  1830.     memcpy( t5l      , t5l_const      , sizeof(t5l       ));
  1831.     memcpy( t6l      , t6l_const      , sizeof(t6l       ));
  1832.     memcpy( t7l      , t7l_const      , sizeof(t7l       ));
  1833.     memcpy( t8l      , t8l_const      , sizeof(t8l       ));
  1834.     memcpy( t9l      , t9l_const      , sizeof(t9l       ));
  1835.     memcpy(t10l      , t10l_const     , sizeof(t10l      ));
  1836.     memcpy(t11l      , t11l_const     , sizeof(t11l      ));
  1837.     memcpy(t12l      , t12l_const     , sizeof(t12l      ));
  1838.     memcpy(t13l      , t13l_const     , sizeof(t13l      ));
  1839.     memcpy(t15l      , t15l_const     , sizeof(t15l      ));
  1840.     memcpy(t16l      , t16l_const     , sizeof(t16l      ));
  1841.     memcpy(t24l      , t24l_const     , sizeof(t24l      ));
  1842.     memcpy(ht        , ht_const       , sizeof(ht        ));
  1843.     ht[ 0].table =  NULL;  ht[ 0].hlen = NULL; /* Apparently not used */
  1844.     ht[ 1].table =  t1HB;  ht[ 1].hlen =  t1l;
  1845.     ht[ 2].table =  t2HB;  ht[ 2].hlen =  t2l;
  1846.     ht[ 3].table =  t3HB;  ht[ 3].hlen =  t3l;
  1847.     ht[ 4].table =  NULL;  ht[ 4].hlen = NULL; /* Apparently not used */
  1848.     ht[ 5].table =  t5HB;  ht[ 5].hlen =  t5l;
  1849.     ht[ 6].table =  t6HB;  ht[ 6].hlen =  t6l;
  1850.     ht[ 7].table =  t7HB;  ht[ 7].hlen =  t7l;
  1851.     ht[ 8].table =  t8HB;  ht[ 8].hlen =  t8l;
  1852.     ht[ 9].table =  t9HB;  ht[ 9].hlen =  t9l;
  1853.     ht[10].table = t10HB;  ht[10].hlen = t10l;
  1854.     ht[11].table = t11HB;  ht[11].hlen = t11l;
  1855.     ht[12].table = t12HB;  ht[12].hlen = t12l;
  1856.     ht[13].table = t13HB;  ht[13].hlen = t13l;
  1857.     ht[14].table =  NULL;  ht[14].hlen = NULL; /* Apparently not used */
  1858.     ht[15].table = t15HB;  ht[15].hlen = t15l;
  1859.     /* Figure average number of 'bytes' per frame */
  1860.     avg_byte_per_frame = SAMPL2 * 16000 * cfg.mpg.bitrate / (2 - cfg.mpg.type);
  1861.     avg_byte_per_frame = avg_byte_per_frame / cfg.samplerate;
  1862.     cfg.byte_per_frame = avg_byte_per_frame / 64;
  1863.     cfg.frac_per_frame = avg_byte_per_frame & 63;
  1864.     cfg.slot_lag       = 0;
  1865.     cfg.sideinfo_len   = 32 + (cfg.mpg.type ? (cfg.channels == 1 ? 136 : 256)
  1866.                                             : (cfg.channels == 1 ?  72 : 136));
  1867.     return true;
  1868. }
  1869. static inline void to_mono(uint32_t **samp)
  1870. {
  1871.     int32_t lr = **samp;
  1872.     int32_t m  = (int16_t)lr + (lr >> 16) + err;
  1873.     err = m & 1;
  1874.     m >>= 1;
  1875.     *(*samp)++ = (m << 16) | (uint16_t)m;
  1876. } /* to_mono */
  1877. static void to_mono_mm(void)
  1878. {
  1879.     /* |llllllllllllllll|rrrrrrrrrrrrrrrr| =>
  1880.      * |mmmmmmmmmmmmmmmm|mmmmmmmmmmmmmmmm|
  1881.      */
  1882.     uint32_t *samp = (uint32_t *)&mfbuf[2*512];
  1883.     uint32_t *samp_end = samp + samp_per_frame;
  1884.     do
  1885.     {
  1886.         to_mono(&samp);
  1887.         to_mono(&samp);
  1888.         to_mono(&samp);
  1889.         to_mono(&samp);
  1890.         to_mono(&samp);
  1891.         to_mono(&samp);
  1892.         to_mono(&samp);
  1893.         to_mono(&samp);
  1894.     }
  1895.     while (samp < samp_end);
  1896. } /* to_mono_mm */
  1897. #ifdef ROCKBOX_LITTLE_ENDIAN
  1898. /* Swaps a frame to big endian */
  1899. static inline void byte_swap_frame32(uint32_t *dst, uint32_t *src,
  1900.                                      size_t size)
  1901. {
  1902.     assert(dst); assert(src);
  1903.     uint32_t *src_end = SKIPBYTES(src, size);
  1904.     do
  1905.     {
  1906. #define swap32 bswap_32
  1907.         *dst++ = swap32(*src); src++;
  1908.         *dst++ = swap32(*src); src++;
  1909.         *dst++ = swap32(*src); src++;
  1910.         *dst++ = swap32(*src); src++;
  1911.         *dst++ = swap32(*src); src++;
  1912.         *dst++ = swap32(*src); src++;
  1913.         *dst++ = swap32(*src); src++;
  1914.         *dst++ = swap32(*src); src++;
  1915.     }
  1916.     while(src < src_end);
  1917. } /* byte_swap_frame32 */
  1918. #endif /* ROCKBOX_LITTLE_ENDIAN */
  1919. static void set_scale_facs(int *mdct_freq)
  1920. {
  1921.   unsigned int i, is, ie, k, s;
  1922.   int max_freq_val, avrg_freq_val;
  1923.   /* calc average of first 256 frequency values */
  1924.   for(avrg_freq_val=i=0; i<256; i++)
  1925.     avrg_freq_val += mdct_freq[i];
  1926.   avrg_freq_val >>= 8;
  1927.   /* if max of current band is smaller than average, increase precision */
  1928.   /* last band keeps untouched (not scaled) */
  1929.   for(is=k=0; is<scalefac[21]; k++)
  1930.   {
  1931.     max_freq_val = 0;
  1932.     for(i=is, ie=scalefac[k+1]; i<ie; i++)
  1933.       if(max_freq_val < mdct_freq[i])
  1934.         max_freq_val = mdct_freq[i];
  1935.     for(s=0; s<3; s++)
  1936.       if((max_freq_val<<s) > avrg_freq_val)
  1937.         break;
  1938.     band_scale_f[k] = (unsigned char)s;
  1939.     for(i=is; s && i<ie; i++)
  1940.       mdct_freq[i] <<= s;
  1941.     is = ie;
  1942.   }
  1943. }
  1944. static void encode_frame(char *buffer, struct enc_chunk_hdr *chunk)
  1945. {
  1946.    int      gr, gr_cnt;
  1947.    uint32_t max;
  1948.     /* encode one mp3 frame in this loop */
  1949.     CodedData.bitpos = 0;
  1950.     memset(CodedData.bbuf, 0, sizeof(CodedData.bbuf));
  1951.     if((cfg.slot_lag += cfg.frac_per_frame) >= 64)
  1952.     {   /* Padding for this frame */
  1953.         cfg.slot_lag   -= 64;
  1954.         cfg.mpg.padding = 1;
  1955.     }
  1956.     else
  1957.         cfg.mpg.padding = 0;
  1958.     cfg.mean_bits = (8 * cfg.byte_per_frame + 8 * cfg.mpg.padding
  1959.                        - cfg.sideinfo_len) / cfg.granules / cfg.channels
  1960.                        - 42; // reserved for scale_facs
  1961.     /* shift out old samples */
  1962.     memcpy(mfbuf, mfbuf + 2*cfg.granules*576, 4*512);
  1963.     if (chunk->flags & CHUNKF_START_FILE)
  1964.     {
  1965.         /* prefix silent samples for encoder delay */
  1966.         memset(mfbuf + 2*512, 0, ENC_DELAY_SIZE);
  1967.         /* read new samples to iram for further processing */
  1968.         memcpy(mfbuf + 2*512 + ENC_DELAY_SIZE/2,
  1969.                buffer, pcm_chunk_size - ENC_DELAY_SIZE);
  1970.         chunk->num_pcm = samp_per_frame - ENC_DELAY_SAMP;
  1971.     }
  1972.     else
  1973.     {
  1974.         /* read new samples to iram for further processing */
  1975.         memcpy(mfbuf + 2*512, buffer, pcm_chunk_size);
  1976.         chunk->num_pcm = samp_per_frame;
  1977.     }
  1978.     if (cfg.channels == 1)
  1979.         to_mono_mm();
  1980.     cfg.ResvSize = 0;
  1981.     gr_cnt = cfg.granules * cfg.channels;
  1982.     CodedData.bitpos = cfg.sideinfo_len; /* leave space for mp3 header */
  1983.     for(gr=0; gr<cfg.granules; gr++)
  1984.     {
  1985.         short *wk = mfbuf + 2*286 + gr*1152;
  1986.         int ch;
  1987.         /* 16bit packed wav data can be windowed efficiently on coldfire */
  1988.         window_subband1(wk, sb_data[0][1-gr][0], sb_data[1][1-gr][0]);
  1989.         for(ch=0; ch<cfg.channels; ch++)
  1990.         {
  1991.             int   ii, k, shift;
  1992.             wk = mfbuf + 2*286 + gr*1152 + ch;
  1993.             /* 36864=4*18*16*32 */
  1994.             for(k=0; k<18; k++, wk+=64)
  1995.             {
  1996.                 window_subband2(wk, sb_data[ch][1-gr][k]);
  1997.                 /* Compensate for inversion in the analysis filter */
  1998.                 if(k & 1)
  1999.                 {
  2000.                     int band;
  2001.                     for(band=1; band<32; band+=2)
  2002.                         sb_data[ch][1-gr][k][band] *= -1;
  2003.                 }
  2004.             }
  2005.             /* Perform imdct of 18 previous + 18 current subband samples */
  2006.             /* for integer precision do this loop again (if neccessary)  */
  2007.             shift = 14 - (cfg.cod_info[gr][ch].additStep >> 2);
  2008.             for(k=1,ii=0; ii<3 && k; ii++)
  2009.             {
  2010.                 int *mdct = mdct_freq;
  2011.                 int band;
  2012.                 cfg.cod_info[gr][ch].additStep = 4 * (14 - shift);
  2013.                 for(band=0; band<cfg.mpg.num_bands; band++, mdct+=18)
  2014.                 {
  2015.                     int *band0 = sb_data[ch][  gr][0] + order[band];
  2016.                     int *band1 = sb_data[ch][1-gr][0] + order[band];
  2017.                     int work[18];
  2018.                     /* 9216=4*32*9*8 */
  2019.                     for(k=-9; k<0; k++)
  2020.                     {
  2021.                         int a = shft_n(band1[(k+9)*32], shift);
  2022.                         int b = shft_n(band1[(8-k)*32], shift);
  2023.                         int c = shft_n(band0[(k+9)*32], shift);
  2024.                         int d = shft_n(band0[(8-k)*32], shift);
  2025.                         work[k+ 9] = shft16(a * win[k+ 9][0] +
  2026.                                             b * win[k+ 9][1] +
  2027.                                             c * win[k+ 9][2] +
  2028.                                             d * win[k+ 9][3]);
  2029.                         work[k+18] = shft16(c * win[k+18][0] +
  2030.                                             d * win[k+18][1] +
  2031.                                             a * win[k+18][2] +
  2032.                                             b * win[k+18][3]);
  2033.                     }
  2034.                     /* 7200=4*18*100 */
  2035.                     mdct_long(mdct, work);
  2036.                     /* Perform aliasing reduction butterfly */
  2037.                     if(band != 0)
  2038.                     {
  2039.                         for(k=7; k>=0; --k)
  2040.                         {
  2041.                             int bu, bd;
  2042.                             bu = shft15(mdct[k]) * ca[k] +
  2043.                                  shft15(mdct[-1-k]) * cs[k];
  2044.                             bd = shft15(mdct[k]) * cs[k] -
  2045.                                  shft15(mdct[-1-k]) * ca[k];
  2046.                             mdct[-1-k] = bu;
  2047.                             mdct[ k  ] = bd;
  2048.                         }
  2049.                     }
  2050.                 }
  2051.                 max = 0;
  2052.                 for(k=0; k<576; k++)
  2053.                 {
  2054.                     if(mdct_freq[k] < 0)
  2055.                     {
  2056.                         mdct_sign[k] = 1; /* negative */
  2057.                         mdct_freq[k] = shft13(-mdct_freq[k]);
  2058.                     }
  2059.                     else
  2060.                     {
  2061.                         mdct_sign[k] = 0; /* positive */
  2062.                         mdct_freq[k] = shft13(mdct_freq[k]);
  2063.                     }
  2064.                     if(max < (uint32_t)mdct_freq[k])
  2065.                         max = (uint32_t)mdct_freq[k];
  2066.                 }
  2067.                 cfg.cod_info[gr][ch].max_val = max;
  2068.                 /* calc new shift for higher integer precision */
  2069.                 for(k=0; max<(uint32_t)(0x7800>>k); k++) shift--;
  2070.                 for( ; (max>>k)>=(uint32_t)0x10000; k++) shift++;
  2071.                 if(shift < 0)  shift = 0;
  2072.             }
  2073.             cfg.cod_info[gr][ch].quantStep +=
  2074.                                 cfg.cod_info[gr][ch].additStep;
  2075.             set_scale_facs(mdct_freq);
  2076.             /* bit and noise allocation */
  2077.             iteration_loop(mdct_freq, &cfg.cod_info[gr][ch],
  2078.                            gr_cnt--);
  2079.             /* write the frame to the bitstream */
  2080.             Huffmancodebits(enc_data, mdct_sign,
  2081.                             &cfg.cod_info[gr][ch]);
  2082.             cfg.cod_info[gr][ch].quantStep -=
  2083.                                 cfg.cod_info[gr][ch].additStep;
  2084.             if(cfg.granules == 1)
  2085.             {
  2086.                 memcpy(sb_data[ch][0], sb_data[ch][1],
  2087.                        sizeof(sb_data[ch][0]));
  2088.             }
  2089.         }
  2090.     }
  2091.     chunk->enc_size = cfg.byte_per_frame + cfg.mpg.padding;
  2092.     /* finish this chunk by adding sideinfo header data */
  2093.     CodedData.bitpos = 0;
  2094.     encodeSideInfo( cfg.cod_info );
  2095. #ifdef ROCKBOX_BIG_ENDIAN
  2096.     /* copy chunk to enc_buffer */
  2097.     memcpy(chunk->enc_data, CodedData.bbuf, chunk->enc_size);
  2098. #else
  2099.     /* swap frame to big endian */
  2100.     byte_swap_frame32((uint32_t *)chunk->enc_data, CodedData.bbuf, chunk->enc_size);
  2101. #endif
  2102. } /* encode_frame */