]> git.sesse.net Git - ffmpeg/blob - libavcodec/qdm2data.h
rename always_inline to av_always_inline and move to common.h
[ffmpeg] / libavcodec / qdm2data.h
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 FFmpeg.
9  *
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.
14  *
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.
19  *
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
23  *
24  */
25
26  /**
27  * @file qdm2data.h
28  * Various QDM2 tables.
29  */
30
31 #ifndef QDM2DATA_H
32 #define QDM2DATA_H
33
34 /** VLC TABLES **/
35
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
41 };
42
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
45 };
46
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
54 };
55
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,
59     12, 0, 13, 0, 13
60 };
61
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
65 };
66
67 static const uint8_t vlc_tab_run_huffbits[6] = {
68     5, 1, 2, 3, 4, 5
69 };
70
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
76 };
77
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
80 };
81
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
87 };
88
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
91 };
92
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
98 };
99
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
102 };
103
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
107 };
108
109 static const uint8_t vlc_tab_type30_huffbits[9] = {
110     6, 3, 3, 2, 2, 3, 4, 5, 6
111 };
112
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
116 };
117
118 static const uint8_t vlc_tab_type34_huffbits[10] = {
119     5, 4, 3, 3, 3, 3, 3, 3, 3, 5
120 };
121
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
127 };
128
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
131 };
132
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
139 };
140
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
144 };
145
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
152 };
153
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
157 };
158
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
166 };
167
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,
171     12, 13, 14
172 };
173
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
181 };
182
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
187 };
188
189 /** FFT TABLES **/
190
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
197 };
198
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
202 };
203
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
209 };
210
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
213 };
214
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
218 };
219
220 static const uint8_t fft_stereo_exp_huffbits[7] = {
221     6, 1, 2, 3, 4, 5, 6
222 };
223
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
227 };
228
229 static const uint8_t fft_stereo_phase_huffbits[9] = {
230     6, 2, 2, 4, 4, 6, 5, 4, 2
231 };
232
233 static const int fft_cutoff_index_table[4][2] = {
234     { 1, 2 }, {-1, 0 }, {-1,-2 }, { 0, 0 }
235 };
236
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,
254 };
255
256 static uint8_t last_coeff[3] = {
257     4, 7, 10
258 };
259
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 }
264 };
265
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 } }
297 };
298
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 }
303 };
304
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 },
309     { -50,  -9,  0, -19 },
310     { -16,  -6,  0, -12 },
311     { -11,  -4,  0,  -8 },
312     {  -8,  -3,  0,  -6 },
313     {  -7,  -3,  0,  -5 },
314     {  -6,  -2,  0,  -4 },
315     {  -5,  -2,  0,  -3 },
316     {  -4,  -1,  0,  -3 },
317     {  -4,  -1,  0,  -2 },
318     {  -3,  -1,  0,  -2 },
319     {  -3,  -1,  0,  -2 },
320     {  -3,  -1,  0,  -2 },
321     {  -2,  -1,  0,  -1 },
322     {  -2,  -1,  0,  -1 },
323     {  -2,  -1,  0,  -1 },
324     {  -2,   0,  0,  -1 },
325     {  -2,   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,  -1 },
332     {  -1,   0,  0,  -1 },
333     {  -1,   0,  0,   0 },
334     {  -1,   0,  0,   0 },
335     {  -1,   0,  0,   0 },
336     {  -1,   0,  0,   0 }
337 };
338
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
344     },
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
347     },
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
350     },
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
353     },
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
356     },
357 };
358
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
365 };
366
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 } },
384
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 } },
401
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 } },
418
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 } }
435 };
436
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,
455   }, {
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
473 } };
474
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,
481       .009607345f },
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,
487       .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,
493       .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,
499       .000000000f }
500 };
501
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,
507 };
508
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
512 };
513
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 }
518 };
519
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,
523 };
524
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,
528 };
529
530 #endif /* QDM2DATA_H */