ResidualVM logo ResidualVM website - Forums - Contact us BuildBot - Doxygen - Wiki curved edge

qdm2data.h

Go to the documentation of this file.
00001 /* ScummVM - Graphic Adventure Engine
00002  *
00003  * ScummVM is the legal property of its developers, whose names
00004  * are too numerous to list here. Please refer to the COPYRIGHT
00005  * file distributed with this source distribution.
00006  *
00007  * This program is free software; you can redistribute it and/or
00008  * modify it under the terms of the GNU General Public License
00009  * as published by the Free Software Foundation; either version 2
00010  * of the License, or (at your option) any later version.
00011  *
00012  * This program is distributed in the hope that it will be useful,
00013  * but WITHOUT ANY WARRANTY; without even the implied warranty of
00014  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
00015  * GNU General Public License for more details.
00016  *
00017  * You should have received a copy of the GNU General Public License
00018  * along with this program; if not, write to the Free Software
00019  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
00020  *
00021  */
00022 
00023 #ifndef AUDIO_QDM2DATA_H
00024 #define AUDIO_QDM2DATA_H
00025 
00026 #include "common/scummsys.h"
00027 
00028 namespace Audio {
00029 
00031 
00032 // values in this table range from -1..23; adjust retrieved value by -1
00033 static const uint16 vlc_tab_level_huffcodes[24] = {
00034     0x037c, 0x0004, 0x003c, 0x004c, 0x003a, 0x002c, 0x001c, 0x001a,
00035     0x0024, 0x0014, 0x0001, 0x0002, 0x0000, 0x0003, 0x0007, 0x0005,
00036     0x0006, 0x0008, 0x0009, 0x000a, 0x000c, 0x00fc, 0x007c, 0x017c
00037 };
00038 
00039 static const byte vlc_tab_level_huffbits[24] = {
00040     10, 6, 7, 7, 6, 6, 6, 6, 6, 5, 4, 4, 4, 3, 3, 3, 3, 4, 4, 5, 7, 8, 9, 10
00041 };
00042 
00043 // values in this table range from -1..36; adjust retrieved value by -1
00044 static const uint16 vlc_tab_diff_huffcodes[37] = {
00045     0x1c57, 0x0004, 0x0000, 0x0001, 0x0003, 0x0002, 0x000f, 0x000e,
00046     0x0007, 0x0016, 0x0037, 0x0027, 0x0026, 0x0066, 0x0006, 0x0097,
00047     0x0046, 0x01c6, 0x0017, 0x0786, 0x0086, 0x0257, 0x00d7, 0x0357,
00048     0x00c6, 0x0386, 0x0186, 0x0000, 0x0157, 0x0c57, 0x0057, 0x0000,
00049     0x0b86, 0x0000, 0x1457, 0x0000, 0x0457
00050 };
00051 
00052 static const byte vlc_tab_diff_huffbits[37] = {
00053     13, 3, 3, 2, 3, 3, 4, 4, 6, 5, 6, 6, 7, 7, 8, 8,
00054     8, 9, 8, 11, 9, 10, 8, 10, 9, 12, 10, 0, 10, 13, 11, 0,
00055     12, 0, 13, 0, 13
00056 };
00057 
00058 // values in this table range from -1..5; adjust retrieved value by -1
00059 static const byte vlc_tab_run_huffcodes[6] = {
00060     0x1f, 0x00, 0x01, 0x03, 0x07, 0x0f
00061 };
00062 
00063 static const byte vlc_tab_run_huffbits[6] = {
00064     5, 1, 2, 3, 4, 5
00065 };
00066 
00067 // values in this table range from -1..19; adjust retrieved value by -1
00068 static const uint16 vlc_tab_tone_level_idx_hi1_huffcodes[20] = {
00069     0x5714, 0x000c, 0x0002, 0x0001, 0x0000, 0x0004, 0x0034, 0x0054,
00070     0x0094, 0x0014, 0x0114, 0x0214, 0x0314, 0x0614, 0x0e14, 0x0f14,
00071     0x2714, 0x0714, 0x1714, 0x3714
00072 };
00073 
00074 static const byte vlc_tab_tone_level_idx_hi1_huffbits[20] = {
00075     15, 4, 2, 1, 3, 5, 6, 7, 8, 10, 10, 11, 11, 12, 12, 12, 14, 14, 15, 14
00076 };
00077 
00078 // values in this table range from -1..23; adjust retrieved value by -1
00079 static const uint16 vlc_tab_tone_level_idx_mid_huffcodes[24] = {
00080     0x0fea, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
00081     0x0000, 0x0000, 0x0000, 0x0000, 0x03ea, 0x00ea, 0x002a, 0x001a,
00082     0x0006, 0x0001, 0x0000, 0x0002, 0x000a, 0x006a, 0x01ea, 0x07ea
00083 };
00084 
00085 static const byte vlc_tab_tone_level_idx_mid_huffbits[24] = {
00086     12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 9, 7, 5, 3, 1, 2, 4, 6, 8, 10, 12
00087 };
00088 
00089 // values in this table range from -1..23; adjust retrieved value by -1
00090 static const uint16 vlc_tab_tone_level_idx_hi2_huffcodes[24] = {
00091     0x0664, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0064, 0x00e4,
00092     0x00a4, 0x0068, 0x0004, 0x0008, 0x0014, 0x0018, 0x0000, 0x0001,
00093     0x0002, 0x0003, 0x000c, 0x0028, 0x0024, 0x0164, 0x0000, 0x0264
00094 };
00095 
00096 static const byte vlc_tab_tone_level_idx_hi2_huffbits[24] = {
00097     11, 0, 0, 0, 0, 0, 10, 8, 8, 7, 6, 6, 5, 5, 4, 2, 2, 2, 4, 7, 8, 9, 0, 11
00098 };
00099 
00100 // values in this table range from -1..8; adjust retrieved value by -1
00101 static const byte vlc_tab_type30_huffcodes[9] = {
00102     0x3c, 0x06, 0x00, 0x01, 0x03, 0x02, 0x04, 0x0c, 0x1c
00103 };
00104 
00105 static const byte vlc_tab_type30_huffbits[9] = {
00106     6, 3, 3, 2, 2, 3, 4, 5, 6
00107 };
00108 
00109 // values in this table range from -1..9; adjust retrieved value by -1
00110 static const byte vlc_tab_type34_huffcodes[10] = {
00111     0x18, 0x00, 0x01, 0x04, 0x05, 0x07, 0x03, 0x02, 0x06, 0x08
00112 };
00113 
00114 static const byte vlc_tab_type34_huffbits[10] = {
00115     5, 4, 3, 3, 3, 3, 3, 3, 3, 5
00116 };
00117 
00118 // values in this table range from -1..22; adjust retrieved value by -1
00119 static const uint16 vlc_tab_fft_tone_offset_0_huffcodes[23] = {
00120     0x038e, 0x0001, 0x0000, 0x0022, 0x000a, 0x0006, 0x0012, 0x0002,
00121     0x001e, 0x003e, 0x0056, 0x0016, 0x000e, 0x0032, 0x0072, 0x0042,
00122     0x008e, 0x004e, 0x00f2, 0x002e, 0x0036, 0x00c2, 0x018e
00123 };
00124 
00125 static const byte vlc_tab_fft_tone_offset_0_huffbits[23] = {
00126     10, 1, 2, 6, 4, 5, 6, 7, 6, 6, 7, 7, 8, 7, 8, 8, 9, 7, 8, 6, 6, 8, 10
00127 };
00128 
00129 // values in this table range from -1..27; adjust retrieved value by -1
00130 static const uint16 vlc_tab_fft_tone_offset_1_huffcodes[28] = {
00131     0x07a4, 0x0001, 0x0020, 0x0012, 0x001c, 0x0008, 0x0006, 0x0010,
00132     0x0000, 0x0014, 0x0004, 0x0032, 0x0070, 0x000c, 0x0002, 0x003a,
00133     0x001a, 0x002c, 0x002a, 0x0022, 0x0024, 0x000a, 0x0064, 0x0030,
00134     0x0062, 0x00a4, 0x01a4, 0x03a4
00135 };
00136 
00137 static const byte vlc_tab_fft_tone_offset_1_huffbits[28] = {
00138     11, 1, 6, 6, 5, 4, 3, 6, 6, 5, 6, 6, 7, 6, 6, 6,
00139     6, 6, 6, 7, 8, 6, 7, 7, 7, 9, 10, 11
00140 };
00141 
00142 // values in this table range from -1..31; adjust retrieved value by -1
00143 static const uint16 vlc_tab_fft_tone_offset_2_huffcodes[32] = {
00144     0x1760, 0x0001, 0x0000, 0x0082, 0x000c, 0x0006, 0x0003, 0x0007,
00145     0x0008, 0x0004, 0x0010, 0x0012, 0x0022, 0x001a, 0x0000, 0x0020,
00146     0x000a, 0x0040, 0x004a, 0x006a, 0x002a, 0x0042, 0x0002, 0x0060,
00147     0x00aa, 0x00e0, 0x00c2, 0x01c2, 0x0160, 0x0360, 0x0760, 0x0f60
00148 };
00149 
00150 static const byte vlc_tab_fft_tone_offset_2_huffbits[32] = {
00151     13, 2, 0, 8, 4, 3, 3, 3, 4, 4, 5, 5, 6, 5, 7, 7,
00152     7, 7, 7, 7, 8, 8, 8, 9, 8, 8, 9, 9, 10, 11, 13, 12
00153 };
00154 
00155 // values in this table range from -1..34; adjust retrieved value by -1
00156 static const uint16 vlc_tab_fft_tone_offset_3_huffcodes[35] = {
00157     0x33ea, 0x0005, 0x0000, 0x000c, 0x0000, 0x0006, 0x0003, 0x0008,
00158     0x0002, 0x0001, 0x0004, 0x0007, 0x001a, 0x000f, 0x001c, 0x002c,
00159     0x000a, 0x001d, 0x002d, 0x002a, 0x000d, 0x004c, 0x008c, 0x006a,
00160     0x00cd, 0x004d, 0x00ea, 0x020c, 0x030c, 0x010c, 0x01ea, 0x07ea,
00161     0x0bea, 0x03ea, 0x13ea
00162 };
00163 
00164 static const byte vlc_tab_fft_tone_offset_3_huffbits[35] = {
00165     14, 4, 0, 10, 4, 3, 3, 4, 4, 3, 4, 4, 5, 4, 5, 6,
00166     6, 5, 6, 7, 7, 7, 8, 8, 8, 8, 9, 10, 10, 10, 10, 11,
00167     12, 13, 14
00168 };
00169 
00170 // values in this table range from -1..37; adjust retrieved value by -1
00171 static const uint16 vlc_tab_fft_tone_offset_4_huffcodes[38] = {
00172     0x5282, 0x0016, 0x0000, 0x0136, 0x0004, 0x0000, 0x0007, 0x000a,
00173     0x000e, 0x0003, 0x0001, 0x000d, 0x0006, 0x0009, 0x0012, 0x0005,
00174     0x0025, 0x0022, 0x0015, 0x0002, 0x0076, 0x0035, 0x0042, 0x00c2,
00175     0x0182, 0x00b6, 0x0036, 0x03c2, 0x0482, 0x01c2, 0x0682, 0x0882,
00176     0x0a82, 0x0082, 0x0282, 0x1282, 0x3282, 0x2282
00177 };
00178 
00179 static const byte vlc_tab_fft_tone_offset_4_huffbits[38] = {
00180     15, 6, 0, 9, 3, 3, 3, 4, 4, 3, 4, 4, 5, 4, 5, 6,
00181     6, 6, 6, 8, 7, 6, 8, 9, 9, 8, 9, 10, 11, 10, 11, 12,
00182     12, 12, 14, 15, 14, 14
00183 };
00184 
00186 
00187 // values in this table range from -1..27; adjust retrieved value by -1
00188 static const uint16 fft_level_exp_alt_huffcodes[28] = {
00189     0x1ec6, 0x0006, 0x00c2, 0x0142, 0x0242, 0x0246, 0x00c6, 0x0046,
00190     0x0042, 0x0146, 0x00a2, 0x0062, 0x0026, 0x0016, 0x000e, 0x0005,
00191     0x0004, 0x0003, 0x0000, 0x0001, 0x000a, 0x0012, 0x0002, 0x0022,
00192     0x01c6, 0x02c6, 0x06c6, 0x0ec6
00193 };
00194 
00195 static const byte fft_level_exp_alt_huffbits[28] = {
00196     13, 7, 8, 9, 10, 10, 10, 10, 10, 9, 8, 7, 6, 5, 4, 3,
00197     3, 2, 3, 3, 4, 5, 7, 8, 9, 11, 12, 13
00198 };
00199 
00200 // values in this table range from -1..19; adjust retrieved value by -1
00201 static const uint16 fft_level_exp_huffcodes[20] = {
00202     0x0f24, 0x0001, 0x0002, 0x0000, 0x0006, 0x0005, 0x0007, 0x000c,
00203     0x000b, 0x0014, 0x0013, 0x0004, 0x0003, 0x0023, 0x0064, 0x00a4,
00204     0x0024, 0x0124, 0x0324, 0x0724
00205 };
00206 
00207 static const byte fft_level_exp_huffbits[20] = {
00208     12, 3, 3, 3, 3, 3, 3, 4, 4, 5, 5, 6, 6, 6, 7, 8, 9, 10, 11, 12
00209 };
00210 
00211 // values in this table range from -1..6; adjust retrieved value by -1
00212 static const byte fft_stereo_exp_huffcodes[7] = {
00213     0x3e, 0x01, 0x00, 0x02, 0x06, 0x0e, 0x1e
00214 };
00215 
00216 static const byte fft_stereo_exp_huffbits[7] = {
00217     6, 1, 2, 3, 4, 5, 6
00218 };
00219 
00220 // values in this table range from -1..8; adjust retrieved value by -1
00221 static const byte fft_stereo_phase_huffcodes[9] = {
00222     0x35, 0x02, 0x00, 0x01, 0x0d, 0x15, 0x05, 0x09, 0x03
00223 };
00224 
00225 static const byte fft_stereo_phase_huffbits[9] = {
00226     6, 2, 2, 4, 4, 6, 5, 4, 2
00227 };
00228 
00229 static const int fft_cutoff_index_table[4][2] = {
00230     { 1, 2 }, {-1, 0 }, {-1,-2 }, { 0, 0 }
00231 };
00232 
00233 static const int16 fft_level_index_table[256] = {
00234     0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1,
00235     2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
00236     3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
00237     3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
00238     4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
00239     4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
00240     4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
00241     4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
00242     5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
00243     5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
00244     5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
00245     5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
00246     5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
00247     5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
00248     5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
00249     5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
00250 };
00251 
00252 static const byte last_coeff[3] = {
00253     4, 7, 10
00254 };
00255 
00256 static const byte coeff_per_sb_for_avg[3][30] = {
00257     { 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 },
00258     { 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 },
00259     { 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 }
00260 };
00261 
00262 static const uint32 dequant_table[3][10][30] = {
00263     { { 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 },
00264       { 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 },
00265       { 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 },
00266       { 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 },
00267       { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
00268       { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
00269       { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
00270       { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
00271       { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
00272       { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
00273     { { 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 },
00274       { 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 },
00275       { 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 },
00276       { 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 },
00277       { 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 },
00278       { 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 },
00279       { 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 },
00280       { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
00281       { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
00282       { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
00283     { { 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 },
00284       { 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 },
00285       { 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 },
00286       { 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 },
00287       { 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 },
00288       { 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 },
00289       { 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 },
00290       { 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 },
00291       { 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 },
00292       { 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 } }
00293 };
00294 
00295 static const byte coeff_per_sb_for_dequant[3][30] = {
00296     { 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 },
00297     { 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 },
00298     { 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 }
00299 };
00300 
00301 // first index is subband, 2nd index is 0, 1 or 3 (2 is unused)
00302 static const int8 tone_level_idx_offset_table[30][4] = {
00303     { -50, -50,  0, -50 },
00304     { -50, -50,  0, -50 },
00305     { -50,  -9,  0, -19 },
00306     { -16,  -6,  0, -12 },
00307     { -11,  -4,  0,  -8 },
00308     {  -8,  -3,  0,  -6 },
00309     {  -7,  -3,  0,  -5 },
00310     {  -6,  -2,  0,  -4 },
00311     {  -5,  -2,  0,  -3 },
00312     {  -4,  -1,  0,  -3 },
00313     {  -4,  -1,  0,  -2 },
00314     {  -3,  -1,  0,  -2 },
00315     {  -3,  -1,  0,  -2 },
00316     {  -3,  -1,  0,  -2 },
00317     {  -2,  -1,  0,  -1 },
00318     {  -2,  -1,  0,  -1 },
00319     {  -2,  -1,  0,  -1 },
00320     {  -2,   0,  0,  -1 },
00321     {  -2,   0,  0,  -1 },
00322     {  -1,   0,  0,  -1 },
00323     {  -1,   0,  0,  -1 },
00324     {  -1,   0,  0,  -1 },
00325     {  -1,   0,  0,  -1 },
00326     {  -1,   0,  0,  -1 },
00327     {  -1,   0,  0,  -1 },
00328     {  -1,   0,  0,  -1 },
00329     {  -1,   0,  0,   0 },
00330     {  -1,   0,  0,   0 },
00331     {  -1,   0,  0,   0 },
00332     {  -1,   0,  0,   0 }
00333 };
00334 
00335 /* all my samples have 1st index 0 or 1 */
00336 /* second index is subband, only indexes 0-29 seem to be used */
00337 static const int8 coding_method_table[5][30] = {
00338     { 34, 30, 24, 24, 16, 16, 16, 16, 10, 10, 10, 10, 10, 10, 10,
00339       10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10
00340     },
00341     { 34, 30, 24, 24, 16, 16, 16, 16, 10, 10, 10, 10, 10, 10, 10,
00342       10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10
00343     },
00344     { 34, 30, 30, 30, 24, 24, 16, 16, 16, 16, 16, 16, 10, 10, 10,
00345       10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10
00346     },
00347     { 34, 34, 30, 30, 24, 24, 24, 24, 16, 16, 16, 16, 16, 16, 16,
00348       16, 16, 16, 16, 16, 16, 16, 10, 10, 10, 10, 10, 10, 10, 10
00349     },
00350     { 34, 34, 30, 30, 30, 30, 30, 30, 24, 24, 24, 24, 24, 24, 24,
00351       24, 24, 24, 24, 24, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16
00352     },
00353 };
00354 
00355 static const int vlc_stage3_values[60] = {
00356         0,     1,     2,     3,     4,     6,     8,    10,    12,    16,    20,    24,
00357        28,    36,    44,    52,    60,    76,    92,   108,   124,   156,   188,   220,
00358       252,   316,   380,   444,   508,   636,   764,   892,  1020,  1276,  1532,  1788,
00359      2044,  2556,  3068,  3580,  4092,  5116,  6140,  7164,  8188, 10236, 12284, 14332,
00360     16380, 20476, 24572, 28668, 32764, 40956, 49148, 57340, 65532, 81916, 98300,114684
00361 };
00362 
00363 static const float fft_tone_sample_table[4][16][5] = {
00364     { { .0100000000f,-.0037037037f,-.0020000000f,-.0069444444f,-.0018416207f },
00365       { .0416666667f, .0000000000f, .0000000000f,-.0208333333f,-.0123456791f },
00366       { .1250000000f, .0558035709f, .0330687836f,-.0164473690f,-.0097465888f },
00367       { .1562500000f, .0625000000f, .0370370370f,-.0062500000f,-.0037037037f },
00368       { .1996007860f, .0781250000f, .0462962948f, .0022727272f, .0013468013f },
00369       { .2000000000f, .0625000000f, .0370370373f, .0208333333f, .0074074073f },
00370       { .2127659619f, .0555555556f, .0329218097f, .0208333333f, .0123456791f },
00371       { .2173913121f, .0473484844f, .0280583613f, .0347222239f, .0205761325f },
00372       { .2173913121f, .0347222239f, .0205761325f, .0473484844f, .0280583613f },
00373       { .2127659619f, .0208333333f, .0123456791f, .0555555556f, .0329218097f },
00374       { .2000000000f, .0208333333f, .0074074073f, .0625000000f, .0370370370f },
00375       { .1996007860f, .0022727272f, .0013468013f, .0781250000f, .0462962948f },
00376       { .1562500000f,-.0062500000f,-.0037037037f, .0625000000f, .0370370370f },
00377       { .1250000000f,-.0164473690f,-.0097465888f, .0558035709f, .0330687836f },
00378       { .0416666667f,-.0208333333f,-.0123456791f, .0000000000f, .0000000000f },
00379       { .0100000000f,-.0069444444f,-.0018416207f,-.0037037037f,-.0020000000f } },
00380 
00381     { { .0050000000f,-.0200000000f, .0125000000f,-.3030303030f, .0020000000f },
00382       { .1041666642f, .0400000000f,-.0250000000f, .0333333333f,-.0200000000f },
00383       { .1250000000f, .0100000000f, .0142857144f,-.0500000007f,-.0200000000f },
00384       { .1562500000f,-.0006250000f,-.00049382716f,-.000625000f,-.00049382716f },
00385       { .1562500000f,-.0006250000f,-.00049382716f,-.000625000f,-.00049382716f },
00386       { .1250000000f,-.0500000000f,-.0200000000f, .0100000000f, .0142857144f },
00387       { .1041666667f, .0333333333f,-.0200000000f, .0400000000f,-.0250000000f },
00388       { .0050000000f,-.3030303030f, .0020000001f,-.0200000000f, .0125000000f },
00389       { .0000000000f, .0000000000f, .0000000000f, .0000000000f, .0000000000f },
00390       { .0000000000f, .0000000000f, .0000000000f, .0000000000f, .0000000000f },
00391       { .0000000000f, .0000000000f, .0000000000f, .0000000000f, .0000000000f },
00392       { .0000000000f, .0000000000f, .0000000000f, .0000000000f, .0000000000f },
00393       { .0000000000f, .0000000000f, .0000000000f, .0000000000f, .0000000000f },
00394       { .0000000000f, .0000000000f, .0000000000f, .0000000000f, .0000000000f },
00395       { .0000000000f, .0000000000f, .0000000000f, .0000000000f, .0000000000f },
00396       { .0000000000f, .0000000000f, .0000000000f, .0000000000f, .0000000000f } },
00397 
00398     { { .1428571492f, .1250000000f,-.0285714287f,-.0357142873f, .0208333333f },
00399       { .1818181818f, .0588235296f, .0333333333f, .0212765951f, .0100000000f },
00400       { .1818181818f, .0212765951f, .0100000000f, .0588235296f, .0333333333f },
00401       { .1428571492f,-.0357142873f, .0208333333f, .1250000000f,-.0285714287f },
00402       { .0000000000f, .0000000000f, .0000000000f, .0000000000f, .0000000000f },
00403       { .0000000000f, .0000000000f, .0000000000f, .0000000000f, .0000000000f },
00404       { .0000000000f, .0000000000f, .0000000000f, .0000000000f, .0000000000f },
00405       { .0000000000f, .0000000000f, .0000000000f, .0000000000f, .0000000000f },
00406       { .0000000000f, .0000000000f, .0000000000f, .0000000000f, .0000000000f },
00407       { .0000000000f, .0000000000f, .0000000000f, .0000000000f, .0000000000f },
00408       { .0000000000f, .0000000000f, .0000000000f, .0000000000f, .0000000000f },
00409       { .0000000000f, .0000000000f, .0000000000f, .0000000000f, .0000000000f },
00410       { .0000000000f, .0000000000f, .0000000000f, .0000000000f, .0000000000f },
00411       { .0000000000f, .0000000000f, .0000000000f, .0000000000f, .0000000000f },
00412       { .0000000000f, .0000000000f, .0000000000f, .0000000000f, .0000000000f },
00413       { .0000000000f, .0000000000f, .0000000000f, .0000000000f, .0000000000f } },
00414 
00415     { { .0000000000f, .0000000000f, .0000000000f, .0000000000f, .0000000000f },
00416       { .0000000000f, .0000000000f, .0000000000f, .0000000000f, .0000000000f },
00417       { .0000000000f, .0000000000f, .0000000000f, .0000000000f, .0000000000f },
00418       { .0000000000f, .0000000000f, .0000000000f, .0000000000f, .0000000000f },
00419       { .0000000000f, .0000000000f, .0000000000f, .0000000000f, .0000000000f },
00420       { .0000000000f, .0000000000f, .0000000000f, .0000000000f, .0000000000f },
00421       { .0000000000f, .0000000000f, .0000000000f, .0000000000f, .0000000000f },
00422       { .0000000000f, .0000000000f, .0000000000f, .0000000000f, .0000000000f },
00423       { .0000000000f, .0000000000f, .0000000000f, .0000000000f, .0000000000f },
00424       { .0000000000f, .0000000000f, .0000000000f, .0000000000f, .0000000000f },
00425       { .0000000000f, .0000000000f, .0000000000f, .0000000000f, .0000000000f },
00426       { .0000000000f, .0000000000f, .0000000000f, .0000000000f, .0000000000f },
00427       { .0000000000f, .0000000000f, .0000000000f, .0000000000f, .0000000000f },
00428       { .0000000000f, .0000000000f, .0000000000f, .0000000000f, .0000000000f },
00429       { .0000000000f, .0000000000f, .0000000000f, .0000000000f, .0000000000f },
00430       { .0000000000f, .0000000000f, .0000000000f, .0000000000f, .0000000000f } }
00431 };
00432 
00433 static const float fft_tone_level_table[2][64] = { {
00434 // pow ~ (i > 46) ? 0 : (((((i & 1) ? 431 : 304) << (i >> 1))) / 1024.0);
00435     0.17677669f, 0.42677650f, 0.60355347f, 0.85355347f,
00436     1.20710683f, 1.68359375f, 2.37500000f, 3.36718750f,
00437     4.75000000f, 6.73437500f, 9.50000000f, 13.4687500f,
00438     19.0000000f, 26.9375000f, 38.0000000f, 53.8750000f,
00439     76.0000000f, 107.750000f, 152.000000f, 215.500000f,
00440     304.000000f, 431.000000f, 608.000000f, 862.000000f,
00441     1216.00000f, 1724.00000f, 2432.00000f, 3448.00000f,
00442     4864.00000f, 6896.00000f, 9728.00000f, 13792.0000f,
00443     19456.0000f, 27584.0000f, 38912.0000f, 55168.0000f,
00444     77824.0000f, 110336.000f, 155648.000f, 220672.000f,
00445     311296.000f, 441344.000f, 622592.000f, 882688.000f,
00446     1245184.00f, 1765376.00f, 2490368.00f, 0.00000000f,
00447     0.00000000f, 0.00000000f, 0.00000000f, 0.00000000f,
00448     0.00000000f, 0.00000000f, 0.00000000f, 0.00000000f,
00449     0.00000000f, 0.00000000f, 0.00000000f, 0.00000000f,
00450     0.00000000f, 0.00000000f, 0.00000000f, 0.00000000f,
00451   }, {
00452 // pow = (i > 45) ? 0 : ((((i & 1) ? 431 : 304) << (i >> 1)) / 512.0);
00453     0.59375000f, 0.84179688f, 1.18750000f, 1.68359375f,
00454     2.37500000f, 3.36718750f, 4.75000000f, 6.73437500f,
00455     9.50000000f, 13.4687500f, 19.0000000f, 26.9375000f,
00456     38.0000000f, 53.8750000f, 76.0000000f, 107.750000f,
00457     152.000000f, 215.500000f, 304.000000f, 431.000000f,
00458     608.000000f, 862.000000f, 1216.00000f, 1724.00000f,
00459     2432.00000f, 3448.00000f, 4864.00000f, 6896.00000f,
00460     9728.00000f, 13792.0000f, 19456.0000f, 27584.0000f,
00461     38912.0000f, 55168.0000f, 77824.0000f, 110336.000f,
00462     155648.000f, 220672.000f, 311296.000f, 441344.000f,
00463     622592.000f, 882688.000f, 1245184.00f, 1765376.00f,
00464     2490368.00f, 3530752.00f, 0.00000000f, 0.00000000f,
00465     0.00000000f, 0.00000000f, 0.00000000f, 0.00000000f,
00466     0.00000000f, 0.00000000f, 0.00000000f, 0.00000000f,
00467     0.00000000f, 0.00000000f, 0.00000000f, 0.00000000f,
00468     0.00000000f, 0.00000000f, 0.00000000f, 0.00000000f
00469 } };
00470 
00471 static const float fft_tone_envelope_table[4][31] = {
00472     { .009607375f, .038060248f, .084265202f, .146446645f, .222214907f, .308658302f,
00473       .402454883f, .500000060f, .597545207f, .691341758f, .777785182f, .853553414f,
00474       .915734828f, .961939812f, .990392685f, 1.00000000f, .990392625f, .961939752f,
00475       .915734768f, .853553295f, .777785063f, .691341639f, .597545087f, .500000000f,
00476       .402454853f, .308658272f, .222214878f, .146446615f, .084265172f, .038060218f,
00477       .009607345f },
00478     { .038060248f, .146446645f, .308658302f, .500000060f, .691341758f, .853553414f,
00479       .961939812f, 1.00000000f, .961939752f, .853553295f, .691341639f, .500000000f,
00480       .308658272f, .146446615f, .038060218f, .000000000f, .000000000f, .000000000f,
00481       .000000000f, .000000000f, .000000000f, .000000000f, .000000000f, .000000000f,
00482       .000000000f, .000000000f, .000000000f, .000000000f, .000000000f, .000000000f,
00483       .000000000f },
00484     { .146446645f, .500000060f, .853553414f, 1.00000000f, .853553295f, .500000000f,
00485       .146446615f, .000000000f, .000000000f, .000000000f, .000000000f, .000000000f,
00486       .000000000f, .000000000f, .000000000f, .000000000f, .000000000f, .000000000f,
00487       .000000000f, .000000000f, .000000000f, .000000000f, .000000000f, .000000000f,
00488       .000000000f, .000000000f, .000000000f, .000000000f, .000000000f, .000000000f,
00489       .000000000f },
00490     { .500000060f, 1.00000000f, .500000000f, .000000000f, .000000000f, .000000000f,
00491       .000000000f, .000000000f, .000000000f, .000000000f, .000000000f, .000000000f,
00492       .000000000f, .000000000f, .000000000f, .000000000f, .000000000f, .000000000f,
00493       .000000000f, .000000000f, .000000000f, .000000000f, .000000000f, .000000000f,
00494       .000000000f, .000000000f, .000000000f, .000000000f, .000000000f, .000000000f,
00495       .000000000f }
00496 };
00497 
00498 static const float sb_noise_attenuation[32] = {
00499     0.0f, 0.0f, 0.3f, 0.4f, 0.5f, 0.7f, 1.0f, 1.0f,
00500     1.0f, 1.0f, 1.0f, 1.0f, 1.0f, 1.0f, 1.0f, 1.0f,
00501     1.0f, 1.0f, 1.0f, 1.0f, 1.0f, 1.0f, 1.0f, 1.0f,
00502     1.0f, 1.0f, 1.0f, 1.0f, 1.0f, 1.0f, 1.0f, 1.0f,
00503 };
00504 
00505 static const byte fft_subpackets[32] = {
00506     0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 0,
00507     0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0
00508 };
00509 
00510 // first index is joined_stereo, second index is 0 or 2 (1 is unused)
00511 static const float dequant_1bit[2][3] = {
00512     {-0.920000f, 0.000000f, 0.920000f },
00513     {-0.890000f, 0.000000f, 0.890000f }
00514 };
00515 
00516 static const float type30_dequant[8] = {
00517     -1.0f,-0.625f,-0.291666656732559f,0.0f,
00518     0.25f,0.5f,0.75f,1.0f,
00519 };
00520 
00521 static const float type34_delta[10] = { // FIXME: covers 8 entries..
00522     -1.0f,-0.60947573184967f,-0.333333343267441f,-0.138071194291115f,0.0f,
00523     0.138071194291115f,0.333333343267441f,0.60947573184967f,1.0f,0.0f,
00524 };
00525 
00526 } // End of namespace Audio
00527 
00528 #endif


Generated on Sat Jul 13 2019 05:00:47 for ResidualVM by doxygen 1.7.1
curved edge   curved edge