]> git.sesse.net Git - ffmpeg/blob - libavcodec/mpegaudiodectab.h
Original Commit: r105 | ods15 | 2006-10-01 18:09:55 +0200 (Sun, 01 Oct 2006) | 2...
[ffmpeg] / libavcodec / mpegaudiodectab.h
1 /*
2  * MPEG Audio decoder
3  * copyright (c) 2002 Fabrice Bellard
4  *
5  * This library is free software; you can redistribute it and/or
6  * modify it under the terms of the GNU Lesser General Public
7  * License as published by the Free Software Foundation; either
8  * version 2 of the License, or (at your option) any later version.
9  *
10  * This library is distributed in the hope that it will be useful,
11  * but WITHOUT ANY WARRANTY; without even the implied warranty of
12  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
13  * Lesser General Public License for more details.
14  *
15  * You should have received a copy of the GNU Lesser General Public
16  * License along with this library; if not, write to the Free Software
17  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
18  */
19
20 /**
21  * @file mpegaudiodectab.h
22  * mpeg audio layer decoder tables.
23  */
24
25 const uint16_t mpa_bitrate_tab[2][3][15] = {
26     { {0, 32, 64, 96, 128, 160, 192, 224, 256, 288, 320, 352, 384, 416, 448 },
27       {0, 32, 48, 56, 64, 80, 96, 112, 128, 160, 192, 224, 256, 320, 384 },
28       {0, 32, 40, 48, 56, 64, 80, 96, 112, 128, 160, 192, 224, 256, 320 } },
29     { {0, 32, 48, 56, 64, 80, 96, 112, 128, 144, 160, 176, 192, 224, 256},
30       {0, 8, 16, 24, 32, 40, 48, 56, 64, 80, 96, 112, 128, 144, 160},
31       {0, 8, 16, 24, 32, 40, 48, 56, 64, 80, 96, 112, 128, 144, 160}
32     }
33 };
34
35 const uint16_t mpa_freq_tab[3] = { 44100, 48000, 32000 };
36
37 /*******************************************************/
38 /* half mpeg encoding window (full precision) */
39 const int32_t mpa_enwindow[257] = {
40      0,    -1,    -1,    -1,    -1,    -1,    -1,    -2,
41     -2,    -2,    -2,    -3,    -3,    -4,    -4,    -5,
42     -5,    -6,    -7,    -7,    -8,    -9,   -10,   -11,
43    -13,   -14,   -16,   -17,   -19,   -21,   -24,   -26,
44    -29,   -31,   -35,   -38,   -41,   -45,   -49,   -53,
45    -58,   -63,   -68,   -73,   -79,   -85,   -91,   -97,
46   -104,  -111,  -117,  -125,  -132,  -139,  -147,  -154,
47   -161,  -169,  -176,  -183,  -190,  -196,  -202,  -208,
48    213,   218,   222,   225,   227,   228,   228,   227,
49    224,   221,   215,   208,   200,   189,   177,   163,
50    146,   127,   106,    83,    57,    29,    -2,   -36,
51    -72,  -111,  -153,  -197,  -244,  -294,  -347,  -401,
52   -459,  -519,  -581,  -645,  -711,  -779,  -848,  -919,
53   -991, -1064, -1137, -1210, -1283, -1356, -1428, -1498,
54  -1567, -1634, -1698, -1759, -1817, -1870, -1919, -1962,
55  -2001, -2032, -2057, -2075, -2085, -2087, -2080, -2063,
56   2037,  2000,  1952,  1893,  1822,  1739,  1644,  1535,
57   1414,  1280,  1131,   970,   794,   605,   402,   185,
58    -45,  -288,  -545,  -814, -1095, -1388, -1692, -2006,
59  -2330, -2663, -3004, -3351, -3705, -4063, -4425, -4788,
60  -5153, -5517, -5879, -6237, -6589, -6935, -7271, -7597,
61  -7910, -8209, -8491, -8755, -8998, -9219, -9416, -9585,
62  -9727, -9838, -9916, -9959, -9966, -9935, -9863, -9750,
63  -9592, -9389, -9139, -8840, -8492, -8092, -7640, -7134,
64   6574,  5959,  5288,  4561,  3776,  2935,  2037,  1082,
65     70,  -998, -2122, -3300, -4533, -5818, -7154, -8540,
66  -9975,-11455,-12980,-14548,-16155,-17799,-19478,-21189,
67 -22929,-24694,-26482,-28289,-30112,-31947,-33791,-35640,
68 -37489,-39336,-41176,-43006,-44821,-46617,-48390,-50137,
69 -51853,-53534,-55178,-56778,-58333,-59838,-61289,-62684,
70 -64019,-65290,-66494,-67629,-68692,-69679,-70590,-71420,
71 -72169,-72835,-73415,-73908,-74313,-74630,-74856,-74992,
72  75038,
73 };
74
75 /*******************************************************/
76 /* layer 2 tables */
77
78 const int sblimit_table[5] = { 27 , 30 , 8, 12 , 30 };
79
80 const int quant_steps[17] = {
81     3,     5,    7,    9,    15,
82     31,    63,  127,  255,   511,
83     1023,  2047, 4095, 8191, 16383,
84     32767, 65535
85 };
86
87 /* we use a negative value if grouped */
88 const int quant_bits[17] = {
89     -5,  -7,  3, -10, 4,
90      5,  6,  7,  8,  9,
91     10, 11, 12, 13, 14,
92     15, 16
93 };
94
95 /* encoding tables which give the quantization index. Note how it is
96    possible to store them efficiently ! */
97 static const unsigned char alloc_table_0[] = {
98  4,  0,  2,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15, 16,
99  4,  0,  2,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15, 16,
100  4,  0,  2,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15, 16,
101  4,  0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 16,
102  4,  0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 16,
103  4,  0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 16,
104  4,  0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 16,
105  4,  0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 16,
106  4,  0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 16,
107  4,  0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 16,
108  4,  0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 16,
109  3,  0,  1,  2,  3,  4,  5, 16,
110  3,  0,  1,  2,  3,  4,  5, 16,
111  3,  0,  1,  2,  3,  4,  5, 16,
112  3,  0,  1,  2,  3,  4,  5, 16,
113  3,  0,  1,  2,  3,  4,  5, 16,
114  3,  0,  1,  2,  3,  4,  5, 16,
115  3,  0,  1,  2,  3,  4,  5, 16,
116  3,  0,  1,  2,  3,  4,  5, 16,
117  3,  0,  1,  2,  3,  4,  5, 16,
118  3,  0,  1,  2,  3,  4,  5, 16,
119  3,  0,  1,  2,  3,  4,  5, 16,
120  3,  0,  1,  2,  3,  4,  5, 16,
121  2,  0,  1, 16,
122  2,  0,  1, 16,
123  2,  0,  1, 16,
124  2,  0,  1, 16,
125 };
126
127 static const unsigned char alloc_table_1[] = {
128  4,  0,  2,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15, 16,
129  4,  0,  2,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15, 16,
130  4,  0,  2,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15, 16,
131  4,  0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 16,
132  4,  0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 16,
133  4,  0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 16,
134  4,  0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 16,
135  4,  0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 16,
136  4,  0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 16,
137  4,  0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 16,
138  4,  0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 16,
139  3,  0,  1,  2,  3,  4,  5, 16,
140  3,  0,  1,  2,  3,  4,  5, 16,
141  3,  0,  1,  2,  3,  4,  5, 16,
142  3,  0,  1,  2,  3,  4,  5, 16,
143  3,  0,  1,  2,  3,  4,  5, 16,
144  3,  0,  1,  2,  3,  4,  5, 16,
145  3,  0,  1,  2,  3,  4,  5, 16,
146  3,  0,  1,  2,  3,  4,  5, 16,
147  3,  0,  1,  2,  3,  4,  5, 16,
148  3,  0,  1,  2,  3,  4,  5, 16,
149  3,  0,  1,  2,  3,  4,  5, 16,
150  3,  0,  1,  2,  3,  4,  5, 16,
151  2,  0,  1, 16,
152  2,  0,  1, 16,
153  2,  0,  1, 16,
154  2,  0,  1, 16,
155  2,  0,  1, 16,
156  2,  0,  1, 16,
157  2,  0,  1, 16,
158 };
159
160 static const unsigned char alloc_table_2[] = {
161  4,  0,  1,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15,
162  4,  0,  1,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15,
163  3,  0,  1,  3,  4,  5,  6,  7,
164  3,  0,  1,  3,  4,  5,  6,  7,
165  3,  0,  1,  3,  4,  5,  6,  7,
166  3,  0,  1,  3,  4,  5,  6,  7,
167  3,  0,  1,  3,  4,  5,  6,  7,
168  3,  0,  1,  3,  4,  5,  6,  7,
169 };
170
171 static const unsigned char alloc_table_3[] = {
172  4,  0,  1,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15,
173  4,  0,  1,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15,
174  3,  0,  1,  3,  4,  5,  6,  7,
175  3,  0,  1,  3,  4,  5,  6,  7,
176  3,  0,  1,  3,  4,  5,  6,  7,
177  3,  0,  1,  3,  4,  5,  6,  7,
178  3,  0,  1,  3,  4,  5,  6,  7,
179  3,  0,  1,  3,  4,  5,  6,  7,
180  3,  0,  1,  3,  4,  5,  6,  7,
181  3,  0,  1,  3,  4,  5,  6,  7,
182  3,  0,  1,  3,  4,  5,  6,  7,
183  3,  0,  1,  3,  4,  5,  6,  7,
184 };
185
186 static const unsigned char alloc_table_4[] = {
187  4,  0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14,
188  4,  0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14,
189  4,  0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14,
190  4,  0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14,
191  3,  0,  1,  3,  4,  5,  6,  7,
192  3,  0,  1,  3,  4,  5,  6,  7,
193  3,  0,  1,  3,  4,  5,  6,  7,
194  3,  0,  1,  3,  4,  5,  6,  7,
195  3,  0,  1,  3,  4,  5,  6,  7,
196  3,  0,  1,  3,  4,  5,  6,  7,
197  3,  0,  1,  3,  4,  5,  6,  7,
198  2,  0,  1,  3,
199  2,  0,  1,  3,
200  2,  0,  1,  3,
201  2,  0,  1,  3,
202  2,  0,  1,  3,
203  2,  0,  1,  3,
204  2,  0,  1,  3,
205  2,  0,  1,  3,
206  2,  0,  1,  3,
207  2,  0,  1,  3,
208  2,  0,  1,  3,
209  2,  0,  1,  3,
210  2,  0,  1,  3,
211  2,  0,  1,  3,
212  2,  0,  1,  3,
213  2,  0,  1,  3,
214  2,  0,  1,  3,
215  2,  0,  1,  3,
216  2,  0,  1,  3,
217 };
218
219 const unsigned char *alloc_tables[5] =
220 { alloc_table_0, alloc_table_1, alloc_table_2, alloc_table_3, alloc_table_4, };
221
222 /*******************************************************/
223 /* layer 3 tables */
224
225 /* layer3 scale factor size */
226 static const uint8_t slen_table[2][16] = {
227     { 0, 0, 0, 0, 3, 1, 1, 1, 2, 2, 2, 3, 3, 3, 4, 4 },
228     { 0, 1, 2, 3, 0, 1, 2, 3, 1, 2, 3, 1, 2, 3, 2, 3 },
229 };
230
231 /* number of lsf scale factors for a given size */
232 static const uint8_t lsf_nsf_table[6][3][4] = {
233     { {  6,  5,  5, 5 }, {  9,  9,  9, 9 }, {  6,  9,  9, 9 } },
234     { {  6,  5,  7, 3 }, {  9,  9, 12, 6 }, {  6,  9, 12, 6 } },
235     { { 11, 10,  0, 0 }, { 18, 18,  0, 0 }, { 15, 18,  0, 0 } },
236     { {  7,  7,  7, 0 }, { 12, 12, 12, 0 }, {  6, 15, 12, 0 } },
237     { {  6,  6,  6, 3 }, { 12,  9,  9, 6 }, {  6, 12,  9, 6 } },
238     { {  8,  8,  5, 0 }, { 15, 12,  9, 0 }, {  6, 18,  9, 0 } },
239 };
240
241 /* mpegaudio layer 3 huffman tables */
242
243 const uint16_t mpa_huffcodes_1[4] = {
244  0x0001, 0x0001, 0x0001, 0x0000,
245 };
246
247 const uint8_t mpa_huffbits_1[4] = {
248   1,  3,  2,  3,
249 };
250
251 const uint16_t mpa_huffcodes_2[9] = {
252  0x0001, 0x0002, 0x0001, 0x0003, 0x0001, 0x0001, 0x0003, 0x0002,
253  0x0000,
254 };
255
256 const uint8_t mpa_huffbits_2[9] = {
257   1,  3,  6,  3,  3,  5,  5,  5,
258   6,
259 };
260
261 const uint16_t mpa_huffcodes_3[9] = {
262  0x0003, 0x0002, 0x0001, 0x0001, 0x0001, 0x0001, 0x0003, 0x0002,
263  0x0000,
264 };
265
266 const uint8_t mpa_huffbits_3[9] = {
267   2,  2,  6,  3,  2,  5,  5,  5,
268   6,
269 };
270
271 const uint16_t mpa_huffcodes_5[16] = {
272  0x0001, 0x0002, 0x0006, 0x0005, 0x0003, 0x0001, 0x0004, 0x0004,
273  0x0007, 0x0005, 0x0007, 0x0001, 0x0006, 0x0001, 0x0001, 0x0000,
274 };
275
276 const uint8_t mpa_huffbits_5[16] = {
277   1,  3,  6,  7,  3,  3,  6,  7,
278   6,  6,  7,  8,  7,  6,  7,  8,
279 };
280
281 const uint16_t mpa_huffcodes_6[16] = {
282  0x0007, 0x0003, 0x0005, 0x0001, 0x0006, 0x0002, 0x0003, 0x0002,
283  0x0005, 0x0004, 0x0004, 0x0001, 0x0003, 0x0003, 0x0002, 0x0000,
284 };
285
286 const uint8_t mpa_huffbits_6[16] = {
287   3,  3,  5,  7,  3,  2,  4,  5,
288   4,  4,  5,  6,  6,  5,  6,  7,
289 };
290
291 const uint16_t mpa_huffcodes_7[36] = {
292  0x0001, 0x0002, 0x000a, 0x0013, 0x0010, 0x000a, 0x0003, 0x0003,
293  0x0007, 0x000a, 0x0005, 0x0003, 0x000b, 0x0004, 0x000d, 0x0011,
294  0x0008, 0x0004, 0x000c, 0x000b, 0x0012, 0x000f, 0x000b, 0x0002,
295  0x0007, 0x0006, 0x0009, 0x000e, 0x0003, 0x0001, 0x0006, 0x0004,
296  0x0005, 0x0003, 0x0002, 0x0000,
297 };
298
299 const uint8_t mpa_huffbits_7[36] = {
300   1,  3,  6,  8,  8,  9,  3,  4,
301   6,  7,  7,  8,  6,  5,  7,  8,
302   8,  9,  7,  7,  8,  9,  9,  9,
303   7,  7,  8,  9,  9, 10,  8,  8,
304   9, 10, 10, 10,
305 };
306
307 const uint16_t mpa_huffcodes_8[36] = {
308  0x0003, 0x0004, 0x0006, 0x0012, 0x000c, 0x0005, 0x0005, 0x0001,
309  0x0002, 0x0010, 0x0009, 0x0003, 0x0007, 0x0003, 0x0005, 0x000e,
310  0x0007, 0x0003, 0x0013, 0x0011, 0x000f, 0x000d, 0x000a, 0x0004,
311  0x000d, 0x0005, 0x0008, 0x000b, 0x0005, 0x0001, 0x000c, 0x0004,
312  0x0004, 0x0001, 0x0001, 0x0000,
313 };
314
315 const uint8_t mpa_huffbits_8[36] = {
316   2,  3,  6,  8,  8,  9,  3,  2,
317   4,  8,  8,  8,  6,  4,  6,  8,
318   8,  9,  8,  8,  8,  9,  9, 10,
319   8,  7,  8,  9, 10, 10,  9,  8,
320   9,  9, 11, 11,
321 };
322
323 const uint16_t mpa_huffcodes_9[36] = {
324  0x0007, 0x0005, 0x0009, 0x000e, 0x000f, 0x0007, 0x0006, 0x0004,
325  0x0005, 0x0005, 0x0006, 0x0007, 0x0007, 0x0006, 0x0008, 0x0008,
326  0x0008, 0x0005, 0x000f, 0x0006, 0x0009, 0x000a, 0x0005, 0x0001,
327  0x000b, 0x0007, 0x0009, 0x0006, 0x0004, 0x0001, 0x000e, 0x0004,
328  0x0006, 0x0002, 0x0006, 0x0000,
329 };
330
331 const uint8_t mpa_huffbits_9[36] = {
332   3,  3,  5,  6,  8,  9,  3,  3,
333   4,  5,  6,  8,  4,  4,  5,  6,
334   7,  8,  6,  5,  6,  7,  7,  8,
335   7,  6,  7,  7,  8,  9,  8,  7,
336   8,  8,  9,  9,
337 };
338
339 const uint16_t mpa_huffcodes_10[64] = {
340  0x0001, 0x0002, 0x000a, 0x0017, 0x0023, 0x001e, 0x000c, 0x0011,
341  0x0003, 0x0003, 0x0008, 0x000c, 0x0012, 0x0015, 0x000c, 0x0007,
342  0x000b, 0x0009, 0x000f, 0x0015, 0x0020, 0x0028, 0x0013, 0x0006,
343  0x000e, 0x000d, 0x0016, 0x0022, 0x002e, 0x0017, 0x0012, 0x0007,
344  0x0014, 0x0013, 0x0021, 0x002f, 0x001b, 0x0016, 0x0009, 0x0003,
345  0x001f, 0x0016, 0x0029, 0x001a, 0x0015, 0x0014, 0x0005, 0x0003,
346  0x000e, 0x000d, 0x000a, 0x000b, 0x0010, 0x0006, 0x0005, 0x0001,
347  0x0009, 0x0008, 0x0007, 0x0008, 0x0004, 0x0004, 0x0002, 0x0000,
348 };
349
350 const uint8_t mpa_huffbits_10[64] = {
351   1,  3,  6,  8,  9,  9,  9, 10,
352   3,  4,  6,  7,  8,  9,  8,  8,
353   6,  6,  7,  8,  9, 10,  9,  9,
354   7,  7,  8,  9, 10, 10,  9, 10,
355   8,  8,  9, 10, 10, 10, 10, 10,
356   9,  9, 10, 10, 11, 11, 10, 11,
357   8,  8,  9, 10, 10, 10, 11, 11,
358   9,  8,  9, 10, 10, 11, 11, 11,
359 };
360
361 const uint16_t mpa_huffcodes_11[64] = {
362  0x0003, 0x0004, 0x000a, 0x0018, 0x0022, 0x0021, 0x0015, 0x000f,
363  0x0005, 0x0003, 0x0004, 0x000a, 0x0020, 0x0011, 0x000b, 0x000a,
364  0x000b, 0x0007, 0x000d, 0x0012, 0x001e, 0x001f, 0x0014, 0x0005,
365  0x0019, 0x000b, 0x0013, 0x003b, 0x001b, 0x0012, 0x000c, 0x0005,
366  0x0023, 0x0021, 0x001f, 0x003a, 0x001e, 0x0010, 0x0007, 0x0005,
367  0x001c, 0x001a, 0x0020, 0x0013, 0x0011, 0x000f, 0x0008, 0x000e,
368  0x000e, 0x000c, 0x0009, 0x000d, 0x000e, 0x0009, 0x0004, 0x0001,
369  0x000b, 0x0004, 0x0006, 0x0006, 0x0006, 0x0003, 0x0002, 0x0000,
370 };
371
372 const uint8_t mpa_huffbits_11[64] = {
373   2,  3,  5,  7,  8,  9,  8,  9,
374   3,  3,  4,  6,  8,  8,  7,  8,
375   5,  5,  6,  7,  8,  9,  8,  8,
376   7,  6,  7,  9,  8, 10,  8,  9,
377   8,  8,  8,  9,  9, 10,  9, 10,
378   8,  8,  9, 10, 10, 11, 10, 11,
379   8,  7,  7,  8,  9, 10, 10, 10,
380   8,  7,  8,  9, 10, 10, 10, 10,
381 };
382
383 const uint16_t mpa_huffcodes_12[64] = {
384  0x0009, 0x0006, 0x0010, 0x0021, 0x0029, 0x0027, 0x0026, 0x001a,
385  0x0007, 0x0005, 0x0006, 0x0009, 0x0017, 0x0010, 0x001a, 0x000b,
386  0x0011, 0x0007, 0x000b, 0x000e, 0x0015, 0x001e, 0x000a, 0x0007,
387  0x0011, 0x000a, 0x000f, 0x000c, 0x0012, 0x001c, 0x000e, 0x0005,
388  0x0020, 0x000d, 0x0016, 0x0013, 0x0012, 0x0010, 0x0009, 0x0005,
389  0x0028, 0x0011, 0x001f, 0x001d, 0x0011, 0x000d, 0x0004, 0x0002,
390  0x001b, 0x000c, 0x000b, 0x000f, 0x000a, 0x0007, 0x0004, 0x0001,
391  0x001b, 0x000c, 0x0008, 0x000c, 0x0006, 0x0003, 0x0001, 0x0000,
392 };
393
394 const uint8_t mpa_huffbits_12[64] = {
395   4,  3,  5,  7,  8,  9,  9,  9,
396   3,  3,  4,  5,  7,  7,  8,  8,
397   5,  4,  5,  6,  7,  8,  7,  8,
398   6,  5,  6,  6,  7,  8,  8,  8,
399   7,  6,  7,  7,  8,  8,  8,  9,
400   8,  7,  8,  8,  8,  9,  8,  9,
401   8,  7,  7,  8,  8,  9,  9, 10,
402   9,  8,  8,  9,  9,  9,  9, 10,
403 };
404
405 const uint16_t mpa_huffcodes_13[256] = {
406  0x0001, 0x0005, 0x000e, 0x0015, 0x0022, 0x0033, 0x002e, 0x0047,
407  0x002a, 0x0034, 0x0044, 0x0034, 0x0043, 0x002c, 0x002b, 0x0013,
408  0x0003, 0x0004, 0x000c, 0x0013, 0x001f, 0x001a, 0x002c, 0x0021,
409  0x001f, 0x0018, 0x0020, 0x0018, 0x001f, 0x0023, 0x0016, 0x000e,
410  0x000f, 0x000d, 0x0017, 0x0024, 0x003b, 0x0031, 0x004d, 0x0041,
411  0x001d, 0x0028, 0x001e, 0x0028, 0x001b, 0x0021, 0x002a, 0x0010,
412  0x0016, 0x0014, 0x0025, 0x003d, 0x0038, 0x004f, 0x0049, 0x0040,
413  0x002b, 0x004c, 0x0038, 0x0025, 0x001a, 0x001f, 0x0019, 0x000e,
414  0x0023, 0x0010, 0x003c, 0x0039, 0x0061, 0x004b, 0x0072, 0x005b,
415  0x0036, 0x0049, 0x0037, 0x0029, 0x0030, 0x0035, 0x0017, 0x0018,
416  0x003a, 0x001b, 0x0032, 0x0060, 0x004c, 0x0046, 0x005d, 0x0054,
417  0x004d, 0x003a, 0x004f, 0x001d, 0x004a, 0x0031, 0x0029, 0x0011,
418  0x002f, 0x002d, 0x004e, 0x004a, 0x0073, 0x005e, 0x005a, 0x004f,
419  0x0045, 0x0053, 0x0047, 0x0032, 0x003b, 0x0026, 0x0024, 0x000f,
420  0x0048, 0x0022, 0x0038, 0x005f, 0x005c, 0x0055, 0x005b, 0x005a,
421  0x0056, 0x0049, 0x004d, 0x0041, 0x0033, 0x002c, 0x002b, 0x002a,
422  0x002b, 0x0014, 0x001e, 0x002c, 0x0037, 0x004e, 0x0048, 0x0057,
423  0x004e, 0x003d, 0x002e, 0x0036, 0x0025, 0x001e, 0x0014, 0x0010,
424  0x0035, 0x0019, 0x0029, 0x0025, 0x002c, 0x003b, 0x0036, 0x0051,
425  0x0042, 0x004c, 0x0039, 0x0036, 0x0025, 0x0012, 0x0027, 0x000b,
426  0x0023, 0x0021, 0x001f, 0x0039, 0x002a, 0x0052, 0x0048, 0x0050,
427  0x002f, 0x003a, 0x0037, 0x0015, 0x0016, 0x001a, 0x0026, 0x0016,
428  0x0035, 0x0019, 0x0017, 0x0026, 0x0046, 0x003c, 0x0033, 0x0024,
429  0x0037, 0x001a, 0x0022, 0x0017, 0x001b, 0x000e, 0x0009, 0x0007,
430  0x0022, 0x0020, 0x001c, 0x0027, 0x0031, 0x004b, 0x001e, 0x0034,
431  0x0030, 0x0028, 0x0034, 0x001c, 0x0012, 0x0011, 0x0009, 0x0005,
432  0x002d, 0x0015, 0x0022, 0x0040, 0x0038, 0x0032, 0x0031, 0x002d,
433  0x001f, 0x0013, 0x000c, 0x000f, 0x000a, 0x0007, 0x0006, 0x0003,
434  0x0030, 0x0017, 0x0014, 0x0027, 0x0024, 0x0023, 0x0035, 0x0015,
435  0x0010, 0x0017, 0x000d, 0x000a, 0x0006, 0x0001, 0x0004, 0x0002,
436  0x0010, 0x000f, 0x0011, 0x001b, 0x0019, 0x0014, 0x001d, 0x000b,
437  0x0011, 0x000c, 0x0010, 0x0008, 0x0001, 0x0001, 0x0000, 0x0001,
438 };
439
440 const uint8_t mpa_huffbits_13[256] = {
441   1,  4,  6,  7,  8,  9,  9, 10,
442   9, 10, 11, 11, 12, 12, 13, 13,
443   3,  4,  6,  7,  8,  8,  9,  9,
444   9,  9, 10, 10, 11, 12, 12, 12,
445   6,  6,  7,  8,  9,  9, 10, 10,
446   9, 10, 10, 11, 11, 12, 13, 13,
447   7,  7,  8,  9,  9, 10, 10, 10,
448  10, 11, 11, 11, 11, 12, 13, 13,
449   8,  7,  9,  9, 10, 10, 11, 11,
450  10, 11, 11, 12, 12, 13, 13, 14,
451   9,  8,  9, 10, 10, 10, 11, 11,
452  11, 11, 12, 11, 13, 13, 14, 14,
453   9,  9, 10, 10, 11, 11, 11, 11,
454  11, 12, 12, 12, 13, 13, 14, 14,
455  10,  9, 10, 11, 11, 11, 12, 12,
456  12, 12, 13, 13, 13, 14, 16, 16,
457   9,  8,  9, 10, 10, 11, 11, 12,
458  12, 12, 12, 13, 13, 14, 15, 15,
459  10,  9, 10, 10, 11, 11, 11, 13,
460  12, 13, 13, 14, 14, 14, 16, 15,
461  10, 10, 10, 11, 11, 12, 12, 13,
462  12, 13, 14, 13, 14, 15, 16, 17,
463  11, 10, 10, 11, 12, 12, 12, 12,
464  13, 13, 13, 14, 15, 15, 15, 16,
465  11, 11, 11, 12, 12, 13, 12, 13,
466  14, 14, 15, 15, 15, 16, 16, 16,
467  12, 11, 12, 13, 13, 13, 14, 14,
468  14, 14, 14, 15, 16, 15, 16, 16,
469  13, 12, 12, 13, 13, 13, 15, 14,
470  14, 17, 15, 15, 15, 17, 16, 16,
471  12, 12, 13, 14, 14, 14, 15, 14,
472  15, 15, 16, 16, 19, 18, 19, 16,
473 };
474
475 const uint16_t mpa_huffcodes_15[256] = {
476  0x0007, 0x000c, 0x0012, 0x0035, 0x002f, 0x004c, 0x007c, 0x006c,
477  0x0059, 0x007b, 0x006c, 0x0077, 0x006b, 0x0051, 0x007a, 0x003f,
478  0x000d, 0x0005, 0x0010, 0x001b, 0x002e, 0x0024, 0x003d, 0x0033,
479  0x002a, 0x0046, 0x0034, 0x0053, 0x0041, 0x0029, 0x003b, 0x0024,
480  0x0013, 0x0011, 0x000f, 0x0018, 0x0029, 0x0022, 0x003b, 0x0030,
481  0x0028, 0x0040, 0x0032, 0x004e, 0x003e, 0x0050, 0x0038, 0x0021,
482  0x001d, 0x001c, 0x0019, 0x002b, 0x0027, 0x003f, 0x0037, 0x005d,
483  0x004c, 0x003b, 0x005d, 0x0048, 0x0036, 0x004b, 0x0032, 0x001d,
484  0x0034, 0x0016, 0x002a, 0x0028, 0x0043, 0x0039, 0x005f, 0x004f,
485  0x0048, 0x0039, 0x0059, 0x0045, 0x0031, 0x0042, 0x002e, 0x001b,
486  0x004d, 0x0025, 0x0023, 0x0042, 0x003a, 0x0034, 0x005b, 0x004a,
487  0x003e, 0x0030, 0x004f, 0x003f, 0x005a, 0x003e, 0x0028, 0x0026,
488  0x007d, 0x0020, 0x003c, 0x0038, 0x0032, 0x005c, 0x004e, 0x0041,
489  0x0037, 0x0057, 0x0047, 0x0033, 0x0049, 0x0033, 0x0046, 0x001e,
490  0x006d, 0x0035, 0x0031, 0x005e, 0x0058, 0x004b, 0x0042, 0x007a,
491  0x005b, 0x0049, 0x0038, 0x002a, 0x0040, 0x002c, 0x0015, 0x0019,
492  0x005a, 0x002b, 0x0029, 0x004d, 0x0049, 0x003f, 0x0038, 0x005c,
493  0x004d, 0x0042, 0x002f, 0x0043, 0x0030, 0x0035, 0x0024, 0x0014,
494  0x0047, 0x0022, 0x0043, 0x003c, 0x003a, 0x0031, 0x0058, 0x004c,
495  0x0043, 0x006a, 0x0047, 0x0036, 0x0026, 0x0027, 0x0017, 0x000f,
496  0x006d, 0x0035, 0x0033, 0x002f, 0x005a, 0x0052, 0x003a, 0x0039,
497  0x0030, 0x0048, 0x0039, 0x0029, 0x0017, 0x001b, 0x003e, 0x0009,
498  0x0056, 0x002a, 0x0028, 0x0025, 0x0046, 0x0040, 0x0034, 0x002b,
499  0x0046, 0x0037, 0x002a, 0x0019, 0x001d, 0x0012, 0x000b, 0x000b,
500  0x0076, 0x0044, 0x001e, 0x0037, 0x0032, 0x002e, 0x004a, 0x0041,
501  0x0031, 0x0027, 0x0018, 0x0010, 0x0016, 0x000d, 0x000e, 0x0007,
502  0x005b, 0x002c, 0x0027, 0x0026, 0x0022, 0x003f, 0x0034, 0x002d,
503  0x001f, 0x0034, 0x001c, 0x0013, 0x000e, 0x0008, 0x0009, 0x0003,
504  0x007b, 0x003c, 0x003a, 0x0035, 0x002f, 0x002b, 0x0020, 0x0016,
505  0x0025, 0x0018, 0x0011, 0x000c, 0x000f, 0x000a, 0x0002, 0x0001,
506  0x0047, 0x0025, 0x0022, 0x001e, 0x001c, 0x0014, 0x0011, 0x001a,
507  0x0015, 0x0010, 0x000a, 0x0006, 0x0008, 0x0006, 0x0002, 0x0000,
508 };
509
510 const uint8_t mpa_huffbits_15[256] = {
511   3,  4,  5,  7,  7,  8,  9,  9,
512   9, 10, 10, 11, 11, 11, 12, 13,
513   4,  3,  5,  6,  7,  7,  8,  8,
514   8,  9,  9, 10, 10, 10, 11, 11,
515   5,  5,  5,  6,  7,  7,  8,  8,
516   8,  9,  9, 10, 10, 11, 11, 11,
517   6,  6,  6,  7,  7,  8,  8,  9,
518   9,  9, 10, 10, 10, 11, 11, 11,
519   7,  6,  7,  7,  8,  8,  9,  9,
520   9,  9, 10, 10, 10, 11, 11, 11,
521   8,  7,  7,  8,  8,  8,  9,  9,
522   9,  9, 10, 10, 11, 11, 11, 12,
523   9,  7,  8,  8,  8,  9,  9,  9,
524   9, 10, 10, 10, 11, 11, 12, 12,
525   9,  8,  8,  9,  9,  9,  9, 10,
526  10, 10, 10, 10, 11, 11, 11, 12,
527   9,  8,  8,  9,  9,  9,  9, 10,
528  10, 10, 10, 11, 11, 12, 12, 12,
529   9,  8,  9,  9,  9,  9, 10, 10,
530  10, 11, 11, 11, 11, 12, 12, 12,
531  10,  9,  9,  9, 10, 10, 10, 10,
532  10, 11, 11, 11, 11, 12, 13, 12,
533  10,  9,  9,  9, 10, 10, 10, 10,
534  11, 11, 11, 11, 12, 12, 12, 13,
535  11, 10,  9, 10, 10, 10, 11, 11,
536  11, 11, 11, 11, 12, 12, 13, 13,
537  11, 10, 10, 10, 10, 11, 11, 11,
538  11, 12, 12, 12, 12, 12, 13, 13,
539  12, 11, 11, 11, 11, 11, 11, 11,
540  12, 12, 12, 12, 13, 13, 12, 13,
541  12, 11, 11, 11, 11, 11, 11, 12,
542  12, 12, 12, 12, 13, 13, 13, 13,
543 };
544
545 const uint16_t mpa_huffcodes_16[256] = {
546  0x0001, 0x0005, 0x000e, 0x002c, 0x004a, 0x003f, 0x006e, 0x005d,
547  0x00ac, 0x0095, 0x008a, 0x00f2, 0x00e1, 0x00c3, 0x0178, 0x0011,
548  0x0003, 0x0004, 0x000c, 0x0014, 0x0023, 0x003e, 0x0035, 0x002f,
549  0x0053, 0x004b, 0x0044, 0x0077, 0x00c9, 0x006b, 0x00cf, 0x0009,
550  0x000f, 0x000d, 0x0017, 0x0026, 0x0043, 0x003a, 0x0067, 0x005a,
551  0x00a1, 0x0048, 0x007f, 0x0075, 0x006e, 0x00d1, 0x00ce, 0x0010,
552  0x002d, 0x0015, 0x0027, 0x0045, 0x0040, 0x0072, 0x0063, 0x0057,
553  0x009e, 0x008c, 0x00fc, 0x00d4, 0x00c7, 0x0183, 0x016d, 0x001a,
554  0x004b, 0x0024, 0x0044, 0x0041, 0x0073, 0x0065, 0x00b3, 0x00a4,
555  0x009b, 0x0108, 0x00f6, 0x00e2, 0x018b, 0x017e, 0x016a, 0x0009,
556  0x0042, 0x001e, 0x003b, 0x0038, 0x0066, 0x00b9, 0x00ad, 0x0109,
557  0x008e, 0x00fd, 0x00e8, 0x0190, 0x0184, 0x017a, 0x01bd, 0x0010,
558  0x006f, 0x0036, 0x0034, 0x0064, 0x00b8, 0x00b2, 0x00a0, 0x0085,
559  0x0101, 0x00f4, 0x00e4, 0x00d9, 0x0181, 0x016e, 0x02cb, 0x000a,
560  0x0062, 0x0030, 0x005b, 0x0058, 0x00a5, 0x009d, 0x0094, 0x0105,
561  0x00f8, 0x0197, 0x018d, 0x0174, 0x017c, 0x0379, 0x0374, 0x0008,
562  0x0055, 0x0054, 0x0051, 0x009f, 0x009c, 0x008f, 0x0104, 0x00f9,
563  0x01ab, 0x0191, 0x0188, 0x017f, 0x02d7, 0x02c9, 0x02c4, 0x0007,
564  0x009a, 0x004c, 0x0049, 0x008d, 0x0083, 0x0100, 0x00f5, 0x01aa,
565  0x0196, 0x018a, 0x0180, 0x02df, 0x0167, 0x02c6, 0x0160, 0x000b,
566  0x008b, 0x0081, 0x0043, 0x007d, 0x00f7, 0x00e9, 0x00e5, 0x00db,
567  0x0189, 0x02e7, 0x02e1, 0x02d0, 0x0375, 0x0372, 0x01b7, 0x0004,
568  0x00f3, 0x0078, 0x0076, 0x0073, 0x00e3, 0x00df, 0x018c, 0x02ea,
569  0x02e6, 0x02e0, 0x02d1, 0x02c8, 0x02c2, 0x00df, 0x01b4, 0x0006,
570  0x00ca, 0x00e0, 0x00de, 0x00da, 0x00d8, 0x0185, 0x0182, 0x017d,
571  0x016c, 0x0378, 0x01bb, 0x02c3, 0x01b8, 0x01b5, 0x06c0, 0x0004,
572  0x02eb, 0x00d3, 0x00d2, 0x00d0, 0x0172, 0x017b, 0x02de, 0x02d3,
573  0x02ca, 0x06c7, 0x0373, 0x036d, 0x036c, 0x0d83, 0x0361, 0x0002,
574  0x0179, 0x0171, 0x0066, 0x00bb, 0x02d6, 0x02d2, 0x0166, 0x02c7,
575  0x02c5, 0x0362, 0x06c6, 0x0367, 0x0d82, 0x0366, 0x01b2, 0x0000,
576  0x000c, 0x000a, 0x0007, 0x000b, 0x000a, 0x0011, 0x000b, 0x0009,
577  0x000d, 0x000c, 0x000a, 0x0007, 0x0005, 0x0003, 0x0001, 0x0003,
578 };
579
580 const uint8_t mpa_huffbits_16[256] = {
581   1,  4,  6,  8,  9,  9, 10, 10,
582  11, 11, 11, 12, 12, 12, 13,  9,
583   3,  4,  6,  7,  8,  9,  9,  9,
584  10, 10, 10, 11, 12, 11, 12,  8,
585   6,  6,  7,  8,  9,  9, 10, 10,
586  11, 10, 11, 11, 11, 12, 12,  9,
587   8,  7,  8,  9,  9, 10, 10, 10,
588  11, 11, 12, 12, 12, 13, 13, 10,
589   9,  8,  9,  9, 10, 10, 11, 11,
590  11, 12, 12, 12, 13, 13, 13,  9,
591   9,  8,  9,  9, 10, 11, 11, 12,
592  11, 12, 12, 13, 13, 13, 14, 10,
593  10,  9,  9, 10, 11, 11, 11, 11,
594  12, 12, 12, 12, 13, 13, 14, 10,
595  10,  9, 10, 10, 11, 11, 11, 12,
596  12, 13, 13, 13, 13, 15, 15, 10,
597  10, 10, 10, 11, 11, 11, 12, 12,
598  13, 13, 13, 13, 14, 14, 14, 10,
599  11, 10, 10, 11, 11, 12, 12, 13,
600  13, 13, 13, 14, 13, 14, 13, 11,
601  11, 11, 10, 11, 12, 12, 12, 12,
602  13, 14, 14, 14, 15, 15, 14, 10,
603  12, 11, 11, 11, 12, 12, 13, 14,
604  14, 14, 14, 14, 14, 13, 14, 11,
605  12, 12, 12, 12, 12, 13, 13, 13,
606  13, 15, 14, 14, 14, 14, 16, 11,
607  14, 12, 12, 12, 13, 13, 14, 14,
608  14, 16, 15, 15, 15, 17, 15, 11,
609  13, 13, 11, 12, 14, 14, 13, 14,
610  14, 15, 16, 15, 17, 15, 14, 11,
611   9,  8,  8,  9,  9, 10, 10, 10,
612  11, 11, 11, 11, 11, 11, 11,  8,
613 };
614
615 const uint16_t mpa_huffcodes_24[256] = {
616  0x000f, 0x000d, 0x002e, 0x0050, 0x0092, 0x0106, 0x00f8, 0x01b2,
617  0x01aa, 0x029d, 0x028d, 0x0289, 0x026d, 0x0205, 0x0408, 0x0058,
618  0x000e, 0x000c, 0x0015, 0x0026, 0x0047, 0x0082, 0x007a, 0x00d8,
619  0x00d1, 0x00c6, 0x0147, 0x0159, 0x013f, 0x0129, 0x0117, 0x002a,
620  0x002f, 0x0016, 0x0029, 0x004a, 0x0044, 0x0080, 0x0078, 0x00dd,
621  0x00cf, 0x00c2, 0x00b6, 0x0154, 0x013b, 0x0127, 0x021d, 0x0012,
622  0x0051, 0x0027, 0x004b, 0x0046, 0x0086, 0x007d, 0x0074, 0x00dc,
623  0x00cc, 0x00be, 0x00b2, 0x0145, 0x0137, 0x0125, 0x010f, 0x0010,
624  0x0093, 0x0048, 0x0045, 0x0087, 0x007f, 0x0076, 0x0070, 0x00d2,
625  0x00c8, 0x00bc, 0x0160, 0x0143, 0x0132, 0x011d, 0x021c, 0x000e,
626  0x0107, 0x0042, 0x0081, 0x007e, 0x0077, 0x0072, 0x00d6, 0x00ca,
627  0x00c0, 0x00b4, 0x0155, 0x013d, 0x012d, 0x0119, 0x0106, 0x000c,
628  0x00f9, 0x007b, 0x0079, 0x0075, 0x0071, 0x00d7, 0x00ce, 0x00c3,
629  0x00b9, 0x015b, 0x014a, 0x0134, 0x0123, 0x0110, 0x0208, 0x000a,
630  0x01b3, 0x0073, 0x006f, 0x006d, 0x00d3, 0x00cb, 0x00c4, 0x00bb,
631  0x0161, 0x014c, 0x0139, 0x012a, 0x011b, 0x0213, 0x017d, 0x0011,
632  0x01ab, 0x00d4, 0x00d0, 0x00cd, 0x00c9, 0x00c1, 0x00ba, 0x00b1,
633  0x00a9, 0x0140, 0x012f, 0x011e, 0x010c, 0x0202, 0x0179, 0x0010,
634  0x014f, 0x00c7, 0x00c5, 0x00bf, 0x00bd, 0x00b5, 0x00ae, 0x014d,
635  0x0141, 0x0131, 0x0121, 0x0113, 0x0209, 0x017b, 0x0173, 0x000b,
636  0x029c, 0x00b8, 0x00b7, 0x00b3, 0x00af, 0x0158, 0x014b, 0x013a,
637  0x0130, 0x0122, 0x0115, 0x0212, 0x017f, 0x0175, 0x016e, 0x000a,
638  0x028c, 0x015a, 0x00ab, 0x00a8, 0x00a4, 0x013e, 0x0135, 0x012b,
639  0x011f, 0x0114, 0x0107, 0x0201, 0x0177, 0x0170, 0x016a, 0x0006,
640  0x0288, 0x0142, 0x013c, 0x0138, 0x0133, 0x012e, 0x0124, 0x011c,
641  0x010d, 0x0105, 0x0200, 0x0178, 0x0172, 0x016c, 0x0167, 0x0004,
642  0x026c, 0x012c, 0x0128, 0x0126, 0x0120, 0x011a, 0x0111, 0x010a,
643  0x0203, 0x017c, 0x0176, 0x0171, 0x016d, 0x0169, 0x0165, 0x0002,
644  0x0409, 0x0118, 0x0116, 0x0112, 0x010b, 0x0108, 0x0103, 0x017e,
645  0x017a, 0x0174, 0x016f, 0x016b, 0x0168, 0x0166, 0x0164, 0x0000,
646  0x002b, 0x0014, 0x0013, 0x0011, 0x000f, 0x000d, 0x000b, 0x0009,
647  0x0007, 0x0006, 0x0004, 0x0007, 0x0005, 0x0003, 0x0001, 0x0003,
648 };
649
650 const uint8_t mpa_huffbits_24[256] = {
651   4,  4,  6,  7,  8,  9,  9, 10,
652  10, 11, 11, 11, 11, 11, 12,  9,
653   4,  4,  5,  6,  7,  8,  8,  9,
654   9,  9, 10, 10, 10, 10, 10,  8,
655   6,  5,  6,  7,  7,  8,  8,  9,
656   9,  9,  9, 10, 10, 10, 11,  7,
657   7,  6,  7,  7,  8,  8,  8,  9,
658   9,  9,  9, 10, 10, 10, 10,  7,
659   8,  7,  7,  8,  8,  8,  8,  9,
660   9,  9, 10, 10, 10, 10, 11,  7,
661   9,  7,  8,  8,  8,  8,  9,  9,
662   9,  9, 10, 10, 10, 10, 10,  7,
663   9,  8,  8,  8,  8,  9,  9,  9,
664   9, 10, 10, 10, 10, 10, 11,  7,
665  10,  8,  8,  8,  9,  9,  9,  9,
666  10, 10, 10, 10, 10, 11, 11,  8,
667  10,  9,  9,  9,  9,  9,  9,  9,
668   9, 10, 10, 10, 10, 11, 11,  8,
669  10,  9,  9,  9,  9,  9,  9, 10,
670  10, 10, 10, 10, 11, 11, 11,  8,
671  11,  9,  9,  9,  9, 10, 10, 10,
672  10, 10, 10, 11, 11, 11, 11,  8,
673  11, 10,  9,  9,  9, 10, 10, 10,
674  10, 10, 10, 11, 11, 11, 11,  8,
675  11, 10, 10, 10, 10, 10, 10, 10,
676  10, 10, 11, 11, 11, 11, 11,  8,
677  11, 10, 10, 10, 10, 10, 10, 10,
678  11, 11, 11, 11, 11, 11, 11,  8,
679  12, 10, 10, 10, 10, 10, 10, 11,
680  11, 11, 11, 11, 11, 11, 11,  8,
681   8,  7,  7,  7,  7,  7,  7,  7,
682   7,  7,  7,  8,  8,  8,  8,  4,
683 };
684
685 const HuffTable mpa_huff_tables[16] = {
686 { 1, NULL, NULL },
687 { 2, mpa_huffbits_1, mpa_huffcodes_1 },
688 { 3, mpa_huffbits_2, mpa_huffcodes_2 },
689 { 3, mpa_huffbits_3, mpa_huffcodes_3 },
690 { 4, mpa_huffbits_5, mpa_huffcodes_5 },
691 { 4, mpa_huffbits_6, mpa_huffcodes_6 },
692 { 6, mpa_huffbits_7, mpa_huffcodes_7 },
693 { 6, mpa_huffbits_8, mpa_huffcodes_8 },
694 { 6, mpa_huffbits_9, mpa_huffcodes_9 },
695 { 8, mpa_huffbits_10, mpa_huffcodes_10 },
696 { 8, mpa_huffbits_11, mpa_huffcodes_11 },
697 { 8, mpa_huffbits_12, mpa_huffcodes_12 },
698 { 16, mpa_huffbits_13, mpa_huffcodes_13 },
699 { 16, mpa_huffbits_15, mpa_huffcodes_15 },
700 { 16, mpa_huffbits_16, mpa_huffcodes_16 },
701 { 16, mpa_huffbits_24, mpa_huffcodes_24 },
702 };
703
704 const uint8_t mpa_huff_data[32][2] = {
705 { 0, 0 },
706 { 1, 0 },
707 { 2, 0 },
708 { 3, 0 },
709 { 0, 0 },
710 { 4, 0 },
711 { 5, 0 },
712 { 6, 0 },
713 { 7, 0 },
714 { 8, 0 },
715 { 9, 0 },
716 { 10, 0 },
717 { 11, 0 },
718 { 12, 0 },
719 { 0, 0 },
720 { 13, 0 },
721 { 14, 1 },
722 { 14, 2 },
723 { 14, 3 },
724 { 14, 4 },
725 { 14, 6 },
726 { 14, 8 },
727 { 14, 10 },
728 { 14, 13 },
729 { 15, 4 },
730 { 15, 5 },
731 { 15, 6 },
732 { 15, 7 },
733 { 15, 8 },
734 { 15, 9 },
735 { 15, 11 },
736 { 15, 13 },
737 };
738
739
740 /* huffman tables for quadrules */
741 static const uint8_t mpa_quad_codes[2][16] = {
742     {  1,  5,  4,  5,  6,  5,  4,  4, 7,  3,  6,  0,  7,  2,  3,  1, },
743     { 15, 14, 13, 12, 11, 10,  9,  8, 7,  6,  5,  4,  3,  2,  1,  0, },
744 };
745
746 static const uint8_t mpa_quad_bits[2][16] = {
747     { 1, 4, 4, 5, 4, 6, 5, 6, 4, 5, 5, 6, 5, 6, 6, 6, },
748     { 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, },
749 };
750
751 /* band size tables */
752 const uint8_t band_size_long[9][22] = {
753 { 4, 4, 4, 4, 4, 4, 6, 6, 8, 8, 10,
754   12, 16, 20, 24, 28, 34, 42, 50, 54, 76, 158, }, /* 44100 */
755 { 4, 4, 4, 4, 4, 4, 6, 6, 6, 8, 10,
756   12, 16, 18, 22, 28, 34, 40, 46, 54, 54, 192, }, /* 48000 */
757 { 4, 4, 4, 4, 4, 4, 6, 6, 8, 10, 12,
758   16, 20, 24, 30, 38, 46, 56, 68, 84, 102, 26, }, /* 32000 */
759 { 6, 6, 6, 6, 6, 6, 8, 10, 12, 14, 16,
760   20, 24, 28, 32, 38, 46, 52, 60, 68, 58, 54, }, /* 22050 */
761 { 6, 6, 6, 6, 6, 6, 8, 10, 12, 14, 16,
762   18, 22, 26, 32, 38, 46, 52, 64, 70, 76, 36, }, /* 24000 */
763 { 6, 6, 6, 6, 6, 6, 8, 10, 12, 14, 16,
764   20, 24, 28, 32, 38, 46, 52, 60, 68, 58, 54, }, /* 16000 */
765 { 6, 6, 6, 6, 6, 6, 8, 10, 12, 14, 16,
766   20, 24, 28, 32, 38, 46, 52, 60, 68, 58, 54, }, /* 11025 */
767 { 6, 6, 6, 6, 6, 6, 8, 10, 12, 14, 16,
768   20, 24, 28, 32, 38, 46, 52, 60, 68, 58, 54, }, /* 12000 */
769 { 12, 12, 12, 12, 12, 12, 16, 20, 24, 28, 32,
770   40, 48, 56, 64, 76, 90, 2, 2, 2, 2, 2, }, /* 8000 */
771 };
772
773 const uint8_t band_size_short[9][13] = {
774 { 4, 4, 4, 4, 6, 8, 10, 12, 14, 18, 22, 30, 56, }, /* 44100 */
775 { 4, 4, 4, 4, 6, 6, 10, 12, 14, 16, 20, 26, 66, }, /* 48000 */
776 { 4, 4, 4, 4, 6, 8, 12, 16, 20, 26, 34, 42, 12, }, /* 32000 */
777 { 4, 4, 4, 6, 6, 8, 10, 14, 18, 26, 32, 42, 18, }, /* 22050 */
778 { 4, 4, 4, 6, 8, 10, 12, 14, 18, 24, 32, 44, 12, }, /* 24000 */
779 { 4, 4, 4, 6, 8, 10, 12, 14, 18, 24, 30, 40, 18, }, /* 16000 */
780 { 4, 4, 4, 6, 8, 10, 12, 14, 18, 24, 30, 40, 18, }, /* 11025 */
781 { 4, 4, 4, 6, 8, 10, 12, 14, 18, 24, 30, 40, 18, }, /* 12000 */
782 { 8, 8, 8, 12, 16, 20, 24, 28, 36, 2, 2, 2, 26, }, /* 8000 */
783 };
784
785 const uint8_t mpa_pretab[2][22] = {
786     { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
787     { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 3, 3, 3, 2, 0 },
788 };
789
790 /* table for alias reduction (XXX: store it as integer !) */
791 const float ci_table[8] = {
792     -0.6, -0.535, -0.33, -0.185, -0.095, -0.041, -0.0142, -0.0037,
793 };