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