28 #ifndef AVCODEC_G723_1_H 29 #define AVCODEC_G723_1_H 33 #include "libavutil/log.h" 36 #define SUBFRAME_LEN 60 37 #define FRAME_LEN (SUBFRAME_LEN << 2) 38 #define HALF_FRAME_LEN (FRAME_LEN / 2) 39 #define LPC_FRAME (HALF_FRAME_LEN + SUBFRAME_LEN) 42 #define LSP_CB_SIZE 256 44 #define PITCH_MAX (PITCH_MIN + 127) 48 #define GAIN_LEVELS 24 49 #define COS_TBL_SIZE 512 58 ((((a) >> 16) * (b) * 2) + (((a) & 0xffff) * (b) >> 15)) 115 int pulse_pos[PULSE_MAX];
116 int pulse_sign[PULSE_MAX];
126 uint8_t lsp_index[LSP_BANDS];
130 int16_t prev_lsp[LPC_ORDER];
131 int16_t sid_lsp[LPC_ORDER];
132 int16_t prev_excitation[PITCH_MAX];
133 int16_t excitation[PITCH_MAX + FRAME_LEN + 4];
134 int16_t synth_mem[LPC_ORDER];
135 int16_t fir_mem[LPC_ORDER];
136 int iir_mem[LPC_ORDER];
149 int16_t audio[FRAME_LEN + LPC_ORDER + PITCH_MAX + 4];
152 int16_t prev_data[HALF_FRAME_LEN];
153 int16_t prev_weight_sig[PITCH_MAX];
157 int16_t perf_fir_mem[LPC_ORDER];
158 int16_t perf_iir_mem[LPC_ORDER];
160 int16_t harmonic_mem[PITCH_MAX];
177 int ff_g723_1_dot_product(
const int16_t *a,
const int16_t *b,
int length);
217 uint8_t *lsp_index,
int bad_frame);
219 static const uint8_t frame_size[4] = { 24, 20, 4, 1 };
224 static const int16_t ppf_gain_weight[2] = {0x1800, 0x2000};
229 static const int16_t dc_lsp[LPC_ORDER] = {
243 static const int16_t cos_tab[COS_TBL_SIZE + 1] = {
244 16384, 16383, 16379, 16373, 16364, 16353, 16340, 16324,
245 16305, 16284, 16261, 16235, 16207, 16176, 16143, 16107,
246 16069, 16029, 15986, 15941, 15893, 15843, 15791, 15736,
247 15679, 15619, 15557, 15493, 15426, 15357, 15286, 15213,
248 15137, 15059, 14978, 14896, 14811, 14724, 14635, 14543,
249 14449, 14354, 14256, 14155, 14053, 13949, 13842, 13733,
250 13623, 13510, 13395, 13279, 13160, 13039, 12916, 12792,
251 12665, 12537, 12406, 12274, 12140, 12004, 11866, 11727,
252 11585, 11442, 11297, 11151, 11003, 10853, 10702, 10549,
253 10394, 10238, 10080, 9921, 9760, 9598, 9434, 9269,
254 9102, 8935, 8765, 8595, 8423, 8250, 8076, 7900,
255 7723, 7545, 7366, 7186, 7005, 6823, 6639, 6455,
256 6270, 6084, 5897, 5708, 5520, 5330, 5139, 4948,
257 4756, 4563, 4370, 4176, 3981, 3786, 3590, 3393,
258 3196, 2999, 2801, 2603, 2404, 2205, 2006, 1806,
259 1606, 1406, 1205, 1005, 804, 603, 402, 201,
260 0, -201, -402, -603, -804, -1005, -1205, -1406,
261 -1606, -1806, -2006, -2205, -2404, -2603, -2801, -2999,
262 -3196, -3393, -3590, -3786, -3981, -4176, -4370, -4563,
263 -4756, -4948, -5139, -5330, -5520, -5708, -5897, -6084,
264 -6270, -6455, -6639, -6823, -7005, -7186, -7366, -7545,
265 -7723, -7900, -8076, -8250, -8423, -8595, -8765, -8935,
266 -9102, -9269, -9434, -9598, -9760, -9921, -10080, -10238,
267 -10394, -10549, -10702, -10853, -11003, -11151, -11297, -11442,
268 -11585, -11727, -11866, -12004, -12140, -12274, -12406, -12537,
269 -12665, -12792, -12916, -13039, -13160, -13279, -13395, -13510,
270 -13623, -13733, -13842, -13949, -14053, -14155, -14256, -14354,
271 -14449, -14543, -14635, -14724, -14811, -14896, -14978, -15059,
272 -15137, -15213, -15286, -15357, -15426, -15493, -15557, -15619,
273 -15679, -15736, -15791, -15843, -15893, -15941, -15986, -16029,
274 -16069, -16107, -16143, -16176, -16207, -16235, -16261, -16284,
275 -16305, -16324, -16340, -16353, -16364, -16373, -16379, -16383,
276 -16384, -16383, -16379, -16373, -16364, -16353, -16340, -16324,
277 -16305, -16284, -16261, -16235, -16207, -16176, -16143, -16107,
278 -16069, -16029, -15986, -15941, -15893, -15843, -15791, -15736,
279 -15679, -15619, -15557, -15493, -15426, -15357, -15286, -15213,
280 -15137, -15059, -14978, -14896, -14811, -14724, -14635, -14543,
281 -14449, -14354, -14256, -14155, -14053, -13949, -13842, -13733,
282 -13623, -13510, -13395, -13279, -13160, -13039, -12916, -12792,
283 -12665, -12537, -12406, -12274, -12140, -12004, -11866, -11727,
284 -11585, -11442, -11297, -11151, -11003, -10853, -10702, -10549,
285 -10394, -10238, -10080, -9921, -9760, -9598, -9434, -9269,
286 -9102, -8935, -8765, -8595, -8423, -8250, -8076, -7900,
287 -7723, -7545, -7366, -7186, -7005, -6823, -6639, -6455,
288 -6270, -6084, -5897, -5708, -5520, -5330, -5139, -4948,
289 -4756, -4563, -4370, -4176, -3981, -3786, -3590, -3393,
290 -3196, -2999, -2801, -2603, -2404, -2205, -2006, -1806,
291 -1606, -1406, -1205, -1005, -804, -603, -402, -201,
292 0, 201, 402, 603, 804, 1005, 1205, 1406,
293 1606, 1806, 2006, 2205, 2404, 2603, 2801, 2999,
294 3196, 3393, 3590, 3786, 3981, 4176, 4370, 4563,
295 4756, 4948, 5139, 5330, 5520, 5708, 5897, 6084,
296 6270, 6455, 6639, 6823, 7005, 7186, 7366, 7545,
297 7723, 7900, 8076, 8250, 8423, 8595, 8765, 8935,
298 9102, 9269, 9434, 9598, 9760, 9921, 10080, 10238,
299 10394, 10549, 10702, 10853, 11003, 11151, 11297, 11442,
300 11585, 11727, 11866, 12004, 12140, 12274, 12406, 12537,
301 12665, 12792, 12916, 13039, 13160, 13279, 13395, 13510,
302 13623, 13733, 13842, 13949, 14053, 14155, 14256, 14354,
303 14449, 14543, 14635, 14724, 14811, 14896, 14978, 15059,
304 15137, 15213, 15286, 15357, 15426, 15493, 15557, 15619,
305 15679, 15736, 15791, 15843, 15893, 15941, 15986, 16029,
306 16069, 16107, 16143, 16176, 16207, 16235, 16261, 16284,
307 16305, 16324, 16340, 16353, 16364, 16373, 16379, 16383,
314 static const int16_t lsp_band0[LSP_CB_SIZE][3] = {
315 { 0, 0, 0}, { -270, -1372, -1032}, { -541, -1650, -1382},
316 { -723, -2011, -2213}, { -941, -1122, -1942}, { -780, -1145, -2454},
317 { -884, -1309, -1373}, {-1051, -1523, -1766}, {-1083, -1622, -2300},
318 { -777, -1377, -2147}, { -935, -1467, -2763}, { -802, -1327, -3471},
319 { -935, -1959, -3999}, { -240, -89, 222}, { -661, -257, -160},
320 { -994, -466, -419}, { -188, -164, -278}, { -342, -512, -415},
321 { -607, -511, -797}, { 16, 19, -716}, { 374, 425, -972},
322 { -346, 245, -282}, { -265, 506, -754}, { -620, -147, 1955},
323 { -742, -860, 2597}, { -150, -352, 2704}, { 305, 880, 1954},
324 { 123, 731, 2766}, { -348, 765, 3327}, { 618, 221, 3258},
325 { -178, -47, 4219}, { 393, 1304, 3842}, { 698, 1702, 4801},
326 { 63, -584, 1229}, { -215, -732, 1704}, { 172, -335, 1909},
327 { -2, 216, 1797}, { 353, 127, 2205}, {-1208, 188, 11},
328 { -513, -75, -683}, { -973, 222, -646}, { -616, -843, -388},
329 { -950, -1113, -359}, {-1431, -623, -705}, {-1398, -1063, -178},
330 { -45, -461, 35}, { -9, -657, -216}, { 127, -1078, 95},
331 { -950, -1156, 584}, {-1480, -1494, 449}, { -120, -705, 516},
332 { -368, -961, 727}, { -378, -526, 973}, { -793, -614, 676},
333 { -801, -755, 1287}, {-1476, -340, 1636}, { -505, -1254, 1543},
334 {-1243, -1622, 1532}, { -776, -1477, -655}, {-1151, -1296, -823},
335 {-1153, -1672, -1124}, {-1291, -2003, -1702}, { -622, -1283, 57},
336 { -471, -1611, 509}, {-1060, -1570, -139}, { -873, -2156, -536},
337 {-1716, -2021, -364}, {-2150, -3218, -1291}, {-1248, -1945, -2904},
338 {-1215, -2633, -2855}, { 167, -244, 84}, { 349, -412, -217},
339 { -40, -352, 632}, { 227, -529, 405}, { 68, -383, -443},
340 { 167, -558, -706}, { -275, -854, -14}, { -351, -1089, -449},
341 { 341, -72, -289}, { 603, -106, -474}, { 322, -219, -649},
342 { 179, -317, -998}, { 450, -291, -996}, { 555, 195, -525},
343 { 784, 272, -831}, { -148, -384, -849}, { 82, -536, -1357},
344 { 238, -172, -1354}, { 422, -268, -1841}, { 297, -737, -2079},
345 { -111, -801, -598}, { 1, -668, -984}, { -131, -818, -1299},
346 { -329, -521, -1310}, { -151, -778, -1834}, { -93, -352, -1746},
347 { -568, -640, -1821}, { -509, -941, -2183}, { 464, -815, -1250},
348 { 79, -1133, -1597}, { -184, -1353, -2123}, { -196, -410, -2427},
349 { -192, -833, -2810}, { -259, -1382, -3045}, { -217, 4, -1166},
350 { -800, -325, -1219}, { -363, -830, -898}, { -661, -1134, -960},
351 { -386, -980, -1501}, { -627, -1159, -1722}, { -903, -829, -855},
352 { -685, -829, -1313}, {-1065, -959, -1405}, { 441, 25, -847},
353 { 655, -27, -1181}, { 1159, -110, -705}, { 856, 253, -1671},
354 { 415, 404, -1}, { 322, 903, -398}, { 670, 499, -292},
355 { 803, 591, -610}, { 1144, 591, -814}, { 717, 183, 393},
356 { 857, 381, 106}, { 609, 62, -27}, { 792, 198, -325},
357 { 735, 805, 88}, { 1142, 812, 78}, { 1028, 366, -292},
358 { 1309, 743, -237}, { 1615, 589, -79}, { 1010, 639, -243},
359 { 999, 964, -311}, { 1500, 1137, -615}, { 988, 357, 646},
360 { 1227, 667, 683}, { 1164, 1565, 894}, { 1392, 2015, 477},
361 { 1138, 533, 250}, { 1437, 896, 391}, { 1765, 1118, 99},
362 { 1112, 1090, 802}, { 1596, 846, 1134}, { 937, 1161, 279},
363 { 1719, 1254, 683}, { 1338, 1086, 35}, { 1419, 1324, 428},
364 { 1428, 1524, 40}, { 2108, 1594, 89}, { 1015, 544, 1222},
365 { 1121, 925, 1263}, { 1030, 1318, 1485}, { 1295, 789, 1817},
366 { 1323, 1272, 1909}, { 1724, 1237, 1803}, { 1797, 1689, 858},
367 { 2149, 1367, 1301}, { 2302, 1867, 761}, { 2863, 2351, 1053},
368 { 52, 163, -76}, { 230, 309, -492}, { -71, 619, 39},
369 { -218, 856, 499}, { -654, 736, -207}, { -535, 1259, 155},
370 { -480, 1476, 643}, { 262, 1081, 102}, { 309, 1592, -182},
371 { 627, 1629, 534}, { 337, 643, 456}, { 758, 670, 713},
372 { 202, 1126, 658}, { 612, 1131, 666}, { 686, 1223, 1136},
373 { -131, 377, 525}, { 42, 708, 907}, { 87, 1488, 1035},
374 { 432, 2117, 904}, { 137, 981, 1332}, { -447, 1014, 1136},
375 { -839, 1793, 1246}, { -559, 297, 198}, { -850, 685, 446},
376 {-1273, 632, 826}, { -401, -544, 173}, { -753, -793, 144},
377 { -436, -9, 772}, { -115, -243, 1310}, { -670, -269, 374},
378 {-1027, -13, 639}, { -887, -81, 1137}, {-1277, -455, 158},
379 {-1411, -720, 736}, { 172, 88, 403}, { 386, 255, 756},
380 { -500, 522, 910}, { -958, 659, 1388}, { -395, 301, 1344},
381 { -356, 768, 1813}, { -613, 841, 2419}, { 445, -122, 252},
382 { 629, -87, 723}, { 283, -253, 870}, { 456, -116, 1381},
383 { 757, 180, 1059}, { 532, 408, 1509}, { 947, 288, 1806},
384 { 1325, 994, 2524}, { 892, 1219, 3023}, { 1397, 1596, 3406},
385 { 1143, 1552, 2546}, { 1850, 1433, 2710}, { -10, 134, 1002},
386 { 154, 499, 1323}, { 508, 792, 1117}, { 509, 1340, 1616},
387 { 762, 862, 1608}, { 787, 740, 2320}, { 794, 1727, 1283},
388 { 465, 2108, 1660}, { -120, 1451, 1613}, { -386, 2016, 2169},
389 { 891, 1225, 2050}, { 456, 1480, 2185}, { 1493, 1283, 1209},
390 { 1397, 1636, 1518}, { 1776, 1738, 1552}, { 1572, 1698, 2141},
391 { 1389, 2126, 1271}, { 1959, 2413, 1119}, { 1365, 2892, 1505},
392 { 2206, 1971, 1623}, { 2076, 1950, 2280}, { 1717, 2291, 1867},
393 { 2366, 2515, 1953}, { 2865, 2838, 2522}, { 2535, 3465, 2011},
394 { 3381, 4127, 2638}, { 836, 2667, 2289}, { 1761, 2773, 2337},
395 { 1415, 3325, 2911}, { 2354, 3138, 3126}, { 2659, 4192, 4010},
396 { 1048, 1786, 1818}, { 1242, 2111, 2240}, { 1512, 2079, 2780},
397 { 1573, 2491, 3138}, { 2230, 2377, 2782}, { 416, 1773, 2704},
398 { 725, 2336, 3297}, { 1252, 2373, 3978}, { 2094, 2268, 3568},
399 { 2011, 2712, 4528}, { 1341, 3507, 3876}, { 1216, 3919, 4922},
403 static const int16_t lsp_band1[LSP_CB_SIZE][3] = {
404 { 0, 0, 0}, {-2114, -1302, 76}, {-2652, -1278, -1368},
405 {-2847, -828, -349}, {-3812, -2190, -349}, {-3946, -364, -449},
406 {-2725, -4492, -3607}, {-3495, -4764, -1744}, { -51, -756, 84},
407 { -153, -1191, 504}, { 108, -1418, 1167}, { -835, -896, 390},
408 { -569, -1702, 87}, {-1151, -1818, 933}, {-1826, -2547, 411},
409 {-1842, -1818, 1451}, {-2438, -1611, 781}, {-2747, -2477, 1311},
410 { -940, 1252, 477}, {-1629, 1688, 602}, {-1202, 617, 280},
411 {-1737, 393, 580}, {-1528, 1077, 1199}, {-2165, -161, 1408},
412 {-2504, -1087, 2371}, {-3458, -175, 1395}, {-1397, -98, -843},
413 {-2252, -177, -1149}, {-1489, -726, -1283}, {-1558, -265, -1744},
414 {-1867, -821, -1897}, {-2062, -1516, -2340}, {-2595, -1142, -2861},
415 { 170, 46, -819}, { -193, -204, -1151}, { 326, -196, -1532},
416 { 780, 329, -816}, { 201, 369, -1243}, { 650, -209, -1060},
417 { 1144, -15, -1216}, { 1203, -259, -1867}, { -890, -564, -1430},
418 { -638, -852, -1921}, { 177, -739, -1358}, { -261, -526, -1666},
419 { 206, -407, -2255}, { 338, -526, -822}, { 421, -1095, -1009},
420 { 765, -607, -1408}, { 825, -1295, -2004}, { 357, -905, -1815},
421 { -58, -1248, -1588}, { -596, -1436, -2046}, { -73, -1159, -2116},
422 { -115, -1382, -2581}, { -160, -1723, -1952}, { -6, -2196, -2954},
423 { -649, -1705, -2603}, { -617, -1453, -3282}, { -949, -2019, -3102},
424 { -812, 1544, 1937}, {-1854, 574, 2000}, {-1463, 1140, 2649},
425 {-2683, 1748, 1452}, {-2486, 2241, 2523}, { 783, 1910, 1435},
426 { 581, 2682, 1376}, { 236, 2197, 1885}, { -453, 2943, 2057},
427 { -682, 2178, 2565}, {-1342, 3201, 3328}, { -288, -184, 262},
428 { 121, -149, -183}, { 758, -412, 206}, { 1038, -204, 853},
429 { 1577, -457, 700}, { 937, -640, -567}, { 1508, -528, -1024},
430 { -225, -527, -427}, { -564, -1095, -332}, { -742, -353, -186},
431 {-1288, -459, 84}, {-1853, -484, -274}, {-1554, -731, 825},
432 {-2425, -234, 382}, {-1722, 293, -271}, {-2515, 425, -564},
433 {-2599, 818, 464}, { -358, 118, -375}, { -613, 198, -874},
434 { -690, 683, -324}, {-1352, 1155, -168}, {-1093, 129, -324},
435 {-1184, 611, -858}, { 433, 386, -372}, { -120, 486, -634},
436 { 234, 851, -631}, { 602, 128, 46}, { 1099, 410, 159},
437 { 715, -145, -424}, { 1198, -85, -593}, { 1390, 367, -358},
438 { 1683, 362, -964}, { 1711, 622, 45}, { 2033, 833, -383},
439 { 2890, 549, -506}, { 7, 401, 52}, { 72, 811, 415},
440 { 566, 668, 41}, { 467, 1218, 130}, { 68, 957, -187},
441 { -25, 1649, -103}, { -661, 260, 214}, { -925, -94, 612},
442 { -321, -422, 965}, { -788, -672, 1783}, { 400, -673, 779},
443 { 741, -595, 1635}, { -161, 307, 657}, { -382, 836, 871},
444 { -814, 400, 1223}, { 364, 606, 1247}, { 57, 75, 1571},
445 { 151, 471, 2287}, { -81, 1021, 1502}, { 227, 1470, 1097},
446 { 658, 1275, 1653}, { 664, 1478, 2377}, { 263, -127, 444},
447 { 264, 89, 969}, { 794, 171, 576}, { 821, 186, 1226},
448 { 404, 462, 517}, { 339, 918, 794}, { 1280, 1423, 196},
449 { 1453, 2019, 365}, { 1615, 1481, 672}, { 2394, 1708, 508},
450 { 806, 1238, 573}, { 713, 1158, 1078}, { 1285, 1436, 1232},
451 { 1790, 1188, 1141}, { 765, 643, 864}, { 1032, 797, 1279},
452 { 900, 563, 1827}, { 1514, 673, 2312}, { 1544, 1129, 3240},
453 { 1469, 1050, 1594}, { 1945, 1318, 1988}, { 2397, 2026, 2060},
454 { 3538, 2057, 2620}, { 1249, -118, 74}, { 1727, 194, 421},
455 { 2078, -50, -463}, { 970, 688, -432}, { 1149, 952, -110},
456 { 1254, 1275, -651}, { 1386, 929, 401}, { 1960, 1167, 232},
457 { 407, -752, -243}, { 859, -1118, 172}, { -227, -860, -992},
458 { -796, -1175, -1380}, { 8, -1282, -388}, { 353, -1781, -1037},
459 { -732, -397, -807}, { -853, -28, -1342}, {-1229, -1207, -1959},
460 {-1015, -1125, -2543}, {-1452, -1791, -2725}, {-1891, -2416, -3269},
461 { -918, -1629, -783}, { -580, -2155, -698}, {-1097, -2364, -96},
462 {-1387, -1513, 7}, {-1588, -2076, -664}, {-1473, -2740, -784},
463 {-2378, -3149, -56}, {-2856, -2092, -169}, {-3391, -3708, 316},
464 {-1176, -890, -614}, {-1944, -1061, -800}, { -299, -1517, -1000},
465 { -640, -1850, -1526}, {-1454, -1536, -1233}, {-1890, -1955, -1756},
466 {-1086, -1921, -2122}, { -750, -2325, -2260}, {-1325, -2413, -2673},
467 {-1114, -2542, -3459}, {-1341, -2901, -3963}, {-1160, -2226, -1393},
468 {-1001, -2772, -1573}, {-1594, -2641, -1978}, {-1534, -3046, -2624},
469 {-2224, -2196, -675}, {-2807, -3054, -1102}, {-2008, -2840, -1186},
470 {-1980, -3332, -1695}, {-1715, -3562, -505}, {-2527, -4000, -1887},
471 {-2333, -2734, -2296}, {-3440, -2401, -3211}, {-2008, -3528, -3337},
472 {-2247, -3291, -4510}, { -475, 949, 155}, { -149, 1365, 545},
473 { -757, 1644, 1083}, { -217, 2053, 1353}, {-1433, 2301, 1462},
474 { 495, 1661, 529}, { 10, 2037, 740}, { 2082, 1898, 978},
475 { 2831, 2294, 911}, { 842, 793, 420}, { 1223, 1023, 863},
476 { 1237, 451, 780}, { 1744, 708, 822}, { 1533, 284, 1384},
477 { 2135, 609, 1538}, { 2305, 626, 540}, { 2368, 1187, 955},
478 { 2586, 1255, -7}, { 3116, 1131, 726}, { 3431, 1730, 428},
479 { 2734, 1648, 1307}, { 2988, 1231, 2010}, { 3523, 2024, 1488},
480 { 1034, 1657, 871}, { 1206, 2163, 1036}, { 1807, 2372, 1233},
481 { 1808, 1769, 1493}, { 1573, 2332, 1779}, { 1216, 1609, 1866},
482 { 1480, 1898, 2513}, { 465, 2708, 2776}, { 771, 3638, 3338},
483 { 1869, 2599, 2623}, { 2825, 2745, 2468}, { 2638, 2439, 1585},
484 { 2094, 2970, 1308}, { 2022, 3057, 1999}, { 3428, 2912, 1816},
485 { 4536, 2974, 2129}, { 1046, 2563, 2086}, { 1363, 3562, 2318},
486 { 2511, 1891, 2984}, { 1866, 2306, 3986}, { 3272, 2924, 3682},
487 { 3146, 3564, 2272}, { 3592, 3968, 2822}, { 2431, 3369, 3069},
488 { 1931, 4709, 3090}, { 2629, 4220, 3986}, { 4639, 4056, 3664},
492 static const int16_t lsp_band2[LSP_CB_SIZE][4] = {
493 { 0, 0, 0, 0}, { 601, 512, -542, 334},
494 { 428, 1087, -484, -132}, { 652, 622, -391, -572},
495 { 378, 799, 141, -860}, { 1040, 409, 112, -554},
496 { 1123, 670, -75, -847}, { 1421, 494, -315, -1095},
497 { 787, 1001, 114, -460}, { 988, 1672, 216, -681},
498 { 1007, 1241, -132, -1247}, { 1073, 399, 186, -5},
499 { 1262, 193, -694, -129}, { 325, 196, 51, -641},
500 { 861, -59, 350, -458}, { 1261, 567, 586, -346},
501 { 1532, 885, 210, -517}, { 2027, 937, 113, -792},
502 { 1383, 1064, 334, 38}, { 1964, 1468, 459, 133},
503 { 2062, 1186, -98, -121}, { 2577, 1445, 506, -373},
504 { 2310, 1682, -2, -960}, { 2876, 1939, 765, 138},
505 { 3581, 2360, 649, -414}, { 219, 176, -398, -309},
506 { 434, -78, -435, -880}, { -344, 301, 265, -552},
507 { -915, 470, 657, -380}, { 419, -432, -163, -453},
508 { 351, -953, 8, -562}, { 789, -43, 20, -958},
509 { 302, -594, -352, -1159}, { 1040, 108, -668, -924},
510 { 1333, 210, -1217, -1663}, { 483, 589, -350, -1140},
511 { 1003, 824, -802, -1184}, { 745, 58, -589, -1443},
512 { 346, 247, -915, -1683}, { 270, 796, -720, -2043},
513 { 1208, 722, -222, -193}, { 1486, 1180, -412, -672},
514 { 1722, 179, -69, -521}, { 2047, 860, -666, -1410},
515 { -146, 222, -281, -805}, { -189, 90, -114, -1307},
516 { -152, 1086, -241, -764}, { -439, 733, -601, -1302},
517 { -833, -167, -351, -601}, { -856, -422, -411, -1059},
518 { -747, -355, -582, -1644}, { -837, 210, -916, -1144},
519 {-1800, 32, -878, -1687}, { -48, -23, -1146, 52},
520 { -350, -409, -1656, -364}, { 265, -728, -858, -577},
521 { 458, -247, -1141, -997}, { 691, -407, -1988, -1161},
522 { -66, -104, -705, -1249}, { -431, -93, -1191, -1844},
523 { 203, -732, -1000, -1693}, { 10, -832, -1846, -1819},
524 { 493, -128, -1436, -1768}, { 488, -311, -1730, -2540},
525 { -653, -532, -1150, -1172}, {-1086, -289, -1706, -1533},
526 { -699, -1205, -1216, -1766}, {-1032, -1481, -2074, -1523},
527 { -721, -1220, -2277, -2600}, { 12, -539, -1484, -1131},
528 { -40, -911, -2106, -441}, { -471, -484, -2267, -1549},
529 { -141, -988, -3006, -1721}, {-1545, -2102, -583, 342},
530 {-1383, -2772, -386, -13}, {-2118, -2589, -1205, 72},
531 {-2147, -3231, -965, 390}, {-2949, -3300, -621, 637},
532 {-3907, -4138, -865, 803}, {-1287, -845, -375, -548},
533 {-1416, -1169, -487, -1277}, {-1400, -1690, -1027, -418},
534 {-2018, -1909, -1188, -1260}, {-1418, -2222, -2029, -128},
535 {-2067, -2998, -2693, -310}, { -950, -1028, -1538, 185},
536 {-1616, -915, -2205, -549}, { 19, -821, -1145, 352},
537 { 184, -1175, -1356, -627}, { -547, -1088, -1661, -911},
538 { -216, -1502, -2197, -948}, { -795, -1306, -2374, -451},
539 { -924, -1889, -2796, -680}, { -600, -1614, -3609, -885},
540 {-2392, -2528, 319, 303}, {-2908, -2095, -310, 573},
541 {-3460, -2141, 49, -113}, {-2231, -448, 675, -146},
542 {-2805, -532, 1231, 479}, {-2684, -486, -200, 611},
543 {-3525, -971, -198, 704}, {-3707, 173, 349, 254},
544 {-4734, -1447, -34, 880}, { 777, -512, 114, -10},
545 { 1250, -66, 442, -5}, { 604, 613, 452, -352},
546 { 1224, 777, 675, -1014}, {-1372, -79, -1208, -238},
547 {-2389, -17, -1157, -818}, {-1504, -673, -1133, -1060},
548 {-1984, -799, -2005, -1973}, {-2037, -798, -1068, -105},
549 {-3190, -899, -1817, -194}, { -156, -886, 394, -318},
550 { -258, -1283, 551, 202}, { -536, -1729, 910, 331},
551 { -847, -1109, 795, -163}, {-1171, -1128, 715, 519},
552 {-1080, -1319, 1685, 668}, {-1000, -1921, 96, 211},
553 {-1487, -2148, 831, 174}, {-1139, -374, 414, -4},
554 {-1517, -1383, 396, -352}, {-1012, 439, -59, -967},
555 {-1812, 706, -440, -1030}, {-1971, -329, -34, -827},
556 {-2472, -1588, -151, -606}, {-2161, 374, -281, 76},
557 {-3012, 231, -15, -690}, { 1104, 566, 721, 209},
558 { 1685, 564, 383, 98}, { 1898, 750, 792, -97},
559 { 556, -64, 561, -93}, { 876, 162, 913, -22},
560 { 961, 675, 1296, 140}, { 756, -396, 851, 544},
561 { 360, -303, 1341, 396}, { 878, -22, 1464, 863},
562 { -309, -273, 642, -129}, { -686, -82, 842, 454},
563 { -5, -47, 1069, 998}, { -94, 967, 1277, 298},
564 { -489, 385, 1473, 746}, { -369, -717, 1333, 242},
565 { 281, -993, 1726, 924}, { 464, 601, 1575, 1376},
566 { -250, 206, 2339, 1175}, { -438, 377, -597, -285},
567 {-1020, 787, -790, -287}, { -458, -410, 215, 295},
568 { -589, -860, -121, 797}, {-1175, 122, -437, 466},
569 {-1480, -121, 367, 924}, { 234, 323, 770, -555},
570 { 145, 30, 996, 26}, { 66, 849, 93, -145},
571 { -117, 1261, 474, -399}, {-1495, 1051, 218, -506},
572 {-1390, 694, 994, 88}, { 616, 7, 78, 304},
573 { 1060, 52, -62, 835}, { 833, 454, 649, 1359},
574 { -770, 464, 47, 93}, { -574, 1199, -39, 379},
575 { 114, -98, 488, 485}, { 727, 244, 606, 696},
576 { -76, 455, 671, 546}, { -565, -13, 145, 819},
577 { -376, 569, 448, 1128}, { 218, 122, 265, 1167},
578 { 230, 738, 932, 1003}, { 138, 477, 36, 450},
579 { 404, 787, -73, 1000}, { 497, 1259, 387, 1231},
580 { 17, 207, 195, -79}, { 562, 358, 53, -158},
581 { 493, 387, 478, 189}, { 678, 831, 640, 558},
582 { -197, 523, 613, 57}, { 429, 894, 769, 111},
583 { 67, 1174, 568, 511}, { 1242, 824, 251, 840},
584 { 1419, 1074, 864, 481}, { 924, 1474, 669, 724},
585 { 1539, 1879, 654, 1590}, { 445, 337, 1111, 541},
586 { 472, 1421, 1264, 1094}, { 794, 735, 1103, 668},
587 { 1055, 863, 1192, 1020}, { 778, 1105, 806, 1798},
588 { 1052, 1527, 1587, 2151}, { 881, 1552, 1265, 391},
589 { 726, 872, 1812, 601}, { 1469, 280, 1008, 616},
590 { 1403, 577, 1803, 1244}, { 1650, 1314, 1148, 1072},
591 { 1297, 1669, 1911, 1026}, { 2093, 1044, 2115, 1189},
592 { 1644, 1961, 2587, 1512}, { 25, -315, -9, -106},
593 { 290, -339, 428, -444}, { -68, -783, 735, 772},
594 { 245, -555, 468, 47}, { 334, -895, 814, 146},
595 { 235, 368, -964, -959}, { -203, 315, -1566, -1217},
596 { 801, 17, -276, -354}, { 894, -495, -789, -635},
597 { 716, 291, -1189, -357}, { 560, -260, -733, -2},
598 { 679, -508, -1429, 211}, { -51, -62, -428, 557},
599 { 322, -638, -211, 614}, { -878, -1057, -84, -71},
600 { -388, -1415, -167, -318}, { -754, -1574, 214, -539},
601 {-1419, -2004, -92, -787}, { -47, -856, -347, -255},
602 { 23, -1211, -173, 320}, { -658, -487, -893, 353},
603 { -783, -1587, -584, 507}, {-1420, -859, -378, 441},
604 {-2095, -1491, -137, 439}, { -321, -1450, -1288, -12},
605 { -359, -2113, -553, -8}, { -831, -1918, -1561, 32},
606 {-1014, -2487, -1359, -939}, { -475, -311, -169, -236},
607 { -907, -426, 276, -611}, { -96, -400, 50, -710},
608 { -426, -1022, -10, -985}, { -197, -258, -744, -575},
609 { -611, -930, -771, -394}, { -267, -776, -612, -939},
610 { -256, -1346, -802, -1122}, { -796, -1570, -825, -754},
611 { 712, 876, 141, 227}, { 981, 1509, 85, 124},
612 { 1462, 1228, 979, -39}, { 1734, 999, 1481, 440},
613 { 2293, 1116, 769, 440}, { 2504, 1480, 1241, 356},
614 { 2474, 1909, 1558, 810}, { 917, 1134, 607, -134},
615 { 509, 1809, 781, -123}, { 1712, 1506, 559, -423},
616 { 2037, 2317, 726, -155}, { 3031, 2676, 1203, 331},
617 { 3664, 3274, 1768, 531}, { 1610, 1839, 867, 183},
618 { 1774, 1972, 1538, 97}, { 1822, 2158, 1282, 659},
619 { 2222, 2758, 1818, 900}, { 3251, 2124, 1723, 996},
620 { 3633, 2336, 2408, 1453}, { 2923, 3517, 2567, 1318},
627 static const int32_t combinatorial_table[PULSE_MAX][SUBFRAME_LEN/GRID_SIZE] = {
628 {118755, 98280, 80730, 65780, 53130,
629 42504, 33649, 26334, 20349, 15504,
630 11628, 8568, 6188, 4368, 3003,
631 2002, 1287, 792, 462, 252,
635 { 23751, 20475, 17550, 14950, 12650,
636 10626, 8855, 7315, 5985, 4845,
637 3876, 3060, 2380, 1820, 1365,
638 1001, 715, 495, 330, 210,
642 { 3654, 3276, 2925, 2600, 2300,
643 2024, 1771, 1540, 1330, 1140,
644 969, 816, 680, 560, 455,
645 364, 286, 220, 165, 120,
649 { 406, 378, 351, 325, 300,
650 276, 253, 231, 210, 190,
651 171, 153, 136, 120, 105,
656 { 29, 28, 27, 26, 25,
671 static const int16_t pitch_contrib[340] = {
672 60, 0, 0, 2489, 60, 0, 0, 5217,
673 1, 6171, 0, 3953, 0, 10364, 1, 9357,
674 -1, 8843, 1, 9396, 0, 5794, -1, 10816,
675 2, 11606, -2, 12072, 0, 8616, 1, 12170,
676 0, 14440, 0, 7787, -1, 13721, 0, 18205,
677 0, 14471, 0, 15807, 1, 15275, 0, 13480,
678 -1, 18375, -1, 0, 1, 11194, -1, 13010,
679 1, 18836, -2, 20354, 1, 16233, -1, 0,
680 60, 0, 0, 12130, 0, 13385, 1, 17834,
681 1, 20875, 0, 21996, 1, 0, 1, 18277,
682 -1, 21321, 1, 13738, -1, 19094, -1, 20387,
683 -1, 0, 0, 21008, 60, 0, -2, 22807,
684 0, 15900, 1, 0, 0, 17989, -1, 22259,
685 1, 24395, 1, 23138, 0, 23948, 1, 22997,
686 2, 22604, -1, 25942, 0, 26246, 1, 25321,
687 0, 26423, 0, 24061, 0, 27247, 60, 0,
688 -1, 25572, 1, 23918, 1, 25930, 2, 26408,
689 -1, 19049, 1, 27357, -1, 24538, 60, 0,
690 -1, 25093, 0, 28549, 1, 0, 0, 22793,
691 -1, 25659, 0, 29377, 0, 30276, 0, 26198,
692 1, 22521, -1, 28919, 0, 27384, 1, 30162,
693 -1, 0, 0, 24237, -1, 30062, 0, 21763,
694 1, 30917, 60, 0, 0, 31284, 0, 29433,
695 1, 26821, 1, 28655, 0, 31327, 2, 30799,
696 1, 31389, 0, 32322, 1, 31760, -2, 31830,
697 0, 26936, -1, 31180, 1, 30875, 0, 27873,
698 -1, 30429, 1, 31050, 0, 0, 0, 31912,
699 1, 31611, 0, 31565, 0, 25557, 0, 31357,
700 60, 0, 1, 29536, 1, 28985, -1, 26984,
701 -1, 31587, 2, 30836, -2, 31133, 0, 30243,
702 -1, 30742, -1, 32090, 60, 0, 2, 30902,
703 60, 0, 0, 30027, 0, 29042, 60, 0,
704 0, 31756, 0, 24553, 0, 25636, -2, 30501,
705 60, 0, -1, 29617, 0, 30649, 60, 0,
706 0, 29274, 2, 30415, 0, 27480, 0, 31213,
707 -1, 28147, 0, 30600, 1, 31652, 2, 29068,
708 60, 0, 1, 28571, 1, 28730, 1, 31422,
709 0, 28257, 0, 24797, 60, 0, 0, 0,
710 60, 0, 0, 22105, 0, 27852, 60, 0,
711 60, 0, -1, 24214, 0, 24642, 0, 23305,
712 60, 0, 60, 0, 1, 22883, 0, 21601,
713 60, 0, 2, 25650, 60, 0, -2, 31253,
720 static const int8_t pulses[4] = {6, 5, 6, 5};
725 static const int32_t max_pos[4] = {593775, 142506, 593775, 142506};
727 static const int16_t fixed_cb_gain[GAIN_LEVELS] = {
728 1, 2, 3, 4, 6, 9, 13, 18,
729 26, 38, 55, 80, 115, 166, 240, 348,
730 502, 726, 1050, 1517, 2193, 3170, 4582, 6623,
733 static const int16_t adaptive_cb_gain85[85 * 20] = {
734 0, 0, 0, 0, 0, 0, 0, 0,
735 0, 0, 0, 0, 0, 0, 0, 0,
736 0, 0, 0, 0, 800, 1496, 167, -256,
737 -338, -39, -136, -1, -4, -6, -73, -8,
738 -15, 12, 23, 2, 16, 30, 3, -5,
739 -462, -686, 493, 2575, 311, -13, -28, -14,
740 -404, -5, -19, 13, 20, 72, 107, -77,
741 8, 13, -9, -48, 1483, 144, 784, 928,
742 1243, -134, -1, -37, -52, -94, -13, -71,
743 -6, -84, -8, -44, -112, -10, -59, -70,
744 -77, 275, 3522, 1056, -1254, 0, -4, -757,
745 -68, -95, 1, 16, -59, 4, -17, -227,
746 -5, 21, 269, 80, -125, -40, -264, 381,
747 5027, 0, 0, -4, -8, -1542, 0, -2,
748 0, 2, 0, 6, 38, 12, 81, -117,
749 138, 332, 2215, 2574, 1339, -1, -6, -299,
750 -404, -109, -2, -18, -44, -21, -52, -348,
751 -11, -27, -181, -210, 3685, 2883, -887, 866,
752 -1639, -828, -507, -48, -45, -164, -648, 199,
753 156, -194, -152, 46, 368, 288, -88, 86,
754 1396, 2146, 2235, 345, 942, -118, -281, -305,
755 -7, -54, -182, -190, -292, -29, -45, -47,
756 -80, -123, -128, -19, 13, 4475, 3549, -804,
757 -655, 0, -1222, -768, -39, -26, -3, -2,
758 -969, 0, 219, 174, 0, 179, 141, -32,
759 -724, 254, 242, 6049, 2462, -32, -3, -3,
760 -2233, -370, 11, 10, -3, 267, -94, -89,
761 108, -38, -36, -909, 626, -1713, 6121, 4561,
762 -1061, -23, -179, -2287, -1270, -68, 65, -233,
763 640, -174, 477, -1704, 40, -111, 396, 295,
764 -350, 1391, 7985, 511, -405, -7, -118, -3892,
765 -15, -10, 29, 170, -678, 10, -43, -249,
766 -8, 34, 197, 12, 3144, -529, 608, 2530,
767 3878, -603, -17, -22, -390, -918, 101, -116,
768 19, -485, 81, -93, -744, 125, -144, -599,
769 2589, -689, 3045, 5603, -404, -409, -29, -566,
770 -1916, -10, 108, -481, 128, -885, 235, -1041,
771 63, -17, 75, 138, 3107, 513, 1374, -3594,
772 -4922, -589, -16, -115, -788, -1478, -97, -260,
773 -43, 681, 112, 301, 933, 154, 413, -1079,
774 2468, 6010, 1107, -390, 1961, -372, -2204, -74,
775 -9, -234, -905, -166, -406, 58, 143, 26,
776 -295, -719, -132, 46, 4773, 2766, 2368, 4862,
777 -4044, -1390, -467, -342, -1443, -998, -806, -690,
778 -399, -1416, -821, -702, 1178, 682, 584, 1200,
779 1665, -1879, 1443, 1701, 8562, -169, -215, -127,
780 -176, -4475, 190, -146, 165, -172, 195, -149,
781 -870, 982, -754, -889, 2716, 9011, -1007, 755,
782 -1785, -450, -4956, -61, -34, -194, -1493, 167,
783 554, -125, -415, 46, 296, 982, -109, 82,
784 -2727, 7548, 1285, 938, 3420, -453, -3478, -100,
785 -53, -714, 1256, 213, -592, 156, -432, -73,
786 569, -1576, -268, -196, 3677, 882, 4050, 1202,
787 2323, -825, -47, -1001, -88, -329, -198, -909,
788 -218, -269, -64, -297, -521, -125, -574, -170,
789 2046, -753, 122, 10102, 603, -255, -34, 0,
790 -6229, -22, 94, -15, 5, -1261, 464, -75,
791 -75, 27, -4, -372, 449, -1815, 10690, 3870,
792 -527, -12, -201, -6976, -914, -16, 49, -293,
793 1184, -106, 428, -2525, 14, -58, 344, 124,
794 -941, 2352, 5049, 3650, 2637, -54, -337, -1556,
795 -813, -424, 135, 290, -725, 209, -524, -1125,
796 151, -378, -812, -587, -1879, 796, 3117, 9569,
797 -404, -215, -38, -593, -5589, -9, 91, 357,
798 -151, 1097, -464, -1821, -46, 19, 76, 236,
799 -1715, 2043, -2096, 9946, 4001, -179, -254, -268,
800 -6038, -977, 213, -219, 261, 1041, -1240, 1272,
801 418, -498, 511, -2429, -5772, -618, -3921, 284,
802 -3155, -2033, -23, -938, -4, -607, -218, -1381,
803 -148, 100, 10, 68, -1111, -119, -755, 54,
804 382, 4748, 8003, -2064, 2198, -8, -1376, -3909,
805 -260, -294, -110, -186, -2319, 48, 598, 1008,
806 -51, -637, -1073, 277, -867, 3015, 11926, -1675,
807 947, -45, -555, -8681, -171, -54, 159, 631,
808 -2195, -88, 308, 1219, 50, -174, -690, 96,
809 -4933, -432, 6757, 3771, 1352, -1485, -11, -2786,
810 -867, -111, -130, 2034, 178, 1135, 99, -1555,
811 407, 35, -557, -311, 152, 9726, 4231, -1928,
812 1490, -1, -5774, -1092, -226, -135, -90, -39,
813 -2511, 17, 1144, 498, -13, -884, -384, 175,
814 2512, 193, 9033, 5361, -3148, -385, -2, -4980,
815 -1754, -605, -29, -1385, -106, -822, -63, -2956,
816 482, 37, 1735, 1030, 8464, 2844, 12, 549,
817 2132, -4373, -493, 0, -18, -277, -1469, -6,
818 -2, -284, -95, 0, -1101, -370, -1, -71,
819 2141, -2602, 7166, 9046, -1350, -279, -413, -3134,
820 -4994, -111, 340, -936, 1138, -1182, 1436, -3957,
821 176, -214, 590, 745, -244, 278, 13307, 1227,
822 -161, -3, -4, -10808, -91, -1, 4, 198,
823 -226, 18, -20, -997, -2, 2, 131, 12,
824 -1947, 8217, 6269, 917, -2559, -231, -4121, -2399,
825 -51, -399, 976, 745, -3144, 108, -460, -350,
826 -304, 1283, 979, 143, -1810, 2061, -2781, 6056,
827 10058, -200, -259, -472, -2238, -6174, 227, -307,
828 349, 669, -761, 1028, 1111, -1265, 1707, -3717,
829 7827, 9161, -3409, 2473, -1510, -3739, -5122, -709,
830 -373, -139, -4376, 1628, 1906, -1181, -1382, 514,
831 721, 844, -314, 228, -1430, 8313, 9541, -2955,
832 1626, -124, -4218, -5556, -533, -161, 725, 832,
833 -4841, -257, 1499, 1721, 142, -825, -947, 293,
834 2819, -4247, 5391, 8673, 2756, -485, -1101, -1774,
835 -4591, -463, 730, -927, 1397, -1492, 2248, -2854,
836 -474, 714, -907, -1459, 141, 14552, 690, 257,
837 -112, -1, -12926, -29, -4, 0, -125, -5,
838 -613, -2, -228, -10, 0, 99, 4, 1,
839 11938, -1859, 1806, -962, -884, -8699, -211, -199,
840 -56, -47, 1355, -1316, 205, 701, -109, 106,
841 644, -100, 97, -51, 3728, 1982, 2264, 4584,
842 3131, -848, -239, -312, -1282, -598, -451, -515,
843 -273, -1043, -554, -633, -712, -378, -432, -876,
844 -1181, 766, 720, 14303, -216, -85, -35, -31,
845 -12486, -2, 55, 51, -33, 1031, -668, -628,
846 -15, 10, 9, 189, -4385, 4826, 10112, 1569,
847 3388, -1173, -1421, -6242, -150, -700, 1291, 2706,
848 -2979, 420, -462, -969, 906, -998, -2091, -324,
849 -448, 1932, 15591, -1842, 657, -12, -227, -14837,
850 -207, -26, 52, 427, -1838, -50, 217, 1753,
851 18, -77, -626, 74, -4141, 1844, 3962, 5517,
852 6220, -1046, -207, -958, -1858, -2361, 466, 1001,
853 -446, 1394, -621, -1334, 1572, -700, -1504, -2094,
854 729, -2299, 14755, 3657, -952, -32, -322, -13288,
855 -816, -55, 102, -656, 2071, -162, 513, -3294,
856 42, -133, 857, 212, -1385, 5801, 13339, -3137,
857 1344, -117, -2054, -10861, -600, -110, 490, 1127,
858 -4723, -265, 1111, 2554, 113, -476, -1094, 257,
859 4710, 9661, 1073, -2467, 3274, -1354, -5697, -70,
860 -371, -654, -2777, -308, -633, 709, 1455, 161,
861 -941, -1930, -214, 493, 1843, -3624, 12422, 6898,
862 -1559, -207, -802, -9419, -2904, -148, 407, -1397,
863 2748, -775, 1526, -5230, 175, -344, 1182, 656,
864 1433, 2394, 2507, 1380, 8780, -125, -349, -383,
865 -116, -4705, -209, -219, -366, -120, -201, -211,
866 -768, -1283, -1343, -740, -1712, 12915, 5883, -2197,
867 991, -179, -10181, -2112, -294, -60, 1350, 615,
868 -4638, -229, 1732, 789, 103, -781, -356, 133,
869 15072, 2158, -1245, 910, -496, -13865, -284, -94,
870 -50, -15, -1986, 1145, 164, -837, -119, 69,
871 456, 65, -37, 27, 4655, 7319, 4916, 586,
872 -3381, -1322, -3270, -1475, -20, -697, -2079, -1396,
873 -2196, -166, -261, -175, 960, 1510, 1014, 120,
874 1191, -2140, 5120, 13498, -1418, -86, -279, -1600,
875 -11121, -122, 155, -372, 669, -981, 1763, -4218,
876 103, -185, 443, 1168, -1530, -817, 8191, 9632,
877 -1452, -143, -40, -4095, -5663, -128, -76, 765,
878 408, 900, 480, -4815, -135, -72, 726, 854,
879 -3236, 607, 1696, -2106, 11485, -639, -22, -175,
880 -270, -8051, 119, 335, -62, -416, 78, 218,
881 2268, -425, -1189, 1476, 3203, -1903, -837, 9679,
882 7057, -626, -221, -42, -5718, -3039, 372, 163,
883 -97, -1892, 1124, 494, -1380, 819, 360, -4169,
884 213, -655, 17015, 620, -384, -2, -26, -17671,
885 -23, -9, 8, -221, 681, -8, 24, -644,
886 5, -15, 399, 14, 5088, 35, -3339, 3726,
887 8488, -1580, 0, -680, -847, -4397, -10, 1037,
888 7, -1157, -8, 759, -2636, -18, 1730, -1930,
889 -988, 1454, -2688, 15039, 2682, -59, -129, -441,
890 -13805, -439, 87, -162, 238, 907, -1335, 2467,
891 161, -238, 440, -2462, -4865, -2842, -53, 5495,
892 6523, -1445, -493, 0, -1843, -2597, -844, -16,
893 -9, 1632, 953, 18, 1937, 1131, 21, -2188,
894 3076, 15069, -2914, 1810, -971, -577, -13860, -518,
895 -200, -57, -2829, 547, 2680, -339, -1665, 322,
896 182, 893, -172, 107, 1311, 5355, 11054, 2299,
897 -3654, -105, -1750, -7458, -322, -814, -428, -885,
898 -3613, -184, -751, -1551, 292, 1194, 2465, 512,
899 4035, 5619, 4618, 1815, 1912, -994, -1927, -1301,
900 -201, -223, -1384, -1137, -1583, -447, -622, -511,
901 -471, -656, -539, -211, -2131, 2754, -4501, 12879,
902 7432, -277, -463, -1236, -10124, -3371, 358, -585,
903 756, 1675, -2165, 3538, 967, -1249, 2042, -5842,
904 5618, -515, 3219, -4149, 4857, -1926, -16, -632,
905 -1050, -1440, 176, -1104, 101, 1422, -130, 815,
906 -1666, 152, -954, 1230, 1838, -1709, 1139, 16867,
907 716, -206, -178, -79, -17366, -31, 191, -127,
908 118, -1892, 1759, -1173, -80, 74, -49, -737,
909 1978, -3845, 10050, 11854, -2492, -238, -902, -6164,
910 -8576, -379, 464, -1213, 2358, -1431, 2782, -7271,
911 301, -585, 1529, 1803, -2600, 11246, 11289, -3647,
912 1463, -412, -7720, -7778, -812, -130, 1784, 1791,
913 -7749, -578, 2504, 2513, 232, -1004, -1008, 325,
914 3442, 907, 2725, 8970, 3638, -723, -50, -453,
915 -4911, -808, -190, -572, -150, -1884, -496, -1492,
916 -764, -201, -605, -1992, -126, 17498, 3481, -2003,
917 1090, 0, -18689, -739, -244, -72, 135, 26,
918 -3717, -15, 2139, 425, 8, -1165, -231, 133,
919 -1814, 1048, -2164, 4070, 16272, -200, -67, -285,
920 -1011, -16160, 116, -239, 138, 450, -260, 537,
921 1801, -1041, 2149, -4042, 9354, 12580, -1883, 962,
922 -617, -5341, -9660, -216, -56, -23, -7183, 1075,
923 1446, -549, -738, 110, 352, 474, -71, 36,
924 1708, 4199, 7387, 6335, 1003, -178, -1076, -3330,
925 -2449, -61, -437, -770, -1893, -660, -1623, -2856,
926 -104, -257, -452, -388, -2624, 5623, 17310, -2353,
927 592, -420, -1930, -18288, -338, -21, 900, 2772,
928 -5941, -376, 807, 2486, 94, -203, -625, 85,
929 1211, -850, 1193, -1926, 15992, -89, -44, -86,
930 -226, -15609, 62, -88, 61, 142, -100, 140,
931 -1182, 830, -1165, 1880, 3983, -2054, 11506, -19,
932 3622, -968, -257, -8080, 0, -801, 499, -2797,
933 1442, 4, -2, 13, -880, 454, -2544, 4,
934 -786, -1354, 16092, 7246, -1665, -37, -111, -15805,
935 -3205, -169, -65, 772, 1330, 348, 599, -7117,
936 -80, -137, 1636, 736, -4316, -511, 6674, 11665,
937 4633, -1137, -15, -2719, -8305, -1310, -134, 1758,
938 208, 3073, 364, -4752, 1220, 144, -1887, -3299,
939 7912, 4557, 1937, 1885, 7037, -3821, -1267, -229,
940 -216, -3022, -2200, -935, -538, -910, -524, -222,
941 -3398, -1957, -832, -809, 3434, 2967, 5867, 8196,
942 8766, -720, -537, -2101, -4100, -4690, -622, -1230,
943 -1062, -1718, -1484, -2935, -1837, -1588, -3139, -4385,
944 5881, 9176, 8119, 3934, 3355, -2111, -5139, -4023,
945 -944, -687, -3294, -2914, -4547, -1412, -2203, -1949,
946 -1204, -1879, -1662, -805
949 static const int16_t adaptive_cb_gain170[170 * 20] = {
950 0, 0, 0, 0, 0, 0, 0, 0,
951 0, 0, 0, 0, 0, 0, 0, 0,
952 0, 0, 0, 0, 776, 212, 715, 670,
953 809, -36, -2, -31, -27, -39, -10, -33,
954 -9, -31, -8, -29, -38, -10, -35, -33,
955 1296, 1316, -168, -320, -815, -102, -105, -1,
956 -6, -40, -104, 13, 13, 25, 25, -3,
957 64, 65, -8, -15, -589, 680, 2478, 308,
958 -596, -21, -28, -375, -5, -21, 24, 89,
959 -102, 11, -12, -46, -21, 24, 90, 11,
960 -735, -487, -5, 2948, 468, -33, -14, 0,
961 -530, -13, -21, 0, 0, 132, 87, 0,
962 21, 13, 0, -84, 1042, 1730, 1068, 333,
963 626, -66, -182, -69, -6, -23, -110, -67,
964 -112, -21, -35, -21, -39, -66, -40, -12,
965 486, -769, 4074, 2825, -1107, -14, -36, -1013,
966 -487, -74, 22, -120, 191, -83, 132, -702,
967 32, -52, 275, 191, 1521, -767, -124, 4320,
968 1026, -141, -35, 0, -1139, -64, 71, 11,
969 -5, -401, 202, 32, -95, 48, 7, -270,
970 2425, 1267, 3439, -91, -1166, -359, -98, -722,
971 0, -83, -187, -509, -266, 13, 7, 19,
972 172, 90, 244, -6, -1251, 975, 173, 4039,
973 2005, -95, -58, -1, -996, -245, 74, 13,
974 -10, 308, -240, -42, 153, -119, -21, -494,
975 1820, 632, 1322, 2062, 1031, -202, -24, -106,
976 -259, -64, -70, -146, -51, -229, -79, -166,
977 -114, -39, -83, -129, -447, 4904, 244, -315,
978 -2038, -12, -1467, -3, -6, -253, 134, 6,
979 -73, -8, 94, 4, -55, 610, 30, -39,
980 -208, -1102, 463, -448, 5653, -2, -74, -13,
981 -12, -1950, -14, 5, 31, -5, -30, 12,
982 71, 380, -159, 154, 4739, 2600, -1864, 856,
983 -1554, -1371, -412, -212, -44, -147, -752, 539,
984 295, -247, -135, 97, 449, 246, -176, 81,
985 1894, 3533, 35, -26, 2145, -219, -762, 0,
986 0, -280, -408, -4, -7, 3, 5, 0,
987 -248, -462, -4, 3, -2699, 1841, 4072, 2443,
988 1582, -444, -207, -1012, -364, -152, 303, 670,
989 -457, 402, -274, -607, 260, -177, -393, -236,
990 -844, 3358, 6106, -1059, -537, -43, -688, -2275,
991 -68, -17, 173, 314, -1251, -54, 217, 395,
992 -27, 110, 200, -34, 1251, 1016, 3020, 2210,
993 1445, -95, -63, -556, -298, -127, -77, -230,
994 -187, -168, -137, -407, -110, -89, -266, -194,
995 2099, 2277, 4038, 3533, -2870, -269, -316, -995,
996 -762, -503, -291, -517, -561, -452, -491, -871,
997 367, 399, 707, 619, 400, -1114, 8516, 2422,
998 -1117, -9, -75, -4426, -358, -76, 27, -208,
999 579, -59, 164, -1259, 27, -75, 580, 165,
1000 -4398, -2011, 3912, -2407, 2258, -1180, -247, -934,
1001 -353, -311, -540, 1050, 480, -646, -295, 575,
1002 606, 277, -539, 331, 1767, -1447, 4240, 6160,
1003 -757, -190, -127, -1097, -2316, -35, 156, -457,
1004 374, -664, 544, -1594, 81, -66, 195, 284,
1005 1594, -1463, 1035, 6938, 1920, -155, -130, -65,
1006 -2938, -225, 142, -100, 92, -675, 619, -438,
1007 -186, 171, -121, -813, -562, 4716, 4085, -591,
1008 2421, -19, -1357, -1018, -21, -357, 162, 140,
1009 -1175, -20, 170, 147, 83, -696, -603, 87,
1010 1552, 8778, -935, 354, -1424, -147, -4703, -53,
1011 -7, -123, -831, 88, 501, -33, -189, 20,
1012 134, 763, -81, 30, 4831, -4431, 41, -1479,
1013 -2976, -1424, -1198, 0, -133, -540, 1306, -12,
1014 11, 436, -400, 3, 877, -804, 7, -268,
1015 2090, 1192, 1006, 1645, 4853, -266, -86, -61,
1016 -165, -1437, -152, -128, -73, -210, -119, -101,
1017 -619, -353, -298, -487, 2386, 5712, 1426, -94,
1018 1350, -347, -1991, -124, 0, -111, -832, -207,
1019 -497, 13, 32, 8, -196, -470, -117, 7,
1020 -1349, 1091, 1659, 8891, 313, -111, -72, -168,
1021 -4825, -5, 89, 136, -110, 732, -592, -900,
1022 25, -20, -31, -170, 9980, 916, -381, -808,
1023 88, -6080, -51, -8, -39, 0, -558, 232,
1024 21, 492, 45, -18, -53, -4, 2, 4,
1025 2338, -1031, -248, 3928, 6484, -333, -64, -3,
1026 -942, -2566, 147, 35, -15, -560, 247, 59,
1027 -925, 408, 98, -1555, 6166, -1240, -337, 3672,
1028 -1277, -2320, -93, -6, -823, -99, 466, 126,
1029 -25, -1382, 278, 75, 480, -96, -26, 286,
1030 4377, -132, -2588, 1701, 4865, -1169, -1, -409,
1031 -176, -1444, 35, 691, -20, -454, 13, 268,
1032 -1299, 39, 768, -505, 2594, 3295, 3944, 1481,
1033 682, -410, -662, -949, -133, -28, -521, -624,
1034 -793, -234, -297, -356, -108, -137, -164, -61,
1035 4151, 624, 815, 4485, 2229, -1052, -23, -40,
1036 -1228, -303, -158, -206, -31, -1136, -170, -223,
1037 -565, -84, -111, -610, -3575, -361, 4924, 2791,
1038 4698, -780, -7, -1480, -475, -1347, -78, 1074,
1039 108, 609, 61, -839, 1025, 103, -1412, -800,
1040 -2518, 3791, 8623, 315, 2465, -387, -877, -4538,
1041 -6, -370, 582, 1325, -1995, 48, -73, -166,
1042 378, -570, -1297, -47, -691, 2989, 9957, -421,
1043 -1142, -29, -545, -6051, -10, -79, 126, 420,
1044 -1817, -17, 76, 256, -48, 208, 694, -29,
1045 -1918, 104, -3190, -3410, -4440, -224, 0, -621,
1046 -709, -1203, 12, -373, 20, -399, 21, -664,
1047 -519, 28, -864, -924, -3359, -1668, 1854, 6939,
1048 1430, -688, -169, -209, -2939, -124, -341, 380,
1049 188, 1422, 706, -785, 293, 145, -161, -606,
1050 42, 9706, 3164, -952, 907, 0, -5750, -611,
1051 -55, -50, -25, -8, -1874, 2, 564, 183,
1052 -2, -537, -175, 52, 1607, 785, 2862, 4327,
1053 3307, -157, -37, -500, -1143, -667, -77, -280,
1054 -137, -424, -207, -756, -324, -158, -577, -873,
1055 6801, 3416, 2227, 1682, -3217, -2823, -712, -302,
1056 -172, -631, -1418, -924, -464, -698, -350, -228,
1057 1335, 670, 437, 330, 3459, 3898, 364, 7841,
1058 -2640, -730, -927, -8, -3753, -425, -823, -76,
1059 -86, -1655, -1865, -174, 557, 628, 58, 1263,
1060 -5902, -3458, -2465, -1886, 4334, -2126, -730, -371,
1061 -217, -1146, -1245, -888, -520, -679, -398, -283,
1062 1561, 915, 652, 499, -3710, 1133, 7849, 3443,
1063 -215, -840, -78, -3760, -723, -2, 256, 1777,
1064 -543, 779, -238, -1649, -48, 14, 103, 45,
1065 4132, 2828, 2, -4212, -4116, -1042, -488, 0,
1066 -1083, -1034, -713, 0, 0, 1062, 727, 0,
1067 1038, 710, 0, -1058, 5875, 8496, -1796, 1376,
1068 -1786, -2107, -4406, -197, -115, -194, -3047, 644,
1069 931, -493, -713, 150, 640, 926, -195, 150,
1070 3143, 3483, 3546, -793, 4489, -603, -740, -767,
1071 -38, -1230, -668, -680, -754, 152, 168, 171,
1072 -861, -954, -971, 217, 2845, 7965, 3695, -5432,
1073 3978, -494, -3873, -833, -1801, -966, -1383, -641,
1074 -1796, 943, 2641, 1225, -691, -1934, -897, 1319,
1075 1538, 150, 7139, 2049, 3097, -144, -1, -3110,
1076 -256, -585, -14, -670, -65, -192, -18, -892,
1077 -290, -28, -1349, -387, 618, 7520, 4729, -238,
1078 -3373, -23, -3452, -1365, -3, -694, -283, -178,
1079 -2170, 8, 109, 68, 127, 1548, 973, -49,
1080 2965, -3013, 7912, 7076, -1997, -536, -554, -3821,
1081 -3056, -243, 545, -1431, 1455, -1280, 1301, -3417,
1082 361, -367, 964, 862, 2443, -929, -1113, 9677,
1083 4138, -364, -52, -75, -5716, -1045, 138, 166,
1084 -63, -1443, 549, 657, -617, 234, 281, -2444,
1085 1966, 3309, 10085, -3399, 2105, -236, -668, -6207,
1086 -705, -270, -397, -1210, -2037, 408, 686, 2092,
1087 -252, -425, -1295, 436, -112, -1368, 8868, 4822,
1088 2048, 0, -114, -4800, -1419, -256, -9, 61,
1089 740, 33, 402, -2610, 14, 171, -1108, -602,
1090 -2597, 438, -1839, 6229, 7266, -411, -11, -206,
1091 -2368, -3223, 69, -291, 49, 987, -166, 699,
1092 1152, -194, 816, -2763, 3454, 553, 9127, 4946,
1093 -5596, -728, -18, -5084, -1493, -1911, -116, -1924,
1094 -308, -1042, -166, -2755, 1179, 188, 3117, 1689,
1095 -532, -663, 12262, 2495, -1004, -17, -26, -9177,
1096 -380, -61, -21, 398, 496, 81, 101, -1867,
1097 -32, -40, 751, 152, -2100, 1317, -1509, 11425,
1098 2997, -269, -105, -139, -7967, -548, 168, -193,
1099 121, 1464, -918, 1052, 384, -240, 276, -2090,
1100 1193, -2697, 11259, 5373, -763, -86, -444, -7737,
1101 -1762, -35, 196, -819, 1853, -391, 884, -3692,
1102 55, -125, 525, 250, 2405, -471, 11079, 203,
1103 782, -353, -13, -7491, -2, -37, 69, -1626,
1104 318, -29, 5, -137, -114, 22, -529, -9,
1105 -1871, 5685, 11290, -2662, 1353, -213, -1972, -7780,
1106 -432, -111, 649, 1289, -3917, -304, 923, 1834,
1107 154, -469, -932, 220, -3768, 5927, -3093, 5041,
1108 5212, -866, -2144, -584, -1551, -1658, 1363, -711,
1109 1119, 1159, -1824, 951, 1198, -1885, 984, -1603,
1110 -2546, 9502, 5969, -2440, 1928, -395, -5511, -2175,
1111 -363, -226, 1477, 927, -3462, -379, 1415, 889,
1112 299, -1118, -702, 287, -4963, 3568, 4592, 5508,
1113 3451, -1503, -777, -1287, -1851, -727, 1080, 1391,
1114 -1000, 1668, -1199, -1543, 1045, -751, -967, -1160,
1115 1745, -2586, 3983, 10899, -1551, -186, -408, -968,
1116 -7250, -146, 275, -424, 628, -1161, 1720, -2649,
1117 165, -244, 377, 1032, 867, -456, -727, 3369,
1118 11822, -45, -12, -32, -692, -8531, 24, 38,
1119 -20, -178, 93, 149, -625, 329, 525, -2431,
1120 7535, 2422, 1926, 1405, 1599, -3466, -358, -226,
1121 -120, -156, -1114, -886, -284, -646, -207, -165,
1122 -735, -236, -188, -137, 1041, -735, -142, 13209,
1123 1515, -66, -33, -1, -10649, -140, 46, 9,
1124 -6, -839, 593, 114, -96, 68, 13, -1222,
1125 7950, 6745, -1444, -1008, 2721, -3857, -2777, -127,
1126 -62, -452, -3273, 700, 594, 489, 415, -88,
1127 -1320, -1120, 239, 167, -4754, -1379, 4522, -578,
1128 -5733, -1379, -116, -1248, -20, -2006, -400, 1312,
1129 380, -167, -48, 159, -1663, -482, 1582, -202,
1130 3220, 5978, 5923, 2430, -2689, -633, -2181, -2141,
1131 -360, -441, -1175, -1164, -2161, -477, -886, -878,
1132 528, 981, 972, 398, 377, 1312, 13978, -1470,
1133 677, -8, -105, -11925, -132, -28, -30, -321,
1134 -1119, 33, 117, 1254, -15, -54, -577, 60,
1135 -3435, 6770, 314, -885, 5686, -720, -2797, -6,
1136 -47, -1973, 1419, 65, -129, -185, 366, 16,
1137 1192, -2349, -109, 307, 3171, 8774, -2260, 2679,
1138 3069, -613, -4699, -312, -438, -575, -1698, 437,
1139 1210, -518, -1435, 369, -594, -1643, 423, -501,
1140 5557, 1509, 5407, -125, -7386, -1884, -139, -1784,
1141 0, -3330, -511, -1834, -498, 42, 11, 41,
1142 2505, 680, 2438, -56, -2838, 2595, 13228, 271,
1143 1793, -491, -411, -10680, -4, -196, 449, 2291,
1144 -2095, 47, -42, -219, 310, -284, -1447, -29,
1145 664, -278, 14966, 951, -711, -26, -4, -13672,
1146 -55, -30, 11, -606, 253, -38, 16, -869,
1147 28, -12, 650, 41, 808, 1770, 8658, 5863,
1148 -1486, -39, -191, -4576, -2098, -134, -87, -427,
1149 -935, -289, -633, -3098, 73, 160, 785, 531,
1150 3063, 1539, 2000, -542, 9576, -572, -144, -244,
1151 -17, -5597, -287, -374, -188, 101, 51, 66,
1152 -1790, -900, -1169, 317, 514, 14083, -323, 896,
1153 -891, -16, -12106, -6, -49, -48, -442, 10,
1154 277, -28, -770, 17, 27, 766, -17, 48,
1155 892, 158, 5237, 11057, -1603, -48, -1, -1674,
1156 -7462, -156, -8, -285, -50, -602, -106, -3534,
1157 87, 15, 512, 1082, -1612, 2564, -4296, 12526,
1158 5710, -158, -401, -1126, -9576, -1990, 252, -422,
1159 672, 1232, -1960, 3284, 561, -893, 1497, -4365,
1160 4889, -6878, 612, 6109, 4753, -1459, -2887, -22,
1161 -2277, -1379, 2052, -182, 257, -1823, 2564, -228,
1162 -1418, 1995, -177, -1772, 3053, -506, 2403, 9625,
1163 1322, -569, -15, -352, -5655, -106, 94, -448,
1164 74, -1794, 297, -1412, -246, 40, -194, -777,
1165 -754, 12904, 4480, -2113, 1471, -34, -10163, -1225,
1166 -272, -132, 594, 206, -3529, -97, 1664, 577,
1167 67, -1159, -402, 189, 4255, 1476, 5055, 2393,
1168 2912, -1105, -132, -1559, -349, -517, -383, -1313,
1169 -455, -621, -215, -738, -756, -262, -898, -425,
1170 -1371, 535, 1417, 14604, -997, -114, -17, -122,
1171 -13017, -60, 44, 118, -46, 1222, -477, -1263,
1172 -83, 32, 86, 888, 5368, -1744, 4083, -1236,
1173 3753, -1758, -185, -1017, -93, -860, 571, -1338,
1174 434, 405, -131, 308, -1229, 399, -935, 283,
1175 1588, -3097, 14415, 3699, -1171, -154, -585, -12683,
1176 -835, -83, 300, -1397, 2725, -358, 699, -3255,
1177 113, -221, 1030, 264, 212, 7989, 9471, -3344,
1178 2009, -2, -3895, -5475, -682, -246, -103, -123,
1179 -4618, 43, 1630, 1933, -26, -979, -1161, 410,
1180 856, 2294, -627, 6930, 6929, -44, -321, -24,
1181 -2931, -2930, -119, 32, 87, -362, -970, 265,
1182 -362, -970, 265, -2931, 2357, -4187, 7162, 7683,
1183 3371, -339, -1070, -3131, -3603, -693, 602, -1030,
1184 1830, -1105, 1963, -3359, -485, 861, -1474, -1581,
1185 350, 4585, 14053, -3819, 1218, -7, -1283, -12054,
1186 -890, -90, -97, -300, -3933, 81, 1068, 3275,
1187 -26, -341, -1045, 284, -3248, 3531, 475, 2137,
1188 11711, -644, -761, -13, -278, -8372, 700, 94,
1189 -102, 423, -460, -62, 2322, -2524, -340, -1528,
1190 -3017, 3852, 1725, 8440, 5257, -555, -905, -181,
1191 -4348, -1686, 709, 317, -405, 1554, -1984, -889,
1192 968, -1236, -553, -2708, -909, 3196, 15512, -2528,
1193 1066, -50, -623, -14686, -390, -69, 177, 861,
1194 -3026, -140, 493, 2393, 59, -208, -1009, 164,
1195 959, -3370, 9617, 9545, -1761, -56, -693, -5645,
1196 -5561, -189, 197, -563, 1978, -558, 1963, -5603,
1197 103, -362, 1034, 1026, 7575, 11796, -4845, 3252,
1198 -1703, -3502, -8493, -1433, -645, -177, -5454, 2240,
1199 3488, -1503, -2341, 961, 787, 1226, -503, 338,
1200 6409, 1722, 1764, -4191, 6015, -2507, -181, -189,
1201 -1072, -2208, -673, -690, -185, 1639, 440, 451,
1202 -2353, -632, -647, 1538, -2420, 12161, 5038, 1286,
1203 -2098, -357, -9027, -1549, -100, -268, 1796, 744,
1204 -3740, 190, -954, -395, -310, 1557, 645, 164,
1205 -2232, -1341, 7246, 9470, -1977, -304, -109, -3204,
1206 -5474, -238, -182, 987, 593, 1290, 775, -4188,
1207 -269, -161, 874, 1143, 1030, 7034, 4231, 1551,
1208 3077, -64, -3019, -1093, -146, -577, -442, -266,
1209 -1816, -97, -666, -400, -193, -1321, -794, -291,
1210 5121, 11835, -477, -1749, 2298, -1601, -8549, -13,
1211 -186, -322, -3699, 149, 344, 546, 1264, -50,
1212 -718, -1660, 66, 245, -3328, 3827, 5921, 9976,
1213 -1045, -676, -894, -2140, -6075, -66, 777, 1203,
1214 -1383, 2027, -2330, -3605, -212, 244, 377, 636,
1215 3813, 5718, -4666, -3412, 5674, -887, -1995, -1329,
1216 -710, -1965, -1331, 1086, 1628, 794, 1191, -972,
1217 -1320, -1980, 1616, 1181, 1348, -3672, 13154, 6938,
1218 -1690, -110, -823, -10561, -2938, -174, 302, -1082,
1219 2948, -570, 1555, -5570, 139, -379, 1357, 716,
1220 2151, -3586, 6949, 12131, -1224, -282, -785, -2947,
1221 -8982, -91, 470, -912, 1521, -1592, 2655, -5145,
1222 160, -268, 519, 906, -2889, 9647, 10276, -2728,
1223 995, -509, -5680, -6445, -454, -60, 1701, 1812,
1224 -6051, -481, 1606, 1711, 175, -586, -624, 165,
1225 6177, 2184, 555, 1985, 6589, -2329, -291, -18,
1226 -240, -2650, -823, -209, -74, -748, -264, -67,
1227 -2484, -878, -223, -798, -492, 391, 17166, -681,
1228 240, -14, -9, -17987, -28, -3, 11, 515,
1229 -410, -20, 16, 713, 7, -5, -252, 10,
1230 12628, 5448, -2630, 3011, -2695, -9733, -1811, -422,
1231 -553, -443, -4199, 2027, 874, -2321, -1001, 483,
1232 2077, 896, -432, 495, -3628, -534, 3447, 7002,
1233 6751, -803, -17, -725, -2992, -2782, -118, 763,
1234 112, 1550, 228, -1473, 1495, 220, -1420, -2885,
1235 -5239, 5901, 8107, 3650, 4846, -1675, -2125, -4012,
1236 -813, -1433, 1887, 2592, -2920, 1167, -1315, -1806,
1237 1550, -1745, -2398, -1080, 6157, 6678, 4099, -1074,
1238 2348, -2314, -2722, -1025, -70, -336, -2509, -1540,
1239 -1670, 403, 437, 268, -882, -957, -587, 153,
1240 1079, 16099, 242, -881, 1690, -71, -15820, -3,
1241 -47, -174, -1060, -16, -238, 58, 865, 13,
1242 -111, -1661, -25, 90, -278, 227, -1039, 1636,
1243 16945, -4, -3, -65, -163, -17526, 3, -17,
1244 14, 27, -22, 103, 287, -234, 1074, -1693,
1245 15778, -1454, 574, -603, -107, -15195, -129, -20,
1246 -22, 0, 1400, -553, 51, 581, -53, 21,
1247 103, -9, 3, -3, 2406, -836, 13224, 7993,
1248 -4266, -353, -42, -10673, -3899, -1111, 122, -1942,
1249 674, -1174, 407, -6451, 626, -217, 3443, 2081,
1250 3184, 14368, -3336, 2255, -1801, -619, -12600, -679,
1251 -310, -198, -2793, 648, 2926, -438, -1977, 459,
1252 350, 1580, -366, 247, -1698, 17076, 2504, -539,
1253 -646, -176, -17798, -382, -17, -25, 1770, 259,
1254 -2610, -55, 561, 82, -67, 673, 98, -21,
1255 2375, -797, -2696, 14483, 5383, -344, -38, -443,
1256 -12803, -1769, 115, 391, -131, -2100, 705, 2384,
1257 -780, 262, 886, -4759, -2691, 2554, -4520, 9573,
1258 10655, -442, -398, -1247, -5594, -6930, 419, -742,
1259 704, 1572, -1492, 2641, 1750, -1661, 2939, -6226,
1260 -4332, -4399, -1657, 4880, 7375, -1145, -1181, -167,
1261 -1453, -3319, -1163, -438, -444, 1290, 1310, 493,
1262 1950, 1980, 745, -2196, -3498, 7405, 9955, 2693,
1263 -2971, -746, -3347, -6049, -442, -538, 1581, 2125,
1264 -4499, 575, -1217, -1636, -634, 1342, 1805, 488,
1265 6717, -3792, 7739, 2798, 3489, -2754, -877, -3655,
1266 -477, -743, 1554, -3173, 1791, -1147, 647, -1321,
1267 -1430, 807, -1648, -595, 5263, 9770, 3463, 1069,
1268 -3971, -1690, -5826, -732, -69, -962, -3138, -1112,
1269 -2065, -343, -637, -226, 1275, 2368, 839, 259,
1270 1243, -2634, 16772, 1871, 332, -94, -423, -17169,
1271 -213, -6, 199, -1273, 2696, -142, 300, -1915,
1272 -25, 53, -339, -37, 2691, 2836, 3105, 5711,
1273 4817, -442, -491, -588, -1991, -1416, -465, -510,
1274 -537, -938, -988, -1082, -791, -834, -913, -1679,
1275 4366, 2944, 7210, 3627, 1161, -1163, -529, -3172,
1276 -803, -82, -784, -1921, -1295, -966, -651, -1596,
1277 -309, -208, -511, -257, 13888, 3951, -671, -2305,
1278 3354, -11773, -953, -27, -324, -686, -3349, 569,
1279 161, 1954, 556, -94, -2843, -809, 137, 472,
1280 7053, 5847, 2929, 8378, -4794, -3036, -2086, -523,
1281 -4284, -1403, -2517, -1261, -1045, -3607, -2990, -1498,
1282 2064, 1711, 857, 2451, -2191, 12838, 9182, -3915,
1283 1617, -293, -10059, -5146, -935, -159, 1717, 1228,
1284 -7195, -523, 3068, 2194, 216, -1267, -906, 386,
1285 -4881, 13114, 5767, -435, 4155, -1454, -10498, -2030,
1286 -11, -1054, 3907, 1718, -4616, -129, 348, 153,
1287 1238, -3326, -1462, 110, 7843, -1250, 210, 7106,
1288 -5203, -3754, -95, -2, -3082, -1652, 598, -100,
1289 16, -3402, 542, -91, 2491, -397, 66, 2257,
1290 -2463, 8168, 14551, -3908, 1828, -370, -4072, -12923,
1291 -932, -204, 1228, 2188, -7254, -587, 1948, 3471,
1292 274, -911, -1623, 436, -1579, 347, -272, -2735,
1293 16031, -152, -7, -4, -456, -15686, 33, -26,
1294 5, -263, 58, -45, 1545, -340, 266, 2676,
1295 -6327, 1328, 5093, -5079, 7617, -2443, -107, -1583,
1296 -1574, -3541, 513, 1967, -413, -1961, 411, 1578,
1297 2941, -617, -2367, 2361, 3286, -4509, 11306, 11025,
1298 -2623, -659, -1241, -7802, -7419, -420, 904, -2267,
1299 3112, -2211, 3034, -7608, 526, -722, 1810, 1765,
1300 5567, 17853, -3754, 1166, -519, -1892, -19455, -860,
1301 -83, -16, -6067, 1275, 4090, -396, -1271, 267,
1302 176, 566, -119, 37, -2136, -424, 15292, 5108,
1303 -1648, -278, -10, -14273, -1593, -165, -55, 1993,
1304 396, 666, 132, -4768, -214, -42, 1538, 514,
1305 2267, -3297, 2549, 16563, -791, -313, -663, -396,
1306 -16745, -38, 456, -352, 513, -2291, 3333, -2576,
1307 109, -159, 123, 799, 3655, 1899, -3364, 6279,
1308 12510, -815, -220, -690, -2406, -9552, -423, 750,
1309 390, -1400, -728, 1289, -2791, -1450, 2568, -4794,
1310 8052, 2285, -6193, 5138, 6003, -3957, -318, -2341,
1311 -1611, -2199, -1123, 3044, 864, -2525, -716, 1942,
1312 -2950, -837, 2269, -1882, -386, -2291, 7679, 15387,
1313 -2723, -9, -320, -3599, -14452, -452, -54, 181,
1314 1074, 362, 2152, -7212, -64, -380, 1276, 2557,
1315 2777, -1173, 3984, 13079, 2508, -470, -84, -969,
1316 -10440, -384, 198, -675, 285, -2217, 936, -3180,
1317 -425, 179, -610, -2002, -1879, 1771, -2684, 16705,
1318 1833, -215, -191, -439, -17032, -205, 203, -308,
1319 290, 1916, -1805, 2736, 210, -198, 300, -1869,
1320 1052, 4495, 15519, 1467, -4032, -67, -1233, -14700,
1321 -131, -992, -288, -997, -4257, -94, -402, -1389,
1322 259, 1106, 3819, 361, 3010, 2544, 6969, 7559,
1323 1996, -553, -395, -2964, -3487, -243, -467, -1280,
1324 -1082, -1388, -1174, -3215, -366, -310, -849, -921,
1325 -5209, -1867, 8713, 10351, 1549, -1656, -212, -4634,
1326 -6540, -146, -593, 2770, 993, 3291, 1180, -5505,
1327 492, 176, -824, -979, -4314, 8513, 913, 7547,
1328 -2723, -1135, -4423, -50, -3476, -452, 2241, 240,
1329 -474, 1987, -3921, -420, -717, 1415, 151, 1254,
1330 12929, -1219, 2448, 1757, 6303, -10204, -90, -365,
1331 -188, -2425, 962, -1932, 182, -1386, 130, -262,
1332 -4974, 469, -941, -676, 6465, 4132, 3167, 3160,
1333 5697, -2551, -1042, -612, -609, -1981, -1630, -1249,
1334 -798, -1247, -797, -611, -2248, -1437, -1101, -1099,
1335 -3636, 4859, 18914, -1335, 810, -807, -1441, -21836,
1336 -108, -40, 1078, 4198, -5609, -296, 396, 1541,
1337 179, -240, -936, 66, 8844, 7864, 654, -4063,
1338 -5680, -4774, -3774, -26, -1007, -1969, -4245, -353,
1339 -314, 2193, 1950, 162, 3066, 2726, 226, -1408,
1340 1859, 2634, 9228, 996, 9464, -211, -423, -5197,
1341 -60, -5467, -299, -1047, -1483, -113, -160, -561,
1342 -1074, -1521, -5330, -575, 2949, 12260, 10290, -497,
1343 -3943, -530, -9174, -6463, -15, -949, -2206, -1852,
1344 -7700, 89, 372, 312, 709, 2950, 2476, -119,
1345 -2903, 1552, 14867, 9970, -496, -514, -147, -13491,
1346 -6068, -15, 275, 2634, -1408, 1766, -944, -9047,
1347 -87, 47, 450, 302, 3243, 8234, 7586, 3373,
1348 2151, -642, -4138, -3512, -694, -282, -1630, -1501,
1349 -3812, -667, -1695, -1561, -425, -1081, -996, -442,
1350 -9631, 60, 3501, 5359, 10150, -5662, 0, -748,
1351 -1752, -6288, 35, 2058, -12, 3150, -19, -1145,
1352 5967, -37, -2169, -3320, -6874, -2553, -5446, -2195,
1353 -7841, -2884, -397, -1810, -294, -3753, -1071, -2285,
1354 -848, -921, -342, -729, -3290, -1221, -2606, -1050,
1355 -3413, -1141, 4630, 13612, 7897, -711, -79, -1308,
1356 -11310, -3806, -237, 964, 322, 2836, 948, -3847,
1357 1645, 550, -2231, -6561, 4410, -5678, 8006, -3992,
1358 3811, -1187, -1968, -3912, -973, -886, 1528, -2155,
1359 2775, 1074, -1383, 1951, -1025, 1321, -1862, 928,
1360 5659, 11535, 2203, -452, 7169, -1954, -8121, -296,
1361 -12, -3137, -3984, -761, -1551, 156, 318, 60,
1362 -2476, -5048, -964, 197, 2914, -2914, 3485, -3965,
1363 13675, -518, -518, -741, -959, -11414, 518, -620,
1364 620, 705, -705, 843, -2433, 2432, -2909, 3310,
1365 7843, 1907, 1022, 8882, 7972, -3755, -222, -63,
1366 -4815, -3879, -913, -489, -119, -4252, -1034, -554,
1367 -3816, -928, -497, -4322, 13807, 9531, 1436, 1612,
1368 1779, -11636, -5544, -125, -158, -193, -8032, -1210,
1369 -835, -1358, -938, -141, -1499, -1035, -156, -175,
1370 13620, -5337, 5450, -2263, 1723, -11322, -1738, -1813,
1371 -312, -181, 4436, -4531, 1775, 1881, -737, 752,
1372 -1432, 561, -573, 238, 5297, 8374, 8872, 7694,
1373 6538, -1712, -4280, -4804, -3613, -2609, -2707, -2868,
1374 -4534, -2487, -3932, -4166, -2113, -3341, -3540, -3070
1380 static const int16_t postfilter_tbl[2][LPC_ORDER] = {
1382 {21299, 13844, 8999, 5849, 3802, 2471, 1606, 1044, 679, 441},
1384 {24576, 18432, 13824, 10368, 7776, 5832, 4374, 3281, 2460, 1845}
1390 static const int16_t hamming_window[LPC_FRAME] = {
1391 2621, 2631, 2659, 2705, 2770, 2853, 2955, 3074, 3212, 3367,
1392 3541, 3731, 3939, 4164, 4405, 4663, 4937, 5226, 5531, 5851,
1393 6186, 6534, 6897, 7273, 7661, 8062, 8475, 8899, 9334, 9780,
1394 10235, 10699, 11172, 11653, 12141, 12636, 13138, 13645, 14157, 14673,
1395 15193, 15716, 16242, 16769, 17298, 17827, 18356, 18884, 19411, 19935,
1396 20457, 20975, 21489, 21999, 22503, 23002, 23494, 23978, 24455, 24924,
1397 25384, 25834, 26274, 26704, 27122, 27529, 27924, 28306, 28675, 29031,
1398 29373, 29700, 30012, 30310, 30592, 30857, 31107, 31340, 31557, 31756,
1399 31938, 32102, 32249, 32377, 32488, 32580, 32654, 32710, 32747, 32766,
1400 32766, 32747, 32710, 32654, 32580, 32488, 32377, 32249, 32102, 31938,
1401 31756, 31557, 31340, 31107, 30857, 30592, 30310, 30012, 29700, 29373,
1402 29031, 28675, 28306, 27924, 27529, 27122, 26704, 26274, 25834, 25384,
1403 24924, 24455, 23978, 23494, 23002, 22503, 21999, 21489, 20975, 20457,
1404 19935, 19411, 18884, 18356, 17827, 17298, 16769, 16242, 15716, 15193,
1405 14673, 14157, 13645, 13138, 12636, 12141, 11653, 11172, 10699, 10235,
1406 9780, 9334, 8899, 8475, 8062, 7661, 7273, 6897, 6534, 6186,
1407 5851, 5531, 5226, 4937, 4663, 4405, 4164, 3939, 3731, 3541,
1408 3367, 3212, 3074, 2955, 2853, 2770, 2705, 2659, 2631, 2621
1414 static const int16_t binomial_window[LPC_ORDER] = {
1415 32749, 32695, 32604, 32477, 32315, 32118, 31887, 31622, 31324, 30995
1421 static const int16_t bandwidth_expand[LPC_ORDER] = {
1422 32571, 32376, 32182, 31989, 31797, 31606, 31416, 31228, 31040, 30854
1428 static const int16_t percept_flt_tbl[2][LPC_ORDER] = {
1430 {29491, 26542, 23888, 21499, 19349, 17414, 15673, 14106, 12695, 11425},
1432 {16384, 8192, 4096, 2048, 1024, 512, 256, 128, 64, 32}
1435 static const int cng_adaptive_cb_lag[4] = { 1, 0, 1, 3 };
1437 static const int cng_filt[4] = { 273, 998, 499, 333 };
1439 static const int cng_bseg[3] = { 2048, 18432, 231233 };
int16_t hpf_fir_mem
highpass filter fir
Definition: g723_1.h:155
G723.1 unpacked data subframe.
Definition: g723_1.h:80
int ff_g723_1_normalize_bits(int num, int width)
Calculate the number of left-shifts required for normalizing the input.
Definition: g723_1.c:49
void ff_g723_1_lsp_interpolate(int16_t *lpc, int16_t *cur_lsp, int16_t *prev_lsp)
Quantize LSP frequencies by interpolation and convert them to the corresponding LPC coefficients...
Definition: g723_1.c:180
Optimized fixed codebook excitation parameters.
Definition: g723_1.h:110
struct FCBParam FCBParam
Optimized fixed codebook excitation parameters.
Rate
G723.1 rate values.
Definition: g723_1.h:72
FrameType
G723.1 frame types.
Definition: g723_1.h:63
struct HFParam HFParam
Harmonic filter parameters.
void ff_g723_1_gen_dirac_train(int16_t *buf, int pitch_lag)
Generate a train of dirac functions with period as pitch lag.
Definition: g723_1.c:74
void ff_g723_1_get_residual(int16_t *residual, int16_t *prev_excitation, int lag)
Get delayed contribution from the previous excitation vector.
Definition: g723_1.c:60
int hpf_iir_mem
and iir memories
Definition: g723_1.h:156
struct PPFParam PPFParam
Pitch postfilter parameters.
int index
postfilter backward/forward lag
Definition: g723_1.h:94
int pf_gain
formant postfilter gain scaling unit memory
Definition: g723_1.h:145
int16_t opt_gain
optimal gain
Definition: g723_1.h:95
Silence Insertion Descriptor frame.
Definition: g723_1.h:65
Describe the class of an AVClass context structure.
Definition: log.h:67
int16_t sc_gain
scaling gain
Definition: g723_1.h:96
Active speech.
Definition: g723_1.h:64
void ff_g723_1_inverse_quant(int16_t *cur_lsp, int16_t *prev_lsp, uint8_t *lsp_index, int bad_frame)
Perform inverse quantization of LSP frequencies.
Definition: g723_1.c:201
Pitch postfilter parameters.
Definition: g723_1.h:93
Harmonic filter parameters.
Definition: g723_1.h:102
struct G723_1_Subframe G723_1_Subframe
G723.1 unpacked data subframe.
int ff_g723_1_scale_vector(int16_t *dst, const int16_t *vector, int length)
Scale vector contents based on the largest of their absolutes.
Definition: g723_1.c:32
void ff_g723_1_gen_acb_excitation(int16_t *vector, int16_t *prev_excitation, int pitch_lag, G723_1_Subframe *subfrm, enum Rate cur_rate)
Generate adaptive codebook excitation.
Definition: g723_1.c:86
int ad_cb_lag
adaptive codebook lag
Definition: g723_1.h:81