Libav 0.7.1
libavcodec/mpegaudiodectab.h
Go to the documentation of this file.
00001 /*
00002  * MPEG Audio decoder
00003  * copyright (c) 2002 Fabrice Bellard
00004  *
00005  * This file is part of Libav.
00006  *
00007  * Libav is free software; you can redistribute it and/or
00008  * modify it under the terms of the GNU Lesser General Public
00009  * License as published by the Free Software Foundation; either
00010  * version 2.1 of the License, or (at your option) any later version.
00011  *
00012  * Libav 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 GNU
00015  * Lesser General Public License for more details.
00016  *
00017  * You should have received a copy of the GNU Lesser General Public
00018  * License along with Libav; if not, write to the Free Software
00019  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
00020  */
00021 
00027 #ifndef AVCODEC_MPEGAUDIODECTAB_H
00028 #define AVCODEC_MPEGAUDIODECTAB_H
00029 
00030 #include <stddef.h>
00031 #include <stdint.h>
00032 
00033 #include "mpegaudio.h"
00034 
00035 /*******************************************************/
00036 /* layer 3 tables */
00037 
00038 /* layer 3 huffman tables */
00039 typedef struct HuffTable {
00040     int xsize;
00041     const uint8_t *bits;
00042     const uint16_t *codes;
00043 } HuffTable;
00044 
00045 /* layer3 scale factor size */
00046 static const uint8_t slen_table[2][16] = {
00047     { 0, 0, 0, 0, 3, 1, 1, 1, 2, 2, 2, 3, 3, 3, 4, 4 },
00048     { 0, 1, 2, 3, 0, 1, 2, 3, 1, 2, 3, 1, 2, 3, 2, 3 },
00049 };
00050 
00051 /* number of lsf scale factors for a given size */
00052 static const uint8_t lsf_nsf_table[6][3][4] = {
00053     { {  6,  5,  5, 5 }, {  9,  9,  9, 9 }, {  6,  9,  9, 9 } },
00054     { {  6,  5,  7, 3 }, {  9,  9, 12, 6 }, {  6,  9, 12, 6 } },
00055     { { 11, 10,  0, 0 }, { 18, 18,  0, 0 }, { 15, 18,  0, 0 } },
00056     { {  7,  7,  7, 0 }, { 12, 12, 12, 0 }, {  6, 15, 12, 0 } },
00057     { {  6,  6,  6, 3 }, { 12,  9,  9, 6 }, {  6, 12,  9, 6 } },
00058     { {  8,  8,  5, 0 }, { 15, 12,  9, 0 }, {  6, 18,  9, 0 } },
00059 };
00060 
00061 /* mpegaudio layer 3 huffman tables */
00062 
00063 static const uint16_t mpa_huffcodes_1[4] = {
00064  0x0001, 0x0001, 0x0001, 0x0000,
00065 };
00066 
00067 static const uint8_t mpa_huffbits_1[4] = {
00068   1,  3,  2,  3,
00069 };
00070 
00071 static const uint16_t mpa_huffcodes_2[9] = {
00072  0x0001, 0x0002, 0x0001, 0x0003, 0x0001, 0x0001, 0x0003, 0x0002,
00073  0x0000,
00074 };
00075 
00076 static const uint8_t mpa_huffbits_2[9] = {
00077   1,  3,  6,  3,  3,  5,  5,  5,
00078   6,
00079 };
00080 
00081 static const uint16_t mpa_huffcodes_3[9] = {
00082  0x0003, 0x0002, 0x0001, 0x0001, 0x0001, 0x0001, 0x0003, 0x0002,
00083  0x0000,
00084 };
00085 
00086 static const uint8_t mpa_huffbits_3[9] = {
00087   2,  2,  6,  3,  2,  5,  5,  5,
00088   6,
00089 };
00090 
00091 static const uint16_t mpa_huffcodes_5[16] = {
00092  0x0001, 0x0002, 0x0006, 0x0005, 0x0003, 0x0001, 0x0004, 0x0004,
00093  0x0007, 0x0005, 0x0007, 0x0001, 0x0006, 0x0001, 0x0001, 0x0000,
00094 };
00095 
00096 static const uint8_t mpa_huffbits_5[16] = {
00097   1,  3,  6,  7,  3,  3,  6,  7,
00098   6,  6,  7,  8,  7,  6,  7,  8,
00099 };
00100 
00101 static const uint16_t mpa_huffcodes_6[16] = {
00102  0x0007, 0x0003, 0x0005, 0x0001, 0x0006, 0x0002, 0x0003, 0x0002,
00103  0x0005, 0x0004, 0x0004, 0x0001, 0x0003, 0x0003, 0x0002, 0x0000,
00104 };
00105 
00106 static const uint8_t mpa_huffbits_6[16] = {
00107   3,  3,  5,  7,  3,  2,  4,  5,
00108   4,  4,  5,  6,  6,  5,  6,  7,
00109 };
00110 
00111 static const uint16_t mpa_huffcodes_7[36] = {
00112  0x0001, 0x0002, 0x000a, 0x0013, 0x0010, 0x000a, 0x0003, 0x0003,
00113  0x0007, 0x000a, 0x0005, 0x0003, 0x000b, 0x0004, 0x000d, 0x0011,
00114  0x0008, 0x0004, 0x000c, 0x000b, 0x0012, 0x000f, 0x000b, 0x0002,
00115  0x0007, 0x0006, 0x0009, 0x000e, 0x0003, 0x0001, 0x0006, 0x0004,
00116  0x0005, 0x0003, 0x0002, 0x0000,
00117 };
00118 
00119 static const uint8_t mpa_huffbits_7[36] = {
00120   1,  3,  6,  8,  8,  9,  3,  4,
00121   6,  7,  7,  8,  6,  5,  7,  8,
00122   8,  9,  7,  7,  8,  9,  9,  9,
00123   7,  7,  8,  9,  9, 10,  8,  8,
00124   9, 10, 10, 10,
00125 };
00126 
00127 static const uint16_t mpa_huffcodes_8[36] = {
00128  0x0003, 0x0004, 0x0006, 0x0012, 0x000c, 0x0005, 0x0005, 0x0001,
00129  0x0002, 0x0010, 0x0009, 0x0003, 0x0007, 0x0003, 0x0005, 0x000e,
00130  0x0007, 0x0003, 0x0013, 0x0011, 0x000f, 0x000d, 0x000a, 0x0004,
00131  0x000d, 0x0005, 0x0008, 0x000b, 0x0005, 0x0001, 0x000c, 0x0004,
00132  0x0004, 0x0001, 0x0001, 0x0000,
00133 };
00134 
00135 static const uint8_t mpa_huffbits_8[36] = {
00136   2,  3,  6,  8,  8,  9,  3,  2,
00137   4,  8,  8,  8,  6,  4,  6,  8,
00138   8,  9,  8,  8,  8,  9,  9, 10,
00139   8,  7,  8,  9, 10, 10,  9,  8,
00140   9,  9, 11, 11,
00141 };
00142 
00143 static const uint16_t mpa_huffcodes_9[36] = {
00144  0x0007, 0x0005, 0x0009, 0x000e, 0x000f, 0x0007, 0x0006, 0x0004,
00145  0x0005, 0x0005, 0x0006, 0x0007, 0x0007, 0x0006, 0x0008, 0x0008,
00146  0x0008, 0x0005, 0x000f, 0x0006, 0x0009, 0x000a, 0x0005, 0x0001,
00147  0x000b, 0x0007, 0x0009, 0x0006, 0x0004, 0x0001, 0x000e, 0x0004,
00148  0x0006, 0x0002, 0x0006, 0x0000,
00149 };
00150 
00151 static const uint8_t mpa_huffbits_9[36] = {
00152   3,  3,  5,  6,  8,  9,  3,  3,
00153   4,  5,  6,  8,  4,  4,  5,  6,
00154   7,  8,  6,  5,  6,  7,  7,  8,
00155   7,  6,  7,  7,  8,  9,  8,  7,
00156   8,  8,  9,  9,
00157 };
00158 
00159 static const uint16_t mpa_huffcodes_10[64] = {
00160  0x0001, 0x0002, 0x000a, 0x0017, 0x0023, 0x001e, 0x000c, 0x0011,
00161  0x0003, 0x0003, 0x0008, 0x000c, 0x0012, 0x0015, 0x000c, 0x0007,
00162  0x000b, 0x0009, 0x000f, 0x0015, 0x0020, 0x0028, 0x0013, 0x0006,
00163  0x000e, 0x000d, 0x0016, 0x0022, 0x002e, 0x0017, 0x0012, 0x0007,
00164  0x0014, 0x0013, 0x0021, 0x002f, 0x001b, 0x0016, 0x0009, 0x0003,
00165  0x001f, 0x0016, 0x0029, 0x001a, 0x0015, 0x0014, 0x0005, 0x0003,
00166  0x000e, 0x000d, 0x000a, 0x000b, 0x0010, 0x0006, 0x0005, 0x0001,
00167  0x0009, 0x0008, 0x0007, 0x0008, 0x0004, 0x0004, 0x0002, 0x0000,
00168 };
00169 
00170 static const uint8_t mpa_huffbits_10[64] = {
00171   1,  3,  6,  8,  9,  9,  9, 10,
00172   3,  4,  6,  7,  8,  9,  8,  8,
00173   6,  6,  7,  8,  9, 10,  9,  9,
00174   7,  7,  8,  9, 10, 10,  9, 10,
00175   8,  8,  9, 10, 10, 10, 10, 10,
00176   9,  9, 10, 10, 11, 11, 10, 11,
00177   8,  8,  9, 10, 10, 10, 11, 11,
00178   9,  8,  9, 10, 10, 11, 11, 11,
00179 };
00180 
00181 static const uint16_t mpa_huffcodes_11[64] = {
00182  0x0003, 0x0004, 0x000a, 0x0018, 0x0022, 0x0021, 0x0015, 0x000f,
00183  0x0005, 0x0003, 0x0004, 0x000a, 0x0020, 0x0011, 0x000b, 0x000a,
00184  0x000b, 0x0007, 0x000d, 0x0012, 0x001e, 0x001f, 0x0014, 0x0005,
00185  0x0019, 0x000b, 0x0013, 0x003b, 0x001b, 0x0012, 0x000c, 0x0005,
00186  0x0023, 0x0021, 0x001f, 0x003a, 0x001e, 0x0010, 0x0007, 0x0005,
00187  0x001c, 0x001a, 0x0020, 0x0013, 0x0011, 0x000f, 0x0008, 0x000e,
00188  0x000e, 0x000c, 0x0009, 0x000d, 0x000e, 0x0009, 0x0004, 0x0001,
00189  0x000b, 0x0004, 0x0006, 0x0006, 0x0006, 0x0003, 0x0002, 0x0000,
00190 };
00191 
00192 static const uint8_t mpa_huffbits_11[64] = {
00193   2,  3,  5,  7,  8,  9,  8,  9,
00194   3,  3,  4,  6,  8,  8,  7,  8,
00195   5,  5,  6,  7,  8,  9,  8,  8,
00196   7,  6,  7,  9,  8, 10,  8,  9,
00197   8,  8,  8,  9,  9, 10,  9, 10,
00198   8,  8,  9, 10, 10, 11, 10, 11,
00199   8,  7,  7,  8,  9, 10, 10, 10,
00200   8,  7,  8,  9, 10, 10, 10, 10,
00201 };
00202 
00203 static const uint16_t mpa_huffcodes_12[64] = {
00204  0x0009, 0x0006, 0x0010, 0x0021, 0x0029, 0x0027, 0x0026, 0x001a,
00205  0x0007, 0x0005, 0x0006, 0x0009, 0x0017, 0x0010, 0x001a, 0x000b,
00206  0x0011, 0x0007, 0x000b, 0x000e, 0x0015, 0x001e, 0x000a, 0x0007,
00207  0x0011, 0x000a, 0x000f, 0x000c, 0x0012, 0x001c, 0x000e, 0x0005,
00208  0x0020, 0x000d, 0x0016, 0x0013, 0x0012, 0x0010, 0x0009, 0x0005,
00209  0x0028, 0x0011, 0x001f, 0x001d, 0x0011, 0x000d, 0x0004, 0x0002,
00210  0x001b, 0x000c, 0x000b, 0x000f, 0x000a, 0x0007, 0x0004, 0x0001,
00211  0x001b, 0x000c, 0x0008, 0x000c, 0x0006, 0x0003, 0x0001, 0x0000,
00212 };
00213 
00214 static const uint8_t mpa_huffbits_12[64] = {
00215   4,  3,  5,  7,  8,  9,  9,  9,
00216   3,  3,  4,  5,  7,  7,  8,  8,
00217   5,  4,  5,  6,  7,  8,  7,  8,
00218   6,  5,  6,  6,  7,  8,  8,  8,
00219   7,  6,  7,  7,  8,  8,  8,  9,
00220   8,  7,  8,  8,  8,  9,  8,  9,
00221   8,  7,  7,  8,  8,  9,  9, 10,
00222   9,  8,  8,  9,  9,  9,  9, 10,
00223 };
00224 
00225 static const uint16_t mpa_huffcodes_13[256] = {
00226  0x0001, 0x0005, 0x000e, 0x0015, 0x0022, 0x0033, 0x002e, 0x0047,
00227  0x002a, 0x0034, 0x0044, 0x0034, 0x0043, 0x002c, 0x002b, 0x0013,
00228  0x0003, 0x0004, 0x000c, 0x0013, 0x001f, 0x001a, 0x002c, 0x0021,
00229  0x001f, 0x0018, 0x0020, 0x0018, 0x001f, 0x0023, 0x0016, 0x000e,
00230  0x000f, 0x000d, 0x0017, 0x0024, 0x003b, 0x0031, 0x004d, 0x0041,
00231  0x001d, 0x0028, 0x001e, 0x0028, 0x001b, 0x0021, 0x002a, 0x0010,
00232  0x0016, 0x0014, 0x0025, 0x003d, 0x0038, 0x004f, 0x0049, 0x0040,
00233  0x002b, 0x004c, 0x0038, 0x0025, 0x001a, 0x001f, 0x0019, 0x000e,
00234  0x0023, 0x0010, 0x003c, 0x0039, 0x0061, 0x004b, 0x0072, 0x005b,
00235  0x0036, 0x0049, 0x0037, 0x0029, 0x0030, 0x0035, 0x0017, 0x0018,
00236  0x003a, 0x001b, 0x0032, 0x0060, 0x004c, 0x0046, 0x005d, 0x0054,
00237  0x004d, 0x003a, 0x004f, 0x001d, 0x004a, 0x0031, 0x0029, 0x0011,
00238  0x002f, 0x002d, 0x004e, 0x004a, 0x0073, 0x005e, 0x005a, 0x004f,
00239  0x0045, 0x0053, 0x0047, 0x0032, 0x003b, 0x0026, 0x0024, 0x000f,
00240  0x0048, 0x0022, 0x0038, 0x005f, 0x005c, 0x0055, 0x005b, 0x005a,
00241  0x0056, 0x0049, 0x004d, 0x0041, 0x0033, 0x002c, 0x002b, 0x002a,
00242  0x002b, 0x0014, 0x001e, 0x002c, 0x0037, 0x004e, 0x0048, 0x0057,
00243  0x004e, 0x003d, 0x002e, 0x0036, 0x0025, 0x001e, 0x0014, 0x0010,
00244  0x0035, 0x0019, 0x0029, 0x0025, 0x002c, 0x003b, 0x0036, 0x0051,
00245  0x0042, 0x004c, 0x0039, 0x0036, 0x0025, 0x0012, 0x0027, 0x000b,
00246  0x0023, 0x0021, 0x001f, 0x0039, 0x002a, 0x0052, 0x0048, 0x0050,
00247  0x002f, 0x003a, 0x0037, 0x0015, 0x0016, 0x001a, 0x0026, 0x0016,
00248  0x0035, 0x0019, 0x0017, 0x0026, 0x0046, 0x003c, 0x0033, 0x0024,
00249  0x0037, 0x001a, 0x0022, 0x0017, 0x001b, 0x000e, 0x0009, 0x0007,
00250  0x0022, 0x0020, 0x001c, 0x0027, 0x0031, 0x004b, 0x001e, 0x0034,
00251  0x0030, 0x0028, 0x0034, 0x001c, 0x0012, 0x0011, 0x0009, 0x0005,
00252  0x002d, 0x0015, 0x0022, 0x0040, 0x0038, 0x0032, 0x0031, 0x002d,
00253  0x001f, 0x0013, 0x000c, 0x000f, 0x000a, 0x0007, 0x0006, 0x0003,
00254  0x0030, 0x0017, 0x0014, 0x0027, 0x0024, 0x0023, 0x0035, 0x0015,
00255  0x0010, 0x0017, 0x000d, 0x000a, 0x0006, 0x0001, 0x0004, 0x0002,
00256  0x0010, 0x000f, 0x0011, 0x001b, 0x0019, 0x0014, 0x001d, 0x000b,
00257  0x0011, 0x000c, 0x0010, 0x0008, 0x0001, 0x0001, 0x0000, 0x0001,
00258 };
00259 
00260 static const uint8_t mpa_huffbits_13[256] = {
00261   1,  4,  6,  7,  8,  9,  9, 10,
00262   9, 10, 11, 11, 12, 12, 13, 13,
00263   3,  4,  6,  7,  8,  8,  9,  9,
00264   9,  9, 10, 10, 11, 12, 12, 12,
00265   6,  6,  7,  8,  9,  9, 10, 10,
00266   9, 10, 10, 11, 11, 12, 13, 13,
00267   7,  7,  8,  9,  9, 10, 10, 10,
00268  10, 11, 11, 11, 11, 12, 13, 13,
00269   8,  7,  9,  9, 10, 10, 11, 11,
00270  10, 11, 11, 12, 12, 13, 13, 14,
00271   9,  8,  9, 10, 10, 10, 11, 11,
00272  11, 11, 12, 11, 13, 13, 14, 14,
00273   9,  9, 10, 10, 11, 11, 11, 11,
00274  11, 12, 12, 12, 13, 13, 14, 14,
00275  10,  9, 10, 11, 11, 11, 12, 12,
00276  12, 12, 13, 13, 13, 14, 16, 16,
00277   9,  8,  9, 10, 10, 11, 11, 12,
00278  12, 12, 12, 13, 13, 14, 15, 15,
00279  10,  9, 10, 10, 11, 11, 11, 13,
00280  12, 13, 13, 14, 14, 14, 16, 15,
00281  10, 10, 10, 11, 11, 12, 12, 13,
00282  12, 13, 14, 13, 14, 15, 16, 17,
00283  11, 10, 10, 11, 12, 12, 12, 12,
00284  13, 13, 13, 14, 15, 15, 15, 16,
00285  11, 11, 11, 12, 12, 13, 12, 13,
00286  14, 14, 15, 15, 15, 16, 16, 16,
00287  12, 11, 12, 13, 13, 13, 14, 14,
00288  14, 14, 14, 15, 16, 15, 16, 16,
00289  13, 12, 12, 13, 13, 13, 15, 14,
00290  14, 17, 15, 15, 15, 17, 16, 16,
00291  12, 12, 13, 14, 14, 14, 15, 14,
00292  15, 15, 16, 16, 19, 18, 19, 16,
00293 };
00294 
00295 static const uint16_t mpa_huffcodes_15[256] = {
00296  0x0007, 0x000c, 0x0012, 0x0035, 0x002f, 0x004c, 0x007c, 0x006c,
00297  0x0059, 0x007b, 0x006c, 0x0077, 0x006b, 0x0051, 0x007a, 0x003f,
00298  0x000d, 0x0005, 0x0010, 0x001b, 0x002e, 0x0024, 0x003d, 0x0033,
00299  0x002a, 0x0046, 0x0034, 0x0053, 0x0041, 0x0029, 0x003b, 0x0024,
00300  0x0013, 0x0011, 0x000f, 0x0018, 0x0029, 0x0022, 0x003b, 0x0030,
00301  0x0028, 0x0040, 0x0032, 0x004e, 0x003e, 0x0050, 0x0038, 0x0021,
00302  0x001d, 0x001c, 0x0019, 0x002b, 0x0027, 0x003f, 0x0037, 0x005d,
00303  0x004c, 0x003b, 0x005d, 0x0048, 0x0036, 0x004b, 0x0032, 0x001d,
00304  0x0034, 0x0016, 0x002a, 0x0028, 0x0043, 0x0039, 0x005f, 0x004f,
00305  0x0048, 0x0039, 0x0059, 0x0045, 0x0031, 0x0042, 0x002e, 0x001b,
00306  0x004d, 0x0025, 0x0023, 0x0042, 0x003a, 0x0034, 0x005b, 0x004a,
00307  0x003e, 0x0030, 0x004f, 0x003f, 0x005a, 0x003e, 0x0028, 0x0026,
00308  0x007d, 0x0020, 0x003c, 0x0038, 0x0032, 0x005c, 0x004e, 0x0041,
00309  0x0037, 0x0057, 0x0047, 0x0033, 0x0049, 0x0033, 0x0046, 0x001e,
00310  0x006d, 0x0035, 0x0031, 0x005e, 0x0058, 0x004b, 0x0042, 0x007a,
00311  0x005b, 0x0049, 0x0038, 0x002a, 0x0040, 0x002c, 0x0015, 0x0019,
00312  0x005a, 0x002b, 0x0029, 0x004d, 0x0049, 0x003f, 0x0038, 0x005c,
00313  0x004d, 0x0042, 0x002f, 0x0043, 0x0030, 0x0035, 0x0024, 0x0014,
00314  0x0047, 0x0022, 0x0043, 0x003c, 0x003a, 0x0031, 0x0058, 0x004c,
00315  0x0043, 0x006a, 0x0047, 0x0036, 0x0026, 0x0027, 0x0017, 0x000f,
00316  0x006d, 0x0035, 0x0033, 0x002f, 0x005a, 0x0052, 0x003a, 0x0039,
00317  0x0030, 0x0048, 0x0039, 0x0029, 0x0017, 0x001b, 0x003e, 0x0009,
00318  0x0056, 0x002a, 0x0028, 0x0025, 0x0046, 0x0040, 0x0034, 0x002b,
00319  0x0046, 0x0037, 0x002a, 0x0019, 0x001d, 0x0012, 0x000b, 0x000b,
00320  0x0076, 0x0044, 0x001e, 0x0037, 0x0032, 0x002e, 0x004a, 0x0041,
00321  0x0031, 0x0027, 0x0018, 0x0010, 0x0016, 0x000d, 0x000e, 0x0007,
00322  0x005b, 0x002c, 0x0027, 0x0026, 0x0022, 0x003f, 0x0034, 0x002d,
00323  0x001f, 0x0034, 0x001c, 0x0013, 0x000e, 0x0008, 0x0009, 0x0003,
00324  0x007b, 0x003c, 0x003a, 0x0035, 0x002f, 0x002b, 0x0020, 0x0016,
00325  0x0025, 0x0018, 0x0011, 0x000c, 0x000f, 0x000a, 0x0002, 0x0001,
00326  0x0047, 0x0025, 0x0022, 0x001e, 0x001c, 0x0014, 0x0011, 0x001a,
00327  0x0015, 0x0010, 0x000a, 0x0006, 0x0008, 0x0006, 0x0002, 0x0000,
00328 };
00329 
00330 static const uint8_t mpa_huffbits_15[256] = {
00331   3,  4,  5,  7,  7,  8,  9,  9,
00332   9, 10, 10, 11, 11, 11, 12, 13,
00333   4,  3,  5,  6,  7,  7,  8,  8,
00334   8,  9,  9, 10, 10, 10, 11, 11,
00335   5,  5,  5,  6,  7,  7,  8,  8,
00336   8,  9,  9, 10, 10, 11, 11, 11,
00337   6,  6,  6,  7,  7,  8,  8,  9,
00338   9,  9, 10, 10, 10, 11, 11, 11,
00339   7,  6,  7,  7,  8,  8,  9,  9,
00340   9,  9, 10, 10, 10, 11, 11, 11,
00341   8,  7,  7,  8,  8,  8,  9,  9,
00342   9,  9, 10, 10, 11, 11, 11, 12,
00343   9,  7,  8,  8,  8,  9,  9,  9,
00344   9, 10, 10, 10, 11, 11, 12, 12,
00345   9,  8,  8,  9,  9,  9,  9, 10,
00346  10, 10, 10, 10, 11, 11, 11, 12,
00347   9,  8,  8,  9,  9,  9,  9, 10,
00348  10, 10, 10, 11, 11, 12, 12, 12,
00349   9,  8,  9,  9,  9,  9, 10, 10,
00350  10, 11, 11, 11, 11, 12, 12, 12,
00351  10,  9,  9,  9, 10, 10, 10, 10,
00352  10, 11, 11, 11, 11, 12, 13, 12,
00353  10,  9,  9,  9, 10, 10, 10, 10,
00354  11, 11, 11, 11, 12, 12, 12, 13,
00355  11, 10,  9, 10, 10, 10, 11, 11,
00356  11, 11, 11, 11, 12, 12, 13, 13,
00357  11, 10, 10, 10, 10, 11, 11, 11,
00358  11, 12, 12, 12, 12, 12, 13, 13,
00359  12, 11, 11, 11, 11, 11, 11, 11,
00360  12, 12, 12, 12, 13, 13, 12, 13,
00361  12, 11, 11, 11, 11, 11, 11, 12,
00362  12, 12, 12, 12, 13, 13, 13, 13,
00363 };
00364 
00365 static const uint16_t mpa_huffcodes_16[256] = {
00366  0x0001, 0x0005, 0x000e, 0x002c, 0x004a, 0x003f, 0x006e, 0x005d,
00367  0x00ac, 0x0095, 0x008a, 0x00f2, 0x00e1, 0x00c3, 0x0178, 0x0011,
00368  0x0003, 0x0004, 0x000c, 0x0014, 0x0023, 0x003e, 0x0035, 0x002f,
00369  0x0053, 0x004b, 0x0044, 0x0077, 0x00c9, 0x006b, 0x00cf, 0x0009,
00370  0x000f, 0x000d, 0x0017, 0x0026, 0x0043, 0x003a, 0x0067, 0x005a,
00371  0x00a1, 0x0048, 0x007f, 0x0075, 0x006e, 0x00d1, 0x00ce, 0x0010,
00372  0x002d, 0x0015, 0x0027, 0x0045, 0x0040, 0x0072, 0x0063, 0x0057,
00373  0x009e, 0x008c, 0x00fc, 0x00d4, 0x00c7, 0x0183, 0x016d, 0x001a,
00374  0x004b, 0x0024, 0x0044, 0x0041, 0x0073, 0x0065, 0x00b3, 0x00a4,
00375  0x009b, 0x0108, 0x00f6, 0x00e2, 0x018b, 0x017e, 0x016a, 0x0009,
00376  0x0042, 0x001e, 0x003b, 0x0038, 0x0066, 0x00b9, 0x00ad, 0x0109,
00377  0x008e, 0x00fd, 0x00e8, 0x0190, 0x0184, 0x017a, 0x01bd, 0x0010,
00378  0x006f, 0x0036, 0x0034, 0x0064, 0x00b8, 0x00b2, 0x00a0, 0x0085,
00379  0x0101, 0x00f4, 0x00e4, 0x00d9, 0x0181, 0x016e, 0x02cb, 0x000a,
00380  0x0062, 0x0030, 0x005b, 0x0058, 0x00a5, 0x009d, 0x0094, 0x0105,
00381  0x00f8, 0x0197, 0x018d, 0x0174, 0x017c, 0x0379, 0x0374, 0x0008,
00382  0x0055, 0x0054, 0x0051, 0x009f, 0x009c, 0x008f, 0x0104, 0x00f9,
00383  0x01ab, 0x0191, 0x0188, 0x017f, 0x02d7, 0x02c9, 0x02c4, 0x0007,
00384  0x009a, 0x004c, 0x0049, 0x008d, 0x0083, 0x0100, 0x00f5, 0x01aa,
00385  0x0196, 0x018a, 0x0180, 0x02df, 0x0167, 0x02c6, 0x0160, 0x000b,
00386  0x008b, 0x0081, 0x0043, 0x007d, 0x00f7, 0x00e9, 0x00e5, 0x00db,
00387  0x0189, 0x02e7, 0x02e1, 0x02d0, 0x0375, 0x0372, 0x01b7, 0x0004,
00388  0x00f3, 0x0078, 0x0076, 0x0073, 0x00e3, 0x00df, 0x018c, 0x02ea,
00389  0x02e6, 0x02e0, 0x02d1, 0x02c8, 0x02c2, 0x00df, 0x01b4, 0x0006,
00390  0x00ca, 0x00e0, 0x00de, 0x00da, 0x00d8, 0x0185, 0x0182, 0x017d,
00391  0x016c, 0x0378, 0x01bb, 0x02c3, 0x01b8, 0x01b5, 0x06c0, 0x0004,
00392  0x02eb, 0x00d3, 0x00d2, 0x00d0, 0x0172, 0x017b, 0x02de, 0x02d3,
00393  0x02ca, 0x06c7, 0x0373, 0x036d, 0x036c, 0x0d83, 0x0361, 0x0002,
00394  0x0179, 0x0171, 0x0066, 0x00bb, 0x02d6, 0x02d2, 0x0166, 0x02c7,
00395  0x02c5, 0x0362, 0x06c6, 0x0367, 0x0d82, 0x0366, 0x01b2, 0x0000,
00396  0x000c, 0x000a, 0x0007, 0x000b, 0x000a, 0x0011, 0x000b, 0x0009,
00397  0x000d, 0x000c, 0x000a, 0x0007, 0x0005, 0x0003, 0x0001, 0x0003,
00398 };
00399 
00400 static const uint8_t mpa_huffbits_16[256] = {
00401   1,  4,  6,  8,  9,  9, 10, 10,
00402  11, 11, 11, 12, 12, 12, 13,  9,
00403   3,  4,  6,  7,  8,  9,  9,  9,
00404  10, 10, 10, 11, 12, 11, 12,  8,
00405   6,  6,  7,  8,  9,  9, 10, 10,
00406  11, 10, 11, 11, 11, 12, 12,  9,
00407   8,  7,  8,  9,  9, 10, 10, 10,
00408  11, 11, 12, 12, 12, 13, 13, 10,
00409   9,  8,  9,  9, 10, 10, 11, 11,
00410  11, 12, 12, 12, 13, 13, 13,  9,
00411   9,  8,  9,  9, 10, 11, 11, 12,
00412  11, 12, 12, 13, 13, 13, 14, 10,
00413  10,  9,  9, 10, 11, 11, 11, 11,
00414  12, 12, 12, 12, 13, 13, 14, 10,
00415  10,  9, 10, 10, 11, 11, 11, 12,
00416  12, 13, 13, 13, 13, 15, 15, 10,
00417  10, 10, 10, 11, 11, 11, 12, 12,
00418  13, 13, 13, 13, 14, 14, 14, 10,
00419  11, 10, 10, 11, 11, 12, 12, 13,
00420  13, 13, 13, 14, 13, 14, 13, 11,
00421  11, 11, 10, 11, 12, 12, 12, 12,
00422  13, 14, 14, 14, 15, 15, 14, 10,
00423  12, 11, 11, 11, 12, 12, 13, 14,
00424  14, 14, 14, 14, 14, 13, 14, 11,
00425  12, 12, 12, 12, 12, 13, 13, 13,
00426  13, 15, 14, 14, 14, 14, 16, 11,
00427  14, 12, 12, 12, 13, 13, 14, 14,
00428  14, 16, 15, 15, 15, 17, 15, 11,
00429  13, 13, 11, 12, 14, 14, 13, 14,
00430  14, 15, 16, 15, 17, 15, 14, 11,
00431   9,  8,  8,  9,  9, 10, 10, 10,
00432  11, 11, 11, 11, 11, 11, 11,  8,
00433 };
00434 
00435 static const uint16_t mpa_huffcodes_24[256] = {
00436  0x000f, 0x000d, 0x002e, 0x0050, 0x0092, 0x0106, 0x00f8, 0x01b2,
00437  0x01aa, 0x029d, 0x028d, 0x0289, 0x026d, 0x0205, 0x0408, 0x0058,
00438  0x000e, 0x000c, 0x0015, 0x0026, 0x0047, 0x0082, 0x007a, 0x00d8,
00439  0x00d1, 0x00c6, 0x0147, 0x0159, 0x013f, 0x0129, 0x0117, 0x002a,
00440  0x002f, 0x0016, 0x0029, 0x004a, 0x0044, 0x0080, 0x0078, 0x00dd,
00441  0x00cf, 0x00c2, 0x00b6, 0x0154, 0x013b, 0x0127, 0x021d, 0x0012,
00442  0x0051, 0x0027, 0x004b, 0x0046, 0x0086, 0x007d, 0x0074, 0x00dc,
00443  0x00cc, 0x00be, 0x00b2, 0x0145, 0x0137, 0x0125, 0x010f, 0x0010,
00444  0x0093, 0x0048, 0x0045, 0x0087, 0x007f, 0x0076, 0x0070, 0x00d2,
00445  0x00c8, 0x00bc, 0x0160, 0x0143, 0x0132, 0x011d, 0x021c, 0x000e,
00446  0x0107, 0x0042, 0x0081, 0x007e, 0x0077, 0x0072, 0x00d6, 0x00ca,
00447  0x00c0, 0x00b4, 0x0155, 0x013d, 0x012d, 0x0119, 0x0106, 0x000c,
00448  0x00f9, 0x007b, 0x0079, 0x0075, 0x0071, 0x00d7, 0x00ce, 0x00c3,
00449  0x00b9, 0x015b, 0x014a, 0x0134, 0x0123, 0x0110, 0x0208, 0x000a,
00450  0x01b3, 0x0073, 0x006f, 0x006d, 0x00d3, 0x00cb, 0x00c4, 0x00bb,
00451  0x0161, 0x014c, 0x0139, 0x012a, 0x011b, 0x0213, 0x017d, 0x0011,
00452  0x01ab, 0x00d4, 0x00d0, 0x00cd, 0x00c9, 0x00c1, 0x00ba, 0x00b1,
00453  0x00a9, 0x0140, 0x012f, 0x011e, 0x010c, 0x0202, 0x0179, 0x0010,
00454  0x014f, 0x00c7, 0x00c5, 0x00bf, 0x00bd, 0x00b5, 0x00ae, 0x014d,
00455  0x0141, 0x0131, 0x0121, 0x0113, 0x0209, 0x017b, 0x0173, 0x000b,
00456  0x029c, 0x00b8, 0x00b7, 0x00b3, 0x00af, 0x0158, 0x014b, 0x013a,
00457  0x0130, 0x0122, 0x0115, 0x0212, 0x017f, 0x0175, 0x016e, 0x000a,
00458  0x028c, 0x015a, 0x00ab, 0x00a8, 0x00a4, 0x013e, 0x0135, 0x012b,
00459  0x011f, 0x0114, 0x0107, 0x0201, 0x0177, 0x0170, 0x016a, 0x0006,
00460  0x0288, 0x0142, 0x013c, 0x0138, 0x0133, 0x012e, 0x0124, 0x011c,
00461  0x010d, 0x0105, 0x0200, 0x0178, 0x0172, 0x016c, 0x0167, 0x0004,
00462  0x026c, 0x012c, 0x0128, 0x0126, 0x0120, 0x011a, 0x0111, 0x010a,
00463  0x0203, 0x017c, 0x0176, 0x0171, 0x016d, 0x0169, 0x0165, 0x0002,
00464  0x0409, 0x0118, 0x0116, 0x0112, 0x010b, 0x0108, 0x0103, 0x017e,
00465  0x017a, 0x0174, 0x016f, 0x016b, 0x0168, 0x0166, 0x0164, 0x0000,
00466  0x002b, 0x0014, 0x0013, 0x0011, 0x000f, 0x000d, 0x000b, 0x0009,
00467  0x0007, 0x0006, 0x0004, 0x0007, 0x0005, 0x0003, 0x0001, 0x0003,
00468 };
00469 
00470 static const uint8_t mpa_huffbits_24[256] = {
00471   4,  4,  6,  7,  8,  9,  9, 10,
00472  10, 11, 11, 11, 11, 11, 12,  9,
00473   4,  4,  5,  6,  7,  8,  8,  9,
00474   9,  9, 10, 10, 10, 10, 10,  8,
00475   6,  5,  6,  7,  7,  8,  8,  9,
00476   9,  9,  9, 10, 10, 10, 11,  7,
00477   7,  6,  7,  7,  8,  8,  8,  9,
00478   9,  9,  9, 10, 10, 10, 10,  7,
00479   8,  7,  7,  8,  8,  8,  8,  9,
00480   9,  9, 10, 10, 10, 10, 11,  7,
00481   9,  7,  8,  8,  8,  8,  9,  9,
00482   9,  9, 10, 10, 10, 10, 10,  7,
00483   9,  8,  8,  8,  8,  9,  9,  9,
00484   9, 10, 10, 10, 10, 10, 11,  7,
00485  10,  8,  8,  8,  9,  9,  9,  9,
00486  10, 10, 10, 10, 10, 11, 11,  8,
00487  10,  9,  9,  9,  9,  9,  9,  9,
00488   9, 10, 10, 10, 10, 11, 11,  8,
00489  10,  9,  9,  9,  9,  9,  9, 10,
00490  10, 10, 10, 10, 11, 11, 11,  8,
00491  11,  9,  9,  9,  9, 10, 10, 10,
00492  10, 10, 10, 11, 11, 11, 11,  8,
00493  11, 10,  9,  9,  9, 10, 10, 10,
00494  10, 10, 10, 11, 11, 11, 11,  8,
00495  11, 10, 10, 10, 10, 10, 10, 10,
00496  10, 10, 11, 11, 11, 11, 11,  8,
00497  11, 10, 10, 10, 10, 10, 10, 10,
00498  11, 11, 11, 11, 11, 11, 11,  8,
00499  12, 10, 10, 10, 10, 10, 10, 11,
00500  11, 11, 11, 11, 11, 11, 11,  8,
00501   8,  7,  7,  7,  7,  7,  7,  7,
00502   7,  7,  7,  8,  8,  8,  8,  4,
00503 };
00504 
00505 static const HuffTable mpa_huff_tables[16] = {
00506 { 1, NULL, NULL },
00507 { 2, mpa_huffbits_1, mpa_huffcodes_1 },
00508 { 3, mpa_huffbits_2, mpa_huffcodes_2 },
00509 { 3, mpa_huffbits_3, mpa_huffcodes_3 },
00510 { 4, mpa_huffbits_5, mpa_huffcodes_5 },
00511 { 4, mpa_huffbits_6, mpa_huffcodes_6 },
00512 { 6, mpa_huffbits_7, mpa_huffcodes_7 },
00513 { 6, mpa_huffbits_8, mpa_huffcodes_8 },
00514 { 6, mpa_huffbits_9, mpa_huffcodes_9 },
00515 { 8, mpa_huffbits_10, mpa_huffcodes_10 },
00516 { 8, mpa_huffbits_11, mpa_huffcodes_11 },
00517 { 8, mpa_huffbits_12, mpa_huffcodes_12 },
00518 { 16, mpa_huffbits_13, mpa_huffcodes_13 },
00519 { 16, mpa_huffbits_15, mpa_huffcodes_15 },
00520 { 16, mpa_huffbits_16, mpa_huffcodes_16 },
00521 { 16, mpa_huffbits_24, mpa_huffcodes_24 },
00522 };
00523 
00524 static const uint8_t mpa_huff_data[32][2] = {
00525 { 0, 0 },
00526 { 1, 0 },
00527 { 2, 0 },
00528 { 3, 0 },
00529 { 0, 0 },
00530 { 4, 0 },
00531 { 5, 0 },
00532 { 6, 0 },
00533 { 7, 0 },
00534 { 8, 0 },
00535 { 9, 0 },
00536 { 10, 0 },
00537 { 11, 0 },
00538 { 12, 0 },
00539 { 0, 0 },
00540 { 13, 0 },
00541 { 14, 1 },
00542 { 14, 2 },
00543 { 14, 3 },
00544 { 14, 4 },
00545 { 14, 6 },
00546 { 14, 8 },
00547 { 14, 10 },
00548 { 14, 13 },
00549 { 15, 4 },
00550 { 15, 5 },
00551 { 15, 6 },
00552 { 15, 7 },
00553 { 15, 8 },
00554 { 15, 9 },
00555 { 15, 11 },
00556 { 15, 13 },
00557 };
00558 
00559 
00560 /* huffman tables for quadrules */
00561 static const uint8_t mpa_quad_codes[2][16] = {
00562     {  1,  5,  4,  5,  6,  5,  4,  4, 7,  3,  6,  0,  7,  2,  3,  1, },
00563     { 15, 14, 13, 12, 11, 10,  9,  8, 7,  6,  5,  4,  3,  2,  1,  0, },
00564 };
00565 
00566 static const uint8_t mpa_quad_bits[2][16] = {
00567     { 1, 4, 4, 5, 4, 6, 5, 6, 4, 5, 5, 6, 5, 6, 6, 6, },
00568     { 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, },
00569 };
00570 
00571 /* band size tables */
00572 static const uint8_t band_size_long[9][22] = {
00573 { 4, 4, 4, 4, 4, 4, 6, 6, 8, 8, 10,
00574   12, 16, 20, 24, 28, 34, 42, 50, 54, 76, 158, }, /* 44100 */
00575 { 4, 4, 4, 4, 4, 4, 6, 6, 6, 8, 10,
00576   12, 16, 18, 22, 28, 34, 40, 46, 54, 54, 192, }, /* 48000 */
00577 { 4, 4, 4, 4, 4, 4, 6, 6, 8, 10, 12,
00578   16, 20, 24, 30, 38, 46, 56, 68, 84, 102, 26, }, /* 32000 */
00579 { 6, 6, 6, 6, 6, 6, 8, 10, 12, 14, 16,
00580   20, 24, 28, 32, 38, 46, 52, 60, 68, 58, 54, }, /* 22050 */
00581 { 6, 6, 6, 6, 6, 6, 8, 10, 12, 14, 16,
00582   18, 22, 26, 32, 38, 46, 52, 64, 70, 76, 36, }, /* 24000 */
00583 { 6, 6, 6, 6, 6, 6, 8, 10, 12, 14, 16,
00584   20, 24, 28, 32, 38, 46, 52, 60, 68, 58, 54, }, /* 16000 */
00585 { 6, 6, 6, 6, 6, 6, 8, 10, 12, 14, 16,
00586   20, 24, 28, 32, 38, 46, 52, 60, 68, 58, 54, }, /* 11025 */
00587 { 6, 6, 6, 6, 6, 6, 8, 10, 12, 14, 16,
00588   20, 24, 28, 32, 38, 46, 52, 60, 68, 58, 54, }, /* 12000 */
00589 { 12, 12, 12, 12, 12, 12, 16, 20, 24, 28, 32,
00590   40, 48, 56, 64, 76, 90, 2, 2, 2, 2, 2, }, /* 8000 */
00591 };
00592 
00593 static const uint8_t band_size_short[9][13] = {
00594 { 4, 4, 4, 4, 6, 8, 10, 12, 14, 18, 22, 30, 56, }, /* 44100 */
00595 { 4, 4, 4, 4, 6, 6, 10, 12, 14, 16, 20, 26, 66, }, /* 48000 */
00596 { 4, 4, 4, 4, 6, 8, 12, 16, 20, 26, 34, 42, 12, }, /* 32000 */
00597 { 4, 4, 4, 6, 6, 8, 10, 14, 18, 26, 32, 42, 18, }, /* 22050 */
00598 { 4, 4, 4, 6, 8, 10, 12, 14, 18, 24, 32, 44, 12, }, /* 24000 */
00599 { 4, 4, 4, 6, 8, 10, 12, 14, 18, 24, 30, 40, 18, }, /* 16000 */
00600 { 4, 4, 4, 6, 8, 10, 12, 14, 18, 24, 30, 40, 18, }, /* 11025 */
00601 { 4, 4, 4, 6, 8, 10, 12, 14, 18, 24, 30, 40, 18, }, /* 12000 */
00602 { 8, 8, 8, 12, 16, 20, 24, 28, 36, 2, 2, 2, 26, }, /* 8000 */
00603 };
00604 
00605 static const uint8_t mpa_pretab[2][22] = {
00606     { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
00607     { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 3, 3, 3, 2, 0 },
00608 };
00609 
00610 /* table for alias reduction (XXX: store it as integer !) */
00611 static const float ci_table[8] = {
00612     -0.6, -0.535, -0.33, -0.185, -0.095, -0.041, -0.0142, -0.0037,
00613 };
00614 
00615 #endif /* AVCODEC_MPEGAUDIODECTAB_H */