Statistics
| Branch: | Revision:

ffmpeg / libavcodec / wmaprodata.h @ 2912e87a

History | View | Annotate | Download (27.8 KB)

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 Libav.
7
 *
8
 * Libav 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
 * Libav 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 Libav; 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 */