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