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
8 * This file is part of FFmpeg.
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.
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.
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
27 * Various QDM2 tables.
30 #ifndef AVCODEC_QDM2DATA_H
31 #define AVCODEC_QDM2DATA_H
37 /* values in this table range from -1..23; adjust retrieved value by -1 */
38 static const uint8_t tab_level[24][2] = {
39 { 12, 4 }, { 17, 4 }, { 1, 6 }, { 8, 6 }, { 9, 5 }, { 20, 7 },
40 { 3, 7 }, { 5, 6 }, { 6, 6 }, { 2, 7 }, { 22, 9 }, { 23, 10 },
41 { 0, 10 }, { 21, 8 }, { 11, 4 }, { 19, 5 }, { 7, 6 }, { 4, 6 },
42 { 16, 3 }, { 10, 4 }, { 18, 4 }, { 15, 3 }, { 13, 3 }, { 14, 3 },
45 /* values in this table range from -1..36; adjust retrieved value by -1 */
46 static const uint8_t tab_diff[33][2] = {
47 { 2, 3 }, { 1, 3 }, { 5, 3 }, { 14, 8 }, { 20, 9 }, { 26, 10 },
48 { 25, 12 }, { 32, 12 }, { 19, 11 }, { 16, 8 }, { 24, 9 }, { 17, 9 },
49 { 12, 7 }, { 13, 7 }, { 9, 5 }, { 7, 4 }, { 3, 2 }, { 4, 3 },
50 { 8, 6 }, { 11, 6 }, { 18, 8 }, { 15, 8 }, { 30, 11 }, { 36, 13 },
51 { 34, 13 }, { 29, 13 }, { 0, 13 }, { 21, 10 }, { 28, 10 }, { 23, 10 },
52 { 22, 8 }, { 10, 6 }, { 6, 4 },
55 /* values in this table range from -1..5; adjust retrieved value by -1 */
56 static const uint8_t tab_run[6][2] = {
57 { 1, 1 }, { 2, 2 }, { 3, 3 }, { 4, 4 }, { 5, 5 }, { 0, 5 },
60 /* values in this table range from -1..19; adjust retrieved value by -1 */
61 static const uint8_t tab_tone_level_idx_hi1[20][2] = {
62 { 4, 3 }, { 5, 5 }, { 9, 10 }, { 11, 11 }, { 13, 12 }, { 14, 12 },
63 { 10, 10 }, { 12, 11 }, { 17, 14 }, { 16, 14 }, { 18, 15 }, { 0, 15 },
64 { 19, 14 }, { 15, 12 }, { 8, 8 }, { 7, 7 }, { 6, 6 }, { 1, 4 },
68 /* values in this table range from -1..23; adjust retrieved value by -1 */
69 static const uint8_t tab_tone_level_idx_mid[13][2] = {
70 { 18, 2 }, { 19, 4 }, { 20, 6 }, { 14, 7 }, { 21, 8 }, { 13, 9 },
71 { 22, 10 }, { 12, 11 }, { 23, 12 }, { 0, 12 }, { 15, 5 }, { 16, 3 },
75 /* values in this table range from -1..23; adjust retrieved value by -1 */
76 static const uint8_t tab_tone_level_idx_hi2[18][2] = {
77 { 14, 4 }, { 11, 6 }, { 19, 7 }, { 9, 7 }, { 13, 5 }, { 10, 6 },
78 { 20, 8 }, { 8, 8 }, { 6, 10 }, { 23, 11 }, { 0, 11 }, { 21, 9 },
79 { 7, 8 }, { 12, 5 }, { 18, 4 }, { 16, 2 }, { 15, 2 }, { 17, 2 },
82 /* values in this table range from -1..8; adjust retrieved value by -1 */
83 static const uint8_t tab_type30[9][2] = {
84 { 2, 3 }, { 6, 4 }, { 7, 5 }, { 8, 6 }, { 0, 6 }, { 5, 3 }, { 1, 3 },
88 /* values in this table range from -1..9; adjust retrieved value by -1 */
89 static const uint8_t tab_type34[10][2] = {
90 { 1, 4 }, { 9, 5 }, { 0, 5 }, { 3, 3 }, { 7, 3 }, { 8, 3 }, { 2, 3 },
91 { 4, 3 }, { 6, 3 }, { 5, 3 },
94 /* values in this table range from -1..22; adjust retrieved value by -1 */
95 static const uint8_t tab_fft_tone_offset_0[23][2] = {
96 { 2, 2 }, { 7, 7 }, { 15, 8 }, { 21, 8 }, { 3, 6 }, { 6, 6 },
97 { 13, 7 }, { 14, 8 }, { 18, 8 }, { 4, 4 }, { 5, 5 }, { 11, 7 },
98 { 10, 7 }, { 20, 6 }, { 12, 8 }, { 16, 9 }, { 22, 10 }, { 0, 10 },
99 { 17, 7 }, { 19, 6 }, { 8, 6 }, { 9, 6 }, { 1, 1 },
102 /* values in this table range from -1..27; adjust retrieved value by -1 */
103 static const uint8_t tab_fft_tone_offset_1[28][2] = {
104 { 8, 6 }, { 2, 6 }, { 7, 6 }, { 23, 7 }, { 12, 7 }, { 5, 4 },
105 { 10, 6 }, { 20, 8 }, { 25, 9 }, { 26, 10 }, { 27, 11 }, { 0, 11 },
106 { 22, 7 }, { 9, 5 }, { 13, 6 }, { 17, 6 }, { 4, 5 }, { 14, 6 },
107 { 19, 7 }, { 24, 7 }, { 3, 6 }, { 11, 6 }, { 21, 6 }, { 18, 6 },
108 { 16, 6 }, { 15, 6 }, { 6, 3 }, { 1, 1 },
111 /* values in this table range from -1..31; adjust retrieved value by -1 */
112 static const uint8_t tab_fft_tone_offset_2[31][2] = {
113 { 14, 7 }, { 17, 7 }, { 15, 7 }, { 23, 9 }, { 28, 10 }, { 29, 11 },
114 { 30, 13 }, { 0, 13 }, { 31, 12 }, { 25, 8 }, { 10, 5 }, { 8, 4 },
115 { 9, 4 }, { 4, 4 }, { 22, 8 }, { 3, 8 }, { 21, 8 }, { 26, 9 },
116 { 27, 9 }, { 12, 6 }, { 11, 5 }, { 16, 7 }, { 18, 7 }, { 20, 8 },
117 { 24, 8 }, { 19, 7 }, { 13, 5 }, { 5, 3 }, { 1, 2 }, { 6, 3 },
121 /* values in this table range from -1..34; adjust retrieved value by -1 */
122 static const uint8_t tab_fft_tone_offset_3[34][2] = {
123 { 4, 4 }, { 7, 4 }, { 10, 4 }, { 3, 10 }, { 27, 10 }, { 29, 10 },
124 { 28, 10 }, { 22, 8 }, { 21, 7 }, { 15, 6 }, { 14, 5 }, { 8, 4 },
125 { 16, 6 }, { 19, 7 }, { 23, 8 }, { 26, 9 }, { 30, 10 }, { 33, 13 },
126 { 34, 14 }, { 0, 14 }, { 32, 12 }, { 31, 11 }, { 12, 5 }, { 5, 3 },
127 { 9, 3 }, { 1, 4 }, { 20, 7 }, { 25, 8 }, { 24, 8 }, { 18, 6 },
128 { 17, 5 }, { 6, 3 }, { 11, 4 }, { 13, 4 },
131 /* values in this table range from -1..37; adjust retrieved value by -1 */
132 static const uint8_t tab_fft_tone_offset_4[37][2] = {
133 { 5, 3 }, { 4, 3 }, { 19, 8 }, { 33, 12 }, { 31, 12 }, { 28, 11 },
134 { 34, 14 }, { 37, 14 }, { 35, 15 }, { 0, 15 }, { 36, 14 }, { 32, 12 },
135 { 30, 11 }, { 24, 9 }, { 22, 8 }, { 23, 9 }, { 29, 10 }, { 27, 10 },
136 { 17, 6 }, { 14, 5 }, { 7, 4 }, { 12, 5 }, { 1, 6 }, { 26, 9 },
137 { 3, 9 }, { 25, 8 }, { 20, 7 }, { 8, 4 }, { 10, 4 }, { 13, 4 },
138 { 15, 6 }, { 16, 6 }, { 18, 6 }, { 21, 6 }, { 11, 4 }, { 9, 3 },
144 /* values in this table range from -1..27; adjust retrieved value by -1 */
145 static const uint8_t fft_level_exp_alt[28][2] = {
146 { 18, 3 }, { 16, 3 }, { 22, 7 }, { 8, 10 }, { 4, 10 }, { 3, 9 },
147 { 2, 8 }, { 23, 8 }, { 10, 8 }, { 11, 7 }, { 21, 5 }, { 20, 4 },
148 { 1, 7 }, { 7, 10 }, { 5, 10 }, { 9, 9 }, { 6, 10 }, { 25, 11 },
149 { 26, 12 }, { 27, 13 }, { 0, 13 }, { 24, 9 }, { 12, 6 }, { 13, 5 },
150 { 14, 4 }, { 19, 3 }, { 15, 3 }, { 17, 2 },
153 /* values in this table range from -1..19; adjust retrieved value by -1 */
154 static const uint8_t fft_level_exp[20][2] = {
155 { 3, 3 }, { 11, 6 }, { 16, 9 }, { 17, 10 }, { 18, 11 }, { 19, 12 },
156 { 0, 12 }, { 15, 8 }, { 14, 7 }, { 9, 5 }, { 7, 4 }, { 2, 3 },
157 { 4, 3 }, { 1, 3 }, { 5, 3 }, { 12, 6 }, { 13, 6 }, { 10, 5 },
161 /* values in this table range from -1..6; adjust retrieved value by -1 */
162 static const uint8_t fft_stereo_exp[7][2] = {
163 { 2, 2 }, { 3, 3 }, { 4, 4 }, { 5, 5 }, { 6, 6 }, { 0, 6 }, { 1, 1 },
166 /* values in this table range from -1..8; adjust retrieved value by -1 */
167 static const uint8_t fft_stereo_phase[9][2] = {
168 { 2, 2 }, { 1, 2 }, { 3, 4 }, { 7, 4 }, { 6, 5 }, { 5, 6 }, { 0, 6 },
172 static const int fft_cutoff_index_table[4][2] = {
173 { 1, 2 }, {-1, 0 }, {-1,-2 }, { 0, 0 }
176 static const int16_t fft_level_index_table[256] = {
177 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1,
178 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
179 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
180 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
181 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
182 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
183 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
184 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
185 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
186 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
187 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
188 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
189 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
190 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
191 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
192 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
195 static const uint8_t last_coeff[3] = {
199 static const uint8_t coeff_per_sb_for_avg[3][30] = {
200 { 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 },
201 { 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 },
202 { 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 }
205 static const uint32_t dequant_table[3][10][30] = {
206 { { 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 },
207 { 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 },
208 { 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 },
209 { 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 },
210 { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
211 { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
212 { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
213 { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
214 { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
215 { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
216 { { 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 },
217 { 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 },
218 { 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 },
219 { 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 },
220 { 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 },
221 { 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 },
222 { 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 },
223 { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
224 { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
225 { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
226 { { 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 },
227 { 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 },
228 { 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 },
229 { 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 },
230 { 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 },
231 { 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 },
232 { 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 },
233 { 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 },
234 { 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 },
235 { 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 } }
238 static const uint8_t coeff_per_sb_for_dequant[3][30] = {
239 { 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 },
240 { 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 },
241 { 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 }
244 /* first index is subband, 2nd index is 0, 1 or 3 (2 is unused) */
245 static const int8_t tone_level_idx_offset_table[30][4] = {
246 { -50, -50, 0, -50 },
247 { -50, -50, 0, -50 },
278 /* all my samples have 1st index 0 or 1 */
279 /* second index is subband, only indexes 0-29 seem to be used */
280 static const int8_t coding_method_table[5][30] = {
281 { 34, 30, 24, 24, 16, 16, 16, 16, 10, 10, 10, 10, 10, 10, 10,
282 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10
284 { 34, 30, 24, 24, 16, 16, 16, 16, 10, 10, 10, 10, 10, 10, 10,
285 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10
287 { 34, 30, 30, 30, 24, 24, 16, 16, 16, 16, 16, 16, 10, 10, 10,
288 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10
290 { 34, 34, 30, 30, 24, 24, 24, 24, 16, 16, 16, 16, 16, 16, 16,
291 16, 16, 16, 16, 16, 16, 16, 10, 10, 10, 10, 10, 10, 10, 10
293 { 34, 34, 30, 30, 30, 30, 30, 30, 24, 24, 24, 24, 24, 24, 24,
294 24, 24, 24, 24, 24, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16
298 static const int vlc_stage3_values[60] = {
299 0, 1, 2, 3, 4, 6, 8, 10, 12, 16, 20, 24,
300 28, 36, 44, 52, 60, 76, 92, 108, 124, 156, 188, 220,
301 252, 316, 380, 444, 508, 636, 764, 892, 1020, 1276, 1532, 1788,
302 2044, 2556, 3068, 3580, 4092, 5116, 6140, 7164, 8188, 10236, 12284, 14332,
303 16380, 20476, 24572, 28668, 32764, 40956, 49148, 57340, 65532, 81916, 98300,114684
306 static const float fft_tone_sample_table[4][16][5] = {
307 { { .0100000000f,-.0037037037f,-.0020000000f,-.0069444444f,-.0018416207f },
308 { .0416666667f, .0000000000f, .0000000000f,-.0208333333f,-.0123456791f },
309 { .1250000000f, .0558035709f, .0330687836f,-.0164473690f,-.0097465888f },
310 { .1562500000f, .0625000000f, .0370370370f,-.0062500000f,-.0037037037f },
311 { .1996007860f, .0781250000f, .0462962948f, .0022727272f, .0013468013f },
312 { .2000000000f, .0625000000f, .0370370373f, .0208333333f, .0074074073f },
313 { .2127659619f, .0555555556f, .0329218097f, .0208333333f, .0123456791f },
314 { .2173913121f, .0473484844f, .0280583613f, .0347222239f, .0205761325f },
315 { .2173913121f, .0347222239f, .0205761325f, .0473484844f, .0280583613f },
316 { .2127659619f, .0208333333f, .0123456791f, .0555555556f, .0329218097f },
317 { .2000000000f, .0208333333f, .0074074073f, .0625000000f, .0370370370f },
318 { .1996007860f, .0022727272f, .0013468013f, .0781250000f, .0462962948f },
319 { .1562500000f,-.0062500000f,-.0037037037f, .0625000000f, .0370370370f },
320 { .1250000000f,-.0164473690f,-.0097465888f, .0558035709f, .0330687836f },
321 { .0416666667f,-.0208333333f,-.0123456791f, .0000000000f, .0000000000f },
322 { .0100000000f,-.0069444444f,-.0018416207f,-.0037037037f,-.0020000000f } },
324 { { .0050000000f,-.0200000000f, .0125000000f,-.3030303030f, .0020000000f },
325 { .1041666642f, .0400000000f,-.0250000000f, .0333333333f,-.0200000000f },
326 { .1250000000f, .0100000000f, .0142857144f,-.0500000007f,-.0200000000f },
327 { .1562500000f,-.0006250000f,-.00049382716f,-.000625000f,-.00049382716f },
328 { .1562500000f,-.0006250000f,-.00049382716f,-.000625000f,-.00049382716f },
329 { .1250000000f,-.0500000000f,-.0200000000f, .0100000000f, .0142857144f },
330 { .1041666667f, .0333333333f,-.0200000000f, .0400000000f,-.0250000000f },
331 { .0050000000f,-.3030303030f, .0020000001f,-.0200000000f, .0125000000f },
332 { .0000000000f, .0000000000f, .0000000000f, .0000000000f, .0000000000f },
333 { .0000000000f, .0000000000f, .0000000000f, .0000000000f, .0000000000f },
334 { .0000000000f, .0000000000f, .0000000000f, .0000000000f, .0000000000f },
335 { .0000000000f, .0000000000f, .0000000000f, .0000000000f, .0000000000f },
336 { .0000000000f, .0000000000f, .0000000000f, .0000000000f, .0000000000f },
337 { .0000000000f, .0000000000f, .0000000000f, .0000000000f, .0000000000f },
338 { .0000000000f, .0000000000f, .0000000000f, .0000000000f, .0000000000f },
339 { .0000000000f, .0000000000f, .0000000000f, .0000000000f, .0000000000f } },
341 { { .1428571492f, .1250000000f,-.0285714287f,-.0357142873f, .0208333333f },
342 { .1818181818f, .0588235296f, .0333333333f, .0212765951f, .0100000000f },
343 { .1818181818f, .0212765951f, .0100000000f, .0588235296f, .0333333333f },
344 { .1428571492f,-.0357142873f, .0208333333f, .1250000000f,-.0285714287f },
345 { .0000000000f, .0000000000f, .0000000000f, .0000000000f, .0000000000f },
346 { .0000000000f, .0000000000f, .0000000000f, .0000000000f, .0000000000f },
347 { .0000000000f, .0000000000f, .0000000000f, .0000000000f, .0000000000f },
348 { .0000000000f, .0000000000f, .0000000000f, .0000000000f, .0000000000f },
349 { .0000000000f, .0000000000f, .0000000000f, .0000000000f, .0000000000f },
350 { .0000000000f, .0000000000f, .0000000000f, .0000000000f, .0000000000f },
351 { .0000000000f, .0000000000f, .0000000000f, .0000000000f, .0000000000f },
352 { .0000000000f, .0000000000f, .0000000000f, .0000000000f, .0000000000f },
353 { .0000000000f, .0000000000f, .0000000000f, .0000000000f, .0000000000f },
354 { .0000000000f, .0000000000f, .0000000000f, .0000000000f, .0000000000f },
355 { .0000000000f, .0000000000f, .0000000000f, .0000000000f, .0000000000f },
356 { .0000000000f, .0000000000f, .0000000000f, .0000000000f, .0000000000f } },
358 { { .0000000000f, .0000000000f, .0000000000f, .0000000000f, .0000000000f },
359 { .0000000000f, .0000000000f, .0000000000f, .0000000000f, .0000000000f },
360 { .0000000000f, .0000000000f, .0000000000f, .0000000000f, .0000000000f },
361 { .0000000000f, .0000000000f, .0000000000f, .0000000000f, .0000000000f },
362 { .0000000000f, .0000000000f, .0000000000f, .0000000000f, .0000000000f },
363 { .0000000000f, .0000000000f, .0000000000f, .0000000000f, .0000000000f },
364 { .0000000000f, .0000000000f, .0000000000f, .0000000000f, .0000000000f },
365 { .0000000000f, .0000000000f, .0000000000f, .0000000000f, .0000000000f },
366 { .0000000000f, .0000000000f, .0000000000f, .0000000000f, .0000000000f },
367 { .0000000000f, .0000000000f, .0000000000f, .0000000000f, .0000000000f },
368 { .0000000000f, .0000000000f, .0000000000f, .0000000000f, .0000000000f },
369 { .0000000000f, .0000000000f, .0000000000f, .0000000000f, .0000000000f },
370 { .0000000000f, .0000000000f, .0000000000f, .0000000000f, .0000000000f },
371 { .0000000000f, .0000000000f, .0000000000f, .0000000000f, .0000000000f },
372 { .0000000000f, .0000000000f, .0000000000f, .0000000000f, .0000000000f },
373 { .0000000000f, .0000000000f, .0000000000f, .0000000000f, .0000000000f } }
376 static const float fft_tone_level_table[2][64] = { {
377 /* pow ~ (i > 46) ? 0 : (((((i & 1) ? 431 : 304) << (i >> 1))) / 1024.0); */
378 0.17677669f, 0.42677650f, 0.60355347f, 0.85355347f,
379 1.20710683f, 1.68359375f, 2.37500000f, 3.36718750f,
380 4.75000000f, 6.73437500f, 9.50000000f, 13.4687500f,
381 19.0000000f, 26.9375000f, 38.0000000f, 53.8750000f,
382 76.0000000f, 107.750000f, 152.000000f, 215.500000f,
383 304.000000f, 431.000000f, 608.000000f, 862.000000f,
384 1216.00000f, 1724.00000f, 2432.00000f, 3448.00000f,
385 4864.00000f, 6896.00000f, 9728.00000f, 13792.0000f,
386 19456.0000f, 27584.0000f, 38912.0000f, 55168.0000f,
387 77824.0000f, 110336.000f, 155648.000f, 220672.000f,
388 311296.000f, 441344.000f, 622592.000f, 882688.000f,
389 1245184.00f, 1765376.00f, 2490368.00f, 0.00000000f,
390 0.00000000f, 0.00000000f, 0.00000000f, 0.00000000f,
391 0.00000000f, 0.00000000f, 0.00000000f, 0.00000000f,
392 0.00000000f, 0.00000000f, 0.00000000f, 0.00000000f,
393 0.00000000f, 0.00000000f, 0.00000000f, 0.00000000f,
395 /* pow = (i > 45) ? 0 : ((((i & 1) ? 431 : 304) << (i >> 1)) / 512.0); */
396 0.59375000f, 0.84179688f, 1.18750000f, 1.68359375f,
397 2.37500000f, 3.36718750f, 4.75000000f, 6.73437500f,
398 9.50000000f, 13.4687500f, 19.0000000f, 26.9375000f,
399 38.0000000f, 53.8750000f, 76.0000000f, 107.750000f,
400 152.000000f, 215.500000f, 304.000000f, 431.000000f,
401 608.000000f, 862.000000f, 1216.00000f, 1724.00000f,
402 2432.00000f, 3448.00000f, 4864.00000f, 6896.00000f,
403 9728.00000f, 13792.0000f, 19456.0000f, 27584.0000f,
404 38912.0000f, 55168.0000f, 77824.0000f, 110336.000f,
405 155648.000f, 220672.000f, 311296.000f, 441344.000f,
406 622592.000f, 882688.000f, 1245184.00f, 1765376.00f,
407 2490368.00f, 3530752.00f, 0.00000000f, 0.00000000f,
408 0.00000000f, 0.00000000f, 0.00000000f, 0.00000000f,
409 0.00000000f, 0.00000000f, 0.00000000f, 0.00000000f,
410 0.00000000f, 0.00000000f, 0.00000000f, 0.00000000f,
411 0.00000000f, 0.00000000f, 0.00000000f, 0.00000000f
414 static const float fft_tone_envelope_table[4][31] = {
415 { .009607375f, .038060248f, .084265202f, .146446645f, .222214907f, .308658302f,
416 .402454883f, .500000060f, .597545207f, .691341758f, .777785182f, .853553414f,
417 .915734828f, .961939812f, .990392685f, 1.00000000f, .990392625f, .961939752f,
418 .915734768f, .853553295f, .777785063f, .691341639f, .597545087f, .500000000f,
419 .402454853f, .308658272f, .222214878f, .146446615f, .084265172f, .038060218f,
421 { .038060248f, .146446645f, .308658302f, .500000060f, .691341758f, .853553414f,
422 .961939812f, 1.00000000f, .961939752f, .853553295f, .691341639f, .500000000f,
423 .308658272f, .146446615f, .038060218f, .000000000f, .000000000f, .000000000f,
424 .000000000f, .000000000f, .000000000f, .000000000f, .000000000f, .000000000f,
425 .000000000f, .000000000f, .000000000f, .000000000f, .000000000f, .000000000f,
427 { .146446645f, .500000060f, .853553414f, 1.00000000f, .853553295f, .500000000f,
428 .146446615f, .000000000f, .000000000f, .000000000f, .000000000f, .000000000f,
429 .000000000f, .000000000f, .000000000f, .000000000f, .000000000f, .000000000f,
430 .000000000f, .000000000f, .000000000f, .000000000f, .000000000f, .000000000f,
431 .000000000f, .000000000f, .000000000f, .000000000f, .000000000f, .000000000f,
433 { .500000060f, 1.00000000f, .500000000f, .000000000f, .000000000f, .000000000f,
434 .000000000f, .000000000f, .000000000f, .000000000f, .000000000f, .000000000f,
435 .000000000f, .000000000f, .000000000f, .000000000f, .000000000f, .000000000f,
436 .000000000f, .000000000f, .000000000f, .000000000f, .000000000f, .000000000f,
437 .000000000f, .000000000f, .000000000f, .000000000f, .000000000f, .000000000f,
441 static const float sb_noise_attenuation[32] = {
442 0.0f, 0.0f, 0.3f, 0.4f, 0.5f, 0.7f, 1.0f, 1.0f,
443 1.0f, 1.0f, 1.0f, 1.0f, 1.0f, 1.0f, 1.0f, 1.0f,
444 1.0f, 1.0f, 1.0f, 1.0f, 1.0f, 1.0f, 1.0f, 1.0f,
445 1.0f, 1.0f, 1.0f, 1.0f, 1.0f, 1.0f, 1.0f, 1.0f,
448 static const uint8_t fft_subpackets[32] = {
449 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 0,
450 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0
453 /* first index is joined_stereo, second index is 0 or 2 (1 is unused) */
454 static const float dequant_1bit[2][3] = {
455 {-0.920000f, 0.000000f, 0.920000f },
456 {-0.890000f, 0.000000f, 0.890000f }
459 static const float type30_dequant[8] = {
460 -1.0f,-0.625f,-0.291666656732559f,0.0f,
461 0.25f,0.5f,0.75f,1.0f,
464 static const float type34_delta[10] = { // FIXME: covers 8 entries..
465 -1.0f,-0.60947573184967f,-0.333333343267441f,-0.138071194291115f,0.0f,
466 0.138071194291115f,0.333333343267441f,0.60947573184967f,1.0f,0.0f,
469 #endif /* AVCODEC_QDM2DATA_H */