Mercurial > libavcodec.hg
comparison qcelpdata.h @ 8089:103e41d62781 libavcodec
More OKed parts of QCELP data tables
patch by Kenan Gillet, kenan.gillet gmail com
author | vitor |
---|---|
date | Thu, 30 Oct 2008 21:00:01 +0000 |
parents | 2ca605b9c37a |
children | 5b379dd32155 |
comparison
equal
deleted
inserted
replaced
8088:728e0e4fcb95 | 8089:103e41d62781 |
---|---|
21 | 21 |
22 #ifndef AVCODEC_QCELPDATA_H | 22 #ifndef AVCODEC_QCELPDATA_H |
23 #define AVCODEC_QCELPDATA_H | 23 #define AVCODEC_QCELPDATA_H |
24 | 24 |
25 #include <stdint.h> | 25 #include <stdint.h> |
26 | |
27 /** | |
28 * pre-calculated table for hammsinc function | |
29 * Only half of the tables is needed because of symetry. | |
30 * | |
31 * TIA/EIA/IS-733 2.4.5.2-2/3 | |
32 */ | |
33 static const float qcelp_hammsinc_table[4] = { -0.006822, 0.041249, -0.143459, 0.588863}; | |
34 | |
35 typedef struct { | |
36 uint8_t index; /*!< index into the QCELPContext structure */ | |
37 uint8_t bitpos; /*!< position of the lowet bit in the value's byte */ | |
38 uint8_t bitlen; /*!< number of bits to read */ | |
39 } QCELPBitmap; | |
40 | |
41 #define QCELP_OF(variable, bit, len) {offsetof(QCELPContext, variable), bit, len} | |
42 | |
43 /** | |
44 * bitmap unpacking tables for RATE_FULL | |
45 * | |
46 * TIA/EIA/IS-733 Table 2.4.7.1-1 | |
47 */ | |
48 static const QCELPBitmap qcelp_rate_full_bitmap[] = { | |
49 // start on bit | |
50 QCELP_OF(lspv [ 2], 0, 3), // 265 | |
51 QCELP_OF(lspv [ 1], 0, 7), // 262 | |
52 QCELP_OF(lspv [ 0], 0, 6), // 255 | |
53 QCELP_OF(lspv [ 4], 0, 6), // 249 | |
54 QCELP_OF(lspv [ 3], 0, 6), // 243 | |
55 QCELP_OF(lspv [ 2], 3, 4), // 237 | |
56 QCELP_OF(cbsign[ 0], 0, 1), // 233 | |
57 QCELP_OF(cbgain[ 0], 0, 4), // 232 | |
58 QCELP_OF(pfrac [ 0], 0, 1), // 228 | |
59 QCELP_OF(plag [ 0], 0, 7), // 227 | |
60 QCELP_OF(pgain [ 0], 0, 3), // 220 | |
61 QCELP_OF(cindex[ 1], 0, 4), // 217 | |
62 QCELP_OF(cbsign[ 1], 0, 1), // 213 | |
63 QCELP_OF(cbgain[ 1], 0, 4), // 212 | |
64 QCELP_OF(cindex[ 0], 0, 7), // 208 | |
65 QCELP_OF(cbgain[ 3], 0, 1), // 201 | |
66 QCELP_OF(cindex[ 2], 0, 7), // 200 | |
67 QCELP_OF(cbsign[ 2], 0, 1), // 193 | |
68 QCELP_OF(cbgain[ 2], 0, 4), // 192 | |
69 QCELP_OF(cindex[ 1], 4, 3), // 188 | |
70 QCELP_OF(plag [ 1], 0, 3), // 185 | |
71 QCELP_OF(pgain [ 1], 0, 3), // 182 | |
72 QCELP_OF(cindex[ 3], 0, 7), // 179 | |
73 QCELP_OF(cbsign[ 3], 0, 1), // 172 | |
74 QCELP_OF(cbgain[ 3], 1, 2), // 171 | |
75 QCELP_OF(cindex[ 4], 0, 6), // 169 | |
76 QCELP_OF(cbsign[ 4], 0, 1), // 163 | |
77 QCELP_OF(cbgain[ 4], 0, 4), // 162 | |
78 QCELP_OF(pfrac [ 1], 0, 1), // 158 | |
79 QCELP_OF(plag [ 1], 3, 4), // 157 | |
80 QCELP_OF(cbgain[ 6], 0, 3), // 153 | |
81 QCELP_OF(cindex[ 5], 0, 7), // 150 | |
82 QCELP_OF(cbsign[ 5], 0, 1), // 143 | |
83 QCELP_OF(cbgain[ 5], 0, 4), // 142 | |
84 QCELP_OF(cindex[ 4], 6, 1), // 138 | |
85 QCELP_OF(cindex[ 7], 0, 3), // 137 | |
86 QCELP_OF(cbsign[ 7], 0, 1), // 134 | |
87 QCELP_OF(cbgain[ 7], 0, 3), // 133 | |
88 QCELP_OF(cindex[ 6], 0, 7), // 130 | |
89 QCELP_OF(cbsign[ 6], 0, 1), // 123 | |
90 QCELP_OF(cbgain[ 6], 3, 1), // 122 | |
91 QCELP_OF(cbgain[ 8], 0, 1), // 121 | |
92 QCELP_OF(pfrac [ 2], 0, 1), // 120 | |
93 QCELP_OF(plag [ 2], 0, 7), // 119 | |
94 QCELP_OF(pgain [ 2], 0, 3), // 112 | |
95 QCELP_OF(cindex[ 7], 3, 4), // 109 | |
96 QCELP_OF(cbsign[ 9], 0, 1), // 105 | |
97 QCELP_OF(cbgain[ 9], 0, 4), // 104 | |
98 QCELP_OF(cindex[ 8], 0, 7), // 100 | |
99 QCELP_OF(cbsign[ 8], 0, 1), // 93 | |
100 QCELP_OF(cbgain[ 8], 1, 3), // 92 | |
101 QCELP_OF(cindex[10], 0, 4), // 89 | |
102 QCELP_OF(cbsign[10], 0, 1), // 85 | |
103 QCELP_OF(cbgain[10], 0, 4), // 84 | |
104 QCELP_OF(cindex[ 9], 0, 7), // 80 | |
105 QCELP_OF(pgain [ 3], 0, 2), // 73 | |
106 QCELP_OF(cindex[11], 0, 7), // 71 | |
107 QCELP_OF(cbsign[11], 0, 1), // 64 | |
108 QCELP_OF(cbgain[11], 0, 3), // 63 | |
109 QCELP_OF(cindex[10], 4, 3), // 60 | |
110 QCELP_OF(cindex[12], 0, 2), // 57 | |
111 QCELP_OF(cbsign[12], 0, 1), // 55 | |
112 QCELP_OF(cbgain[12], 0, 4), // 54 | |
113 QCELP_OF(pfrac [ 3], 0, 1), // 50 | |
114 QCELP_OF(plag [ 3], 0, 7), // 49 | |
115 QCELP_OF(pgain [ 3], 2, 1), // 42 | |
116 QCELP_OF(cindex[13], 0, 6), // 41 | |
117 QCELP_OF(cbsign[13], 0, 1), // 35 | |
118 QCELP_OF(cbgain[13], 0, 4), // 34 | |
119 QCELP_OF(cindex[12], 2, 5), // 30 | |
120 QCELP_OF(cbgain[15], 0, 3), // 25 | |
121 QCELP_OF(cindex[14], 0, 7), // 22 | |
122 QCELP_OF(cbsign[14], 0, 1), // 15 | |
123 QCELP_OF(cbgain[14], 0, 4), // 14 | |
124 QCELP_OF(cindex[13], 6, 1), // 10 | |
125 QCELP_OF(reserved, 0, 2), // 9 | |
126 QCELP_OF(cindex[15], 0, 7), // 7 | |
127 QCELP_OF(cbsign[15], 0, 1) // 0 | |
128 }; | |
129 | |
130 /** | |
131 * bitmap unpacking tables for RATE_HALF | |
132 * | |
133 * TIA/EIA/IS-733 Table 2.4.7.2-1 | |
134 */ | |
135 static const QCELPBitmap qcelp_rate_half_bitmap[] = { | |
136 // start on bit | |
137 QCELP_OF(lspv [2], 0, 3), // 123 | |
138 QCELP_OF(lspv [1], 0, 7), // 120 | |
139 QCELP_OF(lspv [0], 0, 6), // 113 | |
140 QCELP_OF(lspv [4], 0, 6), // 107 | |
141 QCELP_OF(lspv [3], 0, 6), // 101 | |
142 QCELP_OF(lspv [2], 3, 4), // 95 | |
143 QCELP_OF(cbsign[0], 0, 1), // 91 | |
144 QCELP_OF(cbgain[0], 0, 4), // 90 | |
145 QCELP_OF(pfrac [0], 0, 1), // 86 | |
146 QCELP_OF(plag [0], 0, 7), // 85 | |
147 QCELP_OF(pgain [0], 0, 3), // 78 | |
148 QCELP_OF(plag [1], 0, 6), // 75 | |
149 QCELP_OF(pgain [1], 0, 3), // 69 | |
150 QCELP_OF(cindex[0], 0, 7), // 66 | |
151 QCELP_OF(pgain [2], 0, 2), // 59 | |
152 QCELP_OF(cindex[1], 0, 7), // 57 | |
153 QCELP_OF(cbsign[1], 0, 1), // 50 | |
154 QCELP_OF(cbgain[1], 0, 4), // 49 | |
155 QCELP_OF(pfrac [1], 0, 1), // 45 | |
156 QCELP_OF(plag [1], 6, 1), // 44 | |
157 QCELP_OF(cindex[2], 0, 2), // 43 | |
158 QCELP_OF(cbsign[2], 0, 1), // 41 | |
159 QCELP_OF(cbgain[2], 0, 4), // 40 | |
160 QCELP_OF(pfrac [2], 0, 1), // 36 | |
161 QCELP_OF(plag [2], 0, 7), // 35 | |
162 QCELP_OF(pgain [2], 2, 1), // 28 | |
163 QCELP_OF(pfrac [3], 0, 1), // 27 | |
164 QCELP_OF(plag [3], 0, 7), // 26 | |
165 QCELP_OF(pgain [3], 0, 3), // 19 | |
166 QCELP_OF(cindex[2], 2, 5), // 16 | |
167 QCELP_OF(cindex[3], 0, 7), // 11 | |
168 QCELP_OF(cbsign[3], 0, 1), // 4 | |
169 QCELP_OF(cbgain[3], 0, 4) // 3 | |
170 }; | |
171 | |
172 /** | |
173 * bitmap unpacking tables for RATE_QUARTER | |
174 * | |
175 * TIA/EIA/IS-733 Table 2.4.7.3-1 | |
176 */ | |
177 static const QCELPBitmap qcelp_rate_quarter_bitmap[] = { | |
178 // start on bit | |
179 QCELP_OF(lspv [2], 0, 3), // 53 | |
180 QCELP_OF(lspv [1], 0, 7), // 50 | |
181 QCELP_OF(lspv [0], 0, 6), // 43 | |
182 QCELP_OF(lspv [4], 0, 6), // 37 | |
183 QCELP_OF(lspv [3], 0, 6), // 31 | |
184 QCELP_OF(lspv [2], 3, 4), // 25 | |
185 QCELP_OF(cbgain[3], 0, 4), // 21 | |
186 QCELP_OF(cbgain[2], 0, 4), // 17 | |
187 QCELP_OF(cbgain[1], 0, 4), // 13 | |
188 QCELP_OF(cbgain[0], 0, 4), // 9 | |
189 QCELP_OF(reserved, 0, 2), // 5 | |
190 QCELP_OF(cbgain[4], 0, 4) // 3 | |
191 }; | |
192 | |
193 /** | |
194 * bitmap unpacking tables for RATE_OCTAVE | |
195 * | |
196 * trick: CBSEED is written into QCELPContext.cbsign[15], | |
197 * which is not used for RATE_OCTAVE. | |
198 * CBSEED is only used to ensure the occurrence of random bit | |
199 * patterns in the 16 first bits that are used as the seed. | |
200 * | |
201 * TIA/EIA/IS-733 Table 2.4.7.4-1 | |
202 */ | |
203 static const QCELPBitmap qcelp_rate_octave_bitmap[] = { | |
204 // start on bit | |
205 QCELP_OF(cbsign[15], 3, 1), // 19 | |
206 QCELP_OF(lspv [0], 0, 1), // 18 | |
207 QCELP_OF(lspv [1], 0, 1), // 17 | |
208 QCELP_OF(lspv [2], 0, 1), // 16 | |
209 QCELP_OF(cbsign[15], 2, 1), // 15 | |
210 QCELP_OF(lspv [3], 0, 1), // 14 | |
211 QCELP_OF(lspv [4], 0, 1), // 13 | |
212 QCELP_OF(lspv [5], 0, 1), // 12 | |
213 QCELP_OF(cbsign[15], 1, 1), // 11 | |
214 QCELP_OF(lspv [6], 0, 1), // 10 | |
215 QCELP_OF(lspv [7], 0, 1), // 9 | |
216 QCELP_OF(lspv [8], 0, 1), // 8 | |
217 QCELP_OF(cbsign[15], 0, 1), // 7 | |
218 QCELP_OF(lspv [9], 0, 1), // 6 | |
219 QCELP_OF(cbgain [0], 0, 2), // 7 | |
220 QCELP_OF(reserved, 0, 4) // 3 | |
221 }; | |
222 | |
223 /** | |
224 * position of the bitmapping data for each packet type in | |
225 * the QCELPContext | |
226 */ | |
227 static const QCELPBitmap * const qcelp_unpacking_bitmaps_per_rate[5] = { | |
228 NULL, ///!< for SILENCE rate | |
229 qcelp_rate_octave_bitmap, | |
230 qcelp_rate_quarter_bitmap, | |
231 qcelp_rate_half_bitmap, | |
232 qcelp_rate_full_bitmap, | |
233 }; | |
234 | |
235 static const uint16_t qcelp_bits_per_rate[5] = { | |
236 0, ///!< for SILENCE rate | |
237 FF_ARRAY_ELEMS(qcelp_rate_octave_bitmap), | |
238 FF_ARRAY_ELEMS(qcelp_rate_quarter_bitmap), | |
239 FF_ARRAY_ELEMS(qcelp_rate_half_bitmap), | |
240 FF_ARRAY_ELEMS(qcelp_rate_full_bitmap), | |
241 }; | |
26 | 242 |
27 typedef uint16_t qcelp_vector[2]; | 243 typedef uint16_t qcelp_vector[2]; |
28 | 244 |
29 /** | 245 /** |
30 * LSP vector quantization tables in x*10000 form | 246 * LSP vector quantization tables in x*10000 form |