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