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