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