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