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