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