2 * WMA 9/3/PRO compatible decoder
3 * Copyright (c) 2007 Baptiste Coudurier, Benjamin Larsson, Ulion
4 * Copyright (c) 2008 - 2009 Sascha Sommer
6 * This file is part of FFmpeg.
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.
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.
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
25 * @brief tables for wmapro decoding
28 #ifndef AVCODEC_WMAPRODATA_H
29 #define AVCODEC_WMAPRODATA_H
35 * @brief frequencies to divide the frequency spectrum into scale factor bands
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,
46 * @name Huffman tables for DPCM-coded scale factors
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,
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,
92 * @name Huffman, run and level tables for runlevel-coded scale factors
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,
118 static const uint8_t scale_rl_huffbits[HUFF_SCALE_RL_SIZE] = {
119 9, 2, 21, 2, 4, 5, 5,
121 7, 8, 8, 9, 10, 10, 11,
122 12, 11, 12, 12, 12, 12, 11,
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,
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,
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,
163 * @name Huffman, run and level codes for runlevel-coded coefficients
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,
210 static const uint8_t coef0_huffbits[HUFF_COEF0_SIZE] = {
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,
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,
293 static const uint8_t coef1_huffbits[HUFF_COEF1_SIZE] = {
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,
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,
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,
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,
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,
416 * @name Huffman and vector lookup tables for vector-coded coefficients
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,
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,
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,
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,
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,
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,
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,
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,
573 * @brief decorrelation matrix for multichannel streams
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,
592 * @brief default decorrelation matrix offsets
594 static const float * const default_decorrelation[] = {
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]
604 #endif /* AVCODEC_WMAPRODATA_H */