3 * copyright (c) 2002 Fabrice Bellard
5 * This file is part of FFmpeg.
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.
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.
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
23 * @file mpegaudiodectab.h
24 * mpeg audio layer decoder tables.
27 /*******************************************************/
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 },
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 } },
46 /* mpegaudio layer 3 huffman tables */
48 static const uint16_t mpa_huffcodes_1[4] = {
49 0x0001, 0x0001, 0x0001, 0x0000,
52 static const uint8_t mpa_huffbits_1[4] = {
56 static const uint16_t mpa_huffcodes_2[9] = {
57 0x0001, 0x0002, 0x0001, 0x0003, 0x0001, 0x0001, 0x0003, 0x0002,
61 static const uint8_t mpa_huffbits_2[9] = {
62 1, 3, 6, 3, 3, 5, 5, 5,
66 static const uint16_t mpa_huffcodes_3[9] = {
67 0x0003, 0x0002, 0x0001, 0x0001, 0x0001, 0x0001, 0x0003, 0x0002,
71 static const uint8_t mpa_huffbits_3[9] = {
72 2, 2, 6, 3, 2, 5, 5, 5,
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,
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,
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,
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,
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,
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,
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,
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,
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,
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,
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,
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,
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,
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,
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,
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,
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,
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,
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,
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,
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,
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,
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,
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,
490 static const HuffTable mpa_huff_tables[16] = {
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 },
509 static const uint8_t mpa_huff_data[32][2] = {
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, },
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, },
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 */
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 */
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 },
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,