comparison liba52/tables.h @ 1072:68d0a38bd802 libavcodec

* sync with main liba52 sources
author kabi
date Tue, 18 Feb 2003 11:48:57 +0000
parents 207cc56d18f8
children 0b546eab515d
comparison
equal deleted inserted replaced
1071:0a48dd404167 1072:68d0a38bd802
1 /* 1 /*
2 * tables.h 2 * tables.h
3 * Copyright (C) 2000-2002 Michel Lespinasse <walken@zoy.org> 3 * Copyright (C) 2000-2003 Michel Lespinasse <walken@zoy.org>
4 * Copyright (C) 1999-2000 Aaron Holtzman <aholtzma@ess.engr.uvic.ca> 4 * Copyright (C) 1999-2000 Aaron Holtzman <aholtzma@ess.engr.uvic.ca>
5 * 5 *
6 * This file is part of a52dec, a free ATSC A-52 stream decoder. 6 * This file is part of a52dec, a free ATSC A-52 stream decoder.
7 * See http://liba52.sourceforge.net/ for updates. 7 * See http://liba52.sourceforge.net/ for updates.
8 * 8 *
44 -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, 44 -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,
45 -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, 45 -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,
46 25,25,25 46 25,25,25
47 }; 47 };
48 48
49 #define Q0 ((-2 << 15) / 3.0) 49 #define Q(x) ROUND (32768.0 * x)
50 #define Q1 (0) 50
51 #define Q2 ((2 << 15) / 3.0) 51 #define Q0 Q (-2/3)
52 52 #define Q1 Q (0)
53 static const sample_t q_1_0[32] = { 53 #define Q2 Q (2/3)
54 Q0,Q0,Q0,Q0,Q0,Q0,Q0,Q0,Q0, 54
55 Q1,Q1,Q1,Q1,Q1,Q1,Q1,Q1,Q1, 55 static const quantizer_t q_1_0[32] = {
56 Q2,Q2,Q2,Q2,Q2,Q2,Q2,Q2,Q2, 56 Q0, Q0, Q0, Q0, Q0, Q0, Q0, Q0, Q0,
57 0,0,0,0,0 57 Q1, Q1, Q1, Q1, Q1, Q1, Q1, Q1, Q1,
58 }; 58 Q2, Q2, Q2, Q2, Q2, Q2, Q2, Q2, Q2,
59 59 0, 0, 0, 0, 0
60 static const sample_t q_1_1[32] = { 60 };
61 Q0,Q0,Q0,Q1,Q1,Q1,Q2,Q2,Q2, 61
62 Q0,Q0,Q0,Q1,Q1,Q1,Q2,Q2,Q2, 62 static const quantizer_t q_1_1[32] = {
63 Q0,Q0,Q0,Q1,Q1,Q1,Q2,Q2,Q2, 63 Q0, Q0, Q0, Q1, Q1, Q1, Q2, Q2, Q2,
64 0,0,0,0,0 64 Q0, Q0, Q0, Q1, Q1, Q1, Q2, Q2, Q2,
65 }; 65 Q0, Q0, Q0, Q1, Q1, Q1, Q2, Q2, Q2,
66 66 0, 0, 0, 0, 0
67 static const sample_t q_1_2[32] = { 67 };
68 Q0,Q1,Q2,Q0,Q1,Q2,Q0,Q1,Q2, 68
69 Q0,Q1,Q2,Q0,Q1,Q2,Q0,Q1,Q2, 69 static const quantizer_t q_1_2[32] = {
70 Q0,Q1,Q2,Q0,Q1,Q2,Q0,Q1,Q2, 70 Q0, Q1, Q2, Q0, Q1, Q2, Q0, Q1, Q2,
71 0,0,0,0,0 71 Q0, Q1, Q2, Q0, Q1, Q2, Q0, Q1, Q2,
72 Q0, Q1, Q2, Q0, Q1, Q2, Q0, Q1, Q2,
73 0, 0, 0, 0, 0
72 }; 74 };
73 75
74 #undef Q0 76 #undef Q0
75 #undef Q1 77 #undef Q1
76 #undef Q2 78 #undef Q2
77 79
78 #define Q0 ((-4 << 15) / 5.0) 80 #define Q0 Q (-4/5)
79 #define Q1 ((-2 << 15) / 5.0) 81 #define Q1 Q (-2/5)
80 #define Q2 (0) 82 #define Q2 Q (0)
81 #define Q3 ((2 << 15) / 5.0) 83 #define Q3 Q (2/5)
82 #define Q4 ((4 << 15) / 5.0) 84 #define Q4 Q (4/5)
83 85
84 static const sample_t q_2_0[128] = { 86 static const quantizer_t q_2_0[128] = {
85 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, 87 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,
86 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, 88 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,
87 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, 89 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,
88 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, 90 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,
89 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, 91 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,
90 0,0,0 92 0,0,0
91 }; 93 };
92 94
93 static const sample_t q_2_1[128] = { 95 static const quantizer_t q_2_1[128] = {
94 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, 96 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,
95 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, 97 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,
96 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, 98 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,
97 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, 99 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,
98 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, 100 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,
99 0,0,0 101 0,0,0
100 }; 102 };
101 103
102 static const sample_t q_2_2[128] = { 104 static const quantizer_t q_2_2[128] = {
103 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, 105 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,
104 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, 106 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,
105 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, 107 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,
106 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, 108 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,
107 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, 109 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,
112 #undef Q1 114 #undef Q1
113 #undef Q2 115 #undef Q2
114 #undef Q3 116 #undef Q3
115 #undef Q4 117 #undef Q4
116 118
117 static const sample_t q_3[8] = { 119 static const quantizer_t q_3[8] = {
118 (-6 << 15)/7.0, (-4 << 15)/7.0, (-2 << 15)/7.0, 0, 120 Q (-6/7), Q (-4/7), Q (-2/7), Q (0), Q (2/7), Q (4/7), Q (6/7), 0
119 ( 2 << 15)/7.0, ( 4 << 15)/7.0, ( 6 << 15)/7.0, 0 121 };
120 }; 122
121 123 #define Q0 Q (-10/11)
122 #define Q0 ((-10 << 15) / 11.0) 124 #define Q1 Q (-8/11)
123 #define Q1 ((-8 << 15) / 11.0) 125 #define Q2 Q (-6/11)
124 #define Q2 ((-6 << 15) / 11.0) 126 #define Q3 Q (-4/11)
125 #define Q3 ((-4 << 15) / 11.0) 127 #define Q4 Q (-2/11)
126 #define Q4 ((-2 << 15) / 11.0) 128 #define Q5 Q (0)
127 #define Q5 (0) 129 #define Q6 Q (2/11)
128 #define Q6 ((2 << 15) / 11.0) 130 #define Q7 Q (4/11)
129 #define Q7 ((4 << 15) / 11.0) 131 #define Q8 Q (6/11)
130 #define Q8 ((6 << 15) / 11.0) 132 #define Q9 Q (8/11)
131 #define Q9 ((8 << 15) / 11.0) 133 #define QA Q (10/11)
132 #define QA ((10 << 15) / 11.0) 134
133 135 static const quantizer_t q_4_0[128] = {
134 static const sample_t q_4_0[128] = {
135 Q0, Q0, Q0, Q0, Q0, Q0, Q0, Q0, Q0, Q0, Q0, 136 Q0, Q0, Q0, Q0, Q0, Q0, Q0, Q0, Q0, Q0, Q0,
136 Q1, Q1, Q1, Q1, Q1, Q1, Q1, Q1, Q1, Q1, Q1, 137 Q1, Q1, Q1, Q1, Q1, Q1, Q1, Q1, Q1, Q1, Q1,
137 Q2, Q2, Q2, Q2, Q2, Q2, Q2, Q2, Q2, Q2, Q2, 138 Q2, Q2, Q2, Q2, Q2, Q2, Q2, Q2, Q2, Q2, Q2,
138 Q3, Q3, Q3, Q3, Q3, Q3, Q3, Q3, Q3, Q3, Q3, 139 Q3, Q3, Q3, Q3, Q3, Q3, Q3, Q3, Q3, Q3, Q3,
139 Q4, Q4, Q4, Q4, Q4, Q4, Q4, Q4, Q4, Q4, Q4, 140 Q4, Q4, Q4, Q4, Q4, Q4, Q4, Q4, Q4, Q4, Q4,
144 Q9, Q9, Q9, Q9, Q9, Q9, Q9, Q9, Q9, Q9, Q9, 145 Q9, Q9, Q9, Q9, Q9, Q9, Q9, Q9, Q9, Q9, Q9,
145 QA, QA, QA, QA, QA, QA, QA, QA, QA, QA, QA, 146 QA, QA, QA, QA, QA, QA, QA, QA, QA, QA, QA,
146 0, 0, 0, 0, 0, 0, 0 147 0, 0, 0, 0, 0, 0, 0
147 }; 148 };
148 149
149 static const sample_t q_4_1[128] = { 150 static const quantizer_t q_4_1[128] = {
150 Q0, Q1, Q2, Q3, Q4, Q5, Q6, Q7, Q8, Q9, QA, 151 Q0, Q1, Q2, Q3, Q4, Q5, Q6, Q7, Q8, Q9, QA,
151 Q0, Q1, Q2, Q3, Q4, Q5, Q6, Q7, Q8, Q9, QA, 152 Q0, Q1, Q2, Q3, Q4, Q5, Q6, Q7, Q8, Q9, QA,
152 Q0, Q1, Q2, Q3, Q4, Q5, Q6, Q7, Q8, Q9, QA, 153 Q0, Q1, Q2, Q3, Q4, Q5, Q6, Q7, Q8, Q9, QA,
153 Q0, Q1, Q2, Q3, Q4, Q5, Q6, Q7, Q8, Q9, QA, 154 Q0, Q1, Q2, Q3, Q4, Q5, Q6, Q7, Q8, Q9, QA,
154 Q0, Q1, Q2, Q3, Q4, Q5, Q6, Q7, Q8, Q9, QA, 155 Q0, Q1, Q2, Q3, Q4, Q5, Q6, Q7, Q8, Q9, QA,
171 #undef Q7 172 #undef Q7
172 #undef Q8 173 #undef Q8
173 #undef Q9 174 #undef Q9
174 #undef QA 175 #undef QA
175 176
176 static const sample_t q_5[16] = { 177 static const quantizer_t q_5[16] = {
177 (-14 << 15)/15.0,(-12 << 15)/15.0,(-10 << 15)/15.0, 178 Q (-14/15), Q (-12/15), Q (-10/15), Q (-8/15), Q (-6/15),
178 ( -8 << 15)/15.0,( -6 << 15)/15.0,( -4 << 15)/15.0, 179 Q (-4/15), Q (-2/15), Q (0), Q (2/15), Q (4/15),
179 ( -2 << 15)/15.0, 0 ,( 2 << 15)/15.0, 180 Q (6/15), Q (8/15), Q (10/15), Q (12/15), Q (14/15), 0
180 ( 4 << 15)/15.0,( 6 << 15)/15.0,( 8 << 15)/15.0, 181 };
181 ( 10 << 15)/15.0,( 12 << 15)/15.0,( 14 << 15)/15.0, 182
182 0 183 #ifndef LIBA52_FIXED
183 };
184
185 static const sample_t scale_factor[25] = { 184 static const sample_t scale_factor[25] = {
186 0.000030517578125, 185 0.000030517578125,
187 0.0000152587890625, 186 0.0000152587890625,
188 0.00000762939453125, 187 0.00000762939453125,
189 0.000003814697265625, 188 0.000003814697265625,
207 0.000000000014551915228366851806640625, 206 0.000000000014551915228366851806640625,
208 0.0000000000072759576141834259033203125, 207 0.0000000000072759576141834259033203125,
209 0.00000000000363797880709171295166015625, 208 0.00000000000363797880709171295166015625,
210 0.000000000001818989403545856475830078125 209 0.000000000001818989403545856475830078125
211 }; 210 };
211 #endif
212 212
213 static const uint16_t dither_lut[256] = { 213 static const uint16_t dither_lut[256] = {
214 0x0000, 0xa011, 0xe033, 0x4022, 0x6077, 0xc066, 0x8044, 0x2055, 214 0x0000, 0xa011, 0xe033, 0x4022, 0x6077, 0xc066, 0x8044, 0x2055,
215 0xc0ee, 0x60ff, 0x20dd, 0x80cc, 0xa099, 0x0088, 0x40aa, 0xe0bb, 215 0xc0ee, 0x60ff, 0x20dd, 0x80cc, 0xa099, 0x0088, 0x40aa, 0xe0bb,
216 0x21cd, 0x81dc, 0xc1fe, 0x61ef, 0x41ba, 0xe1ab, 0xa189, 0x0198, 216 0x21cd, 0x81dc, 0xc1fe, 0x61ef, 0x41ba, 0xe1ab, 0xa189, 0x0198,