add multiple inclusion guards to headers
[libav.git] / libavcodec / mpegaudiodectab.h
CommitLineData
04d7f601
DB
1/*
2 * MPEG Audio decoder
3 * copyright (c) 2002 Fabrice Bellard
4 *
b78e7197
DB
5 * This file is part of FFmpeg.
6 *
7 * FFmpeg is free software; you can redistribute it and/or
04d7f601
DB
8 * modify it under the terms of the GNU Lesser General Public
9 * License as published by the Free Software Foundation; either
b78e7197 10 * version 2.1 of the License, or (at your option) any later version.
04d7f601 11 *
b78e7197 12 * FFmpeg is distributed in the hope that it will be useful,
04d7f601
DB
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
b78e7197 18 * License along with FFmpeg; if not, write to the Free Software
04d7f601
DB
19 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
20 */
21
983e3246
MN
22/**
23 * @file mpegaudiodectab.h
115329f1 24 * mpeg audio layer decoder tables.
983e3246 25 */
9a9b2b5d 26
699b3f99
MR
27#ifndef AVCODEC_MPEGAUDIODECTAB_H
28#define AVCODEC_MPEGAUDIODECTAB_H
29
99545457
MR
30#include <stdint.h>
31#include "mpegaudio.h"
32
9a9b2b5d
FB
33/*******************************************************/
34/* layer 3 tables */
35
36/* layer3 scale factor size */
0c1a9eda 37static const uint8_t slen_table[2][16] = {
9a9b2b5d
FB
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 */
0c1a9eda 43static const uint8_t lsf_nsf_table[6][3][4] = {
9a9b2b5d
FB
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 } },
115329f1 47 { { 7, 7, 7, 0 }, { 12, 12, 12, 0 }, { 6, 15, 12, 0 } },
9a9b2b5d
FB
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
1bd29b07 54static const uint16_t mpa_huffcodes_1[4] = {
9a9b2b5d
FB
55 0x0001, 0x0001, 0x0001, 0x0000,
56};
57
1bd29b07 58static const uint8_t mpa_huffbits_1[4] = {
9a9b2b5d
FB
59 1, 3, 2, 3,
60};
61
1bd29b07 62static const uint16_t mpa_huffcodes_2[9] = {
9a9b2b5d
FB
63 0x0001, 0x0002, 0x0001, 0x0003, 0x0001, 0x0001, 0x0003, 0x0002,
64 0x0000,
65};
66
1bd29b07 67static const uint8_t mpa_huffbits_2[9] = {
9a9b2b5d
FB
68 1, 3, 6, 3, 3, 5, 5, 5,
69 6,
70};
71
1bd29b07 72static const uint16_t mpa_huffcodes_3[9] = {
9a9b2b5d
FB
73 0x0003, 0x0002, 0x0001, 0x0001, 0x0001, 0x0001, 0x0003, 0x0002,
74 0x0000,
75};
76
1bd29b07 77static const uint8_t mpa_huffbits_3[9] = {
9a9b2b5d
FB
78 2, 2, 6, 3, 2, 5, 5, 5,
79 6,
80};
81
1bd29b07 82static const uint16_t mpa_huffcodes_5[16] = {
9a9b2b5d
FB
83 0x0001, 0x0002, 0x0006, 0x0005, 0x0003, 0x0001, 0x0004, 0x0004,
84 0x0007, 0x0005, 0x0007, 0x0001, 0x0006, 0x0001, 0x0001, 0x0000,
85};
86
1bd29b07 87static const uint8_t mpa_huffbits_5[16] = {
9a9b2b5d
FB
88 1, 3, 6, 7, 3, 3, 6, 7,
89 6, 6, 7, 8, 7, 6, 7, 8,
90};
91
1bd29b07 92static const uint16_t mpa_huffcodes_6[16] = {
9a9b2b5d
FB
93 0x0007, 0x0003, 0x0005, 0x0001, 0x0006, 0x0002, 0x0003, 0x0002,
94 0x0005, 0x0004, 0x0004, 0x0001, 0x0003, 0x0003, 0x0002, 0x0000,
95};
96
1bd29b07 97static const uint8_t mpa_huffbits_6[16] = {
9a9b2b5d
FB
98 3, 3, 5, 7, 3, 2, 4, 5,
99 4, 4, 5, 6, 6, 5, 6, 7,
100};
101
1bd29b07 102static const uint16_t mpa_huffcodes_7[36] = {
9a9b2b5d
FB
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
1bd29b07 110static const uint8_t mpa_huffbits_7[36] = {
9a9b2b5d
FB
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
1bd29b07 118static const uint16_t mpa_huffcodes_8[36] = {
9a9b2b5d
FB
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
1bd29b07 126static const uint8_t mpa_huffbits_8[36] = {
9a9b2b5d
FB
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
1bd29b07 134static const uint16_t mpa_huffcodes_9[36] = {
9a9b2b5d
FB
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
1bd29b07 142static const uint8_t mpa_huffbits_9[36] = {
9a9b2b5d
FB
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
1bd29b07 150static const uint16_t mpa_huffcodes_10[64] = {
9a9b2b5d
FB
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
1bd29b07 161static const uint8_t mpa_huffbits_10[64] = {
9a9b2b5d
FB
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
1bd29b07 172static const uint16_t mpa_huffcodes_11[64] = {
9a9b2b5d
FB
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
1bd29b07 183static const uint8_t mpa_huffbits_11[64] = {
9a9b2b5d
FB
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
1bd29b07 194static const uint16_t mpa_huffcodes_12[64] = {
9a9b2b5d
FB
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
1bd29b07 205static const uint8_t mpa_huffbits_12[64] = {
9a9b2b5d
FB
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
1bd29b07 216static const uint16_t mpa_huffcodes_13[256] = {
9a9b2b5d
FB
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
1bd29b07 251static const uint8_t mpa_huffbits_13[256] = {
9a9b2b5d
FB
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
1bd29b07 286static const uint16_t mpa_huffcodes_15[256] = {
9a9b2b5d
FB
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
1bd29b07 321static const uint8_t mpa_huffbits_15[256] = {
9a9b2b5d
FB
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
1bd29b07 356static const uint16_t mpa_huffcodes_16[256] = {
9a9b2b5d
FB
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
1bd29b07 391static const uint8_t mpa_huffbits_16[256] = {
9a9b2b5d
FB
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
1bd29b07 426static const uint16_t mpa_huffcodes_24[256] = {
9a9b2b5d
FB
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
1bd29b07 461static const uint8_t mpa_huffbits_24[256] = {
9a9b2b5d
FB
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
1bd29b07 496static const HuffTable mpa_huff_tables[16] = {
9a9b2b5d
FB
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
1bd29b07 515static const uint8_t mpa_huff_data[32][2] = {
9a9b2b5d
FB
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 */
c26ae41d 552static const uint8_t mpa_quad_codes[2][16] = {
9a9b2b5d
FB
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
c26ae41d 557static const uint8_t mpa_quad_bits[2][16] = {
9a9b2b5d
FB
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 */
1bd29b07 563static const uint8_t band_size_long[9][22] = {
9a9b2b5d
FB
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
1bd29b07 584static const uint8_t band_size_short[9][13] = {
9a9b2b5d
FB
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
1bd29b07 596static const uint8_t mpa_pretab[2][22] = {
9a9b2b5d
FB
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 !) */
1bd29b07 602static const float ci_table[8] = {
9a9b2b5d
FB
603 -0.6, -0.535, -0.33, -0.185, -0.095, -0.041, -0.0142, -0.0037,
604};
699b3f99
MR
605
606#endif