~ubuntu-branches/ubuntu/jaunty/xvidcap/jaunty-proposed

« back to all changes in this revision

Viewing changes to ffmpeg/libavcodec/qdm2data.h

  • Committer: Bazaar Package Importer
  • Author(s): John Dong
  • Date: 2008-02-25 15:47:12 UTC
  • mfrom: (1.1.1 upstream)
  • Revision ID: james.westby@ubuntu.com-20080225154712-qvr11ekcea4c9ry8
Tags: 1.1.6-0.1ubuntu1
* Merge from debian-multimedia (LP: #120003), Ubuntu Changes:
 - For ffmpeg-related build-deps, remove cvs from package names.
 - Standards-Version 3.7.3
 - Maintainer Spec

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
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 */