Mercurial > libavcodec.hg
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, |