2
* QDM2 compatible decoder
3
* Copyright (c) 2003 Ewald Snel
4
* Copyright (c) 2005 Benjamin Larsson
5
* Copyright (c) 2005 Alex Beregszaszi
6
* Copyright (c) 2005 Roberto Togni
8
* This file is part of FFmpeg.
10
* FFmpeg is free software; you can redistribute it and/or
11
* modify it under the terms of the GNU Lesser General Public
12
* License as published by the Free Software Foundation; either
13
* version 2.1 of the License, or (at your option) any later version.
15
* FFmpeg is distributed in the hope that it will be useful,
16
* but WITHOUT ANY WARRANTY; without even the implied warranty of
17
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
18
* Lesser General Public License for more details.
20
* You should have received a copy of the GNU Lesser General Public
21
* License along with FFmpeg; if not, write to the Free Software
22
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
28
* Various QDM2 tables.
36
/* values in this table range from -1..23; adjust retrieved value by -1 */
37
static const uint16_t vlc_tab_level_huffcodes[24] = {
38
0x037c, 0x0004, 0x003c, 0x004c, 0x003a, 0x002c, 0x001c, 0x001a,
39
0x0024, 0x0014, 0x0001, 0x0002, 0x0000, 0x0003, 0x0007, 0x0005,
40
0x0006, 0x0008, 0x0009, 0x000a, 0x000c, 0x00fc, 0x007c, 0x017c
43
static const uint8_t vlc_tab_level_huffbits[24] = {
44
10, 6, 7, 7, 6, 6, 6, 6, 6, 5, 4, 4, 4, 3, 3, 3, 3, 4, 4, 5, 7, 8, 9, 10
47
/* values in this table range from -1..36; adjust retrieved value by -1 */
48
static const uint16_t vlc_tab_diff_huffcodes[37] = {
49
0x1c57, 0x0004, 0x0000, 0x0001, 0x0003, 0x0002, 0x000f, 0x000e,
50
0x0007, 0x0016, 0x0037, 0x0027, 0x0026, 0x0066, 0x0006, 0x0097,
51
0x0046, 0x01c6, 0x0017, 0x0786, 0x0086, 0x0257, 0x00d7, 0x0357,
52
0x00c6, 0x0386, 0x0186, 0x0000, 0x0157, 0x0c57, 0x0057, 0x0000,
53
0x0b86, 0x0000, 0x1457, 0x0000, 0x0457
56
static const uint8_t vlc_tab_diff_huffbits[37] = {
57
13, 3, 3, 2, 3, 3, 4, 4, 6, 5, 6, 6, 7, 7, 8, 8,
58
8, 9, 8, 11, 9, 10, 8, 10, 9, 12, 10, 0, 10, 13, 11, 0,
62
/* values in this table range from -1..5; adjust retrieved value by -1 */
63
static const uint8_t vlc_tab_run_huffcodes[6] = {
64
0x1f, 0x00, 0x01, 0x03, 0x07, 0x0f
67
static const uint8_t vlc_tab_run_huffbits[6] = {
71
/* values in this table range from -1..19; adjust retrieved value by -1 */
72
static const uint16_t vlc_tab_tone_level_idx_hi1_huffcodes[20] = {
73
0x5714, 0x000c, 0x0002, 0x0001, 0x0000, 0x0004, 0x0034, 0x0054,
74
0x0094, 0x0014, 0x0114, 0x0214, 0x0314, 0x0614, 0x0e14, 0x0f14,
75
0x2714, 0x0714, 0x1714, 0x3714
78
static const uint8_t vlc_tab_tone_level_idx_hi1_huffbits[20] = {
79
15, 4, 2, 1, 3, 5, 6, 7, 8, 10, 10, 11, 11, 12, 12, 12, 14, 14, 15, 14
82
/* values in this table range from -1..23; adjust retrieved value by -1 */
83
static const uint16_t vlc_tab_tone_level_idx_mid_huffcodes[24] = {
84
0x0fea, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
85
0x0000, 0x0000, 0x0000, 0x0000, 0x03ea, 0x00ea, 0x002a, 0x001a,
86
0x0006, 0x0001, 0x0000, 0x0002, 0x000a, 0x006a, 0x01ea, 0x07ea
89
static const uint8_t vlc_tab_tone_level_idx_mid_huffbits[24] = {
90
12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 9, 7, 5, 3, 1, 2, 4, 6, 8, 10, 12
93
/* values in this table range from -1..23; adjust retrieved value by -1 */
94
static const uint16_t vlc_tab_tone_level_idx_hi2_huffcodes[24] = {
95
0x0664, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0064, 0x00e4,
96
0x00a4, 0x0068, 0x0004, 0x0008, 0x0014, 0x0018, 0x0000, 0x0001,
97
0x0002, 0x0003, 0x000c, 0x0028, 0x0024, 0x0164, 0x0000, 0x0264
100
static const uint8_t vlc_tab_tone_level_idx_hi2_huffbits[24] = {
101
11, 0, 0, 0, 0, 0, 10, 8, 8, 7, 6, 6, 5, 5, 4, 2, 2, 2, 4, 7, 8, 9, 0, 11
104
/* values in this table range from -1..8; adjust retrieved value by -1 */
105
static const uint8_t vlc_tab_type30_huffcodes[9] = {
106
0x3c, 0x06, 0x00, 0x01, 0x03, 0x02, 0x04, 0x0c, 0x1c
109
static const uint8_t vlc_tab_type30_huffbits[9] = {
110
6, 3, 3, 2, 2, 3, 4, 5, 6
113
/* values in this table range from -1..9; adjust retrieved value by -1 */
114
static const uint8_t vlc_tab_type34_huffcodes[10] = {
115
0x18, 0x00, 0x01, 0x04, 0x05, 0x07, 0x03, 0x02, 0x06, 0x08
118
static const uint8_t vlc_tab_type34_huffbits[10] = {
119
5, 4, 3, 3, 3, 3, 3, 3, 3, 5
122
/* values in this table range from -1..22; adjust retrieved value by -1 */
123
static const uint16_t vlc_tab_fft_tone_offset_0_huffcodes[23] = {
124
0x038e, 0x0001, 0x0000, 0x0022, 0x000a, 0x0006, 0x0012, 0x0002,
125
0x001e, 0x003e, 0x0056, 0x0016, 0x000e, 0x0032, 0x0072, 0x0042,
126
0x008e, 0x004e, 0x00f2, 0x002e, 0x0036, 0x00c2, 0x018e
129
static const uint8_t vlc_tab_fft_tone_offset_0_huffbits[23] = {
130
10, 1, 2, 6, 4, 5, 6, 7, 6, 6, 7, 7, 8, 7, 8, 8, 9, 7, 8, 6, 6, 8, 10
133
/* values in this table range from -1..27; adjust retrieved value by -1 */
134
static const uint16_t vlc_tab_fft_tone_offset_1_huffcodes[28] = {
135
0x07a4, 0x0001, 0x0020, 0x0012, 0x001c, 0x0008, 0x0006, 0x0010,
136
0x0000, 0x0014, 0x0004, 0x0032, 0x0070, 0x000c, 0x0002, 0x003a,
137
0x001a, 0x002c, 0x002a, 0x0022, 0x0024, 0x000a, 0x0064, 0x0030,
138
0x0062, 0x00a4, 0x01a4, 0x03a4
141
static const uint8_t vlc_tab_fft_tone_offset_1_huffbits[28] = {
142
11, 1, 6, 6, 5, 4, 3, 6, 6, 5, 6, 6, 7, 6, 6, 6,
143
6, 6, 6, 7, 8, 6, 7, 7, 7, 9, 10, 11
146
/* values in this table range from -1..31; adjust retrieved value by -1 */
147
static const uint16_t vlc_tab_fft_tone_offset_2_huffcodes[32] = {
148
0x1760, 0x0001, 0x0000, 0x0082, 0x000c, 0x0006, 0x0003, 0x0007,
149
0x0008, 0x0004, 0x0010, 0x0012, 0x0022, 0x001a, 0x0000, 0x0020,
150
0x000a, 0x0040, 0x004a, 0x006a, 0x002a, 0x0042, 0x0002, 0x0060,
151
0x00aa, 0x00e0, 0x00c2, 0x01c2, 0x0160, 0x0360, 0x0760, 0x0f60
154
static const uint8_t vlc_tab_fft_tone_offset_2_huffbits[32] = {
155
13, 2, 0, 8, 4, 3, 3, 3, 4, 4, 5, 5, 6, 5, 7, 7,
156
7, 7, 7, 7, 8, 8, 8, 9, 8, 8, 9, 9, 10, 11, 13, 12
159
/* values in this table range from -1..34; adjust retrieved value by -1 */
160
static const uint16_t vlc_tab_fft_tone_offset_3_huffcodes[35] = {
161
0x33ea, 0x0005, 0x0000, 0x000c, 0x0000, 0x0006, 0x0003, 0x0008,
162
0x0002, 0x0001, 0x0004, 0x0007, 0x001a, 0x000f, 0x001c, 0x002c,
163
0x000a, 0x001d, 0x002d, 0x002a, 0x000d, 0x004c, 0x008c, 0x006a,
164
0x00cd, 0x004d, 0x00ea, 0x020c, 0x030c, 0x010c, 0x01ea, 0x07ea,
165
0x0bea, 0x03ea, 0x13ea
168
static const uint8_t vlc_tab_fft_tone_offset_3_huffbits[35] = {
169
14, 4, 0, 10, 4, 3, 3, 4, 4, 3, 4, 4, 5, 4, 5, 6,
170
6, 5, 6, 7, 7, 7, 8, 8, 8, 8, 9, 10, 10, 10, 10, 11,
174
/* values in this table range from -1..37; adjust retrieved value by -1 */
175
static const uint16_t vlc_tab_fft_tone_offset_4_huffcodes[38] = {
176
0x5282, 0x0016, 0x0000, 0x0136, 0x0004, 0x0000, 0x0007, 0x000a,
177
0x000e, 0x0003, 0x0001, 0x000d, 0x0006, 0x0009, 0x0012, 0x0005,
178
0x0025, 0x0022, 0x0015, 0x0002, 0x0076, 0x0035, 0x0042, 0x00c2,
179
0x0182, 0x00b6, 0x0036, 0x03c2, 0x0482, 0x01c2, 0x0682, 0x0882,
180
0x0a82, 0x0082, 0x0282, 0x1282, 0x3282, 0x2282
183
static const uint8_t vlc_tab_fft_tone_offset_4_huffbits[38] = {
184
15, 6, 0, 9, 3, 3, 3, 4, 4, 3, 4, 4, 5, 4, 5, 6,
185
6, 6, 6, 8, 7, 6, 8, 9, 9, 8, 9, 10, 11, 10, 11, 12,
186
12, 12, 14, 15, 14, 14
191
/* values in this table range from -1..27; adjust retrieved value by -1 */
192
static const uint16_t fft_level_exp_alt_huffcodes[28] = {
193
0x1ec6, 0x0006, 0x00c2, 0x0142, 0x0242, 0x0246, 0x00c6, 0x0046,
194
0x0042, 0x0146, 0x00a2, 0x0062, 0x0026, 0x0016, 0x000e, 0x0005,
195
0x0004, 0x0003, 0x0000, 0x0001, 0x000a, 0x0012, 0x0002, 0x0022,
196
0x01c6, 0x02c6, 0x06c6, 0x0ec6
199
static const uint8_t fft_level_exp_alt_huffbits[28] = {
200
13, 7, 8, 9, 10, 10, 10, 10, 10, 9, 8, 7, 6, 5, 4, 3,
201
3, 2, 3, 3, 4, 5, 7, 8, 9, 11, 12, 13
204
/* values in this table range from -1..19; adjust retrieved value by -1 */
205
static const uint16_t fft_level_exp_huffcodes[20] = {
206
0x0f24, 0x0001, 0x0002, 0x0000, 0x0006, 0x0005, 0x0007, 0x000c,
207
0x000b, 0x0014, 0x0013, 0x0004, 0x0003, 0x0023, 0x0064, 0x00a4,
208
0x0024, 0x0124, 0x0324, 0x0724
211
static const uint8_t fft_level_exp_huffbits[20] = {
212
12, 3, 3, 3, 3, 3, 3, 4, 4, 5, 5, 6, 6, 6, 7, 8, 9, 10, 11, 12
215
/* values in this table range from -1..6; adjust retrieved value by -1 */
216
static const uint8_t fft_stereo_exp_huffcodes[7] = {
217
0x3e, 0x01, 0x00, 0x02, 0x06, 0x0e, 0x1e
220
static const uint8_t fft_stereo_exp_huffbits[7] = {
224
/* values in this table range from -1..8; adjust retrieved value by -1 */
225
static const uint8_t fft_stereo_phase_huffcodes[9] = {
226
0x35, 0x02, 0x00, 0x01, 0x0d, 0x15, 0x05, 0x09, 0x03
229
static const uint8_t fft_stereo_phase_huffbits[9] = {
230
6, 2, 2, 4, 4, 6, 5, 4, 2
233
static const int fft_cutoff_index_table[4][2] = {
234
{ 1, 2 }, {-1, 0 }, {-1,-2 }, { 0, 0 }
237
static const int16_t fft_level_index_table[256] = {
238
0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1,
239
2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
240
3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
241
3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
242
4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
243
4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
244
4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
245
4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
246
5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
247
5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
248
5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
249
5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
250
5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
251
5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
252
5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
253
5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
256
static uint8_t last_coeff[3] = {
260
static uint8_t coeff_per_sb_for_avg[3][30] = {
261
{ 0, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3 },
262
{ 0, 1, 2, 2, 3, 3, 4, 4, 4, 4, 4, 4, 5, 5, 5, 5, 5, 5, 5, 5, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6 },
263
{ 0, 1, 2, 3, 4, 4, 5, 5, 6, 6, 6, 6, 7, 7, 7, 7, 8, 8, 8, 8, 8, 8, 9, 9, 9, 9, 9, 9, 9, 9 }
266
static uint32_t dequant_table[3][10][30] = {
267
{ { 256, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
268
{ 0, 256, 256, 205, 154, 102, 51, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
269
{ 0, 0, 0, 51, 102, 154, 205, 256, 238, 219, 201, 183, 165, 146, 128, 110, 91, 73, 55, 37, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
270
{ 0, 0, 0, 0, 0, 0, 0, 0, 18, 37, 55, 73, 91, 110, 128, 146, 165, 183, 201, 219, 238, 256, 228, 199, 171, 142, 114, 85, 57, 28 },
271
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
272
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
273
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
274
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
275
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
276
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
277
{ { 256, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
278
{ 0, 256, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
279
{ 0, 0, 256, 171, 85, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
280
{ 0, 0, 0, 85, 171, 256, 171, 85, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
281
{ 0, 0, 0, 0, 0, 0, 85, 171, 256, 219, 183, 146, 110, 73, 37, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
282
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 37, 73, 110, 146, 183, 219, 256, 228, 199, 171, 142, 114, 85, 57, 28, 0, 0, 0, 0, 0, 0 },
283
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 28, 57, 85, 114, 142, 171, 199, 228, 256, 213, 171, 128, 85, 43 },
284
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
285
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
286
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
287
{ { 256, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
288
{ 0, 256, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
289
{ 0, 0, 256, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
290
{ 0, 0, 0, 256, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
291
{ 0, 0, 0, 0, 256, 256, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
292
{ 0, 0, 0, 0, 0, 0, 256, 171, 85, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
293
{ 0, 0, 0, 0, 0, 0, 0, 85, 171, 256, 192, 128, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
294
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 128, 192, 256, 205, 154, 102, 51, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
295
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 51, 102, 154, 205, 256, 213, 171, 128, 85, 43, 0, 0, 0, 0, 0, 0 },
296
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 43, 85, 128, 171, 213, 256, 213, 171, 128, 85, 43 } }
299
static uint8_t coeff_per_sb_for_dequant[3][30] = {
300
{ 0, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3 },
301
{ 0, 1, 2, 2, 2, 3, 3, 3, 4, 4, 4, 4, 4, 4, 4, 5, 5, 5, 5, 5, 5, 5, 5, 5, 6, 6, 6, 6, 6, 6 },
302
{ 0, 1, 2, 3, 4, 4, 5, 5, 5, 6, 6, 6, 6, 7, 7, 7, 7, 7, 8, 8, 8, 8, 8, 8, 9, 9, 9, 9, 9, 9 }
305
/* first index is subband, 2nd index is 0, 1 or 3 (2 is unused) */
306
static int8_t tone_level_idx_offset_table[30][4] = {
307
{ -50, -50, 0, -50 },
308
{ -50, -50, 0, -50 },
339
/* all my samples have 1st index 0 or 1 */
340
/* second index is subband, only indexes 0-29 seem to be used */
341
static int8_t coding_method_table[5][30] = {
342
{ 34, 30, 24, 24, 16, 16, 16, 16, 10, 10, 10, 10, 10, 10, 10,
343
10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10
345
{ 34, 30, 24, 24, 16, 16, 16, 16, 10, 10, 10, 10, 10, 10, 10,
346
10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10
348
{ 34, 30, 30, 30, 24, 24, 16, 16, 16, 16, 16, 16, 10, 10, 10,
349
10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10
351
{ 34, 34, 30, 30, 24, 24, 24, 24, 16, 16, 16, 16, 16, 16, 16,
352
16, 16, 16, 16, 16, 16, 16, 10, 10, 10, 10, 10, 10, 10, 10
354
{ 34, 34, 30, 30, 30, 30, 30, 30, 24, 24, 24, 24, 24, 24, 24,
355
24, 24, 24, 24, 24, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16
359
static const int vlc_stage3_values[60] = {
360
0, 1, 2, 3, 4, 6, 8, 10, 12, 16, 20, 24,
361
28, 36, 44, 52, 60, 76, 92, 108, 124, 156, 188, 220,
362
252, 316, 380, 444, 508, 636, 764, 892, 1020, 1276, 1532, 1788,
363
2044, 2556, 3068, 3580, 4092, 5116, 6140, 7164, 8188, 10236, 12284, 14332,
364
16380, 20476, 24572, 28668, 32764, 40956, 49148, 57340, 65532, 81916, 98300,114684
367
static const float fft_tone_sample_table[4][16][5] = {
368
{ { .0100000000f,-.0037037037f,-.0020000000f,-.0069444444f,-.0018416207f },
369
{ .0416666667f, .0000000000f, .0000000000f,-.0208333333f,-.0123456791f },
370
{ .1250000000f, .0558035709f, .0330687836f,-.0164473690f,-.0097465888f },
371
{ .1562500000f, .0625000000f, .0370370370f,-.0062500000f,-.0037037037f },
372
{ .1996007860f, .0781250000f, .0462962948f, .0022727272f, .0013468013f },
373
{ .2000000000f, .0625000000f, .0370370373f, .0208333333f, .0074074073f },
374
{ .2127659619f, .0555555556f, .0329218097f, .0208333333f, .0123456791f },
375
{ .2173913121f, .0473484844f, .0280583613f, .0347222239f, .0205761325f },
376
{ .2173913121f, .0347222239f, .0205761325f, .0473484844f, .0280583613f },
377
{ .2127659619f, .0208333333f, .0123456791f, .0555555556f, .0329218097f },
378
{ .2000000000f, .0208333333f, .0074074073f, .0625000000f, .0370370370f },
379
{ .1996007860f, .0022727272f, .0013468013f, .0781250000f, .0462962948f },
380
{ .1562500000f,-.0062500000f,-.0037037037f, .0625000000f, .0370370370f },
381
{ .1250000000f,-.0164473690f,-.0097465888f, .0558035709f, .0330687836f },
382
{ .0416666667f,-.0208333333f,-.0123456791f, .0000000000f, .0000000000f },
383
{ .0100000000f,-.0069444444f,-.0018416207f,-.0037037037f,-.0020000000f } },
385
{ { .0050000000f,-.0200000000f, .0125000000f,-.3030303030f, .0020000000f },
386
{ .1041666642f, .0400000000f,-.0250000000f, .0333333333f,-.0200000000f },
387
{ .1250000000f, .0100000000f, .0142857144f,-.0500000007f,-.0200000000f },
388
{ .1562500000f,-.0006250000f,-.00049382716f,-.000625000f,-.00049382716f },
389
{ .1562500000f,-.0006250000f,-.00049382716f,-.000625000f,-.00049382716f },
390
{ .1250000000f,-.0500000000f,-.0200000000f, .0100000000f, .0142857144f },
391
{ .1041666667f, .0333333333f,-.0200000000f, .0400000000f,-.0250000000f },
392
{ .0050000000f,-.3030303030f, .0020000001f,-.0200000000f, .0125000000f },
393
{ .0000000000f, .0000000000f, .0000000000f, .0000000000f, .0000000000f },
394
{ .0000000000f, .0000000000f, .0000000000f, .0000000000f, .0000000000f },
395
{ .0000000000f, .0000000000f, .0000000000f, .0000000000f, .0000000000f },
396
{ .0000000000f, .0000000000f, .0000000000f, .0000000000f, .0000000000f },
397
{ .0000000000f, .0000000000f, .0000000000f, .0000000000f, .0000000000f },
398
{ .0000000000f, .0000000000f, .0000000000f, .0000000000f, .0000000000f },
399
{ .0000000000f, .0000000000f, .0000000000f, .0000000000f, .0000000000f },
400
{ .0000000000f, .0000000000f, .0000000000f, .0000000000f, .0000000000f } },
402
{ { .1428571492f, .1250000000f,-.0285714287f,-.0357142873f, .0208333333f },
403
{ .1818181818f, .0588235296f, .0333333333f, .0212765951f, .0100000000f },
404
{ .1818181818f, .0212765951f, .0100000000f, .0588235296f, .0333333333f },
405
{ .1428571492f,-.0357142873f, .0208333333f, .1250000000f,-.0285714287f },
406
{ .0000000000f, .0000000000f, .0000000000f, .0000000000f, .0000000000f },
407
{ .0000000000f, .0000000000f, .0000000000f, .0000000000f, .0000000000f },
408
{ .0000000000f, .0000000000f, .0000000000f, .0000000000f, .0000000000f },
409
{ .0000000000f, .0000000000f, .0000000000f, .0000000000f, .0000000000f },
410
{ .0000000000f, .0000000000f, .0000000000f, .0000000000f, .0000000000f },
411
{ .0000000000f, .0000000000f, .0000000000f, .0000000000f, .0000000000f },
412
{ .0000000000f, .0000000000f, .0000000000f, .0000000000f, .0000000000f },
413
{ .0000000000f, .0000000000f, .0000000000f, .0000000000f, .0000000000f },
414
{ .0000000000f, .0000000000f, .0000000000f, .0000000000f, .0000000000f },
415
{ .0000000000f, .0000000000f, .0000000000f, .0000000000f, .0000000000f },
416
{ .0000000000f, .0000000000f, .0000000000f, .0000000000f, .0000000000f },
417
{ .0000000000f, .0000000000f, .0000000000f, .0000000000f, .0000000000f } },
419
{ { .0000000000f, .0000000000f, .0000000000f, .0000000000f, .0000000000f },
420
{ .0000000000f, .0000000000f, .0000000000f, .0000000000f, .0000000000f },
421
{ .0000000000f, .0000000000f, .0000000000f, .0000000000f, .0000000000f },
422
{ .0000000000f, .0000000000f, .0000000000f, .0000000000f, .0000000000f },
423
{ .0000000000f, .0000000000f, .0000000000f, .0000000000f, .0000000000f },
424
{ .0000000000f, .0000000000f, .0000000000f, .0000000000f, .0000000000f },
425
{ .0000000000f, .0000000000f, .0000000000f, .0000000000f, .0000000000f },
426
{ .0000000000f, .0000000000f, .0000000000f, .0000000000f, .0000000000f },
427
{ .0000000000f, .0000000000f, .0000000000f, .0000000000f, .0000000000f },
428
{ .0000000000f, .0000000000f, .0000000000f, .0000000000f, .0000000000f },
429
{ .0000000000f, .0000000000f, .0000000000f, .0000000000f, .0000000000f },
430
{ .0000000000f, .0000000000f, .0000000000f, .0000000000f, .0000000000f },
431
{ .0000000000f, .0000000000f, .0000000000f, .0000000000f, .0000000000f },
432
{ .0000000000f, .0000000000f, .0000000000f, .0000000000f, .0000000000f },
433
{ .0000000000f, .0000000000f, .0000000000f, .0000000000f, .0000000000f },
434
{ .0000000000f, .0000000000f, .0000000000f, .0000000000f, .0000000000f } }
437
static const float fft_tone_level_table[2][64] = { {
438
/* pow ~ (i > 46) ? 0 : (((((i & 1) ? 431 : 304) << (i >> 1))) / 1024.0); */
439
0.17677669f, 0.42677650f, 0.60355347f, 0.85355347f,
440
1.20710683f, 1.68359375f, 2.37500000f, 3.36718750f,
441
4.75000000f, 6.73437500f, 9.50000000f, 13.4687500f,
442
19.0000000f, 26.9375000f, 38.0000000f, 53.8750000f,
443
76.0000000f, 107.750000f, 152.000000f, 215.500000f,
444
304.000000f, 431.000000f, 608.000000f, 862.000000f,
445
1216.00000f, 1724.00000f, 2432.00000f, 3448.00000f,
446
4864.00000f, 6896.00000f, 9728.00000f, 13792.0000f,
447
19456.0000f, 27584.0000f, 38912.0000f, 55168.0000f,
448
77824.0000f, 110336.000f, 155648.000f, 220672.000f,
449
311296.000f, 441344.000f, 622592.000f, 882688.000f,
450
1245184.00f, 1765376.00f, 2490368.00f, 0.00000000f,
451
0.00000000f, 0.00000000f, 0.00000000f, 0.00000000f,
452
0.00000000f, 0.00000000f, 0.00000000f, 0.00000000f,
453
0.00000000f, 0.00000000f, 0.00000000f, 0.00000000f,
454
0.00000000f, 0.00000000f, 0.00000000f, 0.00000000f,
456
/* pow = (i > 45) ? 0 : ((((i & 1) ? 431 : 304) << (i >> 1)) / 512.0); */
457
0.59375000f, 0.84179688f, 1.18750000f, 1.68359375f,
458
2.37500000f, 3.36718750f, 4.75000000f, 6.73437500f,
459
9.50000000f, 13.4687500f, 19.0000000f, 26.9375000f,
460
38.0000000f, 53.8750000f, 76.0000000f, 107.750000f,
461
152.000000f, 215.500000f, 304.000000f, 431.000000f,
462
608.000000f, 862.000000f, 1216.00000f, 1724.00000f,
463
2432.00000f, 3448.00000f, 4864.00000f, 6896.00000f,
464
9728.00000f, 13792.0000f, 19456.0000f, 27584.0000f,
465
38912.0000f, 55168.0000f, 77824.0000f, 110336.000f,
466
155648.000f, 220672.000f, 311296.000f, 441344.000f,
467
622592.000f, 882688.000f, 1245184.00f, 1765376.00f,
468
2490368.00f, 3530752.00f, 0.00000000f, 0.00000000f,
469
0.00000000f, 0.00000000f, 0.00000000f, 0.00000000f,
470
0.00000000f, 0.00000000f, 0.00000000f, 0.00000000f,
471
0.00000000f, 0.00000000f, 0.00000000f, 0.00000000f,
472
0.00000000f, 0.00000000f, 0.00000000f, 0.00000000f
475
static const float fft_tone_envelope_table[4][31] = {
476
{ .009607375f, .038060248f, .084265202f, .146446645f, .222214907f, .308658302f,
477
.402454883f, .500000060f, .597545207f, .691341758f, .777785182f, .853553414f,
478
.915734828f, .961939812f, .990392685f, 1.00000000f, .990392625f, .961939752f,
479
.915734768f, .853553295f, .777785063f, .691341639f, .597545087f, .500000000f,
480
.402454853f, .308658272f, .222214878f, .146446615f, .084265172f, .038060218f,
482
{ .038060248f, .146446645f, .308658302f, .500000060f, .691341758f, .853553414f,
483
.961939812f, 1.00000000f, .961939752f, .853553295f, .691341639f, .500000000f,
484
.308658272f, .146446615f, .038060218f, .000000000f, .000000000f, .000000000f,
485
.000000000f, .000000000f, .000000000f, .000000000f, .000000000f, .000000000f,
486
.000000000f, .000000000f, .000000000f, .000000000f, .000000000f, .000000000f,
488
{ .146446645f, .500000060f, .853553414f, 1.00000000f, .853553295f, .500000000f,
489
.146446615f, .000000000f, .000000000f, .000000000f, .000000000f, .000000000f,
490
.000000000f, .000000000f, .000000000f, .000000000f, .000000000f, .000000000f,
491
.000000000f, .000000000f, .000000000f, .000000000f, .000000000f, .000000000f,
492
.000000000f, .000000000f, .000000000f, .000000000f, .000000000f, .000000000f,
494
{ .500000060f, 1.00000000f, .500000000f, .000000000f, .000000000f, .000000000f,
495
.000000000f, .000000000f, .000000000f, .000000000f, .000000000f, .000000000f,
496
.000000000f, .000000000f, .000000000f, .000000000f, .000000000f, .000000000f,
497
.000000000f, .000000000f, .000000000f, .000000000f, .000000000f, .000000000f,
498
.000000000f, .000000000f, .000000000f, .000000000f, .000000000f, .000000000f,
502
static const float sb_noise_attenuation[32] = {
503
0.0f, 0.0f, 0.3f, 0.4f, 0.5f, 0.7f, 1.0f, 1.0f,
504
1.0f, 1.0f, 1.0f, 1.0f, 1.0f, 1.0f, 1.0f, 1.0f,
505
1.0f, 1.0f, 1.0f, 1.0f, 1.0f, 1.0f, 1.0f, 1.0f,
506
1.0f, 1.0f, 1.0f, 1.0f, 1.0f, 1.0f, 1.0f, 1.0f,
509
static const uint8_t fft_subpackets[32] = {
510
0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 0,
511
0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0
514
/* first index is joined_stereo, second index is 0 or 2 (1 is unused) */
515
static float dequant_1bit[2][3] = {
516
{-0.920000f, 0.000000f, 0.920000f },
517
{-0.890000f, 0.000000f, 0.890000f }
520
static const float type30_dequant[8] = {
521
-1.0f,-0.625f,-0.291666656732559f,0.0f,
522
0.25f,0.5f,0.75f,1.0f,
525
static const float type34_delta[10] = { // FIXME: covers 8 entries..
526
-1.0f,-0.60947573184967f,-0.333333343267441f,-0.138071194291115f,0.0f,
527
0.138071194291115f,0.333333343267441f,0.60947573184967f,1.0f,0.0f,
530
#endif /* QDM2DATA_H */