22 #ifndef AVCODEC_QCELPDATA_H 23 #define AVCODEC_QCELPDATA_H 74 static const float qcelp_hammsinc_table[4] = { -0.006822, 0.041249, -0.143459, 0.588863};
82 #define QCELP_OF(variable, bit, len) {offsetof(QCELPFrame, variable), bit, len} 89 static const QCELPBitmap qcelp_rate_full_bitmap[] = {
91 QCELP_OF(
lspv [ 2], 0, 3),
92 QCELP_OF(
lspv [ 1], 0, 7),
93 QCELP_OF(
lspv [ 0], 0, 6),
94 QCELP_OF(
lspv [ 4], 0, 6),
95 QCELP_OF(
lspv [ 3], 0, 6),
96 QCELP_OF(
lspv [ 2], 3, 4),
97 QCELP_OF(
cbsign[ 0], 0, 1),
98 QCELP_OF(
cbgain[ 0], 0, 4),
99 QCELP_OF(
pfrac [ 0], 0, 1),
100 QCELP_OF(
plag [ 0], 0, 7),
101 QCELP_OF(
pgain [ 0], 0, 3),
102 QCELP_OF(
cindex[ 1], 0, 4),
103 QCELP_OF(
cbsign[ 1], 0, 1),
104 QCELP_OF(
cbgain[ 1], 0, 4),
105 QCELP_OF(
cindex[ 0], 0, 7),
106 QCELP_OF(
cbgain[ 3], 0, 1),
107 QCELP_OF(
cindex[ 2], 0, 7),
108 QCELP_OF(
cbsign[ 2], 0, 1),
109 QCELP_OF(
cbgain[ 2], 0, 4),
110 QCELP_OF(
cindex[ 1], 4, 3),
111 QCELP_OF(
plag [ 1], 0, 3),
112 QCELP_OF(
pgain [ 1], 0, 3),
113 QCELP_OF(
cindex[ 3], 0, 7),
114 QCELP_OF(
cbsign[ 3], 0, 1),
115 QCELP_OF(
cbgain[ 3], 1, 2),
116 QCELP_OF(
cindex[ 4], 0, 6),
117 QCELP_OF(
cbsign[ 4], 0, 1),
118 QCELP_OF(
cbgain[ 4], 0, 4),
119 QCELP_OF(
pfrac [ 1], 0, 1),
120 QCELP_OF(
plag [ 1], 3, 4),
121 QCELP_OF(
cbgain[ 6], 0, 3),
122 QCELP_OF(
cindex[ 5], 0, 7),
123 QCELP_OF(
cbsign[ 5], 0, 1),
124 QCELP_OF(
cbgain[ 5], 0, 4),
125 QCELP_OF(
cindex[ 4], 6, 1),
126 QCELP_OF(
cindex[ 7], 0, 3),
127 QCELP_OF(
cbsign[ 7], 0, 1),
128 QCELP_OF(
cbgain[ 7], 0, 3),
129 QCELP_OF(
cindex[ 6], 0, 7),
130 QCELP_OF(
cbsign[ 6], 0, 1),
131 QCELP_OF(
cbgain[ 6], 3, 1),
132 QCELP_OF(
cbgain[ 8], 0, 1),
133 QCELP_OF(
pfrac [ 2], 0, 1),
134 QCELP_OF(
plag [ 2], 0, 7),
135 QCELP_OF(
pgain [ 2], 0, 3),
136 QCELP_OF(
cindex[ 7], 3, 4),
137 QCELP_OF(
cbsign[ 9], 0, 1),
138 QCELP_OF(
cbgain[ 9], 0, 4),
139 QCELP_OF(
cindex[ 8], 0, 7),
140 QCELP_OF(
cbsign[ 8], 0, 1),
141 QCELP_OF(
cbgain[ 8], 1, 3),
142 QCELP_OF(
cindex[10], 0, 4),
143 QCELP_OF(
cbsign[10], 0, 1),
144 QCELP_OF(
cbgain[10], 0, 4),
145 QCELP_OF(
cindex[ 9], 0, 7),
146 QCELP_OF(
pgain [ 3], 0, 2),
147 QCELP_OF(
cindex[11], 0, 7),
148 QCELP_OF(
cbsign[11], 0, 1),
149 QCELP_OF(
cbgain[11], 0, 3),
150 QCELP_OF(
cindex[10], 4, 3),
151 QCELP_OF(
cindex[12], 0, 2),
152 QCELP_OF(
cbsign[12], 0, 1),
153 QCELP_OF(
cbgain[12], 0, 4),
154 QCELP_OF(
pfrac [ 3], 0, 1),
155 QCELP_OF(
plag [ 3], 0, 7),
156 QCELP_OF(
pgain [ 3], 2, 1),
157 QCELP_OF(
cindex[13], 0, 6),
158 QCELP_OF(
cbsign[13], 0, 1),
159 QCELP_OF(
cbgain[13], 0, 4),
160 QCELP_OF(
cindex[12], 2, 5),
161 QCELP_OF(
cbgain[15], 0, 3),
162 QCELP_OF(
cindex[14], 0, 7),
163 QCELP_OF(
cbsign[14], 0, 1),
164 QCELP_OF(
cbgain[14], 0, 4),
165 QCELP_OF(
cindex[13], 6, 1),
167 QCELP_OF(
cindex[15], 0, 7),
168 QCELP_OF(
cbsign[15], 0, 1)
176 static const QCELPBitmap qcelp_rate_half_bitmap[] = {
178 QCELP_OF(
lspv [2], 0, 3),
179 QCELP_OF(
lspv [1], 0, 7),
180 QCELP_OF(
lspv [0], 0, 6),
181 QCELP_OF(
lspv [4], 0, 6),
182 QCELP_OF(
lspv [3], 0, 6),
183 QCELP_OF(
lspv [2], 3, 4),
184 QCELP_OF(
cbsign[0], 0, 1),
185 QCELP_OF(
cbgain[0], 0, 4),
186 QCELP_OF(
pfrac [0], 0, 1),
187 QCELP_OF(
plag [0], 0, 7),
188 QCELP_OF(
pgain [0], 0, 3),
189 QCELP_OF(
plag [1], 0, 6),
190 QCELP_OF(
pgain [1], 0, 3),
191 QCELP_OF(
cindex[0], 0, 7),
192 QCELP_OF(
pgain [2], 0, 2),
193 QCELP_OF(
cindex[1], 0, 7),
194 QCELP_OF(
cbsign[1], 0, 1),
195 QCELP_OF(
cbgain[1], 0, 4),
196 QCELP_OF(
pfrac [1], 0, 1),
197 QCELP_OF(
plag [1], 6, 1),
198 QCELP_OF(
cindex[2], 0, 2),
199 QCELP_OF(
cbsign[2], 0, 1),
200 QCELP_OF(
cbgain[2], 0, 4),
201 QCELP_OF(
pfrac [2], 0, 1),
202 QCELP_OF(
plag [2], 0, 7),
203 QCELP_OF(
pgain [2], 2, 1),
204 QCELP_OF(
pfrac [3], 0, 1),
205 QCELP_OF(
plag [3], 0, 7),
206 QCELP_OF(
pgain [3], 0, 3),
207 QCELP_OF(
cindex[2], 2, 5),
208 QCELP_OF(
cindex[3], 0, 7),
209 QCELP_OF(
cbsign[3], 0, 1),
218 static const QCELPBitmap qcelp_rate_quarter_bitmap[] = {
220 QCELP_OF(
lspv [2], 0, 3),
221 QCELP_OF(
lspv [1], 0, 7),
222 QCELP_OF(
lspv [0], 0, 6),
223 QCELP_OF(
lspv [4], 0, 6),
224 QCELP_OF(
lspv [3], 0, 6),
225 QCELP_OF(
lspv [2], 3, 4),
226 QCELP_OF(
cbgain[3], 0, 4),
227 QCELP_OF(
cbgain[2], 0, 4),
228 QCELP_OF(
cbgain[1], 0, 4),
229 QCELP_OF(
cbgain[0], 0, 4),
244 static const QCELPBitmap qcelp_rate_octave_bitmap[] = {
246 QCELP_OF(
cbsign[15], 3, 1),
247 QCELP_OF(
lspv [0], 0, 1),
248 QCELP_OF(
lspv [1], 0, 1),
249 QCELP_OF(
lspv [2], 0, 1),
250 QCELP_OF(
cbsign[15], 2, 1),
251 QCELP_OF(
lspv [3], 0, 1),
252 QCELP_OF(
lspv [4], 0, 1),
253 QCELP_OF(
lspv [5], 0, 1),
254 QCELP_OF(
cbsign[15], 1, 1),
255 QCELP_OF(
lspv [6], 0, 1),
256 QCELP_OF(
lspv [7], 0, 1),
257 QCELP_OF(
lspv [8], 0, 1),
258 QCELP_OF(
cbsign[15], 0, 1),
259 QCELP_OF(
lspv [9], 0, 1),
260 QCELP_OF(
cbgain [0], 0, 2),
268 static const QCELPBitmap *
const qcelp_unpacking_bitmaps_per_rate[5] = {
270 qcelp_rate_octave_bitmap,
271 qcelp_rate_quarter_bitmap,
272 qcelp_rate_half_bitmap,
273 qcelp_rate_full_bitmap,
276 static const uint16_t qcelp_unpacking_bitmaps_lengths[5] = {
278 FF_ARRAY_ELEMS(qcelp_rate_octave_bitmap),
279 FF_ARRAY_ELEMS(qcelp_rate_quarter_bitmap),
280 FF_ARRAY_ELEMS(qcelp_rate_half_bitmap),
281 FF_ARRAY_ELEMS(qcelp_rate_full_bitmap),
284 typedef uint16_t qcelp_vector[2];
292 static const qcelp_vector qcelp_lspvq1[64]= {
293 { 327, 118},{ 919, 111},{ 427, 440},{1327, 185},
294 { 469, 50},{1272, 91},{ 892, 59},{1771, 193},
295 { 222, 158},{1100, 127},{ 827, 55},{ 978, 791},
296 { 665, 47},{ 700,1401},{ 670, 859},{1913,1048},
297 { 471, 215},{1046, 125},{ 645, 298},{1599, 160},
298 { 593, 39},{1187, 462},{ 749, 341},{1520, 511},
299 { 290, 792},{ 909, 362},{ 753, 81},{1111,1058},
300 { 519, 253},{ 828, 839},{ 685, 541},{1421,1258},
301 { 386, 130},{ 962, 119},{ 542, 387},{1431, 185},
302 { 526, 51},{1175, 260},{ 831, 167},{1728, 510},
303 { 273, 437},{1172, 113},{ 771, 144},{1122, 751},
304 { 619, 119},{ 492,1276},{ 658, 695},{1882, 615},
305 { 415, 200},{1018, 88},{ 681, 339},{1436, 325},
306 { 555, 122},{1042, 485},{ 826, 345},{1374, 743},
307 { 383,1018},{1005, 358},{ 704, 86},{1301, 586},
308 { 597, 241},{ 832, 621},{ 555, 573},{1504, 839}};
310 static const qcelp_vector qcelp_lspvq2[128]= {
311 { 255, 293},{ 904, 219},{ 151,1211},{1447, 498},
312 { 470, 253},{1559, 177},{1547, 994},{2394, 242},
313 { 91, 813},{ 857, 590},{ 934,1326},{1889, 282},
314 { 813, 472},{1057,1494},{ 450,3315},{2163,1895},
315 { 538, 532},{1399, 218},{ 146,1552},{1755, 626},
316 { 822, 202},{1299, 663},{ 706,1732},{2656, 401},
317 { 418, 745},{ 762,1038},{ 583,1748},{1746,1285},
318 { 527,1169},{1314, 830},{ 556,2116},{1073,2321},
319 { 297, 570},{ 981, 403},{ 468,1103},{1740, 243},
320 { 725, 179},{1255, 474},{1374,1362},{1922, 912},
321 { 285, 947},{ 930, 700},{ 593,1372},{1909, 576},
322 { 588, 916},{1110,1116},{ 224,2719},{1633,2220},
323 { 402, 520},{1061, 448},{ 402,1352},{1499, 775},
324 { 664, 589},{1081, 727},{ 801,2206},{2165,1157},
325 { 566, 802},{ 911,1116},{ 306,1703},{1792, 836},
326 { 655, 999},{1061,1038},{ 298,2089},{1110,1753},
327 { 361, 311},{ 970, 239},{ 265,1231},{1495, 573},
328 { 566, 262},{1569, 293},{1341,1144},{2271, 544},
329 { 214, 877},{ 847, 719},{ 794,1384},{2067, 274},
330 { 703, 688},{1099,1306},{ 391,2947},{2024,1670},
331 { 471, 525},{1245, 290},{ 264,1557},{1568, 807},
332 { 718, 399},{1193, 685},{ 883,1594},{2729, 764},
333 { 500, 754},{ 809,1108},{ 541,1648},{1523,1385},
334 { 614,1196},{1209, 847},{ 345,2242},{1442,1747},
335 { 199, 560},{1092, 194},{ 349,1253},{1653, 507},
336 { 625, 354},{1376, 431},{1187,1465},{2164, 872},
337 { 360, 974},{1008, 698},{ 704,1346},{2114, 452},
338 { 720, 816},{1240,1089},{ 439,2475},{1498,2040},
339 { 336, 718},{1213, 187},{ 451,1450},{1368, 885},
340 { 592, 578},{1131, 531},{ 861,1855},{1764,1500},
341 { 444, 970},{ 935, 903},{ 424,1687},{1633,1102},
342 { 793, 897},{1060, 897},{ 185,2011},{1205,1855}};
344 static const qcelp_vector qcelp_lspvq3[128]= {
345 { 225, 283},{1296, 355},{ 543, 343},{2073, 274},
346 { 204,1099},{1562, 523},{1388, 161},{2784, 274},
347 { 112, 849},{1870, 175},{1189, 160},{1490,1088},
348 { 969,1115},{ 659,3322},{1158,1073},{3183,1363},
349 { 517, 223},{1740, 223},{ 704, 387},{2637, 234},
350 { 692,1005},{1287,1610},{ 952, 532},{2393, 646},
351 { 490, 552},{1619, 657},{ 845, 670},{1784,2280},
352 { 191,1775},{ 272,2868},{ 942, 952},{2628,1479},
353 { 278, 579},{1565, 218},{ 814, 180},{2379, 187},
354 { 276,1444},{1199,1223},{1200, 349},{3009, 307},
355 { 312, 844},{1898, 306},{ 863, 470},{1685,1241},
356 { 513,1727},{ 711,2233},{1085, 864},{3398, 527},
357 { 414, 440},{1356, 612},{ 964, 147},{2173, 738},
358 { 465,1292},{ 877,1749},{1104, 689},{2105,1311},
359 { 580, 864},{1895, 752},{ 652, 609},{1485,1699},
360 { 514,1400},{ 386,2131},{ 933, 798},{2473, 986},
361 { 334, 360},{1375, 398},{ 621, 276},{2183, 280},
362 { 311,1114},{1382, 807},{1284, 175},{2605, 636},
363 { 230, 816},{1739, 408},{1074, 176},{1619,1120},
364 { 784,1371},{ 448,3050},{1189, 880},{3039,1165},
365 { 424, 241},{1672, 186},{ 815, 333},{2432, 324},
366 { 584,1029},{1137,1546},{1015, 585},{2198, 995},
367 { 574, 581},{1746, 647},{ 733, 740},{1938,1737},
368 { 347,1710},{ 373,2429},{ 787,1061},{2439,1438},
369 { 185, 536},{1489, 178},{ 703, 216},{2178, 487},
370 { 154,1421},{1414, 994},{1103, 352},{3072, 473},
371 { 408, 819},{2055, 168},{ 998, 354},{1917,1140},
372 { 665,1799},{ 993,2213},{1234, 631},{3003, 762},
373 { 373, 620},{1518, 425},{ 913, 300},{1966, 836},
374 { 402,1185},{ 948,1385},{1121, 555},{1802,1509},
375 { 474, 886},{1888, 610},{ 739, 585},{1231,2379},
376 { 661,1335},{ 205,2211},{ 823, 822},{2480,1179}};
378 static const qcelp_vector qcelp_lspvq4[64]= {
379 { 348, 311},{ 812,1145},{ 552, 461},{1826, 263},
380 { 601, 675},{1730, 172},{1523, 193},{2449, 277},
381 { 334, 668},{ 805,1441},{1319, 207},{1684, 910},
382 { 582,1318},{1403,1098},{ 979, 832},{2700,1359},
383 { 624, 228},{1292, 979},{ 800, 195},{2226, 285},
384 { 730, 862},{1537, 601},{1115, 509},{2720, 354},
385 { 218,1167},{1212,1538},{1074, 247},{1674,1710},
386 { 322,2142},{1263, 777},{ 981, 556},{2119,1710},
387 { 193, 596},{1035, 957},{ 694, 397},{1997, 253},
388 { 743, 603},{1584, 321},{1346, 346},{2221, 708},
389 { 451, 732},{1040,1415},{1184, 230},{1853, 919},
390 { 310,1661},{1625, 706},{ 856, 843},{2902, 702},
391 { 467, 348},{1108,1048},{ 859, 306},{1964, 463},
392 { 560,1013},{1425, 533},{1142, 634},{2391, 879},
393 { 397,1084},{1345,1700},{ 976, 248},{1887,1189},
394 { 644,2087},{1262, 603},{ 877, 550},{2203,1307}};
396 static const qcelp_vector qcelp_lspvq5[64]= {
397 { 360, 222},{ 820,1097},{ 601, 319},{1656, 198},
398 { 604, 513},{1552, 141},{1391, 155},{2474, 261},
399 { 269, 785},{1463, 646},{1123, 191},{2015, 223},
400 { 785, 844},{1202,1011},{ 980, 807},{3014, 793},
401 { 570, 180},{1135,1382},{ 778, 256},{1901, 179},
402 { 807, 622},{1461, 458},{1231, 178},{2028, 821},
403 { 387, 927},{1496,1004},{ 888, 392},{2246, 341},
404 { 295,1462},{1156, 694},{1022, 473},{2226,1364},
405 { 210, 478},{1029,1020},{ 722, 181},{1730, 251},
406 { 730, 488},{1465, 293},{1303, 326},{2595, 387},
407 { 458, 584},{1569, 742},{1029, 173},{1910, 495},
408 { 605,1159},{1268, 719},{ 973, 646},{2872, 428},
409 { 443, 334},{ 835,1465},{ 912, 138},{1716, 442},
410 { 620, 778},{1316, 450},{1186, 335},{1446,1665},
411 { 486,1050},{1675,1019},{ 880, 278},{2214, 202},
412 { 539,1564},{1142, 533},{ 984, 391},{2130,1089}};
414 static const qcelp_vector *
const qcelp_lspvq[5] = {
425 #define QCELP_SCALE 8192. 436 static const float qcelp_g12ga[61] = {
459 static const int16_t qcelp_rate_full_codebook[128] = {
460 10, -65, -59, 12, 110, 34, -134, 157,
461 104, -84, -34, -115, 23, -101, 3, 45,
462 -101, -16, -59, 28, -45, 134, -67, 22,
463 61, -29, 226, -26, -55, -179, 157, -51,
464 -220, -93, -37, 60, 118, 74, -48, -95,
465 -181, 111, 36, -52, -215, 78, -112, 39,
466 -17, -47, -223, 19, 12, -98, -142, 130,
467 54, -127, 21, -12, 39, -48, 12, 128,
468 6, -167, 82, -102, -79, 55, -44, 48,
469 -20, -53, 8, -61, 11, -70, -157, -168,
470 20, -56, -74, 78, 33, -63, -173, -2,
471 -75, -53, -146, 77, 66, -29, 9, -75,
472 65, 119, -43, 76, 233, 98, 125, -156,
473 -27, 78, -9, 170, 176, 143, -148, -7,
474 27, -136, 5, 27, 18, 139, 204, 7,
475 -184, -197, 52, -3, 78, -189, 8, -65
477 #define QCELP_RATE_FULL_CODEBOOK_RATIO .01 484 static const int8_t qcelp_rate_half_codebook[128] = {
485 0, -4, 0, -3, 0, 0, 0, 0,
486 0, 0, 0, 0, 0, 0, 0, 0,
487 0, -3, -2, 0, 0, 0, 0, 0,
488 0, 0, 0, 0, 0, 0, 0, 5,
489 0, 0, 0, 0, 0, 0, 4, 0,
490 0, 3, 2, 0, 3, 4, 0, 0,
491 0, 0, 0, 0, 0, 0, 0, 0,
492 0, 0, 0, 0, 0, 3, 0, 0,
493 -3, 3, 0, 0, -2, 0, 3, 0,
494 0, 0, 0, 0, 0, 0, -5, 0,
495 0, 0, 0, 3, 0, 0, 0, 3,
496 0, 0, 0, 0, 0, 0, 0, 4,
497 0, 0, 0, 0, 0, 0, 0, 0,
498 0, 3, 6, -3, -4, 0, -3, -3,
499 3, -3, 0, 0, 0, 0, 0, 0,
500 0, 0, 0, 0, 0, 0, 0, 0
502 #define QCELP_RATE_HALF_CODEBOOK_RATIO 0.5 511 #define QCELP_SQRT1887 1.373681186 521 static const double qcelp_rnd_fir_coefs[11] = {
522 -1.344519e-1, 1.735384e-2, -6.905826e-2, 2.434368e-2,
523 -8.210701e-2, 3.041388e-2, -9.251384e-2, 3.501983e-2,
524 -9.918777e-2, 3.749518e-2, 8.985137e-1
533 #define QCELP_LSP_SPREAD_FACTOR 0.02 541 #define QCELP_LSP_OCTAVE_PREDICTOR 29.0/32 550 #define QCELP_BANDWIDTH_EXPANSION_COEFF 0.9883 uint8_t pfrac[4]
fractional pitch lag for each pitch subframe
Definition: qcelpdata.h:51
uint8_t index
index into the QCELPContext structure
Definition: qcelpdata.h:77
QCELP unpacked data frame.
Definition: qcelpdata.h:40
uint8_t cindex[16]
codebook index for each codebook subframe
Definition: qcelpdata.h:45
#define QCELP_SCALE
The final gain scalefactor before clipping into a usable output float.
Definition: qcelpdata.h:425
uint8_t plag[4]
pitch lag for each pitch subframe
Definition: qcelpdata.h:50
uint8_t cbsign[16]
sign of the codebook gain for each codebook subframe
Definition: qcelpdata.h:43
uint8_t lspv[10]
line spectral pair frequencies (LSP) for RATE_OCTAVE, line spectral pair frequencies grouped into fiv...
Definition: qcelpdata.h:60
uint8_t pgain[4]
pitch gain for each pitch subframe
Definition: qcelpdata.h:52
struct QCELPFrame QCELPFrame
QCELP unpacked data frame.
uint8_t bitpos
position of the lowest bit in the value's byte
Definition: qcelpdata.h:78
uint8_t bitlen
number of bits to read
Definition: qcelpdata.h:79
uint8_t reserved
reserved bits only present in bitrate 1, 1/4 and 1/8 packets
Definition: qcelpdata.h:65
common internal and external API header
uint8_t cbgain[16]
unsigned codebook gain for each codebook subframe
Definition: qcelpdata.h:44
Definition: qcelpdata.h:76