• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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  static const uint8_t tab_fft_tone_offset_sizes[] = {
95      23, 28, 31, 34, 37
96  };
97  
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 },
116      {  7,  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 },
131      {  6,  3 },
132  };
133  
134  /** FFT TABLES **/
135  
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 },
143  };
144  
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 },
150      {  8,  4 }, {  6,  3 },
151  };
152  
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 },
156  };
157  
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 },
161      { 4, 4 }, { 8, 2 },
162  };
163  
164  static const int fft_cutoff_index_table[4][2] = {
165      { 1, 2 }, {-1, 0 }, {-1,-2 }, { 0, 0 }
166  };
167  
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,
185  };
186  
187  static const uint8_t last_coeff[3] = {
188      4, 7, 10
189  };
190  
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 }
195  };
196  
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 } }
228  };
229  
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 }
234  };
235  
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 },
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 */
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
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  
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
296  };
297  
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 } },
315  
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 } },
332  
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 } },
349  
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 } }
366  };
367  
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,
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  
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,
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  
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,
438  };
439  
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
443  };
444  
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 }
449  };
450  
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,
454  };
455  
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,
459  };
460  
461  #endif /* AVCODEC_QDM2DATA_H */
462