blob: 713f5842694e78703e63a401a8a91674ee4af7d7 [file] [log] [blame]
Roberto Togni31352582005-10-18 20:31:121/*
2 * QDM2 compatible decoder
3 * Copyright (c) 2003 Ewald Snel
4 * Copyright (c) 2005 Benjamin Larsson
5 * Copyright (c) 2005 Alex Beregszaszi
6 * Copyright (c) 2005 Roberto Togni
7 *
Diego Biurrunb78e7192006-10-07 15:30:468 * This file is part of FFmpeg.
9 *
10 * FFmpeg is free software; you can redistribute it and/or
Roberto Togni31352582005-10-18 20:31:1211 * modify it under the terms of the GNU Lesser General Public
12 * License as published by the Free Software Foundation; either
Diego Biurrunb78e7192006-10-07 15:30:4613 * version 2.1 of the License, or (at your option) any later version.
Roberto Togni31352582005-10-18 20:31:1214 *
Diego Biurrunb78e7192006-10-07 15:30:4615 * FFmpeg is distributed in the hope that it will be useful,
Roberto Togni31352582005-10-18 20:31:1216 * but WITHOUT ANY WARRANTY; without even the implied warranty of
17 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
18 * Lesser General Public License for more details.
19 *
20 * You should have received a copy of the GNU Lesser General Public
Diego Biurrunb78e7192006-10-07 15:30:4621 * License along with FFmpeg; if not, write to the Free Software
Diego Biurrun5509bff2006-01-12 22:43:2622 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
Roberto Togni31352582005-10-18 20:31:1223 */
Diego Biurrun115329f2005-12-17 18:14:3824
Roberto Togni31352582005-10-18 20:31:1225 /**
Diego Biurrunba87f082010-04-20 14:45:3426 * @file
Roberto Togni31352582005-10-18 20:31:1227 * Various QDM2 tables.
28 */
29
Stefano Sabatini98790382008-08-31 07:39:4730#ifndef AVCODEC_QDM2DATA_H
31#define AVCODEC_QDM2DATA_H
Roberto Togni31352582005-10-18 20:31:1232
Måns Rullgård99545452007-06-16 22:59:1333#include <stdint.h>
34
Roberto Togni31352582005-10-18 20:31:1235/** VLC TABLES **/
36
37/* values in this table range from -1..23; adjust retrieved value by -1 */
Andreas Rheinhardt682b0e42020-10-31 16:33:2838static 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 },
Roberto Togni31352582005-10-18 20:31:1243};
44
45/* values in this table range from -1..36; adjust retrieved value by -1 */
Andreas Rheinhardt682b0e42020-10-31 16:33:2846static 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 },
Roberto Togni31352582005-10-18 20:31:1253};
54
55/* values in this table range from -1..5; adjust retrieved value by -1 */
Andreas Rheinhardt682b0e42020-10-31 16:33:2856static const uint8_t tab_run[6][2] = {
57 { 1, 1 }, { 2, 2 }, { 3, 3 }, { 4, 4 }, { 5, 5 }, { 0, 5 },
Roberto Togni31352582005-10-18 20:31:1258};
59
60/* values in this table range from -1..19; adjust retrieved value by -1 */
Andreas Rheinhardt682b0e42020-10-31 16:33:2861static 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 },
Roberto Togni31352582005-10-18 20:31:1266};
67
68/* values in this table range from -1..23; adjust retrieved value by -1 */
Andreas Rheinhardt682b0e42020-10-31 16:33:2869static 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 },
Roberto Togni31352582005-10-18 20:31:1273};
74
75/* values in this table range from -1..23; adjust retrieved value by -1 */
Andreas Rheinhardt682b0e42020-10-31 16:33:2876static 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 },
Roberto Togni31352582005-10-18 20:31:1280};
81
82/* values in this table range from -1..8; adjust retrieved value by -1 */
Andreas Rheinhardt682b0e42020-10-31 16:33:2883static 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 },
Roberto Togni31352582005-10-18 20:31:1286};
87
88/* values in this table range from -1..9; adjust retrieved value by -1 */
Andreas Rheinhardt682b0e42020-10-31 16:33:2889static 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 },
Roberto Togni31352582005-10-18 20:31:1292};
93
Andreas Rheinhardtbcdf67c2020-10-31 18:26:3994static const uint8_t tab_fft_tone_offset_sizes[] = {
95 23, 28, 31, 34, 37
96};
97
98static const uint8_t tab_fft_tone_offset[][2] = {
99 /* First table - 23 entries with range -1..21 */
Andreas Rheinhardt682b0e42020-10-31 16:33:28100 { 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 },
Andreas Rheinhardtbcdf67c2020-10-31 18:26:39104 /* Second table - 28 entries with range -1..26 */
Andreas Rheinhardt682b0e42020-10-31 16:33:28105 { 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 },
Andreas Rheinhardtbcdf67c2020-10-31 18:26:39110 /* Third table - 31 entries with range -1..30 (1 omitted) */
Andreas Rheinhardt682b0e42020-10-31 16:33:28111 { 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 },
116 { 7, 3 },
Andreas Rheinhardtbcdf67c2020-10-31 18:26:39117 /* Fourth table - 34 entries with range -1..33 (1 omitted) */
Andreas Rheinhardt682b0e42020-10-31 16:33:28118 { 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 },
Andreas Rheinhardtbcdf67c2020-10-31 18:26:39124 /* Fifth table - 37 entries with range -1..36 (1 omitted) */
Andreas Rheinhardt682b0e42020-10-31 16:33:28125 { 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 },
131 { 6, 3 },
Roberto Togni31352582005-10-18 20:31:12132};
133
134/** FFT TABLES **/
135
136/* values in this table range from -1..27; adjust retrieved value by -1 */
Andreas Rheinhardt682b0e42020-10-31 16:33:28137static 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 },
Roberto Togni31352582005-10-18 20:31:12143};
144
145/* values in this table range from -1..19; adjust retrieved value by -1 */
Andreas Rheinhardt682b0e42020-10-31 16:33:28146static 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 },
150 { 8, 4 }, { 6, 3 },
Roberto Togni31352582005-10-18 20:31:12151};
152
153/* values in this table range from -1..6; adjust retrieved value by -1 */
Andreas Rheinhardt682b0e42020-10-31 16:33:28154static const uint8_t fft_stereo_exp[7][2] = {
155 { 2, 2 }, { 3, 3 }, { 4, 4 }, { 5, 5 }, { 6, 6 }, { 0, 6 }, { 1, 1 },
Roberto Togni31352582005-10-18 20:31:12156};
157
158/* values in this table range from -1..8; adjust retrieved value by -1 */
Andreas Rheinhardt682b0e42020-10-31 16:33:28159static const uint8_t fft_stereo_phase[9][2] = {
160 { 2, 2 }, { 1, 2 }, { 3, 4 }, { 7, 4 }, { 6, 5 }, { 5, 6 }, { 0, 6 },
161 { 4, 4 }, { 8, 2 },
Roberto Togni31352582005-10-18 20:31:12162};
163
164static const int fft_cutoff_index_table[4][2] = {
165 { 1, 2 }, {-1, 0 }, {-1,-2 }, { 0, 0 }
166};
167
168static 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,
185};
186
Stefan Gehrercf2baeb2008-06-24 20:01:31187static const uint8_t last_coeff[3] = {
Roberto Togni31352582005-10-18 20:31:12188 4, 7, 10
189};
190
Stefan Gehrercf2baeb2008-06-24 20:01:31191static const uint8_t coeff_per_sb_for_avg[3][30] = {
Roberto Togni31352582005-10-18 20:31:12192 { 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 }
195};
196
Stefan Gehrercf2baeb2008-06-24 20:01:31197static const uint32_t dequant_table[3][10][30] = {
Roberto Togni31352582005-10-18 20:31:12198 { { 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 } }
228};
229
Stefan Gehrercf2baeb2008-06-24 20:01:31230static const uint8_t coeff_per_sb_for_dequant[3][30] = {
Roberto Togni31352582005-10-18 20:31:12231 { 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 }
234};
235
236/* first index is subband, 2nd index is 0, 1 or 3 (2 is unused) */
Stefan Gehrercf2baeb2008-06-24 20:01:31237static const int8_t tone_level_idx_offset_table[30][4] = {
Roberto Togni31352582005-10-18 20:31:12238 { -50, -50, 0, -50 },
239 { -50, -50, 0, -50 },
240 { -50, -9, 0, -19 },
241 { -16, -6, 0, -12 },
242 { -11, -4, 0, -8 },
243 { -8, -3, 0, -6 },
244 { -7, -3, 0, -5 },
245 { -6, -2, 0, -4 },
246 { -5, -2, 0, -3 },
247 { -4, -1, 0, -3 },
248 { -4, -1, 0, -2 },
249 { -3, -1, 0, -2 },
250 { -3, -1, 0, -2 },
251 { -3, -1, 0, -2 },
252 { -2, -1, 0, -1 },
253 { -2, -1, 0, -1 },
254 { -2, -1, 0, -1 },
255 { -2, 0, 0, -1 },
256 { -2, 0, 0, -1 },
257 { -1, 0, 0, -1 },
258 { -1, 0, 0, -1 },
259 { -1, 0, 0, -1 },
260 { -1, 0, 0, -1 },
261 { -1, 0, 0, -1 },
262 { -1, 0, 0, -1 },
263 { -1, 0, 0, -1 },
264 { -1, 0, 0, 0 },
265 { -1, 0, 0, 0 },
266 { -1, 0, 0, 0 },
267 { -1, 0, 0, 0 }
268};
269
270/* all my samples have 1st index 0 or 1 */
271/* second index is subband, only indexes 0-29 seem to be used */
Stefan Gehrercf2baeb2008-06-24 20:01:31272static const int8_t coding_method_table[5][30] = {
Roberto Togni31352582005-10-18 20:31:12273 { 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
275 },
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
278 },
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
281 },
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
284 },
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
287 },
288};
289
290static 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
296};
297
298static 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 } },
Diego Biurrun115329f2005-12-17 18:14:38315
Roberto Togni31352582005-10-18 20:31:12316 { { .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 } },
Diego Biurrun115329f2005-12-17 18:14:38332
Roberto Togni31352582005-10-18 20:31:12333 { { .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 } },
Diego Biurrun115329f2005-12-17 18:14:38349
Roberto Togni31352582005-10-18 20:31:12350 { { .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 } }
366};
367
368static 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,
386 }, {
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
404} };
405
406static 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,
412 .009607345f },
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,
418 .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,
424 .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,
430 .000000000f }
431};
432
433static 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,
438};
439
440static 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
443};
444
445/* first index is joined_stereo, second index is 0 or 2 (1 is unused) */
Stefan Gehrercf2baeb2008-06-24 20:01:31446static const float dequant_1bit[2][3] = {
Roberto Togni31352582005-10-18 20:31:12447 {-0.920000f, 0.000000f, 0.920000f },
448 {-0.890000f, 0.000000f, 0.890000f }
449};
450
451static const float type30_dequant[8] = {
452 -1.0f,-0.625f,-0.291666656732559f,0.0f,
453 0.25f,0.5f,0.75f,1.0f,
454};
455
456static 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,
459};
460
Stefano Sabatini98790382008-08-31 07:39:47461#endif /* AVCODEC_QDM2DATA_H */