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