blob: 8e2d87581f0a7a3517d94648c1dbba73121179aa [file] [log] [blame]
Roberto Togni31352582005-10-18 20:31:121/*
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 *
Diego Biurrunb78e7192006-10-07 15:30:468 * This file is part of FFmpeg.
9 *
10 * FFmpeg is free software; you can redistribute it and/or
Roberto Togni31352582005-10-18 20:31:1211 * modify it under the terms of the GNU Lesser General Public
12 * License as published by the Free Software Foundation; either
Diego Biurrunb78e7192006-10-07 15:30:4613 * version 2.1 of the License, or (at your option) any later version.
Roberto Togni31352582005-10-18 20:31:1214 *
Diego Biurrunb78e7192006-10-07 15:30:4615 * FFmpeg is distributed in the hope that it will be useful,
Roberto Togni31352582005-10-18 20:31:1216 * 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
Diego Biurrunb78e7192006-10-07 15:30:4621 * License along with FFmpeg; if not, write to the Free Software
Diego Biurrun5509bff2006-01-12 22:43:2622 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
Roberto Togni31352582005-10-18 20:31:1223 */
Diego Biurrun115329f2005-12-17 18:14:3824
Roberto Togni31352582005-10-18 20:31:1225 /**
26 * @file qdm2data.h
27 * Various QDM2 tables.
28 */
29
Diego Biurrun5b21bda2007-10-17 09:37:4630#ifndef FFMPEG_QDM2DATA_H
31#define FFMPEG_QDM2DATA_H
Roberto Togni31352582005-10-18 20:31:1232
Måns Rullgård99545452007-06-16 22:59:1333#include <stdint.h>
34
Roberto Togni31352582005-10-18 20:31:1235/** VLC TABLES **/
36
37/* values in this table range from -1..23; adjust retrieved value by -1 */
Stefan Huehner109d2de2006-07-04 19:15:4738static const uint16_t vlc_tab_level_huffcodes[24] = {
Roberto Togni31352582005-10-18 20:31:1239 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
Stefan Huehner109d2de2006-07-04 19:15:4744static const uint8_t vlc_tab_level_huffbits[24] = {
Roberto Togni31352582005-10-18 20:31:1245 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 */
Stefan Huehner109d2de2006-07-04 19:15:4749static const uint16_t vlc_tab_diff_huffcodes[37] = {
Roberto Togni31352582005-10-18 20:31:1250 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
Stefan Huehner109d2de2006-07-04 19:15:4757static const uint8_t vlc_tab_diff_huffbits[37] = {
Roberto Togni31352582005-10-18 20:31:1258 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 */
Stefan Huehner109d2de2006-07-04 19:15:4764static const uint8_t vlc_tab_run_huffcodes[6] = {
Roberto Togni31352582005-10-18 20:31:1265 0x1f, 0x00, 0x01, 0x03, 0x07, 0x0f
66};
67
Stefan Huehner109d2de2006-07-04 19:15:4768static const uint8_t vlc_tab_run_huffbits[6] = {
Roberto Togni31352582005-10-18 20:31:1269 5, 1, 2, 3, 4, 5
70};
71
72/* values in this table range from -1..19; adjust retrieved value by -1 */
Stefan Huehner109d2de2006-07-04 19:15:4773static const uint16_t vlc_tab_tone_level_idx_hi1_huffcodes[20] = {
Roberto Togni31352582005-10-18 20:31:1274 0x5714, 0x000c, 0x0002, 0x0001, 0x0000, 0x0004, 0x0034, 0x0054,
75 0x0094, 0x0014, 0x0114, 0x0214, 0x0314, 0x0614, 0x0e14, 0x0f14,
76 0x2714, 0x0714, 0x1714, 0x3714
77};
78
Stefan Huehner109d2de2006-07-04 19:15:4779static const uint8_t vlc_tab_tone_level_idx_hi1_huffbits[20] = {
Roberto Togni31352582005-10-18 20:31:1280 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 */
Stefan Huehner109d2de2006-07-04 19:15:4784static const uint16_t vlc_tab_tone_level_idx_mid_huffcodes[24] = {
Roberto Togni31352582005-10-18 20:31:1285 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
Stefan Huehner109d2de2006-07-04 19:15:4790static const uint8_t vlc_tab_tone_level_idx_mid_huffbits[24] = {
Roberto Togni31352582005-10-18 20:31:1291 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 */
Stefan Huehner109d2de2006-07-04 19:15:4795static const uint16_t vlc_tab_tone_level_idx_hi2_huffcodes[24] = {
Roberto Togni31352582005-10-18 20:31:1296 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
Stefan Huehner109d2de2006-07-04 19:15:47101static const uint8_t vlc_tab_tone_level_idx_hi2_huffbits[24] = {
Roberto Togni31352582005-10-18 20:31:12102 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 */
Stefan Huehner109d2de2006-07-04 19:15:47106static const uint8_t vlc_tab_type30_huffcodes[9] = {
Roberto Togni31352582005-10-18 20:31:12107 0x3c, 0x06, 0x00, 0x01, 0x03, 0x02, 0x04, 0x0c, 0x1c
108};
109
Stefan Huehner109d2de2006-07-04 19:15:47110static const uint8_t vlc_tab_type30_huffbits[9] = {
Roberto Togni31352582005-10-18 20:31:12111 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 */
Stefan Huehner109d2de2006-07-04 19:15:47115static const uint8_t vlc_tab_type34_huffcodes[10] = {
Roberto Togni31352582005-10-18 20:31:12116 0x18, 0x00, 0x01, 0x04, 0x05, 0x07, 0x03, 0x02, 0x06, 0x08
117};
118
Stefan Huehner109d2de2006-07-04 19:15:47119static const uint8_t vlc_tab_type34_huffbits[10] = {
Roberto Togni31352582005-10-18 20:31:12120 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 */
Stefan Huehner109d2de2006-07-04 19:15:47124static const uint16_t vlc_tab_fft_tone_offset_0_huffcodes[23] = {
Roberto Togni31352582005-10-18 20:31:12125 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
Stefan Huehner109d2de2006-07-04 19:15:47130static const uint8_t vlc_tab_fft_tone_offset_0_huffbits[23] = {
Roberto Togni31352582005-10-18 20:31:12131 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 */
Stefan Huehner109d2de2006-07-04 19:15:47135static const uint16_t vlc_tab_fft_tone_offset_1_huffcodes[28] = {
Roberto Togni31352582005-10-18 20:31:12136 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
Stefan Huehner109d2de2006-07-04 19:15:47142static const uint8_t vlc_tab_fft_tone_offset_1_huffbits[28] = {
Roberto Togni31352582005-10-18 20:31:12143 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 */
Stefan Huehner109d2de2006-07-04 19:15:47148static const uint16_t vlc_tab_fft_tone_offset_2_huffcodes[32] = {
Roberto Togni31352582005-10-18 20:31:12149 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
Stefan Huehner109d2de2006-07-04 19:15:47155static const uint8_t vlc_tab_fft_tone_offset_2_huffbits[32] = {
Roberto Togni31352582005-10-18 20:31:12156 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 */
Stefan Huehner109d2de2006-07-04 19:15:47161static const uint16_t vlc_tab_fft_tone_offset_3_huffcodes[35] = {
Roberto Togni31352582005-10-18 20:31:12162 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
Stefan Huehner109d2de2006-07-04 19:15:47169static const uint8_t vlc_tab_fft_tone_offset_3_huffbits[35] = {
Roberto Togni31352582005-10-18 20:31:12170 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 */
Stefan Huehner109d2de2006-07-04 19:15:47176static const uint16_t vlc_tab_fft_tone_offset_4_huffcodes[38] = {
Roberto Togni31352582005-10-18 20:31:12177 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
Stefan Huehner109d2de2006-07-04 19:15:47184static const uint8_t vlc_tab_fft_tone_offset_4_huffbits[38] = {
Roberto Togni31352582005-10-18 20:31:12185 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 */
Stefan Huehner109d2de2006-07-04 19:15:47193static const uint16_t fft_level_exp_alt_huffcodes[28] = {
Roberto Togni31352582005-10-18 20:31:12194 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
Stefan Huehner109d2de2006-07-04 19:15:47200static const uint8_t fft_level_exp_alt_huffbits[28] = {
Roberto Togni31352582005-10-18 20:31:12201 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 */
Stefan Huehner109d2de2006-07-04 19:15:47206static const uint16_t fft_level_exp_huffcodes[20] = {
Roberto Togni31352582005-10-18 20:31:12207 0x0f24, 0x0001, 0x0002, 0x0000, 0x0006, 0x0005, 0x0007, 0x000c,
208 0x000b, 0x0014, 0x0013, 0x0004, 0x0003, 0x0023, 0x0064, 0x00a4,
209 0x0024, 0x0124, 0x0324, 0x0724
210};
211
Stefan Huehner109d2de2006-07-04 19:15:47212static const uint8_t fft_level_exp_huffbits[20] = {
Roberto Togni31352582005-10-18 20:31:12213 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 */
Stefan Huehner109d2de2006-07-04 19:15:47217static const uint8_t fft_stereo_exp_huffcodes[7] = {
Roberto Togni31352582005-10-18 20:31:12218 0x3e, 0x01, 0x00, 0x02, 0x06, 0x0e, 0x1e
219};
220
Stefan Huehner109d2de2006-07-04 19:15:47221static const uint8_t fft_stereo_exp_huffbits[7] = {
Roberto Togni31352582005-10-18 20:31:12222 6, 1, 2, 3, 4, 5, 6
223};
224
225/* values in this table range from -1..8; adjust retrieved value by -1 */
Stefan Huehner109d2de2006-07-04 19:15:47226static const uint8_t fft_stereo_phase_huffcodes[9] = {
Roberto Togni31352582005-10-18 20:31:12227 0x35, 0x02, 0x00, 0x01, 0x0d, 0x15, 0x05, 0x09, 0x03
228};
229
Stefan Huehner109d2de2006-07-04 19:15:47230static const uint8_t fft_stereo_phase_huffbits[9] = {
Roberto Togni31352582005-10-18 20:31:12231 6, 2, 2, 4, 4, 6, 5, 4, 2
232};
233
234static const int fft_cutoff_index_table[4][2] = {
235 { 1, 2 }, {-1, 0 }, {-1,-2 }, { 0, 0 }
236};
237
238static 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
Stefan Gehrercf2baeb2008-06-24 20:01:31257static const uint8_t last_coeff[3] = {
Roberto Togni31352582005-10-18 20:31:12258 4, 7, 10
259};
260
Stefan Gehrercf2baeb2008-06-24 20:01:31261static const uint8_t coeff_per_sb_for_avg[3][30] = {
Roberto Togni31352582005-10-18 20:31:12262 { 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
Stefan Gehrercf2baeb2008-06-24 20:01:31267static const uint32_t dequant_table[3][10][30] = {
Roberto Togni31352582005-10-18 20:31:12268 { { 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
Stefan Gehrercf2baeb2008-06-24 20:01:31300static const uint8_t coeff_per_sb_for_dequant[3][30] = {
Roberto Togni31352582005-10-18 20:31:12301 { 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) */
Stefan Gehrercf2baeb2008-06-24 20:01:31307static const int8_t tone_level_idx_offset_table[30][4] = {
Roberto Togni31352582005-10-18 20:31:12308 { -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 */
Stefan Gehrercf2baeb2008-06-24 20:01:31342static const int8_t coding_method_table[5][30] = {
Roberto Togni31352582005-10-18 20:31:12343 { 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
360static 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
368static 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 } },
Diego Biurrun115329f2005-12-17 18:14:38385
Roberto Togni31352582005-10-18 20:31:12386 { { .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 } },
Diego Biurrun115329f2005-12-17 18:14:38402
Roberto Togni31352582005-10-18 20:31:12403 { { .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 } },
Diego Biurrun115329f2005-12-17 18:14:38419
Roberto Togni31352582005-10-18 20:31:12420 { { .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
438static 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
476static 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
503static 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
510static 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) */
Stefan Gehrercf2baeb2008-06-24 20:01:31516static const float dequant_1bit[2][3] = {
Roberto Togni31352582005-10-18 20:31:12517 {-0.920000f, 0.000000f, 0.920000f },
518 {-0.890000f, 0.000000f, 0.890000f }
519};
520
521static 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
526static 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
Diego Biurrun5b21bda2007-10-17 09:37:46531#endif /* FFMPEG_QDM2DATA_H */