Statistics
| Branch: | Revision:

ffmpeg / libavcodec / qdm2data.h @ 2912e87a

History | View | Annotate | Download (25.6 KB)

1
/*
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
7
 *
8
 * This file is part of Libav.
9
 *
10
 * Libav 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.
14
 *
15
 * Libav 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.
19
 *
20
 * You should have received a copy of the GNU Lesser General Public
21
 * License along with Libav; if not, write to the Free Software
22
 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
23
 */
24

    
25
 /**
26
 * @file
27
 * Various QDM2 tables.
28
 */
29

    
30
#ifndef AVCODEC_QDM2DATA_H
31
#define AVCODEC_QDM2DATA_H
32

    
33
#include <stdint.h>
34

    
35
/** VLC TABLES **/
36

    
37
/* values in this table range from -1..23; adjust retrieved value by -1 */
38
static const uint16_t vlc_tab_level_huffcodes[24] = {
39
    0x037c, 0x0004, 0x003c, 0x004c, 0x003a, 0x002c, 0x001c, 0x001a,
40
    0x0024, 0x0014, 0x0001, 0x0002, 0x0000, 0x0003, 0x0007, 0x0005,
41
    0x0006, 0x0008, 0x0009, 0x000a, 0x000c, 0x00fc, 0x007c, 0x017c
42
};
43

    
44
static const uint8_t vlc_tab_level_huffbits[24] = {
45
    10, 6, 7, 7, 6, 6, 6, 6, 6, 5, 4, 4, 4, 3, 3, 3, 3, 4, 4, 5, 7, 8, 9, 10
46
};
47

    
48
/* values in this table range from -1..36; adjust retrieved value by -1 */
49
static const uint16_t vlc_tab_diff_huffcodes[37] = {
50
    0x1c57, 0x0004, 0x0000, 0x0001, 0x0003, 0x0002, 0x000f, 0x000e,
51
    0x0007, 0x0016, 0x0037, 0x0027, 0x0026, 0x0066, 0x0006, 0x0097,
52
    0x0046, 0x01c6, 0x0017, 0x0786, 0x0086, 0x0257, 0x00d7, 0x0357,
53
    0x00c6, 0x0386, 0x0186, 0x0000, 0x0157, 0x0c57, 0x0057, 0x0000,
54
    0x0b86, 0x0000, 0x1457, 0x0000, 0x0457
55
};
56

    
57
static const uint8_t vlc_tab_diff_huffbits[37] = {
58
    13, 3, 3, 2, 3, 3, 4, 4, 6, 5, 6, 6, 7, 7, 8, 8,
59
    8, 9, 8, 11, 9, 10, 8, 10, 9, 12, 10, 0, 10, 13, 11, 0,
60
    12, 0, 13, 0, 13
61
};
62

    
63
/* values in this table range from -1..5; adjust retrieved value by -1 */
64
static const uint8_t vlc_tab_run_huffcodes[6] = {
65
    0x1f, 0x00, 0x01, 0x03, 0x07, 0x0f
66
};
67

    
68
static const uint8_t vlc_tab_run_huffbits[6] = {
69
    5, 1, 2, 3, 4, 5
70
};
71

    
72
/* values in this table range from -1..19; adjust retrieved value by -1 */
73
static const uint16_t vlc_tab_tone_level_idx_hi1_huffcodes[20] = {
74
    0x5714, 0x000c, 0x0002, 0x0001, 0x0000, 0x0004, 0x0034, 0x0054,
75
    0x0094, 0x0014, 0x0114, 0x0214, 0x0314, 0x0614, 0x0e14, 0x0f14,
76
    0x2714, 0x0714, 0x1714, 0x3714
77
};
78

    
79
static const uint8_t vlc_tab_tone_level_idx_hi1_huffbits[20] = {
80
    15, 4, 2, 1, 3, 5, 6, 7, 8, 10, 10, 11, 11, 12, 12, 12, 14, 14, 15, 14
81
};
82

    
83
/* values in this table range from -1..23; adjust retrieved value by -1 */
84
static const uint16_t vlc_tab_tone_level_idx_mid_huffcodes[24] = {
85
    0x0fea, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
86
    0x0000, 0x0000, 0x0000, 0x0000, 0x03ea, 0x00ea, 0x002a, 0x001a,
87
    0x0006, 0x0001, 0x0000, 0x0002, 0x000a, 0x006a, 0x01ea, 0x07ea
88
};
89

    
90
static const uint8_t vlc_tab_tone_level_idx_mid_huffbits[24] = {
91
    12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 9, 7, 5, 3, 1, 2, 4, 6, 8, 10, 12
92
};
93

    
94
/* values in this table range from -1..23; adjust retrieved value by -1 */
95
static const uint16_t vlc_tab_tone_level_idx_hi2_huffcodes[24] = {
96
    0x0664, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0064, 0x00e4,
97
    0x00a4, 0x0068, 0x0004, 0x0008, 0x0014, 0x0018, 0x0000, 0x0001,
98
    0x0002, 0x0003, 0x000c, 0x0028, 0x0024, 0x0164, 0x0000, 0x0264
99
};
100

    
101
static const uint8_t vlc_tab_tone_level_idx_hi2_huffbits[24] = {
102
    11, 0, 0, 0, 0, 0, 10, 8, 8, 7, 6, 6, 5, 5, 4, 2, 2, 2, 4, 7, 8, 9, 0, 11
103
};
104

    
105
/* values in this table range from -1..8; adjust retrieved value by -1 */
106
static const uint8_t vlc_tab_type30_huffcodes[9] = {
107
    0x3c, 0x06, 0x00, 0x01, 0x03, 0x02, 0x04, 0x0c, 0x1c
108
};
109

    
110
static const uint8_t vlc_tab_type30_huffbits[9] = {
111
    6, 3, 3, 2, 2, 3, 4, 5, 6
112
};
113

    
114
/* values in this table range from -1..9; adjust retrieved value by -1 */
115
static const uint8_t vlc_tab_type34_huffcodes[10] = {
116
    0x18, 0x00, 0x01, 0x04, 0x05, 0x07, 0x03, 0x02, 0x06, 0x08
117
};
118

    
119
static const uint8_t vlc_tab_type34_huffbits[10] = {
120
    5, 4, 3, 3, 3, 3, 3, 3, 3, 5
121
};
122

    
123
/* values in this table range from -1..22; adjust retrieved value by -1 */
124
static const uint16_t vlc_tab_fft_tone_offset_0_huffcodes[23] = {
125
    0x038e, 0x0001, 0x0000, 0x0022, 0x000a, 0x0006, 0x0012, 0x0002,
126
    0x001e, 0x003e, 0x0056, 0x0016, 0x000e, 0x0032, 0x0072, 0x0042,
127
    0x008e, 0x004e, 0x00f2, 0x002e, 0x0036, 0x00c2, 0x018e
128
};
129

    
130
static const uint8_t vlc_tab_fft_tone_offset_0_huffbits[23] = {
131
    10, 1, 2, 6, 4, 5, 6, 7, 6, 6, 7, 7, 8, 7, 8, 8, 9, 7, 8, 6, 6, 8, 10
132
};
133

    
134
/* values in this table range from -1..27; adjust retrieved value by -1 */
135
static const uint16_t vlc_tab_fft_tone_offset_1_huffcodes[28] = {
136
    0x07a4, 0x0001, 0x0020, 0x0012, 0x001c, 0x0008, 0x0006, 0x0010,
137
    0x0000, 0x0014, 0x0004, 0x0032, 0x0070, 0x000c, 0x0002, 0x003a,
138
    0x001a, 0x002c, 0x002a, 0x0022, 0x0024, 0x000a, 0x0064, 0x0030,
139
    0x0062, 0x00a4, 0x01a4, 0x03a4
140
};
141

    
142
static const uint8_t vlc_tab_fft_tone_offset_1_huffbits[28] = {
143
    11, 1, 6, 6, 5, 4, 3, 6, 6, 5, 6, 6, 7, 6, 6, 6,
144
    6, 6, 6, 7, 8, 6, 7, 7, 7, 9, 10, 11
145
};
146

    
147
/* values in this table range from -1..31; adjust retrieved value by -1 */
148
static const uint16_t vlc_tab_fft_tone_offset_2_huffcodes[32] = {
149
    0x1760, 0x0001, 0x0000, 0x0082, 0x000c, 0x0006, 0x0003, 0x0007,
150
    0x0008, 0x0004, 0x0010, 0x0012, 0x0022, 0x001a, 0x0000, 0x0020,
151
    0x000a, 0x0040, 0x004a, 0x006a, 0x002a, 0x0042, 0x0002, 0x0060,
152
    0x00aa, 0x00e0, 0x00c2, 0x01c2, 0x0160, 0x0360, 0x0760, 0x0f60
153
};
154

    
155
static const uint8_t vlc_tab_fft_tone_offset_2_huffbits[32] = {
156
    13, 2, 0, 8, 4, 3, 3, 3, 4, 4, 5, 5, 6, 5, 7, 7,
157
    7, 7, 7, 7, 8, 8, 8, 9, 8, 8, 9, 9, 10, 11, 13, 12
158
};
159

    
160
/* values in this table range from -1..34; adjust retrieved value by -1 */
161
static const uint16_t vlc_tab_fft_tone_offset_3_huffcodes[35] = {
162
    0x33ea, 0x0005, 0x0000, 0x000c, 0x0000, 0x0006, 0x0003, 0x0008,
163
    0x0002, 0x0001, 0x0004, 0x0007, 0x001a, 0x000f, 0x001c, 0x002c,
164
    0x000a, 0x001d, 0x002d, 0x002a, 0x000d, 0x004c, 0x008c, 0x006a,
165
    0x00cd, 0x004d, 0x00ea, 0x020c, 0x030c, 0x010c, 0x01ea, 0x07ea,
166
    0x0bea, 0x03ea, 0x13ea
167
};
168

    
169
static const uint8_t vlc_tab_fft_tone_offset_3_huffbits[35] = {
170
    14, 4, 0, 10, 4, 3, 3, 4, 4, 3, 4, 4, 5, 4, 5, 6,
171
    6, 5, 6, 7, 7, 7, 8, 8, 8, 8, 9, 10, 10, 10, 10, 11,
172
    12, 13, 14
173
};
174

    
175
/* values in this table range from -1..37; adjust retrieved value by -1 */
176
static const uint16_t vlc_tab_fft_tone_offset_4_huffcodes[38] = {
177
    0x5282, 0x0016, 0x0000, 0x0136, 0x0004, 0x0000, 0x0007, 0x000a,
178
    0x000e, 0x0003, 0x0001, 0x000d, 0x0006, 0x0009, 0x0012, 0x0005,
179
    0x0025, 0x0022, 0x0015, 0x0002, 0x0076, 0x0035, 0x0042, 0x00c2,
180
    0x0182, 0x00b6, 0x0036, 0x03c2, 0x0482, 0x01c2, 0x0682, 0x0882,
181
    0x0a82, 0x0082, 0x0282, 0x1282, 0x3282, 0x2282
182
};
183

    
184
static const uint8_t vlc_tab_fft_tone_offset_4_huffbits[38] = {
185
    15, 6, 0, 9, 3, 3, 3, 4, 4, 3, 4, 4, 5, 4, 5, 6,
186
    6, 6, 6, 8, 7, 6, 8, 9, 9, 8, 9, 10, 11, 10, 11, 12,
187
    12, 12, 14, 15, 14, 14
188
};
189

    
190
/** FFT TABLES **/
191

    
192
/* values in this table range from -1..27; adjust retrieved value by -1 */
193
static const uint16_t fft_level_exp_alt_huffcodes[28] = {
194
    0x1ec6, 0x0006, 0x00c2, 0x0142, 0x0242, 0x0246, 0x00c6, 0x0046,
195
    0x0042, 0x0146, 0x00a2, 0x0062, 0x0026, 0x0016, 0x000e, 0x0005,
196
    0x0004, 0x0003, 0x0000, 0x0001, 0x000a, 0x0012, 0x0002, 0x0022,
197
    0x01c6, 0x02c6, 0x06c6, 0x0ec6
198
};
199

    
200
static const uint8_t fft_level_exp_alt_huffbits[28] = {
201
    13, 7, 8, 9, 10, 10, 10, 10, 10, 9, 8, 7, 6, 5, 4, 3,
202
    3, 2, 3, 3, 4, 5, 7, 8, 9, 11, 12, 13
203
};
204

    
205
/* values in this table range from -1..19; adjust retrieved value by -1 */
206
static const uint16_t fft_level_exp_huffcodes[20] = {
207
    0x0f24, 0x0001, 0x0002, 0x0000, 0x0006, 0x0005, 0x0007, 0x000c,
208
    0x000b, 0x0014, 0x0013, 0x0004, 0x0003, 0x0023, 0x0064, 0x00a4,
209
    0x0024, 0x0124, 0x0324, 0x0724
210
};
211

    
212
static const uint8_t fft_level_exp_huffbits[20] = {
213
    12, 3, 3, 3, 3, 3, 3, 4, 4, 5, 5, 6, 6, 6, 7, 8, 9, 10, 11, 12
214
};
215

    
216
/* values in this table range from -1..6; adjust retrieved value by -1 */
217
static const uint8_t fft_stereo_exp_huffcodes[7] = {
218
    0x3e, 0x01, 0x00, 0x02, 0x06, 0x0e, 0x1e
219
};
220

    
221
static const uint8_t fft_stereo_exp_huffbits[7] = {
222
    6, 1, 2, 3, 4, 5, 6
223
};
224

    
225
/* values in this table range from -1..8; adjust retrieved value by -1 */
226
static const uint8_t fft_stereo_phase_huffcodes[9] = {
227
    0x35, 0x02, 0x00, 0x01, 0x0d, 0x15, 0x05, 0x09, 0x03
228
};
229

    
230
static const uint8_t fft_stereo_phase_huffbits[9] = {
231
    6, 2, 2, 4, 4, 6, 5, 4, 2
232
};
233

    
234
static const int fft_cutoff_index_table[4][2] = {
235
    { 1, 2 }, {-1, 0 }, {-1,-2 }, { 0, 0 }
236
};
237

    
238
static const int16_t fft_level_index_table[256] = {
239
    0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1,
240
    2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
241
    3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
242
    3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
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
    4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
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,
254
    5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
255
};
256

    
257
static const uint8_t last_coeff[3] = {
258
    4, 7, 10
259
};
260

    
261
static const uint8_t coeff_per_sb_for_avg[3][30] = {
262
    { 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 },
263
    { 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 },
264
    { 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 }
265
};
266

    
267
static const uint32_t dequant_table[3][10][30] = {
268
    { { 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 },
269
      { 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 },
270
      { 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 },
271
      { 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 },
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
      { 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 } },
278
    { { 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 },
279
      { 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 },
280
      { 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 },
281
      { 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 },
282
      { 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 },
283
      { 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 },
284
      { 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 },
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
      { 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 } },
288
    { { 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 },
289
      { 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 },
290
      { 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 },
291
      { 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 },
292
      { 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 },
293
      { 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 },
294
      { 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 },
295
      { 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 },
296
      { 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 },
297
      { 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 } }
298
};
299

    
300
static const uint8_t coeff_per_sb_for_dequant[3][30] = {
301
    { 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 },
302
    { 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 },
303
    { 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 }
304
};
305

    
306
/* first index is subband, 2nd index is 0, 1 or 3 (2 is unused) */
307
static const int8_t tone_level_idx_offset_table[30][4] = {
308
    { -50, -50,  0, -50 },
309
    { -50, -50,  0, -50 },
310
    { -50,  -9,  0, -19 },
311
    { -16,  -6,  0, -12 },
312
    { -11,  -4,  0,  -8 },
313
    {  -8,  -3,  0,  -6 },
314
    {  -7,  -3,  0,  -5 },
315
    {  -6,  -2,  0,  -4 },
316
    {  -5,  -2,  0,  -3 },
317
    {  -4,  -1,  0,  -3 },
318
    {  -4,  -1,  0,  -2 },
319
    {  -3,  -1,  0,  -2 },
320
    {  -3,  -1,  0,  -2 },
321
    {  -3,  -1,  0,  -2 },
322
    {  -2,  -1,  0,  -1 },
323
    {  -2,  -1,  0,  -1 },
324
    {  -2,  -1,  0,  -1 },
325
    {  -2,   0,  0,  -1 },
326
    {  -2,   0,  0,  -1 },
327
    {  -1,   0,  0,  -1 },
328
    {  -1,   0,  0,  -1 },
329
    {  -1,   0,  0,  -1 },
330
    {  -1,   0,  0,  -1 },
331
    {  -1,   0,  0,  -1 },
332
    {  -1,   0,  0,  -1 },
333
    {  -1,   0,  0,  -1 },
334
    {  -1,   0,  0,   0 },
335
    {  -1,   0,  0,   0 },
336
    {  -1,   0,  0,   0 },
337
    {  -1,   0,  0,   0 }
338
};
339

    
340
/* all my samples have 1st index 0 or 1 */
341
/* second index is subband, only indexes 0-29 seem to be used */
342
static const int8_t coding_method_table[5][30] = {
343
    { 34, 30, 24, 24, 16, 16, 16, 16, 10, 10, 10, 10, 10, 10, 10,
344
      10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10
345
    },
346
    { 34, 30, 24, 24, 16, 16, 16, 16, 10, 10, 10, 10, 10, 10, 10,
347
      10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10
348
    },
349
    { 34, 30, 30, 30, 24, 24, 16, 16, 16, 16, 16, 16, 10, 10, 10,
350
      10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10
351
    },
352
    { 34, 34, 30, 30, 24, 24, 24, 24, 16, 16, 16, 16, 16, 16, 16,
353
      16, 16, 16, 16, 16, 16, 16, 10, 10, 10, 10, 10, 10, 10, 10
354
    },
355
    { 34, 34, 30, 30, 30, 30, 30, 30, 24, 24, 24, 24, 24, 24, 24,
356
      24, 24, 24, 24, 24, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16
357
    },
358
};
359

    
360
static const int vlc_stage3_values[60] = {
361
        0,     1,     2,     3,     4,     6,     8,    10,    12,    16,    20,    24,
362
       28,    36,    44,    52,    60,    76,    92,   108,   124,   156,   188,   220,
363
      252,   316,   380,   444,   508,   636,   764,   892,  1020,  1276,  1532,  1788,
364
     2044,  2556,  3068,  3580,  4092,  5116,  6140,  7164,  8188, 10236, 12284, 14332,
365
    16380, 20476, 24572, 28668, 32764, 40956, 49148, 57340, 65532, 81916, 98300,114684
366
};
367

    
368
static const float fft_tone_sample_table[4][16][5] = {
369
    { { .0100000000f,-.0037037037f,-.0020000000f,-.0069444444f,-.0018416207f },
370
      { .0416666667f, .0000000000f, .0000000000f,-.0208333333f,-.0123456791f },
371
      { .1250000000f, .0558035709f, .0330687836f,-.0164473690f,-.0097465888f },
372
      { .1562500000f, .0625000000f, .0370370370f,-.0062500000f,-.0037037037f },
373
      { .1996007860f, .0781250000f, .0462962948f, .0022727272f, .0013468013f },
374
      { .2000000000f, .0625000000f, .0370370373f, .0208333333f, .0074074073f },
375
      { .2127659619f, .0555555556f, .0329218097f, .0208333333f, .0123456791f },
376
      { .2173913121f, .0473484844f, .0280583613f, .0347222239f, .0205761325f },
377
      { .2173913121f, .0347222239f, .0205761325f, .0473484844f, .0280583613f },
378
      { .2127659619f, .0208333333f, .0123456791f, .0555555556f, .0329218097f },
379
      { .2000000000f, .0208333333f, .0074074073f, .0625000000f, .0370370370f },
380
      { .1996007860f, .0022727272f, .0013468013f, .0781250000f, .0462962948f },
381
      { .1562500000f,-.0062500000f,-.0037037037f, .0625000000f, .0370370370f },
382
      { .1250000000f,-.0164473690f,-.0097465888f, .0558035709f, .0330687836f },
383
      { .0416666667f,-.0208333333f,-.0123456791f, .0000000000f, .0000000000f },
384
      { .0100000000f,-.0069444444f,-.0018416207f,-.0037037037f,-.0020000000f } },
385

    
386
    { { .0050000000f,-.0200000000f, .0125000000f,-.3030303030f, .0020000000f },
387
      { .1041666642f, .0400000000f,-.0250000000f, .0333333333f,-.0200000000f },
388
      { .1250000000f, .0100000000f, .0142857144f,-.0500000007f,-.0200000000f },
389
      { .1562500000f,-.0006250000f,-.00049382716f,-.000625000f,-.00049382716f },
390
      { .1562500000f,-.0006250000f,-.00049382716f,-.000625000f,-.00049382716f },
391
      { .1250000000f,-.0500000000f,-.0200000000f, .0100000000f, .0142857144f },
392
      { .1041666667f, .0333333333f,-.0200000000f, .0400000000f,-.0250000000f },
393
      { .0050000000f,-.3030303030f, .0020000001f,-.0200000000f, .0125000000f },
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 },
401
      { .0000000000f, .0000000000f, .0000000000f, .0000000000f, .0000000000f } },
