aarch64: Add assembly support for -fsanitize=hwaddress tagged globals.
[libav.git] / libavcodec / g723_1.h
blob166d8979969bbbaa66443ec4ec1de9cb0433326f
1 /*
2 * G.723.1 common header and data tables
3 * Copyright (c) 2006 Benjamin Larsson
4 * Copyright (c) 2010 Mohamed Naufal Basheer
6 * This file is part of Libav.
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.
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.
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
23 /**
24 * @file
25 * G.723.1 types, functions and data tables
28 #ifndef AVCODEC_G723_1_H
29 #define AVCODEC_G723_1_H
31 #include <stdint.h>
33 #include "libavutil/log.h"
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
51 /**
52 * Bitexact implementation of 2ab scaled by 1/2^16.
54 * @param a 32 bit multiplicand
55 * @param b 16 bit multiplier
57 #define MULL2(a, b) \
58 ((((a) >> 16) * (b) << 1) + (((a) & 0xffff) * (b) >> 15))
60 /**
61 * G723.1 frame types
63 enum FrameType {
64 ACTIVE_FRAME, ///< Active speech
65 SID_FRAME, ///< Silence Insertion Descriptor frame
66 UNTRANSMITTED_FRAME
69 /**
70 * G723.1 rate values
72 enum Rate {
73 RATE_6300,
74 RATE_5300
77 /**
78 * G723.1 unpacked data subframe
80 typedef struct G723_1_Subframe {
81 int ad_cb_lag; ///< adaptive codebook lag
82 int ad_cb_gain;
83 int dirac_train;
84 int pulse_sign;
85 int grid_index;
86 int amp_index;
87 int pulse_pos;
88 } G723_1_Subframe;
90 /**
91 * Pitch postfilter parameters
93 typedef struct PPFParam {
94 int index; ///< postfilter backward/forward lag
95 int16_t opt_gain; ///< optimal gain
96 int16_t sc_gain; ///< scaling gain
97 } PPFParam;
99 /**
100 * Harmonic filter parameters
102 typedef struct HFParam {
103 int index;
104 int gain;
105 } HFParam;
108 * Optimized fixed codebook excitation parameters
110 typedef struct FCBParam {
111 int min_err;
112 int amp_index;
113 int grid_index;
114 int dirac_train;
115 int pulse_pos[PULSE_MAX];
116 int pulse_sign[PULSE_MAX];
117 } FCBParam;
119 typedef struct g723_1_context {
120 AVClass *class;
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];
128 int erased_frames;
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];
138 int random_seed;
139 int cng_random_seed;
140 int interp_index;
141 int interp_gain;
142 int sid_gain;
143 int cur_gain;
144 int reflection_coef;
145 int pf_gain;
146 int postfilter;
148 int16_t audio[FRAME_LEN + LPC_ORDER + PITCH_MAX + 4];
150 /* encoder */
151 int16_t prev_data[HALF_FRAME_LEN];
152 int16_t prev_weight_sig[PITCH_MAX];
154 int16_t hpf_fir_mem; ///< highpass filter fir
155 int hpf_iir_mem; ///< and iir memories
156 int16_t perf_fir_mem[LPC_ORDER]; ///< perceptual filter fir
157 int16_t perf_iir_mem[LPC_ORDER]; ///< and iir memories
159 int16_t harmonic_mem[PITCH_MAX];
160 } G723_1_Context;
164 * Scale vector contents based on the largest of their absolutes.
166 int ff_g723_1_scale_vector(int16_t *dst, const int16_t *vector, int length);
169 * Calculate the number of left-shifts required for normalizing the input.
171 * @param num input number
172 * @param width width of the input, 16 bits(0) / 32 bits(1)
174 int ff_g723_1_normalize_bits(int num, int width);
176 int ff_g723_1_dot_product(const int16_t *a, const int16_t *b, int length);
179 * Get delayed contribution from the previous excitation vector.
181 void ff_g723_1_get_residual(int16_t *residual, int16_t *prev_excitation,
182 int lag);
185 * Generate a train of dirac functions with period as pitch lag.
187 void ff_g723_1_gen_dirac_train(int16_t *buf, int pitch_lag);
191 * Generate adaptive codebook excitation.
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);
197 * Quantize LSP frequencies by interpolation and convert them to
198 * the corresponding LPC coefficients.
200 * @param lpc buffer for LPC coefficients
201 * @param cur_lsp the current LSP vector
202 * @param prev_lsp the previous LSP vector
204 void ff_g723_1_lsp_interpolate(int16_t *lpc, int16_t *cur_lsp,
205 int16_t *prev_lsp);
208 * Perform inverse quantization of LSP frequencies.
210 * @param cur_lsp the current LSP vector
211 * @param prev_lsp the previous LSP vector
212 * @param lsp_index VQ indices
213 * @param bad_frame bad frame flag
215 void ff_g723_1_inverse_quant(int16_t *cur_lsp, int16_t *prev_lsp,
216 uint8_t *lsp_index, int bad_frame);
219 static const uint8_t frame_size[4] = { 24, 20, 4, 1 };
221 /* Postfilter gain weighting factors scaled by 2^15 */
222 static const int16_t ppf_gain_weight[2] = { 0x1800, 0x2000 };
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
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
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}
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}
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},
610 * Used for the coding/decoding of the pulses positions
611 * for the MP-MLQ codebook
613 static const int32_t combinatorial_table[PULSE_MAX][SUBFRAME_LEN/GRID_SIZE] = {
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},
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},
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},
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},
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},
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},
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
703 /* Number of non-zero pulses in the MP-MLQ excitation */
704 static const int8_t pulses[4] = {6, 5, 6, 5};
706 /* Size of the MP-MLQ fixed excitation codebooks */
707 static const int32_t max_pos[4] = {593775, 142506, 593775, 142506};
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,
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
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
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 }
1369 * Hamming window coefficients scaled by 2^15
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
1393 * Binomial window coefficients scaled by 2^15
1395 static const int16_t binomial_window[LPC_ORDER] = {
1396 32749, 32695, 32604, 32477, 32315, 32118, 31887, 31622, 31324, 30995
1400 * 0.994^i scaled by 2^15
1402 static const int16_t bandwidth_expand[LPC_ORDER] = {
1403 32571, 32376, 32182, 31989, 31797, 31606, 31416, 31228, 31040, 30854
1407 * 0.5^i scaled by 2^15
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}
1416 static const int cng_adaptive_cb_lag[4] = { 1, 0, 1, 3 };
1418 static const int cng_filt[4] = { 273, 998, 499, 333 };
1420 static const int cng_bseg[3] = { 2048, 18432, 231233 };
1422 #endif /* AVCODEC_G723_1_H */