More OKed parts of the QCELP decoder
[ffmpeg-lucabe.git] / libavcodec / qcelpdata.h
blob856f11d6015221706875003be78b58311ec5b6b5
1 /*
2 * part of QCELP decoder
3 * Copyright (c) 2007 Reynaldo H. Verdejo Pinochet
5 * This file is part of FFmpeg.
7 * FFmpeg is free software; you can redistribute it and/or
8 * modify it under the terms of the GNU Lesser General Public
9 * License as published by the Free Software Foundation; either
10 * version 2.1 of the License, or (at your option) any later version.
12 * FFmpeg is distributed in the hope that it will be useful,
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
15 * Lesser General Public License for more details.
17 * You should have received a copy of the GNU Lesser General Public
18 * License along with FFmpeg; if not, write to the Free Software
19 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
22 #ifndef AVCODEC_QCELPDATA_H
23 #define AVCODEC_QCELPDATA_H
25 #include <stdint.h>
27 /**
28 * pre-calculated table for hammsinc function
29 * Only half of the table is needed because of symmetry.
31 * TIA/EIA/IS-733 2.4.5.2-2/3
33 static const float qcelp_hammsinc_table[4] = { -0.006822, 0.041249, -0.143459, 0.588863};
35 typedef struct {
36 uint8_t index; /*!< index into the QCELPContext structure */
37 uint8_t bitpos; /*!< position of the lowest bit in the value's byte */
38 uint8_t bitlen; /*!< number of bits to read */
39 } QCELPBitmap;
41 #define QCELP_OF(variable, bit, len) {offsetof(QCELPContext, variable), bit, len}
43 /**
44 * bitmap unpacking tables for RATE_FULL
46 * TIA/EIA/IS-733 Table 2.4.7.1-1
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
131 * bitmap unpacking tables for RATE_HALF
133 * TIA/EIA/IS-733 Table 2.4.7.2-1
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
173 * bitmap unpacking tables for RATE_QUARTER
175 * TIA/EIA/IS-733 Table 2.4.7.3-1
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
194 * bitmap unpacking tables for RATE_OCTAVE
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.
201 * TIA/EIA/IS-733 Table 2.4.7.4-1
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
224 * position of the bitmapping data for each packet type in
225 * the QCELPContext
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,
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),
243 typedef uint16_t qcelp_vector[2];
246 * LSP vector quantization tables in x*10000 form
248 * TIA/EIA/IS-733 tables 2.4.3.2.6.3-1 through 2.4.3.2.6.3-5
251 static const qcelp_vector qcelp_lspvq1[64]= {
252 { 327, 118},{ 919, 111},{ 427, 440},{1327, 185},
253 { 469, 50},{1272, 91},{ 892, 59},{1771, 193},
254 { 222, 158},{1100, 127},{ 827, 55},{ 978, 791},
255 { 665, 47},{ 700,1401},{ 670, 859},{1913,1048},
256 { 471, 215},{1046, 125},{ 645, 298},{1599, 160},
257 { 593, 39},{1187, 462},{ 749, 341},{1520, 511},
258 { 290, 792},{ 909, 362},{ 753, 81},{1111,1058},
259 { 519, 253},{ 828, 839},{ 685, 541},{1421,1258},
260 { 386, 130},{ 962, 119},{ 542, 387},{1431, 185},
261 { 526, 51},{1175, 260},{ 831, 167},{1728, 510},
262 { 273, 437},{1172, 113},{ 771, 144},{1122, 751},
263 { 619, 119},{ 492,1276},{ 658, 695},{1882, 615},
264 { 415, 200},{1018, 88},{ 681, 339},{1436, 325},
265 { 555, 122},{1042, 485},{ 826, 345},{1374, 743},
266 { 383,1018},{1005, 358},{ 704, 86},{1301, 586},
267 { 597, 241},{ 832, 621},{ 555, 573},{1504, 839}};
269 static const qcelp_vector qcelp_lspvq2[128]= {
270 { 255, 293},{ 904, 219},{ 151,1211},{1447, 498},
271 { 470, 253},{1559, 177},{1547, 994},{2394, 242},
272 { 91, 813},{ 857, 590},{ 934,1326},{1889, 282},
273 { 813, 472},{1057,1494},{ 450,3315},{2163,1895},
274 { 538, 532},{1399, 218},{ 146,1552},{1755, 626},
275 { 822, 202},{1299, 663},{ 706,1732},{2656, 401},
276 { 418, 745},{ 762,1038},{ 583,1748},{1746,1285},
277 { 527,1169},{1314, 830},{ 556,2116},{1073,2321},
278 { 297, 570},{ 981, 403},{ 468,1103},{1740, 243},
279 { 725, 179},{1255, 474},{1374,1362},{1922, 912},
280 { 285, 947},{ 930, 700},{ 593,1372},{1909, 576},
281 { 588, 916},{1110,1116},{ 224,2719},{1633,2220},
282 { 402, 520},{1061, 448},{ 402,1352},{1499, 775},
283 { 664, 589},{1081, 727},{ 801,2206},{2165,1157},
284 { 566, 802},{ 911,1116},{ 306,1703},{1792, 836},
285 { 655, 999},{1061,1038},{ 298,2089},{1110,1753},
286 { 361, 311},{ 970, 239},{ 265,1231},{1495, 573},
287 { 566, 262},{1569, 293},{1341,1144},{2271, 544},
288 { 214, 877},{ 847, 719},{ 794,1384},{2067, 274},
289 { 703, 688},{1099,1306},{ 391,2947},{2024,1670},
290 { 471, 525},{1245, 290},{ 264,1557},{1568, 807},
291 { 718, 399},{1193, 685},{ 883,1594},{2729, 764},
292 { 500, 754},{ 809,1108},{ 541,1648},{1523,1385},
293 { 614,1196},{1209, 847},{ 345,2242},{1442,1747},
294 { 199, 560},{1092, 194},{ 349,1253},{1653, 507},
295 { 625, 354},{1376, 431},{1187,1465},{2164, 872},
296 { 360, 974},{1008, 698},{ 704,1346},{2114, 452},
297 { 720, 816},{1240,1089},{ 439,2475},{1498,2040},
298 { 336, 718},{1213, 187},{ 451,1450},{1368, 885},
299 { 592, 578},{1131, 531},{ 861,1855},{1764,1500},
300 { 444, 970},{ 935, 903},{ 424,1687},{1633,1102},
301 { 793, 897},{1060, 897},{ 185,2011},{1205,1855}};
303 static const qcelp_vector qcelp_lspvq3[128]= {
304 { 225, 283},{1296, 355},{ 543, 343},{2073, 274},
305 { 204,1099},{1562, 523},{1388, 161},{2784, 274},
306 { 112, 849},{1870, 175},{1189, 160},{1490,1088},
307 { 969,1115},{ 659,3322},{1158,1073},{3183,1363},
308 { 517, 223},{1740, 223},{ 704, 387},{2637, 234},
309 { 692,1005},{1287,1610},{ 952, 532},{2393, 646},
310 { 490, 552},{1619, 657},{ 845, 670},{1784,2280},
311 { 191,1775},{ 272,2868},{ 942, 952},{2628,1479},
312 { 278, 579},{1565, 218},{ 814, 180},{2379, 187},
313 { 276,1444},{1199,1223},{1200, 349},{3009, 307},
314 { 312, 844},{1898, 306},{ 863, 470},{1685,1241},
315 { 513,1727},{ 711,2233},{1085, 864},{3398, 527},
316 { 414, 440},{1356, 612},{ 964, 147},{2173, 738},
317 { 465,1292},{ 877,1749},{1104, 689},{2105,1311},
318 { 580, 864},{1895, 752},{ 652, 609},{1485,1699},
319 { 514,1400},{ 386,2131},{ 933, 798},{2473, 986},
320 { 334, 360},{1375, 398},{ 621, 276},{2183, 280},
321 { 311,1114},{1382, 807},{1284, 175},{2605, 636},
322 { 230, 816},{1739, 408},{1074, 176},{1619,1120},
323 { 784,1371},{ 448,3050},{1189, 880},{3039,1165},
324 { 424, 241},{1672, 186},{ 815, 333},{2432, 324},
325 { 584,1029},{1137,1546},{1015, 585},{2198, 995},
326 { 574, 581},{1746, 647},{ 733, 740},{1938,1737},
327 { 347,1710},{ 373,2429},{ 787,1061},{2439,1438},
328 { 185, 536},{1489, 178},{ 703, 216},{2178, 487},
329 { 154,1421},{1414, 994},{1103, 352},{3072, 473},
330 { 408, 819},{2055, 168},{ 998, 354},{1917,1140},
331 { 665,1799},{ 993,2213},{1234, 631},{3003, 762},
332 { 373, 620},{1518, 425},{ 913, 300},{1966, 836},
333 { 402,1185},{ 948,1385},{1121, 555},{1802,1509},
334 { 474, 886},{1888, 610},{ 739, 585},{1231,2379},
335 { 661,1335},{ 205,2211},{ 823, 822},{2480,1179}};
337 static const qcelp_vector qcelp_lspvq4[64]= {
338 { 348, 311},{ 812,1145},{ 552, 461},{1826, 263},
339 { 601, 675},{1730, 172},{1523, 193},{2449, 277},
340 { 334, 668},{ 805,1441},{1319, 207},{1684, 910},
341 { 582,1318},{1403,1098},{ 979, 832},{2700,1359},
342 { 624, 228},{1292, 979},{ 800, 195},{2226, 285},
343 { 730, 862},{1537, 601},{1115, 509},{2720, 354},
344 { 218,1167},{1212,1538},{1074, 247},{1674,1710},
345 { 322,2142},{1263, 777},{ 981, 556},{2119,1710},
346 { 193, 596},{1035, 957},{ 694, 397},{1997, 253},
347 { 743, 603},{1584, 321},{1346, 346},{2221, 708},
348 { 451, 732},{1040,1415},{1184, 230},{1853, 919},
349 { 310,1661},{1625, 706},{ 856, 843},{2902, 702},
350 { 467, 348},{1108,1048},{ 859, 306},{1964, 463},
351 { 560,1013},{1425, 533},{1142, 634},{2391, 879},
352 { 397,1084},{1345,1700},{ 976, 248},{1887,1189},
353 { 644,2087},{1262, 603},{ 877, 550},{2203,1307}};
355 static const qcelp_vector qcelp_lspvq5[64]= {
356 { 360, 222},{ 820,1097},{ 601, 319},{1656, 198},
357 { 604, 513},{1552, 141},{1391, 155},{2474, 261},
358 { 269, 785},{1463, 646},{1123, 191},{2015, 223},
359 { 785, 844},{1202,1011},{ 980, 807},{3014, 793},
360 { 570, 180},{1135,1382},{ 778, 256},{1901, 179},
361 { 807, 622},{1461, 458},{1231, 178},{2028, 821},
362 { 387, 927},{1496,1004},{ 888, 392},{2246, 341},
363 { 295,1462},{1156, 694},{1022, 473},{2226,1364},
364 { 210, 478},{1029,1020},{ 722, 181},{1730, 251},
365 { 730, 488},{1465, 293},{1303, 326},{2595, 387},
366 { 458, 584},{1569, 742},{1029, 173},{1910, 495},
367 { 605,1159},{1268, 719},{ 973, 646},{2872, 428},
368 { 443, 334},{ 835,1465},{ 912, 138},{1716, 442},
369 { 620, 778},{1316, 450},{1186, 335},{1446,1665},
370 { 486,1050},{1675,1019},{ 880, 278},{2214, 202},
371 { 539,1564},{1142, 533},{ 984, 391},{2130,1089}};
373 static const qcelp_vector * const qcelp_lspvq[5] = {
374 qcelp_lspvq1,
375 qcelp_lspvq2,
376 qcelp_lspvq3,
377 qcelp_lspvq4,
378 qcelp_lspvq5
382 * the final gain scalefactor before clipping into a usable output float
384 #define QCELP_SCALE 8192.
387 * table for computing Ga (decoded linear codebook gain magnitude)
389 * @note The table could fit in int16_t in x*8 form, but it seems
390 * to be slower on x86
392 * TIA/EIA/IS-733 2.4.6.2.1-3
395 static const float qcelp_g12ga[61] = {
396 1.000/QCELP_SCALE, 1.125/QCELP_SCALE, 1.250/QCELP_SCALE, 1.375/QCELP_SCALE,
397 1.625/QCELP_SCALE, 1.750/QCELP_SCALE, 2.000/QCELP_SCALE, 2.250/QCELP_SCALE,
398 2.500/QCELP_SCALE, 2.875/QCELP_SCALE, 3.125/QCELP_SCALE, 3.500/QCELP_SCALE,
399 4.000/QCELP_SCALE, 4.500/QCELP_SCALE, 5.000/QCELP_SCALE, 5.625/QCELP_SCALE,
400 6.250/QCELP_SCALE, 7.125/QCELP_SCALE, 8.000/QCELP_SCALE, 8.875/QCELP_SCALE,
401 10.000/QCELP_SCALE, 11.250/QCELP_SCALE, 12.625/QCELP_SCALE, 14.125/QCELP_SCALE,
402 15.875/QCELP_SCALE, 17.750/QCELP_SCALE, 20.000/QCELP_SCALE, 22.375/QCELP_SCALE,
403 25.125/QCELP_SCALE, 28.125/QCELP_SCALE, 31.625/QCELP_SCALE, 35.500/QCELP_SCALE,
404 39.750/QCELP_SCALE, 44.625/QCELP_SCALE, 50.125/QCELP_SCALE, 56.250/QCELP_SCALE,
405 63.125/QCELP_SCALE, 70.750/QCELP_SCALE, 79.375/QCELP_SCALE, 89.125/QCELP_SCALE,
406 100.000/QCELP_SCALE, 112.250/QCELP_SCALE, 125.875/QCELP_SCALE, 141.250/QCELP_SCALE,
407 158.500/QCELP_SCALE, 177.875/QCELP_SCALE, 199.500/QCELP_SCALE, 223.875/QCELP_SCALE,
408 251.250/QCELP_SCALE, 281.875/QCELP_SCALE, 316.250/QCELP_SCALE, 354.875/QCELP_SCALE,
409 398.125/QCELP_SCALE, 446.625/QCELP_SCALE, 501.125/QCELP_SCALE, 563.375/QCELP_SCALE,
410 631.000/QCELP_SCALE, 708.000/QCELP_SCALE, 794.375/QCELP_SCALE, 891.250/QCELP_SCALE,
411 1000.000/QCELP_SCALE};
414 * circular codebook for rate 1 frames in x*100 form
416 * TIA/EIA/IS-733 2.4.6.1-2
418 static const int16_t qcelp_rate_full_codebook[128] = {
419 10, -65, -59, 12, 110, 34, -134, 157,
420 104, -84, -34, -115, 23, -101, 3, 45,
421 -101, -16, -59, 28, -45, 134, -67, 22,
422 61, -29, 226, -26, -55, -179, 157, -51,
423 -220, -93, -37, 60, 118, 74, -48, -95,
424 -181, 111, 36, -52, -215, 78, -112, 39,
425 -17, -47, -223, 19, 12, -98, -142, 130,
426 54, -127, 21, -12, 39, -48, 12, 128,
427 6, -167, 82, -102, -79, 55, -44, 48,
428 -20, -53, 8, -61, 11, -70, -157, -168,
429 20, -56, -74, 78, 33, -63, -173, -2,
430 -75, -53, -146, 77, 66, -29, 9, -75,
431 65, 119, -43, 76, 233, 98, 125, -156,
432 -27, 78, -9, 170, 176, 143, -148, -7,
433 27, -136, 5, 27, 18, 139, 204, 7,
434 -184, -197, 52, -3, 78, -189, 8, -65
436 #define QCELP_RATE_FULL_CODEBOOK_RATIO .01
439 * circular codebook for rate 1/2 frames in x*2 form
441 * TIA/EIA/IS-733 2.4.6.1-1
443 static const int8_t qcelp_rate_half_codebook[128] = {
444 0, -4, 0, -3, 0, 0, 0, 0,
445 0, 0, 0, 0, 0, 0, 0, 0,
446 0, -3, -2, 0, 0, 0, 0, 0,
447 0, 0, 0, 0, 0, 0, 0, 5,
448 0, 0, 0, 0, 0, 0, 4, 0,
449 0, 3, 2, 0, 3, 4, 0, 0,
450 0, 0, 0, 0, 0, 0, 0, 0,
451 0, 0, 0, 0, 0, 3, 0, 0,
452 -3, 3, 0, 0, -2, 0, 3, 0,
453 0, 0, 0, 0, 0, 0, -5, 0,
454 0, 0, 0, 3, 0, 0, 0, 3,
455 0, 0, 0, 0, 0, 0, 0, 4,
456 0, 0, 0, 0, 0, 0, 0, 0,
457 0, 3, 6, -3, -4, 0, -3, -3,
458 3, -3, 0, 0, 0, 0, 0, 0,
459 0, 0, 0, 0, 0, 0, 0, 0
461 #define QCELP_RATE_HALF_CODEBOOK_RATIO 0.5
464 * sqrt(1.887) is the maximum of the pseudorandom
465 * white sequence used to generate the scaled codebook
466 * vector for framerate 1/4.
468 * TIA/EIA/IS-733 2.4.8.1.2
470 #define QCELP_SQRT1887 1.373681186
473 * table for impulse response of BPF used to filter
474 * the white excitation for framerate 1/4 synthesis
476 * Only half the tables are needed because of symetry.
478 * TIA/EIA/IS-733 2.4.8.1.2-1.1
480 static const double qcelp_rnd_fir_coefs[11] = {
481 -1.344519e-1, 1.735384e-2, -6.905826e-2, 2.434368e-2,
482 -8.210701e-2, 3.041388e-2, -9.251384e-2, 3.501983e-2,
483 -9.918777e-2, 3.749518e-2, 8.985137e-1
486 #endif /* AVCODEC_QCELPDATA_H */