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 static const uint8_t tab_fft_tone_offset_sizes[] = {
98 static const uint8_t tab_fft_tone_offset[][2] = {
99 /* First table - 23 entries with range -1..21 */
100 { 2, 2 }, { 7, 7 }, { 15, 8 }, { 21, 8 }, { 3, 6 }, { 6, 6 },
101 { 13, 7 }, { 14, 8 }, { 18, 8 }, { 4, 4 }, { 5, 5 }, { 11, 7 },
102 { 10, 7 }, { 20, 6 }, { 12, 8 }, { 16, 9 }, { 22, 10 }, { 0, 10 },
103 { 17, 7 }, { 19, 6 }, { 8, 6 }, { 9, 6 }, { 1, 1 },
104 /* Second table - 28 entries with range -1..26 */
105 { 8, 6 }, { 2, 6 }, { 7, 6 }, { 23, 7 }, { 12, 7 }, { 5, 4 },
106 { 10, 6 }, { 20, 8 }, { 25, 9 }, { 26, 10 }, { 27, 11 }, { 0, 11 },
107 { 22, 7 }, { 9, 5 }, { 13, 6 }, { 17, 6 }, { 4, 5 }, { 14, 6 },
108 { 19, 7 }, { 24, 7 }, { 3, 6 }, { 11, 6 }, { 21, 6 }, { 18, 6 },
109 { 16, 6 }, { 15, 6 }, { 6, 3 }, { 1, 1 },
110 /* Third table - 31 entries with range -1..30 (1 omitted) */
111 { 14, 7 }, { 17, 7 }, { 15, 7 }, { 23, 9 }, { 28, 10 }, { 29, 11 },
112 { 30, 13 }, { 0, 13 }, { 31, 12 }, { 25, 8 }, { 10, 5 }, { 8, 4 },
113 { 9, 4 }, { 4, 4 }, { 22, 8 }, { 3, 8 }, { 21, 8 }, { 26, 9 },
114 { 27, 9 }, { 12, 6 }, { 11, 5 }, { 16, 7 }, { 18, 7 }, { 20, 8 },
115 { 24, 8 }, { 19, 7 }, { 13, 5 }, { 5, 3 }, { 1, 2 }, { 6, 3 },
117 /* Fourth table - 34 entries with range -1..33 (1 omitted) */
118 { 4, 4 }, { 7, 4 }, { 10, 4 }, { 3, 10 }, { 27, 10 }, { 29, 10 },
119 { 28, 10 }, { 22, 8 }, { 21, 7 }, { 15, 6 }, { 14, 5 }, { 8, 4 },
120 { 16, 6 }, { 19, 7 }, { 23, 8 }, { 26, 9 }, { 30, 10 }, { 33, 13 },
121 { 34, 14 }, { 0, 14 }, { 32, 12 }, { 31, 11 }, { 12, 5 }, { 5, 3 },
122 { 9, 3 }, { 1, 4 }, { 20, 7 }, { 25, 8 }, { 24, 8 }, { 18, 6 },
123 { 17, 5 }, { 6, 3 }, { 11, 4 }, { 13, 4 },
124 /* Fifth table - 37 entries with range -1..36 (1 omitted) */
125 { 5, 3 }, { 4, 3 }, { 19, 8 }, { 33, 12 }, { 31, 12 }, { 28, 11 },
126 { 34, 14 }, { 37, 14 }, { 35, 15 }, { 0, 15 }, { 36, 14 }, { 32, 12 },
127 { 30, 11 }, { 24, 9 }, { 22, 8 }, { 23, 9 }, { 29, 10 }, { 27, 10 },
128 { 17, 6 }, { 14, 5 }, { 7, 4 }, { 12, 5 }, { 1, 6 }, { 26, 9 },
129 { 3, 9 }, { 25, 8 }, { 20, 7 }, { 8, 4 }, { 10, 4 }, { 13, 4 },
130 { 15, 6 }, { 16, 6 }, { 18, 6 }, { 21, 6 }, { 11, 4 }, { 9, 3 },
136 /* values in this table range from -1..27; adjust retrieved value by -1 */
137 static const uint8_t fft_level_exp_alt[28][2] = {
138 { 18, 3 }, { 16, 3 }, { 22, 7 }, { 8, 10 }, { 4, 10 }, { 3, 9 },
139 { 2, 8 }, { 23, 8 }, { 10, 8 }, { 11, 7 }, { 21, 5 }, { 20, 4 },
140 { 1, 7 }, { 7, 10 }, { 5, 10 }, { 9, 9 }, { 6, 10 }, { 25, 11 },
141 { 26, 12 }, { 27, 13 }, { 0, 13 }, { 24, 9 }, { 12, 6 }, { 13, 5 },
142 { 14, 4 }, { 19, 3 }, { 15, 3 }, { 17, 2 },
145 /* values in this table range from -1..19; adjust retrieved value by -1 */
146 static const uint8_t fft_level_exp[20][2] = {
147 { 3, 3 }, { 11, 6 }, { 16, 9 }, { 17, 10 }, { 18, 11 }, { 19, 12 },
148 { 0, 12 }, { 15, 8 }, { 14, 7 }, { 9, 5 }, { 7, 4 }, { 2, 3 },
149 { 4, 3 }, { 1, 3 }, { 5, 3 }, { 12, 6 }, { 13, 6 }, { 10, 5 },
153 /* values in this table range from -1..6; adjust retrieved value by -1 */
154 static const uint8_t fft_stereo_exp[7][2] = {
155 { 2, 2 }, { 3, 3 }, { 4, 4 }, { 5, 5 }, { 6, 6 }, { 0, 6 }, { 1, 1 },
158 /* values in this table range from -1..8; adjust retrieved value by -1 */
159 static const uint8_t fft_stereo_phase[9][2] = {
160 { 2, 2 }, { 1, 2 }, { 3, 4 }, { 7, 4 }, { 6, 5 }, { 5, 6 }, { 0, 6 },
164 static const int fft_cutoff_index_table[4][2] = {
165 { 1, 2 }, {-1, 0 }, {-1,-2 }, { 0, 0 }
168 static const int16_t fft_level_index_table[256] = {
169 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1,
170 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
171 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
172 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
173 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
174 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
175 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
176 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
177 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
178 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
179 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
180 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
181 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
182 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
183 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
184 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
187 static const uint8_t last_coeff[3] = {
191 static const uint8_t coeff_per_sb_for_avg[3][30] = {
192 { 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 },
193 { 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 },
194 { 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 }
197 static const uint32_t dequant_table[3][10][30] = {
198 { { 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 },
199 { 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 },
200 { 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 },
201 { 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 },
202 { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
203 { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
204 { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
205 { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
206 { 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
208 { { 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 },
209 { 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 },
210 { 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 },
211 { 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 },
212 { 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 },
213 { 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 },
214 { 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 },
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 { 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 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 { { 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 },
219 { 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 },
220 { 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 },
221 { 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 },
222 { 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 },
223 { 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 },
224 { 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 },
225 { 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 },
226 { 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 },
227 { 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 } }
230 static const uint8_t coeff_per_sb_for_dequant[3][30] = {
231 { 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 },
232 { 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 },
233 { 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 }
236 /* first index is subband, 2nd index is 0, 1 or 3 (2 is unused) */
237 static const int8_t tone_level_idx_offset_table[30][4] = {
238 { -50, -50, 0, -50 },
239 { -50, -50, 0, -50 },
270 /* all my samples have 1st index 0 or 1 */
271 /* second index is subband, only indexes 0-29 seem to be used */
272 static const int8_t coding_method_table[5][30] = {
273 { 34, 30, 24, 24, 16, 16, 16, 16, 10, 10, 10, 10, 10, 10, 10,
274 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10
276 { 34, 30, 24, 24, 16, 16, 16, 16, 10, 10, 10, 10, 10, 10, 10,
277 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10
279 { 34, 30, 30, 30, 24, 24, 16, 16, 16, 16, 16, 16, 10, 10, 10,
280 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10
282 { 34, 34, 30, 30, 24, 24, 24, 24, 16, 16, 16, 16, 16, 16, 16,
283 16, 16, 16, 16, 16, 16, 16, 10, 10, 10, 10, 10, 10, 10, 10
285 { 34, 34, 30, 30, 30, 30, 30, 30, 24, 24, 24, 24, 24, 24, 24,
286 24, 24, 24, 24, 24, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16
290 static const int vlc_stage3_values[60] = {
291 0, 1, 2, 3, 4, 6, 8, 10, 12, 16, 20, 24,
292 28, 36, 44, 52, 60, 76, 92, 108, 124, 156, 188, 220,
293 252, 316, 380, 444, 508, 636, 764, 892, 1020, 1276, 1532, 1788,
294 2044, 2556, 3068, 3580, 4092, 5116, 6140, 7164, 8188, 10236, 12284, 14332,
295 16380, 20476, 24572, 28668, 32764, 40956, 49148, 57340, 65532, 81916, 98300,114684
298 static const float fft_tone_sample_table[4][16][5] = {
299 { { .0100000000f,-.0037037037f,-.0020000000f,-.0069444444f,-.0018416207f },
300 { .0416666667f, .0000000000f, .0000000000f,-.0208333333f,-.0123456791f },
301 { .1250000000f, .0558035709f, .0330687836f,-.0164473690f,-.0097465888f },
302 { .1562500000f, .0625000000f, .0370370370f,-.0062500000f,-.0037037037f },
303 { .1996007860f, .0781250000f, .0462962948f, .0022727272f, .0013468013f },
304 { .2000000000f, .0625000000f, .0370370373f, .0208333333f, .0074074073f },
305 { .2127659619f, .0555555556f, .0329218097f, .0208333333f, .0123456791f },
306 { .2173913121f, .0473484844f, .0280583613f, .0347222239f, .0205761325f },
307 { .2173913121f, .0347222239f, .0205761325f, .0473484844f, .0280583613f },
308 { .2127659619f, .0208333333f, .0123456791f, .0555555556f, .0329218097f },
309 { .2000000000f, .0208333333f, .0074074073f, .0625000000f, .0370370370f },
310 { .1996007860f, .0022727272f, .0013468013f, .0781250000f, .0462962948f },
311 { .1562500000f,-.0062500000f,-.0037037037f, .0625000000f, .0370370370f },
312 { .1250000000f,-.0164473690f,-.0097465888f, .0558035709f, .0330687836f },
313 { .0416666667f,-.0208333333f,-.0123456791f, .0000000000f, .0000000000f },
314 { .0100000000f,-.0069444444f,-.0018416207f,-.0037037037f,-.0020000000f } },
316 { { .0050000000f,-.0200000000f, .0125000000f,-.3030303030f, .0020000000f },
317 { .1041666642f, .0400000000f,-.0250000000f, .0333333333f,-.0200000000f },
318 { .1250000000f, .0100000000f, .0142857144f,-.0500000007f,-.0200000000f },
319 { .1562500000f,-.0006250000f,-.00049382716f,-.000625000f,-.00049382716f },
320 { .1562500000f,-.0006250000f,-.00049382716f,-.000625000f,-.00049382716f },
321 { .1250000000f,-.0500000000f,-.0200000000f, .0100000000f, .0142857144f },
322 { .1041666667f, .0333333333f,-.0200000000f, .0400000000f,-.0250000000f },
323 { .0050000000f,-.3030303030f, .0020000001f,-.0200000000f, .0125000000f },
324 { .0000000000f, .0000000000f, .0000000000f, .0000000000f, .0000000000f },
325 { .0000000000f, .0000000000f, .0000000000f, .0000000000f, .0000000000f },
326 { .0000000000f, .0000000000f, .0000000000f, .0000000000f, .0000000000f },
327 { .0000000000f, .0000000000f, .0000000000f, .0000000000f, .0000000000f },
328 { .0000000000f, .0000000000f, .0000000000f, .0000000000f, .0000000000f },
329 { .0000000000f, .0000000000f, .0000000000f, .0000000000f, .0000000000f },
330 { .0000000000f, .0000000000f, .0000000000f, .0000000000f, .0000000000f },
331 { .0000000000f, .0000000000f, .0000000000f, .0000000000f, .0000000000f } },
333 { { .1428571492f, .1250000000f,-.0285714287f,-.0357142873f, .0208333333f },
334 { .1818181818f, .0588235296f, .0333333333f, .0212765951f, .0100000000f },
335 { .1818181818f, .0212765951f, .0100000000f, .0588235296f, .0333333333f },
336 { .1428571492f,-.0357142873f, .0208333333f, .1250000000f,-.0285714287f },
337 { .0000000000f, .0000000000f, .0000000000f, .0000000000f, .0000000000f },
338 { .0000000000f, .0000000000f, .0000000000f, .0000000000f, .0000000000f },
339 { .0000000000f, .0000000000f, .0000000000f, .0000000000f, .0000000000f },
340 { .0000000000f, .0000000000f, .0000000000f, .0000000000f, .0000000000f },
341 { .0000000000f, .0000000000f, .0000000000f, .0000000000f, .0000000000f },
342 { .0000000000f, .0000000000f, .0000000000f, .0000000000f, .0000000000f },
343 { .0000000000f, .0000000000f, .0000000000f, .0000000000f, .0000000000f },
344 { .0000000000f, .0000000000f, .0000000000f, .0000000000f, .0000000000f },
345 { .0000000000f, .0000000000f, .0000000000f, .0000000000f, .0000000000f },
346 { .0000000000f, .0000000000f, .0000000000f, .0000000000f, .0000000000f },
347 { .0000000000f, .0000000000f, .0000000000f, .0000000000f, .0000000000f },
348 { .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 },
357 { .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 } }
368 static const float fft_tone_level_table[2][64] = { {
369 /* pow ~ (i > 46) ? 0 : (((((i & 1) ? 431 : 304) << (i >> 1))) / 1024.0); */
370 0.17677669f, 0.42677650f, 0.60355347f, 0.85355347f,
371 1.20710683f, 1.68359375f, 2.37500000f, 3.36718750f,
372 4.75000000f, 6.73437500f, 9.50000000f, 13.4687500f,
373 19.0000000f, 26.9375000f, 38.0000000f, 53.8750000f,
374 76.0000000f, 107.750000f, 152.000000f, 215.500000f,
375 304.000000f, 431.000000f, 608.000000f, 862.000000f,
376 1216.00000f, 1724.00000f, 2432.00000f, 3448.00000f,
377 4864.00000f, 6896.00000f, 9728.00000f, 13792.0000f,
378 19456.0000f, 27584.0000f, 38912.0000f, 55168.0000f,
379 77824.0000f, 110336.000f, 155648.000f, 220672.000f,
380 311296.000f, 441344.000f, 622592.000f, 882688.000f,
381 1245184.00f, 1765376.00f, 2490368.00f, 0.00000000f,
382 0.00000000f, 0.00000000f, 0.00000000f, 0.00000000f,
383 0.00000000f, 0.00000000f, 0.00000000f, 0.00000000f,
384 0.00000000f, 0.00000000f, 0.00000000f, 0.00000000f,
385 0.00000000f, 0.00000000f, 0.00000000f, 0.00000000f,
387 /* pow = (i > 45) ? 0 : ((((i & 1) ? 431 : 304) << (i >> 1)) / 512.0); */
388 0.59375000f, 0.84179688f, 1.18750000f, 1.68359375f,
389 2.37500000f, 3.36718750f, 4.75000000f, 6.73437500f,
390 9.50000000f, 13.4687500f, 19.0000000f, 26.9375000f,
391 38.0000000f, 53.8750000f, 76.0000000f, 107.750000f,
392 152.000000f, 215.500000f, 304.000000f, 431.000000f,
393 608.000000f, 862.000000f, 1216.00000f, 1724.00000f,
394 2432.00000f, 3448.00000f, 4864.00000f, 6896.00000f,
395 9728.00000f, 13792.0000f, 19456.0000f, 27584.0000f,
396 38912.0000f, 55168.0000f, 77824.0000f, 110336.000f,
397 155648.000f, 220672.000f, 311296.000f, 441344.000f,
398 622592.000f, 882688.000f, 1245184.00f, 1765376.00f,
399 2490368.00f, 3530752.00f, 0.00000000f, 0.00000000f,
400 0.00000000f, 0.00000000f, 0.00000000f, 0.00000000f,
401 0.00000000f, 0.00000000f, 0.00000000f, 0.00000000f,
402 0.00000000f, 0.00000000f, 0.00000000f, 0.00000000f,
403 0.00000000f, 0.00000000f, 0.00000000f, 0.00000000f
406 static const float fft_tone_envelope_table[4][31] = {
407 { .009607375f, .038060248f, .084265202f, .146446645f, .222214907f, .308658302f,
408 .402454883f, .500000060f, .597545207f, .691341758f, .777785182f, .853553414f,
409 .915734828f, .961939812f, .990392685f, 1.00000000f, .990392625f, .961939752f,
410 .915734768f, .853553295f, .777785063f, .691341639f, .597545087f, .500000000f,
411 .402454853f, .308658272f, .222214878f, .146446615f, .084265172f, .038060218f,
413 { .038060248f, .146446645f, .308658302f, .500000060f, .691341758f, .853553414f,
414 .961939812f, 1.00000000f, .961939752f, .853553295f, .691341639f, .500000000f,
415 .308658272f, .146446615f, .038060218f, .000000000f, .000000000f, .000000000f,
416 .000000000f, .000000000f, .000000000f, .000000000f, .000000000f, .000000000f,
417 .000000000f, .000000000f, .000000000f, .000000000f, .000000000f, .000000000f,
419 { .146446645f, .500000060f, .853553414f, 1.00000000f, .853553295f, .500000000f,
420 .146446615f, .000000000f, .000000000f, .000000000f, .000000000f, .000000000f,
421 .000000000f, .000000000f, .000000000f, .000000000f, .000000000f, .000000000f,
422 .000000000f, .000000000f, .000000000f, .000000000f, .000000000f, .000000000f,
423 .000000000f, .000000000f, .000000000f, .000000000f, .000000000f, .000000000f,
425 { .500000060f, 1.00000000f, .500000000f, .000000000f, .000000000f, .000000000f,
426 .000000000f, .000000000f, .000000000f, .000000000f, .000000000f, .000000000f,
427 .000000000f, .000000000f, .000000000f, .000000000f, .000000000f, .000000000f,
428 .000000000f, .000000000f, .000000000f, .000000000f, .000000000f, .000000000f,
429 .000000000f, .000000000f, .000000000f, .000000000f, .000000000f, .000000000f,
433 static const float sb_noise_attenuation[32] = {
434 0.0f, 0.0f, 0.3f, 0.4f, 0.5f, 0.7f, 1.0f, 1.0f,
435 1.0f, 1.0f, 1.0f, 1.0f, 1.0f, 1.0f, 1.0f, 1.0f,
436 1.0f, 1.0f, 1.0f, 1.0f, 1.0f, 1.0f, 1.0f, 1.0f,
437 1.0f, 1.0f, 1.0f, 1.0f, 1.0f, 1.0f, 1.0f, 1.0f,
440 static const uint8_t fft_subpackets[32] = {
441 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 0,
442 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0
445 /* first index is joined_stereo, second index is 0 or 2 (1 is unused) */
446 static const float dequant_1bit[2][3] = {
447 {-0.920000f, 0.000000f, 0.920000f },
448 {-0.890000f, 0.000000f, 0.890000f }
451 static const float type30_dequant[8] = {
452 -1.0f,-0.625f,-0.291666656732559f,0.0f,
453 0.25f,0.5f,0.75f,1.0f,
456 static const float type34_delta[10] = { // FIXME: covers 8 entries..
457 -1.0f,-0.60947573184967f,-0.333333343267441f,-0.138071194291115f,0.0f,
458 0.138071194291115f,0.333333343267441f,0.60947573184967f,1.0f,0.0f,
461 #endif /* AVCODEC_QDM2DATA_H */