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