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