402

    
403
    { { .1428571492f, .1250000000f,-.0285714287f,-.0357142873f, .0208333333f },
404
      { .1818181818f, .0588235296f, .0333333333f, .0212765951f, .0100000000f },
405
      { .1818181818f, .0212765951f, .0100000000f, .0588235296f, .0333333333f },
406
      { .1428571492f,-.0357142873f, .0208333333f, .1250000000f,-.0285714287f },
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 },
418
      { .0000000000f, .0000000000f, .0000000000f, .0000000000f, .0000000000f } },
419

    
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 },
435
      { .0000000000f, .0000000000f, .0000000000f, .0000000000f, .0000000000f } }
436
};
437

    
438
static const float fft_tone_level_table[2][64] = { {
439
/* pow ~ (i > 46) ? 0 : (((((i & 1) ? 431 : 304) << (i >> 1))) / 1024.0); */
440
    0.17677669f, 0.42677650f, 0.60355347f, 0.85355347f,
441
    1.20710683f, 1.68359375f, 2.37500000f, 3.36718750f,
442
    4.75000000f, 6.73437500f, 9.50000000f, 13.4687500f,
443
    19.0000000f, 26.9375000f, 38.0000000f, 53.8750000f,
444
    76.0000000f, 107.750000f, 152.000000f, 215.500000f,
445
    304.000000f, 431.000000f, 608.000000f, 862.000000f,
446
    1216.00000f, 1724.00000f, 2432.00000f, 3448.00000f,
447
    4864.00000f, 6896.00000f, 9728.00000f, 13792.0000f,
448
    19456.0000f, 27584.0000f, 38912.0000f, 55168.0000f,
449
    77824.0000f, 110336.000f, 155648.000f, 220672.000f,
450
    311296.000f, 441344.000f, 622592.000f, 882688.000f,
451
    1245184.00f, 1765376.00f, 2490368.00f, 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,
455
    0.00000000f, 0.00000000f, 0.00000000f, 0.00000000f,
456
  }, {
457
/* pow = (i > 45) ? 0 : ((((i & 1) ? 431 : 304) << (i >> 1)) / 512.0); */
458
    0.59375000f, 0.84179688f, 1.18750000f, 1.68359375f,
459
    2.37500000f, 3.36718750f, 4.75000000f, 6.73437500f,
460
    9.50000000f, 13.4687500f, 19.0000000f, 26.9375000f,
461
    38.0000000f, 53.8750000f, 76.0000000f, 107.750000f,
462
    152.000000f, 215.500000f, 304.000000f, 431.000000f,
463
    608.000000f, 862.000000f, 1216.00000f, 1724.00000f,
464
    2432.00000f, 3448.00000f, 4864.00000f, 6896.00000f,
465
    9728.00000f, 13792.0000f, 19456.0000f, 27584.0000f,
466
    38912.0000f, 55168.0000f, 77824.0000f, 110336.000f,
467
    155648.000f, 220672.000f, 311296.000f, 441344.000f,
468
    622592.000f, 882688.000f, 1245184.00f, 1765376.00f,
469
    2490368.00f, 3530752.00f, 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,
473
    0.00000000f, 0.00000000f, 0.00000000f, 0.00000000f
474
} };
475

    
476
static const float fft_tone_envelope_table[4][31] = {
477
    { .009607375f, .038060248f, .084265202f, .146446645f, .222214907f, .308658302f,
478
      .402454883f, .500000060f, .597545207f, .691341758f, .777785182f, .853553414f,
479
      .915734828f, .961939812f, .990392685f, 1.00000000f, .990392625f, .961939752f,
480
      .915734768f, .853553295f, .777785063f, .691341639f, .597545087f, .500000000f,
481
      .402454853f, .308658272f, .222214878f, .146446615f, .084265172f, .038060218f,
482
      .009607345f },
483
    { .038060248f, .146446645f, .308658302f, .500000060f, .691341758f, .853553414f,
484
      .961939812f, 1.00000000f, .961939752f, .853553295f, .691341639f, .500000000f,
485
      .308658272f, .146446615f, .038060218f, .000000000f, .000000000f, .000000000f,
486
      .000000000f, .000000000f, .000000000f, .000000000f, .000000000f, .000000000f,
487
      .000000000f, .000000000f, .000000000f, .000000000f, .000000000f, .000000000f,
488
      .000000000f },
489
    { .146446645f, .500000060f, .853553414f, 1.00000000f, .853553295f, .500000000f,
490
      .146446615f, .000000000f, .000000000f, .000000000f, .000000000f, .000000000f,
491
      .000000000f, .000000000f, .000000000f, .000000000f, .000000000f, .000000000f,
492
      .000000000f, .000000000f, .000000000f, .000000000f, .000000000f, .000000000f,
493
      .000000000f, .000000000f, .000000000f, .000000000f, .000000000f, .000000000f,
494
      .000000000f },
495
    { .500000060f, 1.00000000f, .500000000f, .000000000f, .000000000f, .000000000f,
496
      .000000000f, .000000000f, .000000000f, .000000000f, .000000000f, .000000000f,
497
      .000000000f, .000000000f, .000000000f, .000000000f, .000000000f, .000000000f,
498
      .000000000f, .000000000f, .000000000f, .000000000f, .000000000f, .000000000f,
499
      .000000000f, .000000000f, .000000000f, .000000000f, .000000000f, .000000000f,
500
      .000000000f }
501
};
502

    
503
static const float sb_noise_attenuation[32] = {
504
    0.0f, 0.0f, 0.3f, 0.4f, 0.5f, 0.7f, 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,
507
    1.0f, 1.0f, 1.0f, 1.0f, 1.0f, 1.0f, 1.0f, 1.0f,
508
};
509

    
510
static const uint8_t fft_subpackets[32] = {
511
    0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 0,
512
    0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0
513
};
514

    
515
/* first index is joined_stereo, second index is 0 or 2 (1 is unused) */
516
static const float dequant_1bit[2][3] = {
517
    {-0.920000f, 0.000000f, 0.920000f },
518
    {-0.890000f, 0.000000f, 0.890000f }
519
};
520

    
521
static const float type30_dequant[8] = {
522
   -1.0f,-0.625f,-0.291666656732559f,0.0f,
523
   0.25f,0.5f,0.75f,1.0f,
524
};
525

    
526
static const float type34_delta[10] = { // FIXME: covers 8 entries..
527
    -1.0f,-0.60947573184967f,-0.333333343267441f,-0.138071194291115f,0.0f,
528
    0.138071194291115f,0.333333343267441f,0.60947573184967f,1.0f,0.0f,
529
};
530

    
531
#endif /* AVCODEC_QDM2DATA_H */