tables.h

00001 /*
00002  * tables.h
00003  * Copyright (C) 2000-2002 Michel Lespinasse <[email protected]>
00004  * Copyright (C) 1999-2000 Aaron Holtzman <[email protected]>
00005  *
00006  * This file is part of a52dec, a free ATSC A-52 stream decoder.
00007  * See http://liba52.sourceforge.net/ for updates.
00008  *
00009  * a52dec is free software; you can redistribute it and/or modify
00010  * it under the terms of the GNU General Public License as published by
00011  * the Free Software Foundation; either version 2 of the License, or
00012  * (at your option) any later version.
00013  *
00014  * a52dec is distributed in the hope that it will be useful,
00015  * but WITHOUT ANY WARRANTY; without even the implied warranty of
00016  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
00017  * GNU General Public License for more details.
00018  *
00019  * You should have received a copy of the GNU General Public License
00020  * along with this program; if not, write to the Free Software
00021  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
00022  */
00023 
00024 static const int8_t exp_1[128] = {
00025     -2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,
00026     -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,
00027      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
00028      1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
00029      2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
00030     25,25,25
00031 };
00032 static const int8_t exp_2[128] = {
00033     -2,-2,-2,-2,-2,-1,-1,-1,-1,-1, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2,
00034     -2,-2,-2,-2,-2,-1,-1,-1,-1,-1, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2,
00035     -2,-2,-2,-2,-2,-1,-1,-1,-1,-1, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2,
00036     -2,-2,-2,-2,-2,-1,-1,-1,-1,-1, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2,
00037     -2,-2,-2,-2,-2,-1,-1,-1,-1,-1, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2,
00038     25,25,25
00039 };
00040 static const int8_t exp_3[128] = {
00041     -2,-1, 0, 1, 2,-2,-1, 0, 1, 2,-2,-1, 0, 1, 2,-2,-1, 0, 1, 2,-2,-1, 0, 1, 2,
00042     -2,-1, 0, 1, 2,-2,-1, 0, 1, 2,-2,-1, 0, 1, 2,-2,-1, 0, 1, 2,-2,-1, 0, 1, 2,
00043     -2,-1, 0, 1, 2,-2,-1, 0, 1, 2,-2,-1, 0, 1, 2,-2,-1, 0, 1, 2,-2,-1, 0, 1, 2,
00044     -2,-1, 0, 1, 2,-2,-1, 0, 1, 2,-2,-1, 0, 1, 2,-2,-1, 0, 1, 2,-2,-1, 0, 1, 2,
00045     -2,-1, 0, 1, 2,-2,-1, 0, 1, 2,-2,-1, 0, 1, 2,-2,-1, 0, 1, 2,-2,-1, 0, 1, 2,
00046     25,25,25
00047 };
00048 
00049 #define Q0 ((-2 << 15) / 3.0)
00050 #define Q1 (0)
00051 #define Q2 ((2 << 15) / 3.0)
00052 
00053 static const sample_t q_1_0[32] = {
00054     Q0,Q0,Q0,Q0,Q0,Q0,Q0,Q0,Q0,
00055     Q1,Q1,Q1,Q1,Q1,Q1,Q1,Q1,Q1,
00056     Q2,Q2,Q2,Q2,Q2,Q2,Q2,Q2,Q2,
00057     0,0,0,0,0
00058 };
00059 
00060 static const sample_t q_1_1[32] = {
00061     Q0,Q0,Q0,Q1,Q1,Q1,Q2,Q2,Q2,
00062     Q0,Q0,Q0,Q1,Q1,Q1,Q2,Q2,Q2,
00063     Q0,Q0,Q0,Q1,Q1,Q1,Q2,Q2,Q2,
00064     0,0,0,0,0
00065 };
00066 
00067 static const sample_t q_1_2[32] = {
00068     Q0,Q1,Q2,Q0,Q1,Q2,Q0,Q1,Q2,
00069     Q0,Q1,Q2,Q0,Q1,Q2,Q0,Q1,Q2,
00070     Q0,Q1,Q2,Q0,Q1,Q2,Q0,Q1,Q2,
00071     0,0,0,0,0
00072 };
00073 
00074 #undef Q0
00075 #undef Q1
00076 #undef Q2
00077 
00078 #define Q0 ((-4 << 15) / 5.0)
00079 #define Q1 ((-2 << 15) / 5.0)
00080 #define Q2 (0)
00081 #define Q3 ((2 << 15) / 5.0)
00082 #define Q4 ((4 << 15) / 5.0)
00083 
00084 static const sample_t q_2_0[128] = {
00085     Q0,Q0,Q0,Q0,Q0,Q0,Q0,Q0,Q0,Q0,Q0,Q0,Q0,Q0,Q0,Q0,Q0,Q0,Q0,Q0,Q0,Q0,Q0,Q0,Q0,
00086     Q1,Q1,Q1,Q1,Q1,Q1,Q1,Q1,Q1,Q1,Q1,Q1,Q1,Q1,Q1,Q1,Q1,Q1,Q1,Q1,Q1,Q1,Q1,Q1,Q1,
00087     Q2,Q2,Q2,Q2,Q2,Q2,Q2,Q2,Q2,Q2,Q2,Q2,Q2,Q2,Q2,Q2,Q2,Q2,Q2,Q2,Q2,Q2,Q2,Q2,Q2,
00088     Q3,Q3,Q3,Q3,Q3,Q3,Q3,Q3,Q3,Q3,Q3,Q3,Q3,Q3,Q3,Q3,Q3,Q3,Q3,Q3,Q3,Q3,Q3,Q3,Q3,
00089     Q4,Q4,Q4,Q4,Q4,Q4,Q4,Q4,Q4,Q4,Q4,Q4,Q4,Q4,Q4,Q4,Q4,Q4,Q4,Q4,Q4,Q4,Q4,Q4,Q4,
00090     0,0,0
00091 };
00092 
00093 static const sample_t q_2_1[128] = {
00094     Q0,Q0,Q0,Q0,Q0,Q1,Q1,Q1,Q1,Q1,Q2,Q2,Q2,Q2,Q2,Q3,Q3,Q3,Q3,Q3,Q4,Q4,Q4,Q4,Q4,
00095     Q0,Q0,Q0,Q0,Q0,Q1,Q1,Q1,Q1,Q1,Q2,Q2,Q2,Q2,Q2,Q3,Q3,Q3,Q3,Q3,Q4,Q4,Q4,Q4,Q4,
00096     Q0,Q0,Q0,Q0,Q0,Q1,Q1,Q1,Q1,Q1,Q2,Q2,Q2,Q2,Q2,Q3,Q3,Q3,Q3,Q3,Q4,Q4,Q4,Q4,Q4,
00097     Q0,Q0,Q0,Q0,Q0,Q1,Q1,Q1,Q1,Q1,Q2,Q2,Q2,Q2,Q2,Q3,Q3,Q3,Q3,Q3,Q4,Q4,Q4,Q4,Q4,
00098     Q0,Q0,Q0,Q0,Q0,Q1,Q1,Q1,Q1,Q1,Q2,Q2,Q2,Q2,Q2,Q3,Q3,Q3,Q3,Q3,Q4,Q4,Q4,Q4,Q4,
00099     0,0,0
00100 };
00101 
00102 static const sample_t q_2_2[128] = {
00103     Q0,Q1,Q2,Q3,Q4,Q0,Q1,Q2,Q3,Q4,Q0,Q1,Q2,Q3,Q4,Q0,Q1,Q2,Q3,Q4,Q0,Q1,Q2,Q3,Q4,
00104     Q0,Q1,Q2,Q3,Q4,Q0,Q1,Q2,Q3,Q4,Q0,Q1,Q2,Q3,Q4,Q0,Q1,Q2,Q3,Q4,Q0,Q1,Q2,Q3,Q4,
00105     Q0,Q1,Q2,Q3,Q4,Q0,Q1,Q2,Q3,Q4,Q0,Q1,Q2,Q3,Q4,Q0,Q1,Q2,Q3,Q4,Q0,Q1,Q2,Q3,Q4,
00106     Q0,Q1,Q2,Q3,Q4,Q0,Q1,Q2,Q3,Q4,Q0,Q1,Q2,Q3,Q4,Q0,Q1,Q2,Q3,Q4,Q0,Q1,Q2,Q3,Q4,
00107     Q0,Q1,Q2,Q3,Q4,Q0,Q1,Q2,Q3,Q4,Q0,Q1,Q2,Q3,Q4,Q0,Q1,Q2,Q3,Q4,Q0,Q1,Q2,Q3,Q4,
00108     0,0,0
00109 };
00110 
00111 #undef Q0
00112 #undef Q1
00113 #undef Q2
00114 #undef Q3
00115 #undef Q4
00116 
00117 static const sample_t q_3[8] = {
00118     (-6 << 15)/7.0, (-4 << 15)/7.0, (-2 << 15)/7.0, 0,
00119     ( 2 << 15)/7.0, ( 4 << 15)/7.0, ( 6 << 15)/7.0, 0
00120 };
00121 
00122 #define Q0 ((-10 << 15) / 11.0)
00123 #define Q1 ((-8 << 15) / 11.0)
00124 #define Q2 ((-6 << 15) / 11.0)
00125 #define Q3 ((-4 << 15) / 11.0)
00126 #define Q4 ((-2 << 15) / 11.0)
00127 #define Q5 (0)
00128 #define Q6 ((2 << 15) / 11.0)
00129 #define Q7 ((4 << 15) / 11.0)
00130 #define Q8 ((6 << 15) / 11.0)
00131 #define Q9 ((8 << 15) / 11.0)
00132 #define QA ((10 << 15) / 11.0)
00133 
00134 static const sample_t q_4_0[128] = {
00135     Q0, Q0, Q0, Q0, Q0, Q0, Q0, Q0, Q0, Q0, Q0,
00136     Q1, Q1, Q1, Q1, Q1, Q1, Q1, Q1, Q1, Q1, Q1,
00137     Q2, Q2, Q2, Q2, Q2, Q2, Q2, Q2, Q2, Q2, Q2,
00138     Q3, Q3, Q3, Q3, Q3, Q3, Q3, Q3, Q3, Q3, Q3,
00139     Q4, Q4, Q4, Q4, Q4, Q4, Q4, Q4, Q4, Q4, Q4,
00140     Q5, Q5, Q5, Q5, Q5, Q5, Q5, Q5, Q5, Q5, Q5,
00141     Q6, Q6, Q6, Q6, Q6, Q6, Q6, Q6, Q6, Q6, Q6,
00142     Q7, Q7, Q7, Q7, Q7, Q7, Q7, Q7, Q7, Q7, Q7,
00143     Q8, Q8, Q8, Q8, Q8, Q8, Q8, Q8, Q8, Q8, Q8,
00144     Q9, Q9, Q9, Q9, Q9, Q9, Q9, Q9, Q9, Q9, Q9,
00145     QA, QA, QA, QA, QA, QA, QA, QA, QA, QA, QA,
00146     0,  0,  0,  0,  0,  0,  0
00147 };
00148 
00149 static const sample_t q_4_1[128] = {
00150     Q0, Q1, Q2, Q3, Q4, Q5, Q6, Q7, Q8, Q9, QA,
00151     Q0, Q1, Q2, Q3, Q4, Q5, Q6, Q7, Q8, Q9, QA,
00152     Q0, Q1, Q2, Q3, Q4, Q5, Q6, Q7, Q8, Q9, QA,
00153     Q0, Q1, Q2, Q3, Q4, Q5, Q6, Q7, Q8, Q9, QA,
00154     Q0, Q1, Q2, Q3, Q4, Q5, Q6, Q7, Q8, Q9, QA,
00155     Q0, Q1, Q2, Q3, Q4, Q5, Q6, Q7, Q8, Q9, QA,
00156     Q0, Q1, Q2, Q3, Q4, Q5, Q6, Q7, Q8, Q9, QA,
00157     Q0, Q1, Q2, Q3, Q4, Q5, Q6, Q7, Q8, Q9, QA,
00158     Q0, Q1, Q2, Q3, Q4, Q5, Q6, Q7, Q8, Q9, QA,
00159     Q0, Q1, Q2, Q3, Q4, Q5, Q6, Q7, Q8, Q9, QA,
00160     Q0, Q1, Q2, Q3, Q4, Q5, Q6, Q7, Q8, Q9, QA,
00161     0,  0,  0,  0,  0,  0,  0
00162 };
00163 
00164 #undef Q0
00165 #undef Q1
00166 #undef Q2
00167 #undef Q3
00168 #undef Q4
00169 #undef Q5
00170 #undef Q6
00171 #undef Q7
00172 #undef Q8
00173 #undef Q9
00174 #undef QA
00175 
00176 static const sample_t q_5[16] = {
00177     (-14 << 15)/15.0,(-12 << 15)/15.0,(-10 << 15)/15.0,
00178     ( -8 << 15)/15.0,( -6 << 15)/15.0,( -4 << 15)/15.0,
00179     ( -2 << 15)/15.0,   0            ,(  2 << 15)/15.0,
00180     (  4 << 15)/15.0,(  6 << 15)/15.0,(  8 << 15)/15.0,
00181     ( 10 << 15)/15.0,( 12 << 15)/15.0,( 14 << 15)/15.0,
00182     0
00183 };
00184 
00185 static const sample_t scale_factor[25] = {
00186     0.000030517578125,
00187     0.0000152587890625,
00188     0.00000762939453125,
00189     0.000003814697265625,
00190     0.0000019073486328125,
00191     0.00000095367431640625,
00192     0.000000476837158203125,
00193     0.0000002384185791015625,
00194     0.00000011920928955078125,
00195     0.000000059604644775390625,
00196     0.0000000298023223876953125,
00197     0.00000001490116119384765625,
00198     0.000000007450580596923828125,
00199     0.0000000037252902984619140625,
00200     0.00000000186264514923095703125,
00201     0.000000000931322574615478515625,
00202     0.0000000004656612873077392578125,
00203     0.00000000023283064365386962890625,
00204     0.000000000116415321826934814453125,
00205     0.0000000000582076609134674072265625,
00206     0.00000000002910383045673370361328125,
00207     0.000000000014551915228366851806640625,
00208     0.0000000000072759576141834259033203125,
00209     0.00000000000363797880709171295166015625,
00210     0.000000000001818989403545856475830078125
00211 };
00212 
00213 static const uint16_t dither_lut[256] = {
00214     0x0000, 0xa011, 0xe033, 0x4022, 0x6077, 0xc066, 0x8044, 0x2055,
00215     0xc0ee, 0x60ff, 0x20dd, 0x80cc, 0xa099, 0x0088, 0x40aa, 0xe0bb,
00216     0x21cd, 0x81dc, 0xc1fe, 0x61ef, 0x41ba, 0xe1ab, 0xa189, 0x0198,
00217     0xe123, 0x4132, 0x0110, 0xa101, 0x8154, 0x2145, 0x6167, 0xc176,
00218     0x439a, 0xe38b, 0xa3a9, 0x03b8, 0x23ed, 0x83fc, 0xc3de, 0x63cf,
00219     0x8374, 0x2365, 0x6347, 0xc356, 0xe303, 0x4312, 0x0330, 0xa321,
00220     0x6257, 0xc246, 0x8264, 0x2275, 0x0220, 0xa231, 0xe213, 0x4202,
00221     0xa2b9, 0x02a8, 0x428a, 0xe29b, 0xc2ce, 0x62df, 0x22fd, 0x82ec,
00222     0x8734, 0x2725, 0x6707, 0xc716, 0xe743, 0x4752, 0x0770, 0xa761,
00223     0x47da, 0xe7cb, 0xa7e9, 0x07f8, 0x27ad, 0x87bc, 0xc79e, 0x678f,
00224     0xa6f9, 0x06e8, 0x46ca, 0xe6db, 0xc68e, 0x669f, 0x26bd, 0x86ac,
00225     0x6617, 0xc606, 0x8624, 0x2635, 0x0660, 0xa671, 0xe653, 0x4642,
00226     0xc4ae, 0x64bf, 0x249d, 0x848c, 0xa4d9, 0x04c8, 0x44ea, 0xe4fb,
00227     0x0440, 0xa451, 0xe473, 0x4462, 0x6437, 0xc426, 0x8404, 0x2415,
00228     0xe563, 0x4572, 0x0550, 0xa541, 0x8514, 0x2505, 0x6527, 0xc536,
00229     0x258d, 0x859c, 0xc5be, 0x65af, 0x45fa, 0xe5eb, 0xa5c9, 0x05d8,
00230     0xae79, 0x0e68, 0x4e4a, 0xee5b, 0xce0e, 0x6e1f, 0x2e3d, 0x8e2c,
00231     0x6e97, 0xce86, 0x8ea4, 0x2eb5, 0x0ee0, 0xaef1, 0xeed3, 0x4ec2,
00232     0x8fb4, 0x2fa5, 0x6f87, 0xcf96, 0xefc3, 0x4fd2, 0x0ff0, 0xafe1,
00233     0x4f5a, 0xef4b, 0xaf69, 0x0f78, 0x2f2d, 0x8f3c, 0xcf1e, 0x6f0f,
00234     0xede3, 0x4df2, 0x0dd0, 0xadc1, 0x8d94, 0x2d85, 0x6da7, 0xcdb6,
00235     0x2d0d, 0x8d1c, 0xcd3e, 0x6d2f, 0x4d7a, 0xed6b, 0xad49, 0x0d58,
00236     0xcc2e, 0x6c3f, 0x2c1d, 0x8c0c, 0xac59, 0x0c48, 0x4c6a, 0xec7b,
00237     0x0cc0, 0xacd1, 0xecf3, 0x4ce2, 0x6cb7, 0xcca6, 0x8c84, 0x2c95,
00238     0x294d, 0x895c, 0xc97e, 0x696f, 0x493a, 0xe92b, 0xa909, 0x0918,
00239     0xe9a3, 0x49b2, 0x0990, 0xa981, 0x89d4, 0x29c5, 0x69e7, 0xc9f6,
00240     0x0880, 0xa891, 0xe8b3, 0x48a2, 0x68f7, 0xc8e6, 0x88c4, 0x28d5,
00241     0xc86e, 0x687f, 0x285d, 0x884c, 0xa819, 0x0808, 0x482a, 0xe83b,
00242     0x6ad7, 0xcac6, 0x8ae4, 0x2af5, 0x0aa0, 0xaab1, 0xea93, 0x4a82,
00243     0xaa39, 0x0a28, 0x4a0a, 0xea1b, 0xca4e, 0x6a5f, 0x2a7d, 0x8a6c,
00244     0x4b1a, 0xeb0b, 0xab29, 0x0b38, 0x2b6d, 0x8b7c, 0xcb5e, 0x6b4f,
00245     0x8bf4, 0x2be5, 0x6bc7, 0xcbd6, 0xeb83, 0x4b92, 0x0bb0, 0xaba1
00246 };

Generated on Tue Dec 13 14:47:27 2005 for guliverkli by  doxygen 1.4.5