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