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