1 /* ScummVM - Graphic Adventure Engine 2 * 3 * ScummVM is the legal property of its developers, whose names 4 * are too numerous to list here. Please refer to the COPYRIGHT 5 * file distributed with this source distribution. 6 * 7 * This program is free software; you can redistribute it and/or 8 * modify it under the terms of the GNU General Public License 9 * as published by the Free Software Foundation; either version 2 10 * of the License, or (at your option) any later version. 11 * 12 * This program is distributed in the hope that it will be useful, 13 * but WITHOUT ANY WARRANTY; without even the implied warranty of 14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15 * GNU General Public License for more details. 16 * 17 * You should have received a copy of the GNU General Public License 18 * along with this program; if not, write to the Free Software 19 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. 20 * 21 */ 22 23 #ifndef AUDIO_QDM2DATA_H 24 #define AUDIO_QDM2DATA_H 25 26 #include "common/scummsys.h" 27 28 namespace Audio { 29 30 /// VLC TABLES 31 32 // values in this table range from -1..23; adjust retrieved value by -1 33 static const uint16 vlc_tab_level_huffcodes[24] = { 34 0x037c, 0x0004, 0x003c, 0x004c, 0x003a, 0x002c, 0x001c, 0x001a, 35 0x0024, 0x0014, 0x0001, 0x0002, 0x0000, 0x0003, 0x0007, 0x0005, 36 0x0006, 0x0008, 0x0009, 0x000a, 0x000c, 0x00fc, 0x007c, 0x017c 37 }; 38 39 static const byte vlc_tab_level_huffbits[24] = { 40 10, 6, 7, 7, 6, 6, 6, 6, 6, 5, 4, 4, 4, 3, 3, 3, 3, 4, 4, 5, 7, 8, 9, 10 41 }; 42 43 // values in this table range from -1..36; adjust retrieved value by -1 44 static const uint16 vlc_tab_diff_huffcodes[37] = { 45 0x1c57, 0x0004, 0x0000, 0x0001, 0x0003, 0x0002, 0x000f, 0x000e, 46 0x0007, 0x0016, 0x0037, 0x0027, 0x0026, 0x0066, 0x0006, 0x0097, 47 0x0046, 0x01c6, 0x0017, 0x0786, 0x0086, 0x0257, 0x00d7, 0x0357, 48 0x00c6, 0x0386, 0x0186, 0x0000, 0x0157, 0x0c57, 0x0057, 0x0000, 49 0x0b86, 0x0000, 0x1457, 0x0000, 0x0457 50 }; 51 52 static const byte vlc_tab_diff_huffbits[37] = { 53 13, 3, 3, 2, 3, 3, 4, 4, 6, 5, 6, 6, 7, 7, 8, 8, 54 8, 9, 8, 11, 9, 10, 8, 10, 9, 12, 10, 0, 10, 13, 11, 0, 55 12, 0, 13, 0, 13 56 }; 57 58 // values in this table range from -1..5; adjust retrieved value by -1 59 static const byte vlc_tab_run_huffcodes[6] = { 60 0x1f, 0x00, 0x01, 0x03, 0x07, 0x0f 61 }; 62 63 static const byte vlc_tab_run_huffbits[6] = { 64 5, 1, 2, 3, 4, 5 65 }; 66 67 // values in this table range from -1..19; adjust retrieved value by -1 68 static const uint16 vlc_tab_tone_level_idx_hi1_huffcodes[20] = { 69 0x5714, 0x000c, 0x0002, 0x0001, 0x0000, 0x0004, 0x0034, 0x0054, 70 0x0094, 0x0014, 0x0114, 0x0214, 0x0314, 0x0614, 0x0e14, 0x0f14, 71 0x2714, 0x0714, 0x1714, 0x3714 72 }; 73 74 static const byte vlc_tab_tone_level_idx_hi1_huffbits[20] = { 75 15, 4, 2, 1, 3, 5, 6, 7, 8, 10, 10, 11, 11, 12, 12, 12, 14, 14, 15, 14 76 }; 77 78 // values in this table range from -1..23; adjust retrieved value by -1 79 static const uint16 vlc_tab_tone_level_idx_mid_huffcodes[24] = { 80 0x0fea, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 81 0x0000, 0x0000, 0x0000, 0x0000, 0x03ea, 0x00ea, 0x002a, 0x001a, 82 0x0006, 0x0001, 0x0000, 0x0002, 0x000a, 0x006a, 0x01ea, 0x07ea 83 }; 84 85 static const byte vlc_tab_tone_level_idx_mid_huffbits[24] = { 86 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 9, 7, 5, 3, 1, 2, 4, 6, 8, 10, 12 87 }; 88 89 // values in this table range from -1..23; adjust retrieved value by -1 90 static const uint16 vlc_tab_tone_level_idx_hi2_huffcodes[24] = { 91 0x0664, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0064, 0x00e4, 92 0x00a4, 0x0068, 0x0004, 0x0008, 0x0014, 0x0018, 0x0000, 0x0001, 93 0x0002, 0x0003, 0x000c, 0x0028, 0x0024, 0x0164, 0x0000, 0x0264 94 }; 95 96 static const byte vlc_tab_tone_level_idx_hi2_huffbits[24] = { 97 11, 0, 0, 0, 0, 0, 10, 8, 8, 7, 6, 6, 5, 5, 4, 2, 2, 2, 4, 7, 8, 9, 0, 11 98 }; 99 100 // values in this table range from -1..8; adjust retrieved value by -1 101 static const byte vlc_tab_type30_huffcodes[9] = { 102 0x3c, 0x06, 0x00, 0x01, 0x03, 0x02, 0x04, 0x0c, 0x1c 103 }; 104 105 static const byte vlc_tab_type30_huffbits[9] = { 106 6, 3, 3, 2, 2, 3, 4, 5, 6 107 }; 108 109 // values in this table range from -1..9; adjust retrieved value by -1 110 static const byte vlc_tab_type34_huffcodes[10] = { 111 0x18, 0x00, 0x01, 0x04, 0x05, 0x07, 0x03, 0x02, 0x06, 0x08 112 }; 113 114 static const byte vlc_tab_type34_huffbits[10] = { 115 5, 4, 3, 3, 3, 3, 3, 3, 3, 5 116 }; 117 118 // values in this table range from -1..22; adjust retrieved value by -1 119 static const uint16 vlc_tab_fft_tone_offset_0_huffcodes[23] = { 120 0x038e, 0x0001, 0x0000, 0x0022, 0x000a, 0x0006, 0x0012, 0x0002, 121 0x001e, 0x003e, 0x0056, 0x0016, 0x000e, 0x0032, 0x0072, 0x0042, 122 0x008e, 0x004e, 0x00f2, 0x002e, 0x0036, 0x00c2, 0x018e 123 }; 124 125 static const byte vlc_tab_fft_tone_offset_0_huffbits[23] = { 126 10, 1, 2, 6, 4, 5, 6, 7, 6, 6, 7, 7, 8, 7, 8, 8, 9, 7, 8, 6, 6, 8, 10 127 }; 128 129 // values in this table range from -1..27; adjust retrieved value by -1 130 static const uint16 vlc_tab_fft_tone_offset_1_huffcodes[28] = { 131 0x07a4, 0x0001, 0x0020, 0x0012, 0x001c, 0x0008, 0x0006, 0x0010, 132 0x0000, 0x0014, 0x0004, 0x0032, 0x0070, 0x000c, 0x0002, 0x003a, 133 0x001a, 0x002c, 0x002a, 0x0022, 0x0024, 0x000a, 0x0064, 0x0030, 134 0x0062, 0x00a4, 0x01a4, 0x03a4 135 }; 136 137 static const byte vlc_tab_fft_tone_offset_1_huffbits[28] = { 138 11, 1, 6, 6, 5, 4, 3, 6, 6, 5, 6, 6, 7, 6, 6, 6, 139 6, 6, 6, 7, 8, 6, 7, 7, 7, 9, 10, 11 140 }; 141 142 // values in this table range from -1..31; adjust retrieved value by -1 143 static const uint16 vlc_tab_fft_tone_offset_2_huffcodes[32] = { 144 0x1760, 0x0001, 0x0000, 0x0082, 0x000c, 0x0006, 0x0003, 0x0007, 145 0x0008, 0x0004, 0x0010, 0x0012, 0x0022, 0x001a, 0x0000, 0x0020, 146 0x000a, 0x0040, 0x004a, 0x006a, 0x002a, 0x0042, 0x0002, 0x0060, 147 0x00aa, 0x00e0, 0x00c2, 0x01c2, 0x0160, 0x0360, 0x0760, 0x0f60 148 }; 149 150 static const byte vlc_tab_fft_tone_offset_2_huffbits[32] = { 151 13, 2, 0, 8, 4, 3, 3, 3, 4, 4, 5, 5, 6, 5, 7, 7, 152 7, 7, 7, 7, 8, 8, 8, 9, 8, 8, 9, 9, 10, 11, 13, 12 153 }; 154 155 // values in this table range from -1..34; adjust retrieved value by -1 156 static const uint16 vlc_tab_fft_tone_offset_3_huffcodes[35] = { 157 0x33ea, 0x0005, 0x0000, 0x000c, 0x0000, 0x0006, 0x0003, 0x0008, 158 0x0002, 0x0001, 0x0004, 0x0007, 0x001a, 0x000f, 0x001c, 0x002c, 159 0x000a, 0x001d, 0x002d, 0x002a, 0x000d, 0x004c, 0x008c, 0x006a, 160 0x00cd, 0x004d, 0x00ea, 0x020c, 0x030c, 0x010c, 0x01ea, 0x07ea, 161 0x0bea, 0x03ea, 0x13ea 162 }; 163 164 static const byte vlc_tab_fft_tone_offset_3_huffbits[35] = { 165 14, 4, 0, 10, 4, 3, 3, 4, 4, 3, 4, 4, 5, 4, 5, 6, 166 6, 5, 6, 7, 7, 7, 8, 8, 8, 8, 9, 10, 10, 10, 10, 11, 167 12, 13, 14 168 }; 169 170 // values in this table range from -1..37; adjust retrieved value by -1 171 static const uint16 vlc_tab_fft_tone_offset_4_huffcodes[38] = { 172 0x5282, 0x0016, 0x0000, 0x0136, 0x0004, 0x0000, 0x0007, 0x000a, 173 0x000e, 0x0003, 0x0001, 0x000d, 0x0006, 0x0009, 0x0012, 0x0005, 174 0x0025, 0x0022, 0x0015, 0x0002, 0x0076, 0x0035, 0x0042, 0x00c2, 175 0x0182, 0x00b6, 0x0036, 0x03c2, 0x0482, 0x01c2, 0x0682, 0x0882, 176 0x0a82, 0x0082, 0x0282, 0x1282, 0x3282, 0x2282 177 }; 178 179 static const byte vlc_tab_fft_tone_offset_4_huffbits[38] = { 180 15, 6, 0, 9, 3, 3, 3, 4, 4, 3, 4, 4, 5, 4, 5, 6, 181 6, 6, 6, 8, 7, 6, 8, 9, 9, 8, 9, 10, 11, 10, 11, 12, 182 12, 12, 14, 15, 14, 14 183 }; 184 185 /// FFT TABLES 186 187 // values in this table range from -1..27; adjust retrieved value by -1 188 static const uint16 fft_level_exp_alt_huffcodes[28] = { 189 0x1ec6, 0x0006, 0x00c2, 0x0142, 0x0242, 0x0246, 0x00c6, 0x0046, 190 0x0042, 0x0146, 0x00a2, 0x0062, 0x0026, 0x0016, 0x000e, 0x0005, 191 0x0004, 0x0003, 0x0000, 0x0001, 0x000a, 0x0012, 0x0002, 0x0022, 192 0x01c6, 0x02c6, 0x06c6, 0x0ec6 193 }; 194 195 static const byte fft_level_exp_alt_huffbits[28] = { 196 13, 7, 8, 9, 10, 10, 10, 10, 10, 9, 8, 7, 6, 5, 4, 3, 197 3, 2, 3, 3, 4, 5, 7, 8, 9, 11, 12, 13 198 }; 199 200 // values in this table range from -1..19; adjust retrieved value by -1 201 static const uint16 fft_level_exp_huffcodes[20] = { 202 0x0f24, 0x0001, 0x0002, 0x0000, 0x0006, 0x0005, 0x0007, 0x000c, 203 0x000b, 0x0014, 0x0013, 0x0004, 0x0003, 0x0023, 0x0064, 0x00a4, 204 0x0024, 0x0124, 0x0324, 0x0724 205 }; 206 207 static const byte fft_level_exp_huffbits[20] = { 208 12, 3, 3, 3, 3, 3, 3, 4, 4, 5, 5, 6, 6, 6, 7, 8, 9, 10, 11, 12 209 }; 210 211 // values in this table range from -1..6; adjust retrieved value by -1 212 static const byte fft_stereo_exp_huffcodes[7] = { 213 0x3e, 0x01, 0x00, 0x02, 0x06, 0x0e, 0x1e 214 }; 215 216 static const byte fft_stereo_exp_huffbits[7] = { 217 6, 1, 2, 3, 4, 5, 6 218 }; 219 220 // values in this table range from -1..8; adjust retrieved value by -1 221 static const byte fft_stereo_phase_huffcodes[9] = { 222 0x35, 0x02, 0x00, 0x01, 0x0d, 0x15, 0x05, 0x09, 0x03 223 }; 224 225 static const byte fft_stereo_phase_huffbits[9] = { 226 6, 2, 2, 4, 4, 6, 5, 4, 2 227 }; 228 229 static const int fft_cutoff_index_table[4][2] = { 230 { 1, 2 }, {-1, 0 }, {-1,-2 }, { 0, 0 } 231 }; 232 233 static const int16 fft_level_index_table[256] = { 234 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 235 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 236 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 237 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 238 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 239 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 240 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 241 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 242 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 243 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 244 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 245 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 246 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 247 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 248 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 249 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 250 }; 251 252 static const byte last_coeff[3] = { 253 4, 7, 10 254 }; 255 256 static const byte coeff_per_sb_for_avg[3][30] = { 257 { 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 }, 258 { 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 }, 259 { 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 } 260 }; 261 262 static const uint32 dequant_table[3][10][30] = { 263 { { 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 }, 264 { 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 }, 265 { 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 }, 266 { 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 }, 267 { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 268 { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 269 { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 270 { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 271 { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 272 { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, 273 { { 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 }, 274 { 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 }, 275 { 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 }, 276 { 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 }, 277 { 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 }, 278 { 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 }, 279 { 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 }, 280 { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 281 { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 282 { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, 283 { { 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 }, 284 { 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 }, 285 { 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 }, 286 { 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 }, 287 { 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 }, 288 { 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 }, 289 { 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 }, 290 { 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 }, 291 { 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 }, 292 { 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 } } 293 }; 294 295 static const byte coeff_per_sb_for_dequant[3][30] = { 296 { 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 }, 297 { 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 }, 298 { 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 } 299 }; 300 301 // first index is subband, 2nd index is 0, 1 or 3 (2 is unused) 302 static const int8 tone_level_idx_offset_table[30][4] = { 303 { -50, -50, 0, -50 }, 304 { -50, -50, 0, -50 }, 305 { -50, -9, 0, -19 }, 306 { -16, -6, 0, -12 }, 307 { -11, -4, 0, -8 }, 308 { -8, -3, 0, -6 }, 309 { -7, -3, 0, -5 }, 310 { -6, -2, 0, -4 }, 311 { -5, -2, 0, -3 }, 312 { -4, -1, 0, -3 }, 313 { -4, -1, 0, -2 }, 314 { -3, -1, 0, -2 }, 315 { -3, -1, 0, -2 }, 316 { -3, -1, 0, -2 }, 317 { -2, -1, 0, -1 }, 318 { -2, -1, 0, -1 }, 319 { -2, -1, 0, -1 }, 320 { -2, 0, 0, -1 }, 321 { -2, 0, 0, -1 }, 322 { -1, 0, 0, -1 }, 323 { -1, 0, 0, -1 }, 324 { -1, 0, 0, -1 }, 325 { -1, 0, 0, -1 }, 326 { -1, 0, 0, -1 }, 327 { -1, 0, 0, -1 }, 328 { -1, 0, 0, -1 }, 329 { -1, 0, 0, 0 }, 330 { -1, 0, 0, 0 }, 331 { -1, 0, 0, 0 }, 332 { -1, 0, 0, 0 } 333 }; 334 335 /* all my samples have 1st index 0 or 1 */ 336 /* second index is subband, only indexes 0-29 seem to be used */ 337 static const int8 coding_method_table[5][30] = { 338 { 34, 30, 24, 24, 16, 16, 16, 16, 10, 10, 10, 10, 10, 10, 10, 339 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10 340 }, 341 { 34, 30, 24, 24, 16, 16, 16, 16, 10, 10, 10, 10, 10, 10, 10, 342 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10 343 }, 344 { 34, 30, 30, 30, 24, 24, 16, 16, 16, 16, 16, 16, 10, 10, 10, 345 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10 346 }, 347 { 34, 34, 30, 30, 24, 24, 24, 24, 16, 16, 16, 16, 16, 16, 16, 348 16, 16, 16, 16, 16, 16, 16, 10, 10, 10, 10, 10, 10, 10, 10 349 }, 350 { 34, 34, 30, 30, 30, 30, 30, 30, 24, 24, 24, 24, 24, 24, 24, 351 24, 24, 24, 24, 24, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16 352 }, 353 }; 354 355 static const int vlc_stage3_values[60] = { 356 0, 1, 2, 3, 4, 6, 8, 10, 12, 16, 20, 24, 357 28, 36, 44, 52, 60, 76, 92, 108, 124, 156, 188, 220, 358 252, 316, 380, 444, 508, 636, 764, 892, 1020, 1276, 1532, 1788, 359 2044, 2556, 3068, 3580, 4092, 5116, 6140, 7164, 8188, 10236, 12284, 14332, 360 16380, 20476, 24572, 28668, 32764, 40956, 49148, 57340, 65532, 81916, 98300,114684 361 }; 362 363 static const float fft_tone_sample_table[4][16][5] = { 364 { { .0100000000f,-.0037037037f,-.0020000000f,-.0069444444f,-.0018416207f }, 365 { .0416666667f, .0000000000f, .0000000000f,-.0208333333f,-.0123456791f }, 366 { .1250000000f, .0558035709f, .0330687836f,-.0164473690f,-.0097465888f }, 367 { .1562500000f, .0625000000f, .0370370370f,-.0062500000f,-.0037037037f }, 368 { .1996007860f, .0781250000f, .0462962948f, .0022727272f, .0013468013f }, 369 { .2000000000f, .0625000000f, .0370370373f, .0208333333f, .0074074073f }, 370 { .2127659619f, .0555555556f, .0329218097f, .0208333333f, .0123456791f }, 371 { .2173913121f, .0473484844f, .0280583613f, .0347222239f, .0205761325f }, 372 { .2173913121f, .0347222239f, .0205761325f, .0473484844f, .0280583613f }, 373 { .2127659619f, .0208333333f, .0123456791f, .0555555556f, .0329218097f }, 374 { .2000000000f, .0208333333f, .0074074073f, .0625000000f, .0370370370f }, 375 { .1996007860f, .0022727272f, .0013468013f, .0781250000f, .0462962948f }, 376 { .1562500000f,-.0062500000f,-.0037037037f, .0625000000f, .0370370370f }, 377 { .1250000000f,-.0164473690f,-.0097465888f, .0558035709f, .0330687836f }, 378 { .0416666667f,-.0208333333f,-.0123456791f, .0000000000f, .0000000000f }, 379 { .0100000000f,-.0069444444f,-.0018416207f,-.0037037037f,-.0020000000f } }, 380 381 { { .0050000000f,-.0200000000f, .0125000000f,-.3030303030f, .0020000000f }, 382 { .1041666642f, .0400000000f,-.0250000000f, .0333333333f,-.0200000000f }, 383 { .1250000000f, .0100000000f, .0142857144f,-.0500000007f,-.0200000000f }, 384 { .1562500000f,-.0006250000f,-.00049382716f,-.000625000f,-.00049382716f }, 385 { .1562500000f,-.0006250000f,-.00049382716f,-.000625000f,-.00049382716f }, 386 { .1250000000f,-.0500000000f,-.0200000000f, .0100000000f, .0142857144f }, 387 { .1041666667f, .0333333333f,-.0200000000f, .0400000000f,-.0250000000f }, 388 { .0050000000f,-.3030303030f, .0020000001f,-.0200000000f, .0125000000f }, 389 { .0000000000f, .0000000000f, .0000000000f, .0000000000f, .0000000000f }, 390 { .0000000000f, .0000000000f, .0000000000f, .0000000000f, .0000000000f }, 391 { .0000000000f, .0000000000f, .0000000000f, .0000000000f, .0000000000f }, 392 { .0000000000f, .0000000000f, .0000000000f, .0000000000f, .0000000000f }, 393 { .0000000000f, .0000000000f, .0000000000f, .0000000000f, .0000000000f }, 394 { .0000000000f, .0000000000f, .0000000000f, .0000000000f, .0000000000f }, 395 { .0000000000f, .0000000000f, .0000000000f, .0000000000f, .0000000000f }, 396 { .0000000000f, .0000000000f, .0000000000f, .0000000000f, .0000000000f } }, 397 398 { { .1428571492f, .1250000000f,-.0285714287f,-.0357142873f, .0208333333f }, 399 { .1818181818f, .0588235296f, .0333333333f, .0212765951f, .0100000000f }, 400 { .1818181818f, .0212765951f, .0100000000f, .0588235296f, .0333333333f }, 401 { .1428571492f,-.0357142873f, .0208333333f, .1250000000f,-.0285714287f }, 402 { .0000000000f, .0000000000f, .0000000000f, .0000000000f, .0000000000f }, 403 { .0000000000f, .0000000000f, .0000000000f, .0000000000f, .0000000000f }, 404 { .0000000000f, .0000000000f, .0000000000f, .0000000000f, .0000000000f }, 405 { .0000000000f, .0000000000f, .0000000000f, .0000000000f, .0000000000f }, 406 { .0000000000f, .0000000000f, .0000000000f, .0000000000f, .0000000000f }, 407 { .0000000000f, .0000000000f, .0000000000f, .0000000000f, .0000000000f }, 408 { .0000000000f, .0000000000f, .0000000000f, .0000000000f, .0000000000f }, 409 { .0000000000f, .0000000000f, .0000000000f, .0000000000f, .0000000000f }, 410 { .0000000000f, .0000000000f, .0000000000f, .0000000000f, .0000000000f }, 411 { .0000000000f, .0000000000f, .0000000000f, .0000000000f, .0000000000f }, 412 { .0000000000f, .0000000000f, .0000000000f, .0000000000f, .0000000000f }, 413 { .0000000000f, .0000000000f, .0000000000f, .0000000000f, .0000000000f } }, 414 415 { { .0000000000f, .0000000000f, .0000000000f, .0000000000f, .0000000000f }, 416 { .0000000000f, .0000000000f, .0000000000f, .0000000000f, .0000000000f }, 417 { .0000000000f, .0000000000f, .0000000000f, .0000000000f, .0000000000f }, 418 { .0000000000f, .0000000000f, .0000000000f, .0000000000f, .0000000000f }, 419 { .0000000000f, .0000000000f, .0000000000f, .0000000000f, .0000000000f }, 420 { .0000000000f, .0000000000f, .0000000000f, .0000000000f, .0000000000f }, 421 { .0000000000f, .0000000000f, .0000000000f, .0000000000f, .0000000000f }, 422 { .0000000000f, .0000000000f, .0000000000f, .0000000000f, .0000000000f }, 423 { .0000000000f, .0000000000f, .0000000000f, .0000000000f, .0000000000f }, 424 { .0000000000f, .0000000000f, .0000000000f, .0000000000f, .0000000000f }, 425 { .0000000000f, .0000000000f, .0000000000f, .0000000000f, .0000000000f }, 426 { .0000000000f, .0000000000f, .0000000000f, .0000000000f, .0000000000f }, 427 { .0000000000f, .0000000000f, .0000000000f, .0000000000f, .0000000000f }, 428 { .0000000000f, .0000000000f, .0000000000f, .0000000000f, .0000000000f }, 429 { .0000000000f, .0000000000f, .0000000000f, .0000000000f, .0000000000f }, 430 { .0000000000f, .0000000000f, .0000000000f, .0000000000f, .0000000000f } } 431 }; 432 433 static const float fft_tone_level_table[2][64] = { { 434 // pow ~ (i > 46) ? 0 : (((((i & 1) ? 431 : 304) << (i >> 1))) / 1024.0); 435 0.17677669f, 0.42677650f, 0.60355347f, 0.85355347f, 436 1.20710683f, 1.68359375f, 2.37500000f, 3.36718750f, 437 4.75000000f, 6.73437500f, 9.50000000f, 13.4687500f, 438 19.0000000f, 26.9375000f, 38.0000000f, 53.8750000f, 439 76.0000000f, 107.750000f, 152.000000f, 215.500000f, 440 304.000000f, 431.000000f, 608.000000f, 862.000000f, 441 1216.00000f, 1724.00000f, 2432.00000f, 3448.00000f, 442 4864.00000f, 6896.00000f, 9728.00000f, 13792.0000f, 443 19456.0000f, 27584.0000f, 38912.0000f, 55168.0000f, 444 77824.0000f, 110336.000f, 155648.000f, 220672.000f, 445 311296.000f, 441344.000f, 622592.000f, 882688.000f, 446 1245184.00f, 1765376.00f, 2490368.00f, 0.00000000f, 447 0.00000000f, 0.00000000f, 0.00000000f, 0.00000000f, 448 0.00000000f, 0.00000000f, 0.00000000f, 0.00000000f, 449 0.00000000f, 0.00000000f, 0.00000000f, 0.00000000f, 450 0.00000000f, 0.00000000f, 0.00000000f, 0.00000000f, 451 }, { 452 // pow = (i > 45) ? 0 : ((((i & 1) ? 431 : 304) << (i >> 1)) / 512.0); 453 0.59375000f, 0.84179688f, 1.18750000f, 1.68359375f, 454 2.37500000f, 3.36718750f, 4.75000000f, 6.73437500f, 455 9.50000000f, 13.4687500f, 19.0000000f, 26.9375000f, 456 38.0000000f, 53.8750000f, 76.0000000f, 107.750000f, 457 152.000000f, 215.500000f, 304.000000f, 431.000000f, 458 608.000000f, 862.000000f, 1216.00000f, 1724.00000f, 459 2432.00000f, 3448.00000f, 4864.00000f, 6896.00000f, 460 9728.00000f, 13792.0000f, 19456.0000f, 27584.0000f, 461 38912.0000f, 55168.0000f, 77824.0000f, 110336.000f, 462 155648.000f, 220672.000f, 311296.000f, 441344.000f, 463 622592.000f, 882688.000f, 1245184.00f, 1765376.00f, 464 2490368.00f, 3530752.00f, 0.00000000f, 0.00000000f, 465 0.00000000f, 0.00000000f, 0.00000000f, 0.00000000f, 466 0.00000000f, 0.00000000f, 0.00000000f, 0.00000000f, 467 0.00000000f, 0.00000000f, 0.00000000f, 0.00000000f, 468 0.00000000f, 0.00000000f, 0.00000000f, 0.00000000f 469 } }; 470 471 static const float fft_tone_envelope_table[4][31] = { 472 { .009607375f, .038060248f, .084265202f, .146446645f, .222214907f, .308658302f, 473 .402454883f, .500000060f, .597545207f, .691341758f, .777785182f, .853553414f, 474 .915734828f, .961939812f, .990392685f, 1.00000000f, .990392625f, .961939752f, 475 .915734768f, .853553295f, .777785063f, .691341639f, .597545087f, .500000000f, 476 .402454853f, .308658272f, .222214878f, .146446615f, .084265172f, .038060218f, 477 .009607345f }, 478 { .038060248f, .146446645f, .308658302f, .500000060f, .691341758f, .853553414f, 479 .961939812f, 1.00000000f, .961939752f, .853553295f, .691341639f, .500000000f, 480 .308658272f, .146446615f, .038060218f, .000000000f, .000000000f, .000000000f, 481 .000000000f, .000000000f, .000000000f, .000000000f, .000000000f, .000000000f, 482 .000000000f, .000000000f, .000000000f, .000000000f, .000000000f, .000000000f, 483 .000000000f }, 484 { .146446645f, .500000060f, .853553414f, 1.00000000f, .853553295f, .500000000f, 485 .146446615f, .000000000f, .000000000f, .000000000f, .000000000f, .000000000f, 486 .000000000f, .000000000f, .000000000f, .000000000f, .000000000f, .000000000f, 487 .000000000f, .000000000f, .000000000f, .000000000f, .000000000f, .000000000f, 488 .000000000f, .000000000f, .000000000f, .000000000f, .000000000f, .000000000f, 489 .000000000f }, 490 { .500000060f, 1.00000000f, .500000000f, .000000000f, .000000000f, .000000000f, 491 .000000000f, .000000000f, .000000000f, .000000000f, .000000000f, .000000000f, 492 .000000000f, .000000000f, .000000000f, .000000000f, .000000000f, .000000000f, 493 .000000000f, .000000000f, .000000000f, .000000000f, .000000000f, .000000000f, 494 .000000000f, .000000000f, .000000000f, .000000000f, .000000000f, .000000000f, 495 .000000000f } 496 }; 497 498 static const float sb_noise_attenuation[32] = { 499 0.0f, 0.0f, 0.3f, 0.4f, 0.5f, 0.7f, 1.0f, 1.0f, 500 1.0f, 1.0f, 1.0f, 1.0f, 1.0f, 1.0f, 1.0f, 1.0f, 501 1.0f, 1.0f, 1.0f, 1.0f, 1.0f, 1.0f, 1.0f, 1.0f, 502 1.0f, 1.0f, 1.0f, 1.0f, 1.0f, 1.0f, 1.0f, 1.0f, 503 }; 504 505 static const byte fft_subpackets[32] = { 506 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 507 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0 508 }; 509 510 // first index is joined_stereo, second index is 0 or 2 (1 is unused) 511 static const float dequant_1bit[2][3] = { 512 {-0.920000f, 0.000000f, 0.920000f }, 513 {-0.890000f, 0.000000f, 0.890000f } 514 }; 515 516 static const float type30_dequant[8] = { 517 -1.0f,-0.625f,-0.291666656732559f,0.0f, 518 0.25f,0.5f,0.75f,1.0f, 519 }; 520 521 static const float type34_delta[10] = { // FIXME: covers 8 entries.. 522 -1.0f,-0.60947573184967f,-0.333333343267441f,-0.138071194291115f,0.0f, 523 0.138071194291115f,0.333333343267441f,0.60947573184967f,1.0f,0.0f, 524 }; 525 526 } // End of namespace Audio 527 528 #endif 529