]> git.sesse.net Git - ffmpeg/blob - libavcodec/qdm2data.h
69f66b4571034ea65becfe5de249bf04be1fd85d
[ffmpeg] / libavcodec / qdm2data.h
1 /*
2  * QDM2 compatible decoder
3  * Copyright (c) 2003 Ewald Snel
4  * Copyright (c) 2005 Benjamin Larsson
5  * Copyright (c) 2005 Alex Beregszaszi
6  * Copyright (c) 2005 Roberto Togni
7  *
8  * This file is part of FFmpeg.
9  *
10  * FFmpeg is free software; you can redistribute it and/or
11  * modify it under the terms of the GNU Lesser General Public
12  * License as published by the Free Software Foundation; either
13  * version 2.1 of the License, or (at your option) any later version.
14  *
15  * FFmpeg is distributed in the hope that it will be useful,
16  * but WITHOUT ANY WARRANTY; without even the implied warranty of
17  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
18  * Lesser General Public License for more details.
19  *
20  * You should have received a copy of the GNU Lesser General Public
21  * License along with FFmpeg; if not, write to the Free Software
22  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
23  */
24
25  /**
26  * @file
27  * Various QDM2 tables.
28  */
29
30 #ifndef AVCODEC_QDM2DATA_H
31 #define AVCODEC_QDM2DATA_H
32
33 #include <stdint.h>
34
35 /** VLC TABLES **/
36
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 },
43 };
44
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 },
53 };
54
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 },
58 };
59
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 },
65     {  2,  2 }, {  3,  1 },
66 };
67
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 },
72     { 17,  1 },
73 };
74
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 },
80 };
81
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 },
85     { 3, 2 }, { 4, 2 },
86 };
87
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 },
92 };
93
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 },
100 };
101
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 },
109 };
110
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 },
118     {  7,  3 },
119 };
120
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 },
129 };
130
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 },
139     {  6,  3 },
140 };
141
142 /** FFT TABLES **/
143
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 },
151 };
152
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 },
158     {  8,  4 }, {  6,  3 },
159 };
160
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 },
164 };
165
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 },
169     { 4, 4 }, { 8, 2 },
170 };
171
172 static const int fft_cutoff_index_table[4][2] = {
173     { 1, 2 }, {-1, 0 }, {-1,-2 }, { 0, 0 }
174 };
175
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,
193 };
194
195 static const uint8_t last_coeff[3] = {
196     4, 7, 10
197 };
198
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 }
203 };
204
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 } }
236 };
237
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 }
242 };
243
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 },
248     { -50,  -9,  0, -19 },
249     { -16,  -6,  0, -12 },
250     { -11,  -4,  0,  -8 },
251     {  -8,  -3,  0,  -6 },
252     {  -7,  -3,  0,  -5 },
253     {  -6,  -2,  0,  -4 },
254     {  -5,  -2,  0,  -3 },
255     {  -4,  -1,  0,  -3 },
256     {  -4,  -1,  0,  -2 },
257     {  -3,  -1,  0,  -2 },
258     {  -3,  -1,  0,  -2 },
259     {  -3,  -1,  0,  -2 },
260     {  -2,  -1,  0,  -1 },
261     {  -2,  -1,  0,  -1 },
262     {  -2,  -1,  0,  -1 },
263     {  -2,   0,  0,  -1 },
264     {  -2,   0,  0,  -1 },
265     {  -1,   0,  0,  -1 },
266     {  -1,   0,  0,  -1 },
267     {  -1,   0,  0,  -1 },
268     {  -1,   0,  0,  -1 },
269     {  -1,   0,  0,  -1 },
270     {  -1,   0,  0,  -1 },
271     {  -1,   0,  0,  -1 },
272     {  -1,   0,  0,   0 },
273     {  -1,   0,  0,   0 },
274     {  -1,   0,  0,   0 },
275     {  -1,   0,  0,   0 }
276 };
277
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
283     },
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
286     },
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
289     },
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
292     },
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
295     },
296 };
297
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
304 };
305
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 } },
323
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 } },
340
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 } },
357
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 } }
374 };
375
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,
394   }, {
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
412 } };
413
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,
420       .009607345f },
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,
426       .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,
432       .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,
438       .000000000f }
439 };
440
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,
446 };
447
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
451 };
452
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 }
457 };
458
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,
462 };
463
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,
467 };
468
469 #endif /* AVCODEC_QDM2DATA_H */