Statistics
| Branch: | Revision:

ffmpeg / libavcodec / qdm2data.h @ 109d2de1

History | View | Annotate | Download (25.5 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 library 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 of the License, or (at your option) any later version.
12
 *
13
 * This library 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 this library; if not, write to the Free Software
20
 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
21
 *
22
 */
23

    
24
 /**
25
 * @file qdm2data.h
26
 * Various QDM2 tables.
27
 */
28

    
29
#ifndef QDM2DATA_H
30
#define QDM2DATA_H
31

    
32
/** VLC TABLES **/
33

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

    
41
static const uint8_t vlc_tab_level_huffbits[24] = {
42
    10, 6, 7, 7, 6, 6, 6, 6, 6, 5, 4, 4, 4, 3, 3, 3, 3, 4, 4, 5, 7, 8, 9, 10
43
};
44

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

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

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

    
65
static const uint8_t vlc_tab_run_huffbits[6] = {
66
    5, 1, 2, 3, 4, 5
67
};
68

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

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

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

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

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

    
98
static const uint8_t vlc_tab_tone_level_idx_hi2_huffbits[24] = {
99
    11, 0, 0, 0, 0, 0, 10, 8, 8, 7, 6, 6, 5, 5, 4, 2, 2, 2, 4, 7, 8, 9, 0, 11
100
};
101

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

    
107
static const uint8_t vlc_tab_type30_huffbits[9] = {
108
    6, 3, 3, 2, 2, 3, 4, 5, 6
109
};
110

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

    
116
static const uint8_t vlc_tab_type34_huffbits[10] = {
117
    5, 4, 3, 3, 3, 3, 3, 3, 3, 5
118
};
119

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

    
127
static const uint8_t vlc_tab_fft_tone_offset_0_huffbits[23] = {
128
    10, 1, 2, 6, 4, 5, 6, 7, 6, 6, 7, 7, 8, 7, 8, 8, 9, 7, 8, 6, 6, 8, 10
129
};
130

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

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

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

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

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

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

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

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

    
187
/** FFT TABLES **/
188

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

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

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

    
209
static const uint8_t fft_level_exp_huffbits[20] = {
210
    12, 3, 3, 3, 3, 3, 3, 4, 4, 5, 5, 6, 6, 6, 7, 8, 9, 10, 11, 12
211
};
212

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

    
218
static const uint8_t fft_stereo_exp_huffbits[7] = {
219
    6, 1, 2, 3, 4, 5, 6
220
};
221

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

    
227
static const uint8_t fft_stereo_phase_huffbits[9] = {
228
    6, 2, 2, 4, 4, 6, 5, 4, 2
229
};
230

    
231
static const int fft_cutoff_index_table[4][2] = {
232
    { 1, 2 }, {-1, 0 }, {-1,-2 }, { 0, 0 }
233
};
234

    
235
static const int16_t fft_level_index_table[256] = {
236
    0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1,
237
    2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
238
    3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
239
    3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
240
    4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
241
    4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
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
    5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
245
    5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
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
};
253

    
254
static uint8_t last_coeff[3] = {
255
    4, 7, 10
256
};
257

    
258
static uint8_t coeff_per_sb_for_avg[3][30] = {
259
    { 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 },
260
    { 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 },
261
    { 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 }
262
};
263

    
264
static uint32_t dequant_table[3][10][30] = {
265
    { { 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 },
266
      { 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 },
267
      { 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 },
268
      { 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 },
269
      { 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 },
270
      { 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 },
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
    { { 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 },
276
      { 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 },
277
      { 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 },
278
      { 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 },
279
      { 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 },
280
      { 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 },
281
      { 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 },
282
      { 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 },
283
      { 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 },
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
    { { 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 },
286
      { 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 },
287
      { 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 },
288
      { 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 },
289
      { 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 },
290
      { 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 },
291
      { 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 },
292
      { 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 },
293
      { 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 },
294
      { 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 } }
295
};
296

    
297
static uint8_t coeff_per_sb_for_dequant[3][30] = {
298
    { 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 },
299
    { 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 },
300
    { 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 }
301
};
302

    
303
/* first index is subband, 2nd index is 0, 1 or 3 (2 is unused) */
304
static int8_t tone_level_idx_offset_table[30][4] = {
305
    { -50, -50,  0, -50 },
306
    { -50, -50,  0, -50 },
307
    { -50,  -9,  0, -19 },
308
    { -16,  -6,  0, -12 },
309
    { -11,  -4,  0,  -8 },
310
    {  -8,  -3,  0,  -6 },
311
    {  -7,  -3,  0,  -5 },
312
    {  -6,  -2,  0,  -4 },
313
    {  -5,  -2,  0,  -3 },
314
    {  -4,  -1,  0,  -3 },
315
    {  -4,  -1,  0,  -2 },
316
    {  -3,  -1,  0,  -2 },
317
    {  -3,  -1,  0,  -2 },
318
    {  -3,  -1,  0,  -2 },
319
    {  -2,  -1,  0,  -1 },
320
    {  -2,  -1,  0,  -1 },
321
    {  -2,  -1,  0,  -1 },
322
    {  -2,   0,  0,  -1 },
323
    {  -2,   0,  0,  -1 },
324
    {  -1,   0,  0,  -1 },
325
    {  -1,   0,  0,  -1 },
326
    {  -1,   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,   0 },
332
    {  -1,   0,  0,   0 },
333
    {  -1,   0,  0,   0 },
334
    {  -1,   0,  0,   0 }
335
};
336

    
337
/* all my samples have 1st index 0 or 1 */
338
/* second index is subband, only indexes 0-29 seem to be used */
339
static int8_t coding_method_table[5][30] = {
340
    { 34, 30, 24, 24, 16, 16, 16, 16, 10, 10, 10, 10, 10, 10, 10,
341
      10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10
342
    },
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, 30, 30, 24, 24, 16, 16, 16, 16, 16, 16, 10, 10, 10,
347
      10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10
348
    },
349
    { 34, 34, 30, 30, 24, 24, 24, 24, 16, 16, 16, 16, 16, 16, 16,
350
      16, 16, 16, 16, 16, 16, 16, 10, 10, 10, 10, 10, 10, 10, 10
351
    },
352
    { 34, 34, 30, 30, 30, 30, 30, 30, 24, 24, 24, 24, 24, 24, 24,
353
      24, 24, 24, 24, 24, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16
354
    },
355
};
356

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

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

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

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

    
417
    { { .0000000000f, .0000000000f, .0000000000f, .0000000000f, .0000000000f },
418
      { .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
};
434

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

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

    
500
static const float sb_noise_attenuation[32] = {
501
    0.0f, 0.0f, 0.3f, 0.4f, 0.5f, 0.7f, 1.0f, 1.0f,
502
    1.0f, 1.0f, 1.0f, 1.0f, 1.0f, 1.0f, 1.0f, 1.0f,
503
    1.0f, 1.0f, 1.0f, 1.0f, 1.0f, 1.0f, 1.0f, 1.0f,
504
    1.0f, 1.0f, 1.0f, 1.0f, 1.0f, 1.0f, 1.0f, 1.0f,
505
};
506

    
507
static const uint8_t fft_subpackets[32] = {
508
    0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 0,
509
    0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0
510
};
511

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

    
518
static const float type30_dequant[8] = {
519
   -1.0f,-0.625f,-0.291666656732559f,0.0f,
520
   0.25f,0.5f,0.75f,1.0f,
521
};
522

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

    
528
#endif /* QDM2DATA_H */