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