move some common mpeg audio tables from mpegaudiodectab.h to mpegaudiodata.c
[ffmpeg.git] / 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 /*******************************************************/
28 /* layer 3 tables */
29
30 /* layer3 scale factor size */
31 static const uint8_t slen_table[2][16] = {
32     { 0, 0, 0, 0, 3, 1, 1, 1, 2, 2, 2, 3, 3, 3, 4, 4 },
33     { 0, 1, 2, 3, 0, 1, 2, 3, 1, 2, 3, 1, 2, 3, 2, 3 },
34 };
35
36 /* number of lsf scale factors for a given size */
37 static const uint8_t lsf_nsf_table[6][3][4] = {
38     { {  6,  5,  5, 5 }, {  9,  9,  9, 9 }, {  6,  9,  9, 9 } },
39     { {  6,  5,  7, 3 }, {  9,  9, 12, 6 }, {  6,  9, 12, 6 } },
40     { { 11, 10,  0, 0 }, { 18, 18,  0, 0 }, { 15, 18,  0, 0 } },
41     { {  7,  7,  7, 0 }, { 12, 12, 12, 0 }, {  6, 15, 12, 0 } },
42     { {  6,  6,  6, 3 }, { 12,  9,  9, 6 }, {  6, 12,  9, 6 } },
43     { {  8,  8,  5, 0 }, { 15, 12,  9, 0 }, {  6, 18,  9, 0 } },
44 };
45
46 /* mpegaudio layer 3 huffman tables */
47
48 static const uint16_t mpa_huffcodes_1[4] = {
49  0x0001, 0x0001, 0x0001, 0x0000,
50 };
51
52 static const uint8_t mpa_huffbits_1[4] = {
53   1,  3,  2,  3,
54 };
55
56 static const uint16_t mpa_huffcodes_2[9] = {
57  0x0001, 0x0002, 0x0001, 0x0003, 0x0001, 0x0001, 0x0003, 0x0002,
58  0x0000,
59 };
60
61 static const uint8_t mpa_huffbits_2[9] = {
62   1,  3,  6,  3,  3,  5,  5,  5,
63   6,
64 };
65
66 static const uint16_t mpa_huffcodes_3[9] = {
67  0x0003, 0x0002, 0x0001, 0x0001, 0x0001, 0x0001, 0x0003, 0x0002,
68  0x0000,
69 };
70
71 static const uint8_t mpa_huffbits_3[9] = {
72   2,  2,  6,  3,  2,  5,  5,  5,
73   6,
74 };
75
76 static const uint16_t mpa_huffcodes_5[16] = {
77  0x0001, 0x0002, 0x0006, 0x0005, 0x0003, 0x0001, 0x0004, 0x0004,
78  0x0007, 0x0005, 0x0007, 0x0001, 0x0006, 0x0001, 0x0001, 0x0000,
79 };
80
81 static const uint8_t mpa_huffbits_5[16] = {
82   1,  3,  6,  7,  3,  3,  6,  7,
83   6,  6,  7,  8,  7,  6,  7,  8,
84 };
85
86 static const uint16_t mpa_huffcodes_6[16] = {
87  0x0007, 0x0003, 0x0005, 0x0001, 0x0006, 0x0002, 0x0003, 0x0002,
88  0x0005, 0x0004, 0x0004, 0x0001, 0x0003, 0x0003, 0x0002, 0x0000,
89 };
90
91 static const uint8_t mpa_huffbits_6[16] = {
92   3,  3,  5,  7,  3,  2,  4,  5,
93   4,  4,  5,  6,  6,  5,  6,  7,
94 };
95
96 static const uint16_t mpa_huffcodes_7[36] = {
97  0x0001, 0x0002, 0x000a, 0x0013, 0x0010, 0x000a, 0x0003, 0x0003,
98  0x0007, 0x000a, 0x0005, 0x0003, 0x000b, 0x0004, 0x000d, 0x0011,
99  0x0008, 0x0004, 0x000c, 0x000b, 0x0012, 0x000f, 0x000b, 0x0002,
100  0x0007, 0x0006, 0x0009, 0x000e, 0x0003, 0x0001, 0x0006, 0x0004,
101  0x0005, 0x0003, 0x0002, 0x0000,
102 };
103
104 static const uint8_t mpa_huffbits_7[36] = {
105   1,  3,  6,  8,  8,  9,  3,  4,
106   6,  7,  7,  8,  6,  5,  7,  8,
107   8,  9,  7,  7,  8,  9,  9,  9,
108   7,  7,  8,  9,  9, 10,  8,  8,
109   9, 10, 10, 10,
110 };
111
112 static const uint16_t mpa_huffcodes_8[36] = {
113  0x0003, 0x0004, 0x0006, 0x0012, 0x000c, 0x0005, 0x0005, 0x0001,
114  0x0002, 0x0010, 0x0009, 0x0003, 0x0007, 0x0003, 0x0005, 0x000e,
115  0x0007, 0x0003, 0x0013, 0x0011, 0x000f, 0x000d, 0x000a, 0x0004,
116  0x000d, 0x0005, 0x0008, 0x000b, 0x0005, 0x0001, 0x000c, 0x0004,
117  0x0004, 0x0001, 0x0001, 0x0000,
118 };
119
120 static const uint8_t mpa_huffbits_8[36] = {
121   2,  3,  6,  8,  8,  9,  3,  2,
122   4,  8,  8,  8,  6,  4,  6,  8,
123   8,  9,  8,  8,  8,  9,  9, 10,
124   8,  7,  8,  9, 10, 10,  9,  8,
125   9,  9, 11, 11,
126 };
127
128 static const uint16_t mpa_huffcodes_9[36] = {
129  0x0007, 0x0005, 0x0009, 0x000e, 0x000f, 0x0007, 0x0006, 0x0004,
130  0x0005, 0x0005, 0x0006, 0x0007, 0x0007, 0x0006, 0x0008, 0x0008,
131  0x0008, 0x0005, 0x000f, 0x0006, 0x0009, 0x000a, 0x0005, 0x0001,
132  0x000b, 0x0007, 0x0009, 0x0006, 0x0004, 0x0001, 0x000e, 0x0004,
133  0x0006, 0x0002, 0x0006, 0x0000,
134 };
135
136 static const uint8_t mpa_huffbits_9[36] = {
137   3,  3,  5,  6,  8,  9,  3,  3,
138   4,  5,  6,  8,  4,  4,  5,  6,
139   7,  8,  6,  5,  6,  7,  7,  8,
140   7,  6,  7,  7,  8,  9,  8,  7,
141   8,  8,  9,  9,
142 };
143
144 static const uint16_t mpa_huffcodes_10[64] = {
145  0x0001, 0x0002, 0x000a, 0x0017, 0x0023, 0x001e, 0x000c, 0x0011,
146  0x0003, 0x0003, 0x0008, 0x000c, 0x0012, 0x0015, 0x000c, 0x0007,
147  0x000b, 0x0009, 0x000f, 0x0015, 0x0020, 0x0028, 0x0013, 0x0006,
148  0x000e, 0x000d, 0x0016, 0x0022, 0x002e, 0x0017, 0x0012, 0x0007,
149  0x0014, 0x0013, 0x0021, 0x002f, 0x001b, 0x0016, 0x0009, 0x0003,
150  0x001f, 0x0016, 0x0029, 0x001a, 0x0015, 0x0014, 0x0005, 0x0003,
151  0x000e, 0x000d, 0x000a, 0x000b, 0x0010, 0x0006, 0x0005, 0x0001,
152  0x0009, 0x0008, 0x0007, 0x0008, 0x0004, 0x0004, 0x0002, 0x0000,
153 };
154
155 static const uint8_t mpa_huffbits_10[64] = {
156   1,  3,  6,  8,  9,  9,  9, 10,
157   3,  4,  6,  7,  8,  9,  8,  8,
158   6,  6,  7,  8,  9, 10,  9,  9,
159   7,  7,  8,  9, 10, 10,  9, 10,
160   8,  8,  9, 10, 10, 10, 10, 10,
161   9,  9, 10, 10, 11, 11, 10, 11,
162   8,  8,  9, 10, 10, 10, 11, 11,
163   9,  8,  9, 10, 10, 11, 11, 11,
164 };
165
166 static const uint16_t mpa_huffcodes_11[64] = {
167  0x0003, 0x0004, 0x000a, 0x0018, 0x0022, 0x0021, 0x0015, 0x000f,
168  0x0005, 0x0003, 0x0004, 0x000a, 0x0020, 0x0011, 0x000b, 0x000a,
169  0x000b, 0x0007, 0x000d, 0x0012, 0x001e, 0x001f, 0x0014, 0x0005,
170  0x0019, 0x000b, 0x0013, 0x003b, 0x001b, 0x0012, 0x000c, 0x0005,
171  0x0023, 0x0021, 0x001f, 0x003a, 0x001e, 0x0010, 0x0007, 0x0005,
172  0x001c, 0x001a, 0x0020, 0x0013, 0x0011, 0x000f, 0x0008, 0x000e,
173  0x000e, 0x000c, 0x0009, 0x000d, 0x000e, 0x0009, 0x0004, 0x0001,
174  0x000b, 0x0004, 0x0006, 0x0006, 0x0006, 0x0003, 0x0002, 0x0000,
175 };
176
177 static const uint8_t mpa_huffbits_11[64] = {
178   2,  3,  5,  7,  8,  9,  8,  9,
179   3,  3,  4,  6,  8,  8,  7,  8,
180   5,  5,  6,  7,  8,  9,  8,  8,
181   7,  6,  7,  9,  8, 10,  8,  9,
182   8,  8,  8,  9,  9, 10,  9, 10,
183   8,  8,  9, 10, 10, 11, 10, 11,
184   8,  7,  7,  8,  9, 10, 10, 10,
185   8,  7,  8,  9, 10, 10, 10, 10,
186 };
187
188 static const uint16_t mpa_huffcodes_12[64] = {
189  0x0009, 0x0006, 0x0010, 0x0021, 0x0029, 0x0027, 0x0026, 0x001a,
190  0x0007, 0x0005, 0x0006, 0x0009, 0x0017, 0x0010, 0x001a, 0x000b,
191  0x0011, 0x0007, 0x000b, 0x000e, 0x0015, 0x001e, 0x000a, 0x0007,
192  0x0011, 0x000a, 0x000f, 0x000c, 0x0012, 0x001c, 0x000e, 0x0005,
193  0x0020, 0x000d, 0x0016, 0x0013, 0x0012, 0x0010, 0x0009, 0x0005,
194  0x0028, 0x0011, 0x001f, 0x001d, 0x0011, 0x000d, 0x0004, 0x0002,
195  0x001b, 0x000c, 0x000b, 0x000f, 0x000a, 0x0007, 0x0004, 0x0001,
196  0x001b, 0x000c, 0x0008, 0x000c, 0x0006, 0x0003, 0x0001, 0x0000,
197 };
198
199 static const uint8_t mpa_huffbits_12[64] = {
200   4,  3,  5,  7,  8,  9,  9,  9,
201   3,  3,  4,  5,  7,  7,  8,  8,
202   5,  4,  5,  6,  7,  8,  7,  8,
203   6,  5,  6,  6,  7,  8,  8,  8,
204   7,  6,  7,  7,  8,  8,  8,  9,
205   8,  7,  8,  8,  8,  9,  8,  9,
206   8,  7,  7,  8,  8,  9,  9, 10,
207   9,  8,  8,  9,  9,  9,  9, 10,
208 };
209
210 static const uint16_t mpa_huffcodes_13[256] = {
211  0x0001, 0x0005, 0x000e, 0x0015, 0x0022, 0x0033, 0x002e, 0x0047,
212  0x002a, 0x0034, 0x0044, 0x0034, 0x0043, 0x002c, 0x002b, 0x0013,
213  0x0003, 0x0004, 0x000c, 0x0013, 0x001f, 0x001a, 0x002c, 0x0021,
214  0x001f, 0x0018, 0x0020, 0x0018, 0x001f, 0x0023, 0x0016, 0x000e,
215  0x000f, 0x000d, 0x0017, 0x0024, 0x003b, 0x0031, 0x004d, 0x0041,
216  0x001d, 0x0028, 0x001e, 0x0028, 0x001b, 0x0021, 0x002a, 0x0010,
217  0x0016, 0x0014, 0x0025, 0x003d, 0x0038, 0x004f, 0x0049, 0x0040,
218  0x002b, 0x004c, 0x0038, 0x0025, 0x001a, 0x001f, 0x0019, 0x000e,
219  0x0023, 0x0010, 0x003c, 0x0039, 0x0061, 0x004b, 0x0072, 0x005b,
220  0x0036, 0x0049, 0x0037, 0x0029, 0x0030, 0x0035, 0x0017, 0x0018,
221  0x003a, 0x001b, 0x0032, 0x0060, 0x004c, 0x0046, 0x005d, 0x0054,
222  0x004d, 0x003a, 0x004f, 0x001d, 0x004a, 0x0031, 0x0029, 0x0011,
223  0x002f, 0x002d, 0x004e, 0x004a, 0x0073, 0x005e, 0x005a, 0x004f,
224  0x0045, 0x0053, 0x0047, 0x0032, 0x003b, 0x0026, 0x0024, 0x000f,
225  0x0048, 0x0022, 0x0038, 0x005f, 0x005c, 0x0055, 0x005b, 0x005a,
226  0x0056, 0x0049, 0x004d, 0x0041, 0x0033, 0x002c, 0x002b, 0x002a,
227  0x002b, 0x0014, 0x001e, 0x002c, 0x0037, 0x004e, 0x0048, 0x0057,
228  0x004e, 0x003d, 0x002e, 0x0036, 0x0025, 0x001e, 0x0014, 0x0010,
229  0x0035, 0x0019, 0x0029, 0x0025, 0x002c, 0x003b, 0x0036, 0x0051,
230  0x0042, 0x004c, 0x0039, 0x0036, 0x0025, 0x0012, 0x0027, 0x000b,
231  0x0023, 0x0021, 0x001f, 0x0039, 0x002a, 0x0052, 0x0048, 0x0050,
232  0x002f, 0x003a, 0x0037, 0x0015, 0x0016, 0x001a, 0x0026, 0x0016,
233  0x0035, 0x0019, 0x0017, 0x0026, 0x0046, 0x003c, 0x0033, 0x0024,
234  0x0037, 0x001a, 0x0022, 0x0017, 0x001b, 0x000e, 0x0009, 0x0007,
235  0x0022, 0x0020, 0x001c, 0x0027, 0x0031, 0x004b, 0x001e, 0x0034,
236  0x0030, 0x0028, 0x0034, 0x001c, 0x0012, 0x0011, 0x0009, 0x0005,
237  0x002d, 0x0015, 0x0022, 0x0040, 0x0038, 0x0032, 0x0031, 0x002d,
238  0x001f, 0x0013, 0x000c, 0x000f, 0x000a, 0x0007, 0x0006, 0x0003,
239  0x0030, 0x0017, 0x0014, 0x0027, 0x0024, 0x0023, 0x0035, 0x0015,
240  0x0010, 0x0017, 0x000d, 0x000a, 0x0006, 0x0001, 0x0004, 0x0002,
241  0x0010, 0x000f, 0x0011, 0x001b, 0x0019, 0x0014, 0x001d, 0x000b,
242  0x0011, 0x000c, 0x0010, 0x0008, 0x0001, 0x0001, 0x0000, 0x0001,
243 };
244
245 static const uint8_t mpa_huffbits_13[256] = {
246   1,  4,  6,  7,  8,  9,  9, 10,
247   9, 10, 11, 11, 12, 12, 13, 13,
248   3,  4,  6,  7,  8,  8,  9,  9,
249   9,  9, 10, 10, 11, 12, 12, 12,
250   6,  6,  7,  8,  9,  9, 10, 10,
251   9, 10, 10, 11, 11, 12, 13, 13,
252   7,  7,  8,  9,  9, 10, 10, 10,
253  10, 11, 11, 11, 11, 12, 13, 13,
254   8,  7,  9,  9, 10, 10, 11, 11,
255  10, 11, 11, 12, 12, 13, 13, 14,
256   9,  8,  9, 10, 10, 10, 11, 11,
257  11, 11, 12, 11, 13, 13, 14, 14,
258   9,  9, 10, 10, 11, 11, 11, 11,
259  11, 12, 12, 12, 13, 13, 14, 14,
260  10,  9, 10, 11, 11, 11, 12, 12,
261  12, 12, 13, 13, 13, 14, 16, 16,
262   9,  8,  9, 10, 10, 11, 11, 12,
263  12, 12, 12, 13, 13, 14, 15, 15,
264  10,  9, 10, 10, 11, 11, 11, 13,
265  12, 13, 13, 14, 14, 14, 16, 15,
266  10, 10, 10, 11, 11, 12, 12, 13,
267  12, 13, 14, 13, 14, 15, 16, 17,
268  11, 10, 10, 11, 12, 12, 12, 12,
269  13, 13, 13, 14, 15, 15, 15, 16,
270  11, 11, 11, 12, 12, 13, 12, 13,
271  14, 14, 15, 15, 15, 16, 16, 16,
272  12, 11, 12, 13, 13, 13, 14, 14,
273  14, 14, 14, 15, 16, 15, 16, 16,
274  13, 12, 12, 13, 13, 13, 15, 14,
275  14, 17, 15, 15, 15, 17, 16, 16,
276  12, 12, 13, 14, 14, 14, 15, 14,
277  15, 15, 16, 16, 19, 18, 19, 16,
278 };
279
280 static const uint16_t mpa_huffcodes_15[256] = {
281  0x0007, 0x000c, 0x0012, 0x0035, 0x002f, 0x004c, 0x007c, 0x006c,
282  0x0059, 0x007b, 0x006c, 0x0077, 0x006b, 0x0051, 0x007a, 0x003f,
283  0x000d, 0x0005, 0x0010, 0x001b, 0x002e, 0x0024, 0x003d, 0x0033,
284  0x002a, 0x0046, 0x0034, 0x0053, 0x0041, 0x0029, 0x003b, 0x0024,
285  0x0013, 0x0011, 0x000f, 0x0018, 0x0029, 0x0022, 0x003b, 0x0030,
286  0x0028, 0x0040, 0x0032, 0x004e, 0x003e, 0x0050, 0x0038, 0x0021,
287  0x001d, 0x001c, 0x0019, 0x002b, 0x0027, 0x003f, 0x0037, 0x005d,
288  0x004c, 0x003b, 0x005d, 0x0048, 0x0036, 0x004b, 0x0032, 0x001d,
289  0x0034, 0x0016, 0x002a, 0x0028, 0x0043, 0x0039, 0x005f, 0x004f,
290  0x0048, 0x0039, 0x0059, 0x0045, 0x0031, 0x0042, 0x002e, 0x001b,
291  0x004d, 0x0025, 0x0023, 0x0042, 0x003a, 0x0034, 0x005b, 0x004a,
292  0x003e, 0x0030, 0x004f, 0x003f, 0x005a, 0x003e, 0x0028, 0x0026,
293  0x007d, 0x0020, 0x003c, 0x0038, 0x0032, 0x005c, 0x004e, 0x0041,
294  0x0037, 0x0057, 0x0047, 0x0033, 0x0049, 0x0033, 0x0046, 0x001e,
295  0x006d, 0x0035, 0x0031, 0x005e, 0x0058, 0x004b, 0x0042, 0x007a,
296  0x005b, 0x0049, 0x0038, 0x002a, 0x0040, 0x002c, 0x0015, 0x0019,
297  0x005a, 0x002b, 0x0029, 0x004d, 0x0049, 0x003f, 0x0038, 0x005c,
298  0x004d, 0x0042, 0x002f, 0x0043, 0x0030, 0x0035, 0x0024, 0x0014,
299  0x0047, 0x0022, 0x0043, 0x003c, 0x003a, 0x0031, 0x0058, 0x004c,
300  0x0043, 0x006a, 0x0047, 0x0036, 0x0026, 0x0027, 0x0017, 0x000f,
301  0x006d, 0x0035, 0x0033, 0x002f, 0x005a, 0x0052, 0x003a, 0x0039,
302  0x0030, 0x0048, 0x0039, 0x0029, 0x0017, 0x001b, 0x003e, 0x0009,
303  0x0056, 0x002a, 0x0028, 0x0025, 0x0046, 0x0040, 0x0034, 0x002b,
304  0x0046, 0x0037, 0x002a, 0x0019, 0x001d, 0x0012, 0x000b, 0x000b,
305  0x0076, 0x0044, 0x001e, 0x0037, 0x0032, 0x002e, 0x004a, 0x0041,
306  0x0031, 0x0027, 0x0018, 0x0010, 0x0016, 0x000d, 0x000e, 0x0007,
307  0x005b, 0x002c, 0x0027, 0x0026, 0x0022, 0x003f, 0x0034, 0x002d,
308  0x001f, 0x0034, 0x001c, 0x0013, 0x000e, 0x0008, 0x0009, 0x0003,
309  0x007b, 0x003c, 0x003a, 0x0035, 0x002f, 0x002b, 0x0020, 0x0016,
310  0x0025, 0x0018, 0x0011, 0x000c, 0x000f, 0x000a, 0x0002, 0x0001,
311  0x0047, 0x0025, 0x0022, 0x001e, 0x001c, 0x0014, 0x0011, 0x001a,
312  0x0015, 0x0010, 0x000a, 0x0006, 0x0008, 0x0006, 0x0002, 0x0000,
313 };
314
315 static const uint8_t mpa_huffbits_15[256] = {
316   3,  4,  5,  7,  7,  8,  9,  9,
317   9, 10, 10, 11, 11, 11, 12, 13,
318   4,  3,  5,  6,  7,  7,  8,  8,
319   8,  9,  9, 10, 10, 10, 11, 11,
320   5,  5,  5,  6,  7,  7,  8,  8,
321   8,  9,  9, 10, 10, 11, 11, 11,
322   6,  6,  6,  7,  7,  8,  8,  9,
323   9,  9, 10, 10, 10, 11, 11, 11,
324   7,  6,  7,  7,  8,  8,  9,  9,
325   9,  9, 10, 10, 10, 11, 11, 11,
326   8,  7,  7,  8,  8,  8,  9,  9,
327   9,  9, 10, 10, 11, 11, 11, 12,
328   9,  7,  8,  8,  8,  9,  9,  9,
329   9, 10, 10, 10, 11, 11, 12, 12,
330   9,  8,  8,  9,  9,  9,  9, 10,
331  10, 10, 10, 10, 11, 11, 11, 12,
332   9,  8,  8,  9,  9,  9,  9, 10,
333  10, 10, 10, 11, 11, 12, 12, 12,
334   9,  8,  9,  9,  9,  9, 10, 10,
335  10, 11, 11, 11, 11, 12, 12, 12,
336  10,  9,  9,  9, 10, 10, 10, 10,
337  10, 11, 11, 11, 11, 12, 13, 12,
338  10,  9,  9,  9, 10, 10, 10, 10,
339  11, 11, 11, 11, 12, 12, 12, 13,
340  11, 10,  9, 10, 10, 10, 11, 11,
341  11, 11, 11, 11, 12, 12, 13, 13,
342  11, 10, 10, 10, 10, 11, 11, 11,
343  11, 12, 12, 12, 12, 12, 13, 13,
344  12, 11, 11, 11, 11, 11, 11, 11,
345  12, 12, 12, 12, 13, 13, 12, 13,
346  12, 11, 11, 11, 11, 11, 11, 12,
347  12, 12, 12, 12, 13, 13, 13, 13,
348 };
349
350 static const uint16_t mpa_huffcodes_16[256] = {
351  0x0001, 0x0005, 0x000e, 0x002c, 0x004a, 0x003f, 0x006e, 0x005d,
352  0x00ac, 0x0095, 0x008a, 0x00f2, 0x00e1, 0x00c3, 0x0178, 0x0011,
353  0x0003, 0x0004, 0x000c, 0x0014, 0x0023, 0x003e, 0x0035, 0x002f,
354  0x0053, 0x004b, 0x0044, 0x0077, 0x00c9, 0x006b, 0x00cf, 0x0009,
355  0x000f, 0x000d, 0x0017, 0x0026, 0x0043, 0x003a, 0x0067, 0x005a,
356  0x00a1, 0x0048, 0x007f, 0x0075, 0x006e, 0x00d1, 0x00ce, 0x0010,
357  0x002d, 0x0015, 0x0027, 0x0045, 0x0040, 0x0072, 0x0063, 0x0057,
358  0x009e, 0x008c, 0x00fc, 0x00d4, 0x00c7, 0x0183, 0x016d, 0x001a,
359  0x004b, 0x0024, 0x0044, 0x0041, 0x0073, 0x0065, 0x00b3, 0x00a4,
360  0x009b, 0x0108, 0x00f6, 0x00e2, 0x018b, 0x017e, 0x016a, 0x0009,
361  0x0042, 0x001e, 0x003b, 0x0038, 0x0066, 0x00b9, 0x00ad, 0x0109,
362  0x008e, 0x00fd, 0x00e8, 0x0190, 0x0184, 0x017a, 0x01bd, 0x0010,
363  0x006f, 0x0036, 0x0034, 0x0064, 0x00b8, 0x00b2, 0x00a0, 0x0085,
364  0x0101, 0x00f4, 0x00e4, 0x00d9, 0x0181, 0x016e, 0x02cb, 0x000a,
365  0x0062, 0x0030, 0x005b, 0x0058, 0x00a5, 0x009d, 0x0094, 0x0105,
366  0x00f8, 0x0197, 0x018d, 0x0174, 0x017c, 0x0379, 0x0374, 0x0008,
367  0x0055, 0x0054, 0x0051, 0x009f, 0x009c, 0x008f, 0x0104, 0x00f9,
368  0x01ab, 0x0191, 0x0188, 0x017f, 0x02d7, 0x02c9, 0x02c4, 0x0007,
369  0x009a, 0x004c, 0x0049, 0x008d, 0x0083, 0x0100, 0x00f5, 0x01aa,
370  0x0196, 0x018a, 0x0180, 0x02df, 0x0167, 0x02c6, 0x0160, 0x000b,
371  0x008b, 0x0081, 0x0043, 0x007d, 0x00f7, 0x00e9, 0x00e5, 0x00db,
372  0x0189, 0x02e7, 0x02e1, 0x02d0, 0x0375, 0x0372, 0x01b7, 0x0004,
373  0x00f3, 0x0078, 0x0076, 0x0073, 0x00e3, 0x00df, 0x018c, 0x02ea,
374  0x02e6, 0x02e0, 0x02d1, 0x02c8, 0x02c2, 0x00df, 0x01b4, 0x0006,
375  0x00ca, 0x00e0, 0x00de, 0x00da, 0x00d8, 0x0185, 0x0182, 0x017d,
376  0x016c, 0x0378, 0x01bb, 0x02c3, 0x01b8, 0x01b5, 0x06c0, 0x0004,
377  0x02eb, 0x00d3, 0x00d2, 0x00d0, 0x0172, 0x017b, 0x02de, 0x02d3,
378  0x02ca, 0x06c7, 0x0373, 0x036d, 0x036c, 0x0d83, 0x0361, 0x0002,
379  0x0179, 0x0171, 0x0066, 0x00bb, 0x02d6, 0x02d2, 0x0166, 0x02c7,
380  0x02c5, 0x0362, 0x06c6, 0x0367, 0x0d82, 0x0366, 0x01b2, 0x0000,
381  0x000c, 0x000a, 0x0007, 0x000b, 0x000a, 0x0011, 0x000b, 0x0009,
382  0x000d, 0x000c, 0x000a, 0x0007, 0x0005, 0x0003, 0x0001, 0x0003,
383 };
384
385 static const uint8_t mpa_huffbits_16[256] = {
386   1,  4,  6,  8,  9,  9, 10, 10,
387  11, 11, 11, 12, 12, 12, 13,  9,
388   3,  4,  6,  7,  8,  9,  9,  9,
389  10, 10, 10, 11, 12, 11, 12,  8,
390   6,  6,  7,  8,  9,  9, 10, 10,
391  11, 10, 11, 11, 11, 12, 12,  9,
392   8,  7,  8,  9,  9, 10, 10, 10,
393  11, 11, 12, 12, 12, 13, 13, 10,
394   9,  8,  9,  9, 10, 10, 11, 11,
395  11, 12, 12, 12, 13, 13, 13,  9,
396   9,  8,  9,  9, 10, 11, 11, 12,
397  11, 12, 12, 13, 13, 13, 14, 10,
398  10,  9,  9, 10, 11, 11, 11, 11,
399  12, 12, 12, 12, 13, 13, 14, 10,
400  10,  9, 10, 10, 11, 11, 11, 12,
401  12, 13, 13, 13, 13, 15, 15, 10,
402  10, 10, 10, 11, 11, 11, 12, 12,
403  13, 13, 13, 13, 14, 14, 14, 10,
404  11, 10, 10, 11, 11, 12, 12, 13,
405  13, 13, 13, 14, 13, 14, 13, 11,
406  11, 11, 10, 11, 12, 12, 12, 12,
407  13, 14, 14, 14, 15, 15, 14, 10,
408  12, 11, 11, 11, 12, 12, 13, 14,
409  14, 14, 14, 14, 14, 13, 14, 11,
410  12, 12, 12, 12, 12, 13, 13, 13,
411  13, 15, 14, 14, 14, 14, 16, 11,
412  14, 12, 12, 12, 13, 13, 14, 14,
413  14, 16, 15, 15, 15, 17, 15, 11,
414  13, 13, 11, 12, 14, 14, 13, 14,
415  14, 15, 16, 15, 17, 15, 14, 11,
416   9,  8,  8,  9,  9, 10, 10, 10,
417  11, 11, 11, 11, 11, 11, 11,  8,
418 };
419
420 static const uint16_t mpa_huffcodes_24[256] = {
421  0x000f, 0x000d, 0x002e, 0x0050, 0x0092, 0x0106, 0x00f8, 0x01b2,
422  0x01aa, 0x029d, 0x028d, 0x0289, 0x026d, 0x0205, 0x0408, 0x0058,
423  0x000e, 0x000c, 0x0015, 0x0026, 0x0047, 0x0082, 0x007a, 0x00d8,
424  0x00d1, 0x00c6, 0x0147, 0x0159, 0x013f, 0x0129, 0x0117, 0x002a,
425  0x002f, 0x0016, 0x0029, 0x004a, 0x0044, 0x0080, 0x0078, 0x00dd,
426  0x00cf, 0x00c2, 0x00b6, 0x0154, 0x013b, 0x0127, 0x021d, 0x0012,
427  0x0051, 0x0027, 0x004b, 0x0046, 0x0086, 0x007d, 0x0074, 0x00dc,
428  0x00cc, 0x00be, 0x00b2, 0x0145, 0x0137, 0x0125, 0x010f, 0x0010,
429  0x0093, 0x0048, 0x0045, 0x0087, 0x007f, 0x0076, 0x0070, 0x00d2,
430  0x00c8, 0x00bc, 0x0160, 0x0143, 0x0132, 0x011d, 0x021c, 0x000e,
431  0x0107, 0x0042, 0x0081, 0x007e, 0x0077, 0x0072, 0x00d6, 0x00ca,
432  0x00c0, 0x00b4, 0x0155, 0x013d, 0x012d, 0x0119, 0x0106, 0x000c,
433  0x00f9, 0x007b, 0x0079, 0x0075, 0x0071, 0x00d7, 0x00ce, 0x00c3,
434  0x00b9, 0x015b, 0x014a, 0x0134, 0x0123, 0x0110, 0x0208, 0x000a,
435  0x01b3, 0x0073, 0x006f, 0x006d, 0x00d3, 0x00cb, 0x00c4, 0x00bb,
436  0x0161, 0x014c, 0x0139, 0x012a, 0x011b, 0x0213, 0x017d, 0x0011,
437  0x01ab, 0x00d4, 0x00d0, 0x00cd, 0x00c9, 0x00c1, 0x00ba, 0x00b1,
438  0x00a9, 0x0140, 0x012f, 0x011e, 0x010c, 0x0202, 0x0179, 0x0010,
439  0x014f, 0x00c7, 0x00c5, 0x00bf, 0x00bd, 0x00b5, 0x00ae, 0x014d,
440  0x0141, 0x0131, 0x0121, 0x0113, 0x0209, 0x017b, 0x0173, 0x000b,
441  0x029c, 0x00b8, 0x00b7, 0x00b3, 0x00af, 0x0158, 0x014b, 0x013a,
442  0x0130, 0x0122, 0x0115, 0x0212, 0x017f, 0x0175, 0x016e, 0x000a,
443  0x028c, 0x015a, 0x00ab, 0x00a8, 0x00a4, 0x013e, 0x0135, 0x012b,
444  0x011f, 0x0114, 0x0107, 0x0201, 0x0177, 0x0170, 0x016a, 0x0006,
445  0x0288, 0x0142, 0x013c, 0x0138, 0x0133, 0x012e, 0x0124, 0x011c,
446  0x010d, 0x0105, 0x0200, 0x0178, 0x0172, 0x016c, 0x0167, 0x0004,
447  0x026c, 0x012c, 0x0128, 0x0126, 0x0120, 0x011a, 0x0111, 0x010a,
448  0x0203, 0x017c, 0x0176, 0x0171, 0x016d, 0x0169, 0x0165, 0x0002,
449  0x0409, 0x0118, 0x0116, 0x0112, 0x010b, 0x0108, 0x0103, 0x017e,
450  0x017a, 0x0174, 0x016f, 0x016b, 0x0168, 0x0166, 0x0164, 0x0000,
451  0x002b, 0x0014, 0x0013, 0x0011, 0x000f, 0x000d, 0x000b, 0x0009,
452  0x0007, 0x0006, 0x0004, 0x0007, 0x0005, 0x0003, 0x0001, 0x0003,
453 };
454
455 static const uint8_t mpa_huffbits_24[256] = {
456   4,  4,  6,  7,  8,  9,  9, 10,
457  10, 11, 11, 11, 11, 11, 12,  9,
458   4,  4,  5,  6,  7,  8,  8,  9,
459   9,  9, 10, 10, 10, 10, 10,  8,
460   6,  5,  6,  7,  7,  8,  8,  9,
461   9,  9,  9, 10, 10, 10, 11,  7,
462   7,  6,  7,  7,  8,  8,  8,  9,
463   9,  9,  9, 10, 10, 10, 10,  7,
464   8,  7,  7,  8,  8,  8,  8,  9,
465   9,  9, 10, 10, 10, 10, 11,  7,
466   9,  7,  8,  8,  8,  8,  9,  9,
467   9,  9, 10, 10, 10, 10, 10,  7,
468   9,  8,  8,  8,  8,  9,  9,  9,
469   9, 10, 10, 10, 10, 10, 11,  7,
470  10,  8,  8,  8,  9,  9,  9,  9,
471  10, 10, 10, 10, 10, 11, 11,  8,
472  10,  9,  9,  9,  9,  9,  9,  9,
473   9, 10, 10, 10, 10, 11, 11,  8,
474  10,  9,  9,  9,  9,  9,  9, 10,
475  10, 10, 10, 10, 11, 11, 11,  8,
476  11,  9,  9,  9,  9, 10, 10, 10,
477  10, 10, 10, 11, 11, 11, 11,  8,
478  11, 10,  9,  9,  9, 10, 10, 10,
479  10, 10, 10, 11, 11, 11, 11,  8,
480  11, 10, 10, 10, 10, 10, 10, 10,
481  10, 10, 11, 11, 11, 11, 11,  8,
482  11, 10, 10, 10, 10, 10, 10, 10,
483  11, 11, 11, 11, 11, 11, 11,  8,
484  12, 10, 10, 10, 10, 10, 10, 11,
485  11, 11, 11, 11, 11, 11, 11,  8,
486   8,  7,  7,  7,  7,  7,  7,  7,
487   7,  7,  7,  8,  8,  8,  8,  4,
488 };
489
490 static const HuffTable mpa_huff_tables[16] = {
491 { 1, NULL, NULL },
492 { 2, mpa_huffbits_1, mpa_huffcodes_1 },
493 { 3, mpa_huffbits_2, mpa_huffcodes_2 },
494 { 3, mpa_huffbits_3, mpa_huffcodes_3 },
495 { 4, mpa_huffbits_5, mpa_huffcodes_5 },
496 { 4, mpa_huffbits_6, mpa_huffcodes_6 },
497 { 6, mpa_huffbits_7, mpa_huffcodes_7 },
498 { 6, mpa_huffbits_8, mpa_huffcodes_8 },
499 { 6, mpa_huffbits_9, mpa_huffcodes_9 },
500 { 8, mpa_huffbits_10, mpa_huffcodes_10 },
501 { 8, mpa_huffbits_11, mpa_huffcodes_11 },
502 { 8, mpa_huffbits_12, mpa_huffcodes_12 },
503 { 16, mpa_huffbits_13, mpa_huffcodes_13 },
504 { 16, mpa_huffbits_15, mpa_huffcodes_15 },
505 { 16, mpa_huffbits_16, mpa_huffcodes_16 },
506 { 16, mpa_huffbits_24, mpa_huffcodes_24 },
507 };
508
509 static const uint8_t mpa_huff_data[32][2] = {
510 { 0, 0 },
511 { 1, 0 },
512 { 2, 0 },
513 { 3, 0 },
514 { 0, 0 },
515 { 4, 0 },
516 { 5, 0 },
517 { 6, 0 },
518 { 7, 0 },
519 { 8, 0 },
520 { 9, 0 },
521 { 10, 0 },
522 { 11, 0 },
523 { 12, 0 },
524 { 0, 0 },
525 { 13, 0 },
526 { 14, 1 },
527 { 14, 2 },
528 { 14, 3 },
529 { 14, 4 },
530 { 14, 6 },
531 { 14, 8 },
532 { 14, 10 },
533 { 14, 13 },
534 { 15, 4 },
535 { 15, 5 },
536 { 15, 6 },
537 { 15, 7 },
538 { 15, 8 },
539 { 15, 9 },
540 { 15, 11 },
541 { 15, 13 },
542 };
543
544
545 /* huffman tables for quadrules */
546 static const uint8_t mpa_quad_codes[2][16] = {
547     {  1,  5,  4,  5,  6,  5,  4,  4, 7,  3,  6,  0,  7,  2,  3,  1, },
548     { 15, 14, 13, 12, 11, 10,  9,  8, 7,  6,  5,  4,  3,  2,  1,  0, },
549 };
550
551 static const uint8_t mpa_quad_bits[2][16] = {
552     { 1, 4, 4, 5, 4, 6, 5, 6, 4, 5, 5, 6, 5, 6, 6, 6, },
553     { 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, },
554 };
555
556 /* band size tables */
557 static const uint8_t band_size_long[9][22] = {
558 { 4, 4, 4, 4, 4, 4, 6, 6, 8, 8, 10,
559   12, 16, 20, 24, 28, 34, 42, 50, 54, 76, 158, }, /* 44100 */
560 { 4, 4, 4, 4, 4, 4, 6, 6, 6, 8, 10,
561   12, 16, 18, 22, 28, 34, 40, 46, 54, 54, 192, }, /* 48000 */
562 { 4, 4, 4, 4, 4, 4, 6, 6, 8, 10, 12,
563   16, 20, 24, 30, 38, 46, 56, 68, 84, 102, 26, }, /* 32000 */
564 { 6, 6, 6, 6, 6, 6, 8, 10, 12, 14, 16,
565   20, 24, 28, 32, 38, 46, 52, 60, 68, 58, 54, }, /* 22050 */
566 { 6, 6, 6, 6, 6, 6, 8, 10, 12, 14, 16,
567   18, 22, 26, 32, 38, 46, 52, 64, 70, 76, 36, }, /* 24000 */
568 { 6, 6, 6, 6, 6, 6, 8, 10, 12, 14, 16,
569   20, 24, 28, 32, 38, 46, 52, 60, 68, 58, 54, }, /* 16000 */
570 { 6, 6, 6, 6, 6, 6, 8, 10, 12, 14, 16,
571   20, 24, 28, 32, 38, 46, 52, 60, 68, 58, 54, }, /* 11025 */
572 { 6, 6, 6, 6, 6, 6, 8, 10, 12, 14, 16,
573   20, 24, 28, 32, 38, 46, 52, 60, 68, 58, 54, }, /* 12000 */
574 { 12, 12, 12, 12, 12, 12, 16, 20, 24, 28, 32,
575   40, 48, 56, 64, 76, 90, 2, 2, 2, 2, 2, }, /* 8000 */
576 };
577
578 static const uint8_t band_size_short[9][13] = {
579 { 4, 4, 4, 4, 6, 8, 10, 12, 14, 18, 22, 30, 56, }, /* 44100 */
580 { 4, 4, 4, 4, 6, 6, 10, 12, 14, 16, 20, 26, 66, }, /* 48000 */
581 { 4, 4, 4, 4, 6, 8, 12, 16, 20, 26, 34, 42, 12, }, /* 32000 */
582 { 4, 4, 4, 6, 6, 8, 10, 14, 18, 26, 32, 42, 18, }, /* 22050 */
583 { 4, 4, 4, 6, 8, 10, 12, 14, 18, 24, 32, 44, 12, }, /* 24000 */
584 { 4, 4, 4, 6, 8, 10, 12, 14, 18, 24, 30, 40, 18, }, /* 16000 */
585 { 4, 4, 4, 6, 8, 10, 12, 14, 18, 24, 30, 40, 18, }, /* 11025 */
586 { 4, 4, 4, 6, 8, 10, 12, 14, 18, 24, 30, 40, 18, }, /* 12000 */
587 { 8, 8, 8, 12, 16, 20, 24, 28, 36, 2, 2, 2, 26, }, /* 8000 */
588 };
589
590 static const uint8_t mpa_pretab[2][22] = {
591     { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
592     { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 3, 3, 3, 2, 0 },
593 };
594
595 /* table for alias reduction (XXX: store it as integer !) */
596 static const float ci_table[8] = {
597     -0.6, -0.535, -0.33, -0.185, -0.095, -0.041, -0.0142, -0.0037,
598 };