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