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