Blame liba52/tables.h

Packit 64f477
/*
Packit 64f477
 * tables.h
Packit 64f477
 * Copyright (C) 2000-2002 Michel Lespinasse <walken@zoy.org>
Packit 64f477
 * Copyright (C) 1999-2000 Aaron Holtzman <aholtzma@ess.engr.uvic.ca>
Packit 64f477
 *
Packit 64f477
 * This file is part of a52dec, a free ATSC A-52 stream decoder.
Packit 64f477
 * See http://liba52.sourceforge.net/ for updates.
Packit 64f477
 *
Packit 64f477
 * a52dec is free software; you can redistribute it and/or modify
Packit 64f477
 * it under the terms of the GNU General Public License as published by
Packit 64f477
 * the Free Software Foundation; either version 2 of the License, or
Packit 64f477
 * (at your option) any later version.
Packit 64f477
 *
Packit 64f477
 * a52dec is distributed in the hope that it will be useful,
Packit 64f477
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
Packit 64f477
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
Packit 64f477
 * GNU General Public License for more details.
Packit 64f477
 *
Packit 64f477
 * You should have received a copy of the GNU General Public License
Packit 64f477
 * along with this program; if not, write to the Free Software
Packit 64f477
 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
Packit 64f477
 */
Packit 64f477
Packit 64f477
static const int8_t exp_1[128] = {
Packit 64f477
    -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,
Packit 64f477
    -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,
Packit 64f477
     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,
Packit 64f477
     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,
Packit 64f477
     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,
Packit 64f477
    25,25,25
Packit 64f477
};
Packit 64f477
static const int8_t exp_2[128] = {
Packit 64f477
    -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,
Packit 64f477
    -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,
Packit 64f477
    -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,
Packit 64f477
    -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,
Packit 64f477
    -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,
Packit 64f477
    25,25,25
Packit 64f477
};
Packit 64f477
static const int8_t exp_3[128] = {
Packit 64f477
    -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,
Packit 64f477
    -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,
Packit 64f477
    -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,
Packit 64f477
    -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,
Packit 64f477
    -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,
Packit 64f477
    25,25,25
Packit 64f477
};
Packit 64f477
Packit 64f477
#define Q0 ((-2 << 15) / 3.0)
Packit 64f477
#define Q1 (0)
Packit 64f477
#define Q2 ((2 << 15) / 3.0)
Packit 64f477
Packit 64f477
static const sample_t q_1_0[32] = {
Packit 64f477
    Q0,Q0,Q0,Q0,Q0,Q0,Q0,Q0,Q0,
Packit 64f477
    Q1,Q1,Q1,Q1,Q1,Q1,Q1,Q1,Q1,
Packit 64f477
    Q2,Q2,Q2,Q2,Q2,Q2,Q2,Q2,Q2,
Packit 64f477
    0,0,0,0,0
Packit 64f477
};
Packit 64f477
Packit 64f477
static const sample_t q_1_1[32] = {
Packit 64f477
    Q0,Q0,Q0,Q1,Q1,Q1,Q2,Q2,Q2,
Packit 64f477
    Q0,Q0,Q0,Q1,Q1,Q1,Q2,Q2,Q2,
Packit 64f477
    Q0,Q0,Q0,Q1,Q1,Q1,Q2,Q2,Q2,
Packit 64f477
    0,0,0,0,0
Packit 64f477
};
Packit 64f477
Packit 64f477
static const sample_t q_1_2[32] = {
Packit 64f477
    Q0,Q1,Q2,Q0,Q1,Q2,Q0,Q1,Q2,
Packit 64f477
    Q0,Q1,Q2,Q0,Q1,Q2,Q0,Q1,Q2,
Packit 64f477
    Q0,Q1,Q2,Q0,Q1,Q2,Q0,Q1,Q2,
Packit 64f477
    0,0,0,0,0
Packit 64f477
};
Packit 64f477
Packit 64f477
#undef Q0
Packit 64f477
#undef Q1
Packit 64f477
#undef Q2
Packit 64f477
Packit 64f477
#define Q0 ((-4 << 15) / 5.0)
Packit 64f477
#define Q1 ((-2 << 15) / 5.0)
Packit 64f477
#define Q2 (0)
Packit 64f477
#define Q3 ((2 << 15) / 5.0)
Packit 64f477
#define Q4 ((4 << 15) / 5.0)
Packit 64f477
Packit 64f477
static const sample_t q_2_0[128] = {
Packit 64f477
    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,
Packit 64f477
    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,
Packit 64f477
    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,
Packit 64f477
    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,
Packit 64f477
    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,
Packit 64f477
    0,0,0
Packit 64f477
};
Packit 64f477
Packit 64f477
static const sample_t q_2_1[128] = {
Packit 64f477
    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,
Packit 64f477
    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,
Packit 64f477
    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,
Packit 64f477
    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,
Packit 64f477
    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,
Packit 64f477
    0,0,0
Packit 64f477
};
Packit 64f477
Packit 64f477
static const sample_t q_2_2[128] = {
Packit 64f477
    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,
Packit 64f477
    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,
Packit 64f477
    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,
Packit 64f477
    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,
Packit 64f477
    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,
Packit 64f477
    0,0,0
Packit 64f477
};
Packit 64f477
Packit 64f477
#undef Q0
Packit 64f477
#undef Q1
Packit 64f477
#undef Q2
Packit 64f477
#undef Q3
Packit 64f477
#undef Q4
Packit 64f477
Packit 64f477
static const sample_t q_3[8] = {
Packit 64f477
    (-6 << 15)/7.0, (-4 << 15)/7.0, (-2 << 15)/7.0, 0,
Packit 64f477
    ( 2 << 15)/7.0, ( 4 << 15)/7.0, ( 6 << 15)/7.0, 0
Packit 64f477
};
Packit 64f477
Packit 64f477
#define Q0 ((-10 << 15) / 11.0)
Packit 64f477
#define Q1 ((-8 << 15) / 11.0)
Packit 64f477
#define Q2 ((-6 << 15) / 11.0)
Packit 64f477
#define Q3 ((-4 << 15) / 11.0)
Packit 64f477
#define Q4 ((-2 << 15) / 11.0)
Packit 64f477
#define Q5 (0)
Packit 64f477
#define Q6 ((2 << 15) / 11.0)
Packit 64f477
#define Q7 ((4 << 15) / 11.0)
Packit 64f477
#define Q8 ((6 << 15) / 11.0)
Packit 64f477
#define Q9 ((8 << 15) / 11.0)
Packit 64f477
#define QA ((10 << 15) / 11.0)
Packit 64f477
Packit 64f477
static const sample_t q_4_0[128] = {
Packit 64f477
    Q0, Q0, Q0, Q0, Q0, Q0, Q0, Q0, Q0, Q0, Q0,
Packit 64f477
    Q1, Q1, Q1, Q1, Q1, Q1, Q1, Q1, Q1, Q1, Q1,
Packit 64f477
    Q2, Q2, Q2, Q2, Q2, Q2, Q2, Q2, Q2, Q2, Q2,
Packit 64f477
    Q3, Q3, Q3, Q3, Q3, Q3, Q3, Q3, Q3, Q3, Q3,
Packit 64f477
    Q4, Q4, Q4, Q4, Q4, Q4, Q4, Q4, Q4, Q4, Q4,
Packit 64f477
    Q5, Q5, Q5, Q5, Q5, Q5, Q5, Q5, Q5, Q5, Q5,
Packit 64f477
    Q6, Q6, Q6, Q6, Q6, Q6, Q6, Q6, Q6, Q6, Q6,
Packit 64f477
    Q7, Q7, Q7, Q7, Q7, Q7, Q7, Q7, Q7, Q7, Q7,
Packit 64f477
    Q8, Q8, Q8, Q8, Q8, Q8, Q8, Q8, Q8, Q8, Q8,
Packit 64f477
    Q9, Q9, Q9, Q9, Q9, Q9, Q9, Q9, Q9, Q9, Q9,
Packit 64f477
    QA, QA, QA, QA, QA, QA, QA, QA, QA, QA, QA,
Packit 64f477
    0,  0,  0,  0,  0,  0,  0
Packit 64f477
};
Packit 64f477
Packit 64f477
static const sample_t q_4_1[128] = {
Packit 64f477
    Q0, Q1, Q2, Q3, Q4, Q5, Q6, Q7, Q8, Q9, QA,
Packit 64f477
    Q0, Q1, Q2, Q3, Q4, Q5, Q6, Q7, Q8, Q9, QA,
Packit 64f477
    Q0, Q1, Q2, Q3, Q4, Q5, Q6, Q7, Q8, Q9, QA,
Packit 64f477
    Q0, Q1, Q2, Q3, Q4, Q5, Q6, Q7, Q8, Q9, QA,
Packit 64f477
    Q0, Q1, Q2, Q3, Q4, Q5, Q6, Q7, Q8, Q9, QA,
Packit 64f477
    Q0, Q1, Q2, Q3, Q4, Q5, Q6, Q7, Q8, Q9, QA,
Packit 64f477
    Q0, Q1, Q2, Q3, Q4, Q5, Q6, Q7, Q8, Q9, QA,
Packit 64f477
    Q0, Q1, Q2, Q3, Q4, Q5, Q6, Q7, Q8, Q9, QA,
Packit 64f477
    Q0, Q1, Q2, Q3, Q4, Q5, Q6, Q7, Q8, Q9, QA,
Packit 64f477
    Q0, Q1, Q2, Q3, Q4, Q5, Q6, Q7, Q8, Q9, QA,
Packit 64f477
    Q0, Q1, Q2, Q3, Q4, Q5, Q6, Q7, Q8, Q9, QA,
Packit 64f477
    0,  0,  0,  0,  0,  0,  0
Packit 64f477
};
Packit 64f477
Packit 64f477
#undef Q0
Packit 64f477
#undef Q1
Packit 64f477
#undef Q2
Packit 64f477
#undef Q3
Packit 64f477
#undef Q4
Packit 64f477
#undef Q5
Packit 64f477
#undef Q6
Packit 64f477
#undef Q7
Packit 64f477
#undef Q8
Packit 64f477
#undef Q9
Packit 64f477
#undef QA
Packit 64f477
Packit 64f477
static const sample_t q_5[16] = {
Packit 64f477
    (-14 << 15)/15.0,(-12 << 15)/15.0,(-10 << 15)/15.0,
Packit 64f477
    ( -8 << 15)/15.0,( -6 << 15)/15.0,( -4 << 15)/15.0,
Packit 64f477
    ( -2 << 15)/15.0,   0            ,(  2 << 15)/15.0,
Packit 64f477
    (  4 << 15)/15.0,(  6 << 15)/15.0,(  8 << 15)/15.0,
Packit 64f477
    ( 10 << 15)/15.0,( 12 << 15)/15.0,( 14 << 15)/15.0,
Packit 64f477
    0
Packit 64f477
};
Packit 64f477
Packit 64f477
static const sample_t scale_factor[25] = {
Packit 64f477
    0.000030517578125,
Packit 64f477
    0.0000152587890625,
Packit 64f477
    0.00000762939453125,
Packit 64f477
    0.000003814697265625,
Packit 64f477
    0.0000019073486328125,
Packit 64f477
    0.00000095367431640625,
Packit 64f477
    0.000000476837158203125,
Packit 64f477
    0.0000002384185791015625,
Packit 64f477
    0.00000011920928955078125,
Packit 64f477
    0.000000059604644775390625,
Packit 64f477
    0.0000000298023223876953125,
Packit 64f477
    0.00000001490116119384765625,
Packit 64f477
    0.000000007450580596923828125,
Packit 64f477
    0.0000000037252902984619140625,
Packit 64f477
    0.00000000186264514923095703125,
Packit 64f477
    0.000000000931322574615478515625,
Packit 64f477
    0.0000000004656612873077392578125,
Packit 64f477
    0.00000000023283064365386962890625,
Packit 64f477
    0.000000000116415321826934814453125,
Packit 64f477
    0.0000000000582076609134674072265625,
Packit 64f477
    0.00000000002910383045673370361328125,
Packit 64f477
    0.000000000014551915228366851806640625,
Packit 64f477
    0.0000000000072759576141834259033203125,
Packit 64f477
    0.00000000000363797880709171295166015625,
Packit 64f477
    0.000000000001818989403545856475830078125
Packit 64f477
};
Packit 64f477
Packit 64f477
static const uint16_t dither_lut[256] = {
Packit 64f477
    0x0000, 0xa011, 0xe033, 0x4022, 0x6077, 0xc066, 0x8044, 0x2055,
Packit 64f477
    0xc0ee, 0x60ff, 0x20dd, 0x80cc, 0xa099, 0x0088, 0x40aa, 0xe0bb,
Packit 64f477
    0x21cd, 0x81dc, 0xc1fe, 0x61ef, 0x41ba, 0xe1ab, 0xa189, 0x0198,
Packit 64f477
    0xe123, 0x4132, 0x0110, 0xa101, 0x8154, 0x2145, 0x6167, 0xc176,
Packit 64f477
    0x439a, 0xe38b, 0xa3a9, 0x03b8, 0x23ed, 0x83fc, 0xc3de, 0x63cf,
Packit 64f477
    0x8374, 0x2365, 0x6347, 0xc356, 0xe303, 0x4312, 0x0330, 0xa321,
Packit 64f477
    0x6257, 0xc246, 0x8264, 0x2275, 0x0220, 0xa231, 0xe213, 0x4202,
Packit 64f477
    0xa2b9, 0x02a8, 0x428a, 0xe29b, 0xc2ce, 0x62df, 0x22fd, 0x82ec,
Packit 64f477
    0x8734, 0x2725, 0x6707, 0xc716, 0xe743, 0x4752, 0x0770, 0xa761,
Packit 64f477
    0x47da, 0xe7cb, 0xa7e9, 0x07f8, 0x27ad, 0x87bc, 0xc79e, 0x678f,
Packit 64f477
    0xa6f9, 0x06e8, 0x46ca, 0xe6db, 0xc68e, 0x669f, 0x26bd, 0x86ac,
Packit 64f477
    0x6617, 0xc606, 0x8624, 0x2635, 0x0660, 0xa671, 0xe653, 0x4642,
Packit 64f477
    0xc4ae, 0x64bf, 0x249d, 0x848c, 0xa4d9, 0x04c8, 0x44ea, 0xe4fb,
Packit 64f477
    0x0440, 0xa451, 0xe473, 0x4462, 0x6437, 0xc426, 0x8404, 0x2415,
Packit 64f477
    0xe563, 0x4572, 0x0550, 0xa541, 0x8514, 0x2505, 0x6527, 0xc536,
Packit 64f477
    0x258d, 0x859c, 0xc5be, 0x65af, 0x45fa, 0xe5eb, 0xa5c9, 0x05d8,
Packit 64f477
    0xae79, 0x0e68, 0x4e4a, 0xee5b, 0xce0e, 0x6e1f, 0x2e3d, 0x8e2c,
Packit 64f477
    0x6e97, 0xce86, 0x8ea4, 0x2eb5, 0x0ee0, 0xaef1, 0xeed3, 0x4ec2,
Packit 64f477
    0x8fb4, 0x2fa5, 0x6f87, 0xcf96, 0xefc3, 0x4fd2, 0x0ff0, 0xafe1,
Packit 64f477
    0x4f5a, 0xef4b, 0xaf69, 0x0f78, 0x2f2d, 0x8f3c, 0xcf1e, 0x6f0f,
Packit 64f477
    0xede3, 0x4df2, 0x0dd0, 0xadc1, 0x8d94, 0x2d85, 0x6da7, 0xcdb6,
Packit 64f477
    0x2d0d, 0x8d1c, 0xcd3e, 0x6d2f, 0x4d7a, 0xed6b, 0xad49, 0x0d58,
Packit 64f477
    0xcc2e, 0x6c3f, 0x2c1d, 0x8c0c, 0xac59, 0x0c48, 0x4c6a, 0xec7b,
Packit 64f477
    0x0cc0, 0xacd1, 0xecf3, 0x4ce2, 0x6cb7, 0xcca6, 0x8c84, 0x2c95,
Packit 64f477
    0x294d, 0x895c, 0xc97e, 0x696f, 0x493a, 0xe92b, 0xa909, 0x0918,
Packit 64f477
    0xe9a3, 0x49b2, 0x0990, 0xa981, 0x89d4, 0x29c5, 0x69e7, 0xc9f6,
Packit 64f477
    0x0880, 0xa891, 0xe8b3, 0x48a2, 0x68f7, 0xc8e6, 0x88c4, 0x28d5,
Packit 64f477
    0xc86e, 0x687f, 0x285d, 0x884c, 0xa819, 0x0808, 0x482a, 0xe83b,
Packit 64f477
    0x6ad7, 0xcac6, 0x8ae4, 0x2af5, 0x0aa0, 0xaab1, 0xea93, 0x4a82,
Packit 64f477
    0xaa39, 0x0a28, 0x4a0a, 0xea1b, 0xca4e, 0x6a5f, 0x2a7d, 0x8a6c,
Packit 64f477
    0x4b1a, 0xeb0b, 0xab29, 0x0b38, 0x2b6d, 0x8b7c, 0xcb5e, 0x6b4f,
Packit 64f477
    0x8bf4, 0x2be5, 0x6bc7, 0xcbd6, 0xeb83, 0x4b92, 0x0bb0, 0xaba1
Packit 64f477
};