]> git.sesse.net Git - ffmpeg/blob - libavcodec/wmaprodata.h
avcodec/mpegvideo: Remove deprecated rc_strategy option
[ffmpeg] / libavcodec / wmaprodata.h
1 /*
2  * WMA 9/3/PRO compatible decoder
3  * Copyright (c) 2007 Baptiste Coudurier, Benjamin Larsson, Ulion
4  * Copyright (c) 2008 - 2009 Sascha Sommer
5  *
6  * This file is part of FFmpeg.
7  *
8  * FFmpeg is free software; you can redistribute it and/or
9  * modify it under the terms of the GNU Lesser General Public
10  * License as published by the Free Software Foundation; either
11  * version 2.1 of the License, or (at your option) any later version.
12  *
13  * FFmpeg is distributed in the hope that it will be useful,
14  * but WITHOUT ANY WARRANTY; without even the implied warranty of
15  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
16  * Lesser General Public License for more details.
17  *
18  * You should have received a copy of the GNU Lesser General Public
19  * License along with FFmpeg; if not, write to the Free Software
20  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
21  */
22
23 /**
24  * @file
25  * @brief tables for wmapro decoding
26  */
27
28 #ifndef AVCODEC_WMAPRODATA_H
29 #define AVCODEC_WMAPRODATA_H
30
31 #include <stddef.h>
32 #include <stdint.h>
33
34 /**
35  * @brief frequencies to divide the frequency spectrum into scale factor bands
36  */
37 static const uint16_t critical_freq[] = {
38      100,   200,    300,    400,    510,    630,    770,
39      920,  1080,   1270,   1480,   1720,   2000,   2320,
40     2700,  3150,   3700,   4400,   5300,   6400,   7700,
41     9500, 12000,  15500,  20675,  28575,  41375,  63875,
42 };
43
44
45 /**
46  * @name Huffman tables for DPCM-coded scale factors
47  * @{
48  */
49 #define HUFF_SCALE_SIZE    121
50 #define HUFF_SCALE_MAXBITS  19
51 static const uint16_t scale_huffcodes[HUFF_SCALE_SIZE] = {
52     0xE639, 0xE6C2, 0xE6C1, 0xE6C0, 0xE63F, 0xE63E, 0xE63D, 0xE63C,
53     0xE63B, 0xE63A, 0xE638, 0xE637, 0xE636, 0xE635, 0xE634, 0xE632,
54     0xE633, 0xE620, 0x737B, 0xE610, 0xE611, 0xE612, 0xE613, 0xE614,
55     0xE615, 0xE616, 0xE617, 0xE618, 0xE619, 0xE61A, 0xE61B, 0xE61C,
56     0xE61D, 0xE61E, 0xE61F, 0xE6C3, 0xE621, 0xE622, 0xE623, 0xE624,
57     0xE625, 0xE626, 0xE627, 0xE628, 0xE629, 0xE62A, 0xE62B, 0xE62C,
58     0xE62D, 0xE62E, 0xE62F, 0xE630, 0xE631, 0x1CDF, 0x0E60, 0x0399,
59     0x00E7, 0x001D, 0x0000, 0x0001, 0x0001, 0x0001, 0x0002, 0x0006,
60     0x0002, 0x0007, 0x0006, 0x000F, 0x0038, 0x0072, 0x039A, 0xE6C4,
61     0xE6C5, 0xE6C6, 0xE6C7, 0xE6C8, 0xE6C9, 0xE6CA, 0xE6CB, 0xE6CC,
62     0xE6CD, 0xE6CE, 0xE6CF, 0xE6D0, 0xE6D1, 0xE6D2, 0xE6D3, 0xE6D4,
63     0xE6D5, 0xE6D6, 0xE6D7, 0xE6D8, 0xE6D9, 0xE6DA, 0xE6DB, 0xE6DC,
64     0xE6DD, 0xE6DE, 0xE6DF, 0xE6E0, 0xE6E1, 0xE6E2, 0xE6E3, 0xE6E4,
65     0xE6E5, 0xE6E6, 0xE6E7, 0xE6E8, 0xE6E9, 0xE6EA, 0xE6EB, 0xE6EC,
66     0xE6ED, 0xE6EE, 0xE6EF, 0xE6F0, 0xE6F1, 0xE6F2, 0xE6F3, 0xE6F4,
67     0xE6F5,
68 };
69
70 static const uint8_t scale_huffbits[HUFF_SCALE_SIZE] = {
71     19, 19, 19, 19, 19, 19, 19, 19,
72     19, 19, 19, 19, 19, 19, 19, 19,
73     19, 19, 18, 19, 19, 19, 19, 19,
74     19, 19, 19, 19, 19, 19, 19, 19,
75     19, 19, 19, 19, 19, 19, 19, 19,
76     19, 19, 19, 19, 19, 19, 19, 19,
77     19, 19, 19, 19, 19, 16, 15, 13,
78     11,  8,  5,  2,  1,  3,  5,  6,
79      6,  7,  7,  7,  9, 10, 13, 19,
80     19, 19, 19, 19, 19, 19, 19, 19,
81     19, 19, 19, 19, 19, 19, 19, 19,
82     19, 19, 19, 19, 19, 19, 19, 19,
83     19, 19, 19, 19, 19, 19, 19, 19,
84     19, 19, 19, 19, 19, 19, 19, 19,
85     19, 19, 19, 19, 19, 19, 19, 19,
86     19,
87 };
88 /** @} */
89
90
91 /**
92  * @name Huffman, run and level tables for runlevel-coded scale factors
93  * @{
94  */
95 #define HUFF_SCALE_RL_SIZE    120
96 #define HUFF_SCALE_RL_MAXBITS  21
97 static const uint32_t scale_rl_huffcodes[HUFF_SCALE_RL_SIZE] = {
98     0x00010C, 0x000001, 0x10FE2A, 0x000003, 0x000003, 0x000001, 0x000013,
99     0x000020, 0x000029, 0x000014, 0x000016, 0x000045, 0x000049, 0x00002F,
100     0x000042, 0x00008E, 0x00008F, 0x000129, 0x000009, 0x00000D, 0x0004AC,
101     0x00002C, 0x000561, 0x0002E6, 0x00087C, 0x0002E2, 0x00095C, 0x000018,
102     0x000001, 0x000016, 0x000044, 0x00002A, 0x000007, 0x000159, 0x000143,
103     0x000128, 0x00015A, 0x00012D, 0x00002B, 0x0000A0, 0x000142, 0x00012A,
104     0x0002EF, 0x0004AF, 0x00087D, 0x004AE9, 0x0043F9, 0x000067, 0x000199,
105     0x002B05, 0x001583, 0x0021FE, 0x10FE2C, 0x000004, 0x00002E, 0x00010D,
106     0x00000A, 0x000244, 0x000017, 0x000245, 0x000011, 0x00010E, 0x00012C,
107     0x00002A, 0x00002F, 0x000121, 0x000046, 0x00087E, 0x0000BA, 0x000032,
108     0x0087F0, 0x0056DC, 0x0002EC, 0x0043FA, 0x002B6F, 0x004AE8, 0x0002B7,
109     0x10FE2B, 0x000001, 0x000051, 0x000010, 0x0002EE, 0x000B9C, 0x002576,
110     0x000198, 0x0056DD, 0x0000CD, 0x000AC0, 0x000170, 0x004AEF, 0x00002D,
111     0x0004AD, 0x0021FF, 0x0005CF, 0x002B04, 0x10FE29, 0x10FE28, 0x0002ED,
112     0x002E74, 0x021FC4, 0x004AEE, 0x010FE3, 0x087F17, 0x000000, 0x000097,
113     0x0002E3, 0x000ADA, 0x002575, 0x00173B, 0x0043FB, 0x002E75, 0x10FE2D,
114     0x0015B6, 0x00056C, 0x000057, 0x000123, 0x000120, 0x00021E, 0x000172,
115     0x0002B1,
116 };
117
118 static const uint8_t scale_rl_huffbits[HUFF_SCALE_RL_SIZE] = {
119      9,  2, 21,  2,  4,  5,  5,
120      6,  6,  7,  7,  7,  7,  6,
121      7,  8,  8,  9, 10, 10, 11,
122     12, 11, 12, 12, 12, 12, 11,
123      4,  5,  7,  8,  9,  9,  9,
124      9,  9,  9,  8,  8,  9,  9,
125     12, 11, 12, 15, 15, 13, 15,
126     14, 13, 14, 21,  5,  6,  9,
127     10, 10, 11, 10, 11,  9,  9,
128      6,  8,  9,  7, 12, 10, 12,
129     16, 15, 12, 15, 14, 15, 10,
130     21,  6,  7, 11, 12, 14, 14,
131     15, 15, 14, 12, 11, 15, 12,
132     11, 14, 13, 14, 21, 21, 12,
133     16, 18, 15, 17, 20,  7,  8,
134     12, 12, 14, 15, 15, 16, 21,
135     13, 11,  7,  9,  9, 10, 11,
136     10,
137 };
138
139
140 static const uint8_t scale_rl_run[HUFF_SCALE_RL_SIZE] = {
141      0,  0,  0,  0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15,
142     16, 17, 18, 19, 20, 21, 22, 23, 24,  0,  1,  2,  3,  4,  5,  6,  7,  8,  9,
143     10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24,  0,  1,  2,  3,
144      4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22,
145     23, 24,  0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15, 16,
146     17, 18, 19, 20, 21, 22, 23, 24,  0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10,
147      0,  1,  0,  1,  0,  1,
148 };
149
150 static const uint8_t scale_rl_level[HUFF_SCALE_RL_SIZE] = {
151      0,  0,  1,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,
152      2,  2,  2,  2,  2,  2,  2,  2,  2,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,
153      3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  4,  4,  4,  4,
154      4,  4,  4,  4,  4,  4,  4,  4,  4,  4,  4,  4,  4,  4,  4,  4,  4,  4,  4,
155      4,  4,  5,  5,  5,  5,  5,  5,  5,  5,  5,  5,  5,  5,  5,  5,  5,  5,  5,
156      5,  5,  5,  5,  5,  5,  5,  5,  6,  6,  6,  6,  6,  6,  6,  6,  6,  6,  6,
157      7,  7,  8,  8,  9,  9,
158 };
159 /** @} */
160
161
162 /**
163  * @name Huffman, run and level codes for runlevel-coded coefficients
164  * @{
165  */
166 #define HUFF_COEF0_SIZE    272
167 #define HUFF_COEF0_MAXBITS  21
168 static const uint32_t coef0_huffcodes[HUFF_COEF0_SIZE] = {
169     0x00004A, 0x00002B, 0x000000, 0x000003, 0x000006, 0x000009, 0x00000F,
170     0x000010, 0x000016, 0x000011, 0x000016, 0x000028, 0x00002F, 0x000026,
171     0x000029, 0x000045, 0x000055, 0x00005D, 0x000042, 0x00004E, 0x000051,
172     0x00005E, 0x00008D, 0x0000A8, 0x0000AD, 0x000080, 0x000096, 0x00009F,
173     0x0000AA, 0x0000BE, 0x00011C, 0x000153, 0x000158, 0x000170, 0x000104,
174     0x00010D, 0x000105, 0x000103, 0x00012F, 0x000177, 0x000175, 0x000157,
175     0x000174, 0x000225, 0x00023B, 0x00020D, 0x00021F, 0x000281, 0x00027B,
176     0x000282, 0x0002AC, 0x0002FD, 0x00044F, 0x000478, 0x00044D, 0x0002EC,
177     0x00044E, 0x000564, 0x000409, 0x00040B, 0x000501, 0x000545, 0x0004F3,
178     0x000541, 0x00043B, 0x0004F1, 0x0004F4, 0x0008FD, 0x000A94, 0x000811,
179     0x000B88, 0x000B91, 0x000B93, 0x0008EA, 0x000899, 0x000B8A, 0x000972,
180     0x0009E5, 0x000A8F, 0x000A84, 0x000A8E, 0x000A00, 0x000830, 0x0008E8,
181     0x000B95, 0x000871, 0x00083A, 0x000814, 0x000873, 0x000BFE, 0x001728,
182     0x001595, 0x001712, 0x00102A, 0x001021, 0x001729, 0x00152E, 0x0013C3,
183     0x001721, 0x001597, 0x00151B, 0x0010F2, 0x001403, 0x001703, 0x001503,
184     0x001708, 0x0013C1, 0x00170E, 0x00170C, 0x0010E1, 0x0011EA, 0x001020,
185     0x001500, 0x0017FA, 0x001704, 0x001705, 0x0017F0, 0x0017FB, 0x0021E6,
186     0x002B2D, 0x0020C6, 0x002B29, 0x002E4A, 0x0023AC, 0x001519, 0x0023F3,
187     0x002B2C, 0x0021C0, 0x0017FE, 0x0023D7, 0x0017F9, 0x0012E7, 0x0013C0,
188     0x002261, 0x0023D3, 0x002057, 0x002056, 0x0021D2, 0x0020C7, 0x0023D2,
189     0x0020EC, 0x0044C0, 0x002FE2, 0x00475B, 0x002A03, 0x002FE3, 0x0021E2,
190     0x0021D0, 0x002A31, 0x002E13, 0x002E05, 0x0047E5, 0x00000E, 0x000024,
191     0x000088, 0x0000B9, 0x00010C, 0x000224, 0x0002B3, 0x000283, 0x0002ED,
192     0x00047B, 0x00041E, 0x00043D, 0x0004F5, 0x0005FD, 0x000A92, 0x000B96,
193     0x000838, 0x000971, 0x000B83, 0x000B80, 0x000BF9, 0x0011D3, 0x0011E8,
194     0x0011D7, 0x001527, 0x0011F8, 0x001073, 0x0010F0, 0x0010E4, 0x0017F8,
195     0x001062, 0x001402, 0x0017E3, 0x00151A, 0x001077, 0x00152B, 0x00170D,
196     0x0021D3, 0x002E41, 0x0013C2, 0x000029, 0x0000A9, 0x00025D, 0x000419,
197     0x000544, 0x000B8B, 0x0009E4, 0x0011D2, 0x001526, 0x001724, 0x0012E6,
198     0x00150B, 0x0017FF, 0x002E26, 0x002E4B, 0x002B28, 0x0021E3, 0x002A14,
199     0x00475A, 0x002E12, 0x000057, 0x00023E, 0x000A90, 0x000BF0, 0x001072,
200     0x001502, 0x0023D6, 0x0020ED, 0x002A30, 0x0044C7, 0x00008C, 0x00047F,
201     0x00152A, 0x002262, 0x002E04, 0x0000A1, 0x0005F9, 0x000173, 0x000875,
202     0x000171, 0x00152D, 0x0002E3, 0x0017E2, 0x0002AD, 0x0021C1, 0x000479,
203     0x0021E7, 0x00041F, 0x005C4E, 0x000543, 0x005C4F, 0x000A91, 0x00898D,
204     0x000B97, 0x008746, 0x000970, 0x008745, 0x000B85, 0x00A856, 0x00152F,
205     0x010E8E, 0x0010E5, 0x00A857, 0x00170F, 0x021D11, 0x002A58, 0x010E8F,
206     0x002E40, 0x021D13, 0x002A59, 0x043A25, 0x002A02, 0x043A21, 0x0044C1,
207     0x087448, 0x0047E4, 0x043A20, 0x00542A, 0x087449, 0x00898C,
208 };
209
210 static const uint8_t coef0_huffbits[HUFF_COEF0_SIZE] = {
211      8,  7,  2,  3,  3,  4,  4,
212      5,  5,  6,  6,  6,  6,  7,
213      7,  7,  7,  7,  8,  8,  8,
214      8,  8,  8,  8,  9,  9,  9,
215      9,  9,  9,  9,  9,  9, 10,
216     10, 10, 10, 10, 10, 10, 10,
217     10, 10, 10, 11, 11, 11, 11,
218     11, 11, 11, 11, 11, 11, 11,
219     11, 11, 12, 12, 12, 12, 12,
220     12, 12, 12, 12, 12, 12, 13,
221     12, 12, 12, 12, 12, 12, 13,
222     13, 13, 13, 13, 13, 13, 12,
223     12, 13, 13, 13, 13, 13, 13,
224     13, 13, 14, 14, 13, 13, 14,
225     13, 13, 14, 14, 14, 14, 14,
226     14, 14, 14, 14, 14, 13, 14,
227     14, 14, 14, 14, 14, 14, 15,
228     14, 15, 14, 14, 14, 14, 14,
229     14, 15, 14, 14, 14, 14, 14,
230     14, 14, 15, 15, 15, 15, 14,
231     15, 15, 15, 15, 15, 15, 15,
232     15, 15, 15, 15, 15,  4,  7,
233      8,  9, 10, 10, 10, 11, 11,
234     11, 12, 12, 12, 12, 12, 12,
235     13, 13, 13, 13, 13, 13, 13,
236     13, 13, 13, 14, 14, 14, 14,
237     14, 14, 14, 14, 14, 13, 14,
238     15, 14, 14,  6,  9, 11, 12,
239     12, 12, 13, 13, 13, 13, 14,
240     14, 14, 14, 14, 14, 15, 15,
241     15, 15,  7, 10, 12, 13, 14,
242     14, 14, 15, 15, 15,  8, 11,
243     13, 14, 15,  9, 12,  9, 13,
244     10, 13, 10, 14, 11, 15, 11,
245     15, 12, 15, 12, 15, 12, 16,
246     12, 17, 13, 17, 13, 17, 13,
247     18, 14, 17, 14, 19, 14, 18,
248     14, 19, 14, 20, 15, 20, 15,
249     21, 15, 20, 16, 21, 16,
250 };
251
252
253 #define HUFF_COEF1_SIZE    244
254 #define HUFF_COEF1_MAXBITS  22
255 static const uint32_t coef1_huffcodes[HUFF_COEF1_SIZE] = {
256     0x0001E2, 0x00007F, 0x000000, 0x000002, 0x000008, 0x00000E, 0x000019,
257     0x00002F, 0x000037, 0x000060, 0x00006C, 0x000095, 0x0000C6, 0x0000F0,
258     0x00012E, 0x000189, 0x0001A5, 0x0001F8, 0x000253, 0x00030A, 0x000344,
259     0x00034D, 0x0003F2, 0x0004BD, 0x0005D7, 0x00062A, 0x00068B, 0x000693,
260     0x000797, 0x00097D, 0x000BAB, 0x000C52, 0x000C5E, 0x000D21, 0x000D20,
261     0x000F1A, 0x000FCE, 0x000FD1, 0x0012F1, 0x001759, 0x0018AC, 0x0018A7,
262     0x0018BF, 0x001A2B, 0x001E52, 0x001E50, 0x001E31, 0x001FB8, 0x0025E6,
263     0x0025E7, 0x002EB4, 0x002EB7, 0x003169, 0x00315B, 0x00317C, 0x00316C,
264     0x0034CA, 0x00348D, 0x003F40, 0x003CA2, 0x003F76, 0x004BC3, 0x004BE5,
265     0x003F73, 0x004BF8, 0x004BF9, 0x006131, 0x00628B, 0x006289, 0x0062DA,
266     0x00628A, 0x0062D4, 0x006997, 0x0062B4, 0x006918, 0x00794D, 0x007E7B,
267     0x007E87, 0x007EEA, 0x00794E, 0x00699D, 0x007967, 0x00699F, 0x0062DB,
268     0x007E7A, 0x007EEB, 0x00BAC0, 0x0097C9, 0x00C537, 0x00C5AB, 0x00D233,
269     0x00D338, 0x00BAC1, 0x00D23D, 0x012F91, 0x00D339, 0x00FDC8, 0x00D23C,
270     0x00FDDC, 0x00FDC9, 0x00FDDD, 0x00D33C, 0x000003, 0x000016, 0x00003E,
271     0x0000C3, 0x0001A1, 0x000347, 0x00062E, 0x000BAA, 0x000F2D, 0x001A2A,
272     0x001E58, 0x00309B, 0x003CA3, 0x005D6A, 0x00629A, 0x006996, 0x00794F,
273     0x007EE5, 0x00BAD7, 0x00C5AA, 0x00C5F4, 0x00FDDF, 0x00FDDE, 0x018A20,
274     0x018A6D, 0x01A67B, 0x01A464, 0x025F21, 0x01F9E2, 0x01F9E3, 0x00000A,
275     0x00003D, 0x000128, 0x0003C7, 0x000C24, 0x0018A3, 0x002EB1, 0x003CB2,
276     0x00691F, 0x007E79, 0x000013, 0x0000BB, 0x00034E, 0x000D14, 0x0025FD,
277     0x004BE7, 0x000024, 0x000188, 0x0007EF, 0x000035, 0x000308, 0x0012F2,
278     0x00005C, 0x0003F6, 0x0025E0, 0x00006D, 0x000698, 0x000096, 0x000C25,
279     0x0000C7, 0x000F1B, 0x0000F3, 0x0012FF, 0x000174, 0x001A66, 0x0001A0,
280     0x003099, 0x0001E4, 0x00316B, 0x000252, 0x003F31, 0x00030B, 0x004BE6,
281     0x000346, 0x0062FB, 0x00034F, 0x007966, 0x0003F5, 0x007E86, 0x0005D4,
282     0x00C511, 0x00062C, 0x00C5F5, 0x000692, 0x00F299, 0x000795, 0x00F298,
283     0x0007E9, 0x018A21, 0x00097E, 0x0175AD, 0x000C27, 0x01A67A, 0x000C57,
284     0x02EB59, 0x000D22, 0x0314D9, 0x000F19, 0x03F3C2, 0x000FCD, 0x0348CB,
285     0x0012F8, 0x04BE41, 0x0018A0, 0x03F3C1, 0x0018A1, 0x04BE40, 0x0018B7,
286     0x0629B0, 0x001A64, 0x0D2329, 0x001E30, 0x03F3C3, 0x001F9F, 0x0BAD62,
287     0x001F99, 0x0FCF00, 0x00309A, 0x0629B1, 0x002EB6, 0x175AC3, 0x00314C,
288     0x069195, 0x003168, 0x0BAD63, 0x00348E, 0x175AC1, 0x003F30, 0x07E781,
289     0x003F41, 0x0D2328, 0x003F42, 0x1F9E03, 0x004BC2, 0x175AC2, 0x003F74,
290     0x175AC0, 0x005D61, 0x3F3C05, 0x006130, 0x3F3C04, 0x0062B5,
291 };
292
293 static const uint8_t coef1_huffbits[HUFF_COEF1_SIZE] = {
294      9,  7,  2,  3,  4,  4,  5,
295      6,  6,  7,  7,  8,  8,  8,
296      9,  9,  9,  9, 10, 10, 10,
297     10, 10, 11, 11, 11, 11, 11,
298     11, 12, 12, 12, 12, 12, 12,
299     12, 12, 12, 13, 13, 13, 13,
300     13, 13, 13, 13, 13, 13, 14,
301     14, 14, 14, 14, 14, 14, 14,
302     14, 14, 14, 14, 14, 15, 15,
303     14, 15, 15, 15, 15, 15, 15,
304     15, 15, 15, 15, 15, 15, 15,
305     15, 15, 15, 15, 15, 15, 15,
306     15, 15, 16, 16, 16, 16, 16,
307     16, 16, 16, 17, 16, 16, 16,
308     16, 16, 16, 16,  3,  5,  6,
309      8,  9, 10, 11, 12, 12, 13,
310     13, 14, 14, 15, 15, 15, 15,
311     15, 16, 16, 16, 16, 16, 17,
312     17, 17, 17, 18, 17, 17,  4,
313      6,  9, 10, 12, 13, 14, 14,
314     15, 15,  5,  8, 10, 12, 14,
315     15,  6,  9, 11,  6, 10, 13,
316      7, 10, 14,  7, 11,  8, 12,
317      8, 12,  8, 13,  9, 13,  9,
318     14,  9, 14, 10, 14, 10, 15,
319     10, 15, 10, 15, 10, 15, 11,
320     16, 11, 16, 11, 16, 11, 16,
321     11, 17, 12, 17, 12, 17, 12,
322     18, 12, 18, 12, 18, 12, 18,
323     13, 19, 13, 18, 13, 19, 13,
324     19, 13, 20, 13, 18, 13, 20,
325     13, 20, 14, 19, 14, 21, 14,
326     19, 14, 20, 14, 21, 14, 19,
327     14, 20, 14, 21, 15, 21, 14,
328     21, 15, 22, 15, 22, 15,
329 };
330
331
332 static const uint16_t coef0_run[HUFF_COEF0_SIZE] = {
333       0,   0,   0,   1,   2,   3,   4,   5,   6,   7,   8,   9,  10,  11,
334      12,  13,  14,  15,  16,  17,  18,  19,  20,  21,  22,  23,  24,  25,
335      26,  27,  28,  29,  30,  31,  32,  33,  34,  35,  36,  37,  38,  39,
336      40,  41,  42,  43,  44,  45,  46,  47,  48,  49,  50,  51,  52,  53,
337      54,  55,  56,  57,  58,  59,  60,  61,  62,  63,  64,  65,  66,  67,
338      68,  69,  70,  71,  72,  73,  74,  75,  76,  77,  78,  79,  80,  81,
339      82,  83,  84,  85,  86,  87,  88,  89,  90,  91,  92,  93,  94,  95,
340      96,  97,  98,  99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109,
341     110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123,
342     124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137,
343     138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149,   0,   1,
344       2,   3,   4,   5,   6,   7,   8,   9,  10,  11,  12,  13,  14,  15,
345      16,  17,  18,  19,  20,  21,  22,  23,  24,  25,  26,  27,  28,  29,
346      30,  31,  32,  33,  34,  35,  36,  37,  38,  39,   0,   1,   2,   3,
347       4,   5,   6,   7,   8,   9,  10,  11,  12,  13,  14,  15,  16,  17,
348      18,  19,   0,   1,   2,   3,   4,   5,   6,   7,   8,   9,   0,   1,
349       2,   3,   4,   0,   1,   0,   1,   0,   1,   0,   1,   0,   1,   0,
350       1,   0,   1,   0,   1,   0,   1,   0,   1,   0,   1,   0,   1,   0,
351       1,   0,   1,   0,   1,   0,   1,   0,   1,   0,   1,   0,   1,   0,
352       1,   0,   1,   0,   1,   0,
353 };
354
355 static const float coef0_level[HUFF_COEF0_SIZE] = {
356       0,   0,   1,   1,   1,   1,   1,   1,   1,   1,   1,   1,   1,   1,
357       1,   1,   1,   1,   1,   1,   1,   1,   1,   1,   1,   1,   1,   1,
358       1,   1,   1,   1,   1,   1,   1,   1,   1,   1,   1,   1,   1,   1,
359       1,   1,   1,   1,   1,   1,   1,   1,   1,   1,   1,   1,   1,   1,
360       1,   1,   1,   1,   1,   1,   1,   1,   1,   1,   1,   1,   1,   1,
361       1,   1,   1,   1,   1,   1,   1,   1,   1,   1,   1,   1,   1,   1,
362       1,   1,   1,   1,   1,   1,   1,   1,   1,   1,   1,   1,   1,   1,
363       1,   1,   1,   1,   1,   1,   1,   1,   1,   1,   1,   1,   1,   1,
364       1,   1,   1,   1,   1,   1,   1,   1,   1,   1,   1,   1,   1,   1,
365       1,   1,   1,   1,   1,   1,   1,   1,   1,   1,   1,   1,   1,   1,
366       1,   1,   1,   1,   1,   1,   1,   1,   1,   1,   1,   1,   2,   2,
367       2,   2,   2,   2,   2,   2,   2,   2,   2,   2,   2,   2,   2,   2,
368       2,   2,   2,   2,   2,   2,   2,   2,   2,   2,   2,   2,   2,   2,
369       2,   2,   2,   2,   2,   2,   2,   2,   2,   2,   3,   3,   3,   3,
370       3,   3,   3,   3,   3,   3,   3,   3,   3,   3,   3,   3,   3,   3,
371       3,   3,   4,   4,   4,   4,   4,   4,   4,   4,   4,   4,   5,   5,
372       5,   5,   5,   6,   6,   7,   7,   8,   8,   9,   9,  10,  10,  11,
373      11,  12,  12,  13,  13,  14,  14,  15,  15,  16,  16,  17,  17,  18,
374      18,  19,  19,  20,  20,  21,  21,  22,  22,  23,  23,  24,  24,  25,
375      25,  26,  26,  27,  27,  28,
376 };
377
378
379 static const uint16_t coef1_run[HUFF_COEF1_SIZE] = {
380      0,  0,  0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15,
381     16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33,
382     34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51,
383     52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69,
384     70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87,
385     88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99,  0,  1,  2,  3,  4,  5,
386      6,  7,  8,  9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23,
387     24, 25, 26, 27, 28, 29,  0,  1,  2,  3,  4,  5,  6,  7,  8,  9,  0,  1,
388      2,  3,  4,  5,  0,  1,  2,  0,  1,  2,  0,  1,  2,  0,  1,  0,  1,  0,
389      1,  0,  1,  0,  1,  0,  1,  0,  1,  0,  1,  0,  1,  0,  1,  0,  1,  0,
390      1,  0,  1,  0,  1,  0,  1,  0,  1,  0,  1,  0,  1,  0,  1,  0,  1,  0,
391      1,  0,  1,  0,  1,  0,  1,  0,  1,  0,  1,  0,  1,  0,  1,  0,  1,  0,
392      1,  0,  1,  0,  1,  0,  1,  0,  1,  0,  1,  0,  1,  0,  1,  0,  1,  0,
393      1,  0,  1,  0,  1,  0,  1,  0,  0,  0,
394 };
395
396 static const float coef1_level[HUFF_COEF1_SIZE] = {
397      0,  0,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,
398      1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,
399      1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,
400      1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,
401      1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,
402      1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  2,  2,  2,  2,  2,  2,
403      2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,
404      2,  2,  2,  2,  2,  2,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  4,  4,
405      4,  4,  4,  4,  5,  5,  5,  6,  6,  6,  7,  7,  7,  8,  8,  9,  9, 10,
406     10, 11, 11, 12, 12, 13, 13, 14, 14, 15, 15, 16, 16, 17, 17, 18, 18, 19,
407     19, 20, 20, 21, 21, 22, 22, 23, 23, 24, 24, 25, 25, 26, 26, 27, 27, 28,
408     28, 29, 29, 30, 30, 31, 31, 32, 32, 33, 33, 34, 34, 35, 35, 36, 36, 37,
409     37, 38, 38, 39, 39, 40, 40, 41, 41, 42, 42, 43, 43, 44, 44, 45, 45, 46,
410     46, 47, 47, 48, 48, 49, 49, 50, 51, 52,
411 };
412 /** @} */
413
414
415 /**
416  * @name Huffman and vector lookup tables for vector-coded coefficients
417  * @{
418  */
419 #define HUFF_VEC4_SIZE    127
420 #define HUFF_VEC4_MAXBITS  14
421 static const uint16_t vec4_huffcodes[HUFF_VEC4_SIZE] = {
422     0x0019, 0x0027, 0x00F2, 0x03BA, 0x0930, 0x1267, 0x0031, 0x0030,
423     0x0097, 0x0221, 0x058B, 0x0124, 0x00EB, 0x01D4, 0x03D8, 0x0584,
424     0x0364, 0x045F, 0x0F66, 0x0931, 0x24CD, 0x002F, 0x0039, 0x00E8,
425     0x02C3, 0x078A, 0x0037, 0x0029, 0x0084, 0x01B1, 0x00ED, 0x0086,
426     0x00F9, 0x03AB, 0x01EB, 0x08BC, 0x011E, 0x00F3, 0x0220, 0x058A,
427     0x00EC, 0x008E, 0x012B, 0x01EA, 0x0119, 0x04B0, 0x04B1, 0x03B8,
428     0x0691, 0x0365, 0x01ED, 0x049A, 0x0EA9, 0x0EA8, 0x08BD, 0x24CC,
429     0x0026, 0x0035, 0x00DB, 0x02C4, 0x07B2, 0x0038, 0x002B, 0x007F,
430     0x01B3, 0x00F4, 0x0091, 0x0116, 0x03BB, 0x0215, 0x0932, 0x002D,
431     0x002A, 0x008A, 0x01DE, 0x0028, 0x0020, 0x005C, 0x0090, 0x0068,
432     0x01EE, 0x00E9, 0x008D, 0x012A, 0x0087, 0x005D, 0x0118, 0x0349,
433     0x01EF, 0x01E3, 0x08B9, 0x00F0, 0x00D3, 0x0214, 0x049B, 0x00DA,
434     0x0089, 0x0125, 0x0217, 0x012D, 0x0690, 0x0094, 0x007D, 0x011F,
435     0x007E, 0x0059, 0x0127, 0x01A5, 0x0111, 0x00F8, 0x045D, 0x03B9,
436     0x0259, 0x0580, 0x02C1, 0x01DF, 0x0585, 0x0216, 0x0163, 0x01B0,
437     0x03C4, 0x08B8, 0x078B, 0x0755, 0x0581, 0x0F67, 0x0000,
438 };
439
440 static const uint8_t vec4_huffbits[HUFF_VEC4_SIZE] = {
441      5,  6,  8, 10, 12, 13,  6,  6,
442      8, 10, 11,  9,  8,  9, 10, 11,
443     10, 11, 12, 12, 14,  6,  6,  8,
444     10, 11,  6,  6,  8,  9,  8,  8,
445      8, 10,  9, 12,  9,  8, 10, 11,
446      8,  8,  9,  9,  9, 11, 11, 10,
447     11, 10,  9, 11, 12, 12, 12, 14,
448      6,  6,  8, 10, 11,  6,  6,  7,
449      9,  8,  8,  9, 10, 10, 12,  6,
450      6,  8,  9,  6,  6,  7,  8,  7,
451      9,  8,  8,  9,  8,  7,  9, 10,
452      9,  9, 12,  8,  8, 10, 11,  8,
453      8,  9, 10,  9, 11,  8,  7,  9,
454      7,  7,  9,  9,  9,  8, 11, 10,
455     10, 11, 10,  9, 11, 10,  9,  9,
456     10, 12, 11, 11, 11, 12,  1,
457 };
458
459
460 #define HUFF_VEC2_SIZE    137
461 #define HUFF_VEC2_MAXBITS  12
462 static const uint16_t vec2_huffcodes[HUFF_VEC2_SIZE] = {
463     0x055, 0x01C, 0x01A, 0x02B, 0x028, 0x067, 0x08B, 0x039,
464     0x170, 0x10D, 0x2A5, 0x047, 0x464, 0x697, 0x523, 0x8CB,
465     0x01B, 0x00E, 0x000, 0x010, 0x012, 0x036, 0x048, 0x04C,
466     0x0C2, 0x09B, 0x171, 0x03B, 0x224, 0x34A, 0x2D6, 0x019,
467     0x00F, 0x002, 0x014, 0x017, 0x006, 0x05D, 0x054, 0x0C7,
468     0x0B4, 0x192, 0x10E, 0x233, 0x043, 0x02C, 0x00F, 0x013,
469     0x006, 0x02F, 0x02C, 0x068, 0x077, 0x0DF, 0x111, 0x1A4,
470     0x16A, 0x2A4, 0x027, 0x011, 0x018, 0x02D, 0x00F, 0x04A,
471     0x040, 0x097, 0x01F, 0x11B, 0x022, 0x16D, 0x066, 0x035,
472     0x005, 0x02B, 0x049, 0x009, 0x075, 0x0CB, 0x0AA, 0x187,
473     0x106, 0x08A, 0x047, 0x060, 0x06E, 0x01D, 0x074, 0x0C4,
474     0x01E, 0x118, 0x1A7, 0x038, 0x042, 0x053, 0x076, 0x0A8,
475     0x0CA, 0x082, 0x110, 0x18D, 0x12D, 0x0B9, 0x0C8, 0x0DE,
476     0x01C, 0x0AB, 0x113, 0x18C, 0x10F, 0x09A, 0x0A5, 0x0B7,
477     0x11A, 0x186, 0x1A6, 0x259, 0x153, 0x18A, 0x193, 0x020,
478     0x10C, 0x046, 0x03A, 0x107, 0x149, 0x16C, 0x2D7, 0x225,
479     0x258, 0x316, 0x696, 0x317, 0x042, 0x522, 0x290, 0x8CA,
480     0x001,
481 };
482
483 static const uint8_t vec2_huffbits[HUFF_VEC2_SIZE] = {
484      7,  6,  6,  6,  7,  7,  8,  9,
485      9, 10, 10, 11, 11, 11, 12, 12,
486      6,  4,  5,  5,  6,  6,  7,  8,
487      8,  9,  9, 10, 10, 10, 11,  6,
488      4,  5,  5,  6,  7,  7,  8,  8,
489      9,  9, 10, 10, 11,  6,  5,  5,
490      6,  6,  7,  7,  8,  8,  9,  9,
491     10, 10,  7,  6,  6,  6,  7,  7,
492      8,  8,  9,  9, 10, 10,  7,  6,
493      7,  7,  7,  8,  8,  8,  9,  9,
494     10,  8,  7,  7,  7,  8,  8,  8,
495      9,  9,  9,  9,  8,  8,  8,  8,
496      8,  9,  9,  9,  9,  8,  8,  8,
497      9,  9,  9,  9, 10,  9,  9,  9,
498      9,  9,  9, 10,  9,  9,  9, 10,
499     10, 11, 10, 10, 10, 10, 11, 10,
500     10, 10, 11, 10, 11, 12, 11, 12,
501      3,
502 };
503
504
505 #define HUFF_VEC1_SIZE    101
506 #define HUFF_VEC1_MAXBITS  11
507 static const uint16_t vec1_huffcodes[HUFF_VEC1_SIZE] = {
508     0x01A, 0x003, 0x017, 0x010, 0x00C, 0x009, 0x005, 0x000,
509     0x00D, 0x00A, 0x009, 0x00C, 0x00F, 0x002, 0x004, 0x007,
510     0x00B, 0x00F, 0x01C, 0x006, 0x010, 0x015, 0x01C, 0x022,
511     0x03B, 0x00E, 0x019, 0x023, 0x034, 0x036, 0x03A, 0x047,
512     0x008, 0x00A, 0x01E, 0x031, 0x037, 0x050, 0x053, 0x06B,
513     0x06F, 0x08C, 0x0E8, 0x0EA, 0x0EB, 0x016, 0x03E, 0x03F,
514     0x06C, 0x089, 0x08A, 0x0A3, 0x0A4, 0x0D4, 0x0DD, 0x0EC,
515     0x0EE, 0x11A, 0x1D2, 0x024, 0x025, 0x02E, 0x027, 0x0C2,
516     0x0C0, 0x0DA, 0x0DB, 0x111, 0x144, 0x116, 0x14A, 0x145,
517     0x1B8, 0x1AB, 0x1DA, 0x1DE, 0x1DB, 0x1DF, 0x236, 0x237,
518     0x3A6, 0x3A7, 0x04D, 0x04C, 0x05E, 0x05F, 0x183, 0x182,
519     0x186, 0x221, 0x187, 0x220, 0x22E, 0x22F, 0x296, 0x354,
520     0x297, 0x355, 0x372, 0x373, 0x016,
521 };
522
523 static const uint8_t vec1_huffbits[HUFF_VEC1_SIZE] = {
524      7,  6,  5,  5,  5,  5,  5,  5,
525      4,  4,  4,  4,  4,  5,  5,  5,
526      5,  5,  5,  6,  6,  6,  6,  6,
527      6,  7,  7,  7,  7,  7,  7,  7,
528      8,  8,  8,  8,  8,  8,  8,  8,
529      8,  8,  8,  8,  8,  9,  9,  9,
530      9,  9,  9,  9,  9,  9,  9,  9,
531      9,  9,  9, 10, 10, 10, 10, 10,
532     10, 10, 10, 10, 10, 10, 10, 10,
533     10, 10, 10, 10, 10, 10, 10, 10,
534     10, 10, 11, 11, 11, 11, 11, 11,
535     11, 11, 11, 11, 11, 11, 11, 11,
536     11, 11, 11, 11,  5,
537 };
538
539
540 static const uint16_t symbol_to_vec4[HUFF_VEC4_SIZE] = {
541         0,    1,      2,     3,     4,     5,    16,    17,    18,    19,
542        20,   32,     33,    34,    35,    48,    49,    50,    64,    65,
543        80,   256,   257,   258,   259,   260,   272,   273,   274,   275,
544       288,   289,   290,   304,   305,   320,   512,   513,   514,   515,
545       528,   529,   530,   544,   545,   560,   768,   769,   770,   784,
546       785,   800,  1024,  1025,  1040,  1280,  4096,  4097,  4098,  4099,
547      4100,  4112,  4113,  4114,  4115,  4128,  4129,  4130,  4144,  4145,
548      4160,  4352,  4353,  4354,  4355,  4368,  4369,  4370,  4384,  4385,
549      4400,  4608,  4609,  4610,  4624,  4625,  4640,  4864,  4865,  4880,
550      5120,  8192,  8193,  8194,  8195,  8208,  8209,  8210,  8224,  8225,
551      8240,  8448,  8449,  8450,  8464,  8465,  8480,  8704,  8705,  8720,
552      8960, 12288, 12289, 12290, 12304, 12305, 12320, 12544, 12545, 12560,
553     12800, 16384, 16385, 16400, 16640, 20480,     0,
554 };
555
556
557 static const uint8_t symbol_to_vec2[HUFF_VEC2_SIZE] = {
558       0,   1,   2,   3,   4,   5,   6,   7,   8,   9,  10,  11,  12,  13,  14,
559      15,  16,  17,  18,  19,  20,  21,  22,  23,  24,  25,  26,  27,  28,  29,
560      30,  32,  33,  34,  35,  36,  37,  38,  39,  40,  41,  42,  43,  44,  45,
561      48,  49,  50,  51,  52,  53,  54,  55,  56,  57,  58,  59,  60,  64,  65,
562      66,  67,  68,  69,  70,  71,  72,  73,  74,  75,  80,  81,  82,  83,  84,
563      85,  86,  87,  88,  89,  90,  96,  97,  98,  99, 100, 101, 102, 103, 104,
564     105, 112, 113, 114, 115, 116, 117, 118, 119, 120, 128, 129, 130, 131, 132,
565     133, 134, 135, 144, 145, 146, 147, 148, 149, 150, 160, 161, 162, 163, 164,
566     165, 176, 177, 178, 179, 180, 192, 193, 194, 195, 208, 209, 210, 224, 225,
567     240,   0,
568 };
569 /** @} */
570
571
572 /**
573  * @brief decorrelation matrix for multichannel streams
574  **/
575 static const float default_decorrelation_matrices[] = {
576     1.000000,  0.707031, -0.707031,  0.707031,  0.707031,  0.578125,  0.707031,
577     0.410156,  0.578125, -0.707031,  0.410156,  0.578125,  0.000000, -0.816406,
578     0.500000,  0.652344,  0.500000,  0.269531,  0.500000,  0.269531, -0.500000,
579    -0.652344,  0.500000, -0.269531, -0.500000,  0.652344,  0.500000, -0.652344,
580     0.500000, -0.269531,  0.445312,  0.601562,  0.511719,  0.371094,  0.195312,
581     0.445312,  0.371094, -0.195312, -0.601562, -0.511719,  0.445312,  0.000000,
582    -0.632812,  0.000000,  0.632812,  0.445312, -0.371094, -0.195312,  0.601562,
583    -0.511719,  0.445312, -0.601562,  0.511719, -0.371094,  0.195312,  0.410156,
584     0.558594,  0.500000,  0.410156,  0.289062,  0.148438,  0.410156,  0.410156,
585     0.000000, -0.410156, -0.578125, -0.410156,  0.410156,  0.148438, -0.500000,
586    -0.410156,  0.289062,  0.558594,  0.410156, -0.148438, -0.500000,  0.410156,
587     0.289062, -0.558594,  0.410156, -0.410156,  0.000000,  0.410156, -0.578125,
588     0.410156,  0.410156, -0.558594,  0.500000, -0.410156,  0.289062, -0.148438,
589 };
590
591 /**
592  * @brief default decorrelation matrix offsets
593  */
594 static const float * const default_decorrelation[] = {
595     NULL,
596     &default_decorrelation_matrices[0],
597     &default_decorrelation_matrices[1],
598     &default_decorrelation_matrices[5],
599     &default_decorrelation_matrices[14],
600     &default_decorrelation_matrices[30],
601     &default_decorrelation_matrices[55]
602 };
603
604 #endif /* AVCODEC_WMAPRODATA_H */