xref: /third_party/ffmpeg/libavcodec/opustab.c (revision cabdff1a)
1/*
2 * Copyright (c) 2012 Andrew D'Addesio
3 * Copyright (c) 2013-2014 Mozilla Corporation
4 * Copyright (c) 2016 Rostislav Pehlivanov <atomnuker@gmail.com>
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#include "libavutil/mem_internal.h"
24
25#include "opustab.h"
26
27const uint8_t ff_opus_default_coupled_streams[] = { 0, 1, 1, 2, 2, 2, 2, 3 };
28
29const uint8_t ff_celt_band_end[] = { 13, 17, 17, 19, 21 };
30
31const uint16_t ff_silk_model_lbrr_flags_40[] = { 256, 0, 53, 106, 256 };
32const uint16_t ff_silk_model_lbrr_flags_60[] = { 256, 0, 41, 61, 90, 131, 146, 174, 256 };
33
34const uint16_t ff_silk_model_stereo_s1[] = {
35    256,   7,   9,  10,  11,  12,  22,  46,  54,  55,  56,  59,  82, 174, 197, 200,
36    201, 202, 210, 234, 244, 245, 246, 247, 249, 256
37};
38
39const uint16_t ff_silk_model_stereo_s2[] = {256, 85, 171, 256};
40
41const uint16_t ff_silk_model_stereo_s3[] = {256, 51, 102, 154, 205, 256};
42
43const uint16_t ff_silk_model_mid_only[] = {256, 192, 256};
44
45const uint16_t ff_silk_model_frame_type_inactive[] = {256, 26, 256};
46
47const uint16_t ff_silk_model_frame_type_active[] = {256, 24, 98, 246, 256};
48
49const uint16_t ff_silk_model_gain_highbits[3][9] = {
50    {256,  32, 144, 212, 241, 253, 254, 255, 256},
51    {256,   2,  19,  64, 124, 186, 233, 252, 256},
52    {256,   1,   4,  30, 101, 195, 245, 254, 256}
53};
54
55const uint16_t ff_silk_model_gain_lowbits[] = {256, 32, 64, 96, 128, 160, 192, 224, 256};
56
57const uint16_t ff_silk_model_gain_delta[] = {
58    256,   6,  11,  22,  53, 185, 206, 214, 218, 221, 223, 225, 227, 228, 229, 230,
59    231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246,
60    247, 248, 249, 250, 251, 252, 253, 254, 255, 256
61};
62const uint16_t ff_silk_model_lsf_s1[2][2][33] = {
63    {
64        {    // NB or MB, unvoiced
65            256,  44,  78, 108, 127, 148, 160, 171, 174, 177, 179, 195, 197, 199, 200, 205,
66            207, 208, 211, 214, 215, 216, 218, 220, 222, 225, 226, 235, 244, 246, 253, 255, 256
67        }, { // NB or MB, voiced
68            256,   1,  11,  12,  20,  23,  31,  39,  53,  66,  80,  81,  95, 107, 120, 131,
69            142, 154, 165, 175, 185, 196, 204, 213, 221, 228, 236, 237, 238, 244, 245, 251, 256
70        }
71    }, {
72        {    // WB, unvoiced
73            256,  31,  52,  55,  72,  73,  81,  98, 102, 103, 121, 137, 141, 143, 146, 147,
74            157, 158, 161, 177, 188, 204, 206, 208, 211, 213, 224, 225, 229, 238, 246, 253, 256
75        }, { // WB, voiced
76            256,   1,   5,  21,  26,  44,  55,  60,  74,  89,  90,  93, 105, 118, 132, 146,
77            152, 166, 178, 180, 186, 187, 199, 211, 222, 232, 235, 245, 250, 251, 252, 253, 256
78        }
79    }
80};
81
82const uint16_t ff_silk_model_lsf_s2[32][10] = {
83    // NB, MB
84    { 256,   1,   2,   3,  18, 242, 253, 254, 255, 256 },
85    { 256,   1,   2,   4,  38, 221, 253, 254, 255, 256 },
86    { 256,   1,   2,   6,  48, 197, 252, 254, 255, 256 },
87    { 256,   1,   2,  10,  62, 185, 246, 254, 255, 256 },
88    { 256,   1,   4,  20,  73, 174, 248, 254, 255, 256 },
89    { 256,   1,   4,  21,  76, 166, 239, 254, 255, 256 },
90    { 256,   1,   8,  32,  85, 159, 226, 252, 255, 256 },
91    { 256,   1,   2,  20,  83, 161, 219, 249, 255, 256 },
92
93    // WB
94    { 256,   1,   2,   3,  12, 244, 253, 254, 255, 256 },
95    { 256,   1,   2,   4,  32, 218, 253, 254, 255, 256 },
96    { 256,   1,   2,   5,  47, 199, 252, 254, 255, 256 },
97    { 256,   1,   2,  12,  61, 187, 252, 254, 255, 256 },
98    { 256,   1,   5,  24,  72, 172, 249, 254, 255, 256 },
99    { 256,   1,   2,  16,  70, 170, 242, 254, 255, 256 },
100    { 256,   1,   2,  17,  78, 165, 226, 251, 255, 256 },
101    { 256,   1,   8,  29,  79, 156, 237, 254, 255, 256 }
102};
103
104const uint16_t ff_silk_model_lsf_s2_ext[] = { 256, 156, 216, 240, 249, 253, 255, 256 };
105
106const uint16_t ff_silk_model_lsf_interpolation_offset[] = { 256, 13, 35, 64, 75, 256 };
107
108const uint16_t ff_silk_model_pitch_highbits[] = {
109    256,   3,   6,  12,  23,  44,  74, 106, 125, 136, 146, 158, 171, 184, 196, 207,
110    216, 224, 231, 237, 241, 243, 245, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256
111};
112
113const uint16_t ff_silk_model_pitch_lowbits_nb[] = { 256, 64, 128, 192, 256 };
114
115const uint16_t ff_silk_model_pitch_lowbits_mb[] = { 256, 43, 85, 128, 171, 213, 256 };
116
117const uint16_t ff_silk_model_pitch_lowbits_wb[] = { 256, 32, 64, 96, 128, 160, 192, 224, 256 };
118
119const uint16_t ff_silk_model_pitch_delta[] = {
120    256,  46,  48,  50,  53,  57,  63,  73,  88, 114, 152, 182, 204, 219, 229, 236,
121    242, 246, 250, 252, 254, 256
122};
123
124const uint16_t ff_silk_model_pitch_contour_nb10ms[] = { 256, 143, 193, 256 };
125
126const uint16_t ff_silk_model_pitch_contour_nb20ms[] = {
127    256,  68,  80, 101, 118, 137, 159, 189, 213, 230, 246, 256
128};
129
130const uint16_t ff_silk_model_pitch_contour_mbwb10ms[] = {
131    256,  91, 137, 176, 195, 209, 221, 229, 236, 242, 247, 252, 256
132};
133
134const uint16_t ff_silk_model_pitch_contour_mbwb20ms[] = {
135    256,  33,  55,  73,  89, 104, 118, 132, 145, 158, 168, 177, 186, 194, 200, 206,
136    212, 217, 221, 225, 229, 232, 235, 238, 240, 242, 244, 246, 248, 250, 252, 253,
137    254, 255, 256
138};
139
140const uint16_t ff_silk_model_ltp_filter[] = { 256, 77, 157, 256 };
141
142const uint16_t ff_silk_model_ltp_filter0_sel[] = {
143    256, 185, 200, 213, 226, 235, 244, 250, 256
144};
145
146const uint16_t ff_silk_model_ltp_filter1_sel[] = {
147    256,  57,  91, 112, 132, 147, 160, 172, 185, 195, 205, 214, 224, 233, 241, 248, 256
148};
149
150const uint16_t ff_silk_model_ltp_filter2_sel[] = {
151    256,  15,  31,  45,  57,  69,  81,  92, 103, 114, 124, 133, 142, 151, 160, 168,
152    176, 184, 192, 199, 206, 212, 218, 223, 227, 232, 236, 240, 244, 247, 251, 254, 256
153};
154
155const uint16_t ff_silk_model_ltp_scale_index[] = { 256, 128, 192, 256 };
156
157const uint16_t ff_silk_model_lcg_seed[] = { 256, 64, 128, 192, 256 };
158
159const uint16_t ff_silk_model_exc_rate[2][10] = {
160    { 256,  15,  66,  78, 124, 169, 182, 215, 242, 256 }, // unvoiced
161    { 256,  33,  63,  99, 116, 150, 199, 217, 238, 256 }  // voiced
162};
163
164const uint16_t ff_silk_model_pulse_count[11][19] = {
165    { 256, 131, 205, 230, 238, 241, 244, 245, 246,
166      247, 248, 249, 250, 251, 252, 253, 254, 255, 256 },
167    { 256,  58, 151, 211, 234, 241, 244, 245, 246,
168      247, 248, 249, 250, 251, 252, 253, 254, 255, 256 },
169    { 256,  43,  94, 140, 173, 197, 213, 224, 232,
170      238, 241, 244, 247, 249, 250, 251, 253, 254, 256 },
171    { 256,  17,  69, 140, 197, 228, 240, 245, 246,
172      247, 248, 249, 250, 251, 252, 253, 254, 255, 256 },
173    { 256,   6,  27,  68, 121, 170, 205, 226, 237,
174      243, 246, 248, 250, 251, 252, 253, 254, 255, 256 },
175    { 256,   7,  21,  43,  71, 100, 128, 153, 173,
176      190, 203, 214, 223, 230, 235, 239, 243, 246, 256 },
177    { 256,   2,   7,  21,  50,  92, 138, 179, 210,
178      229, 240, 246, 249, 251, 252, 253, 254, 255, 256 },
179    { 256,   1,   3,   7,  17,  36,  65, 100, 137,
180      171, 199, 219, 233, 241, 246, 250, 252, 254, 256 },
181    { 256,   1,   3,   5,  10,  19,  33,  53,  77,
182      104, 132, 158, 181, 201, 216, 227, 235, 241, 256 },
183    { 256,   1,   2,   3,   9,  36,  94, 150, 189,
184      214, 228, 238, 244, 247, 250, 252, 253, 254, 256 },
185    { 256,   2,   3,   9,  36,  94, 150, 189, 214,
186      228, 238, 244, 247, 250, 252, 253, 254, 256, 256 }
187};
188
189const uint16_t ff_silk_model_pulse_location[4][168] = {
190    {
191        256, 126, 256,
192        256, 56, 198, 256,
193        256, 25, 126, 230, 256,
194        256, 12, 72, 180, 244, 256,
195        256, 7, 42, 126, 213, 250, 256,
196        256, 4, 24, 83, 169, 232, 253, 256,
197        256, 3, 15, 53, 125, 200, 242, 254, 256,
198        256, 2, 10, 35, 89, 162, 221, 248, 255, 256,
199        256, 2, 7, 24, 63, 126, 191, 233, 251, 255, 256,
200        256, 1, 5, 17, 45, 94, 157, 211, 241, 252, 255, 256,
201        256, 1, 5, 13, 33, 70, 125, 182, 223, 245, 253, 255, 256,
202        256, 1, 4, 11, 26, 54, 98, 151, 199, 232, 248, 254, 255, 256,
203        256, 1, 3, 9, 21, 42, 77, 124, 172, 212, 237, 249, 254, 255, 256,
204        256, 1, 2, 6, 16, 33, 60, 97, 144, 187, 220, 241, 250, 254, 255, 256,
205        256, 1, 2, 3, 11, 25, 47, 80, 120, 163, 201, 229, 245, 253, 254, 255, 256,
206        256, 1, 2, 3, 4, 17, 35, 62, 98, 139, 180, 214, 238, 252, 253, 254, 255, 256
207    },{
208        256, 127, 256,
209        256, 53, 202, 256,
210        256, 22, 127, 233, 256,
211        256, 11, 72, 183, 246, 256,
212        256, 6, 41, 127, 215, 251, 256,
213        256, 4, 24, 83, 170, 232, 253, 256,
214        256, 3, 16, 56, 127, 200, 241, 254, 256,
215        256, 3, 12, 39, 92, 162, 218, 246, 255, 256,
216        256, 3, 11, 30, 67, 124, 185, 229, 249, 255, 256,
217        256, 3, 10, 25, 53, 97, 151, 200, 233, 250, 255, 256,
218        256, 1, 8, 21, 43, 77, 123, 171, 209, 237, 251, 255, 256,
219        256, 1, 2, 13, 35, 62, 97, 139, 186, 219, 244, 254, 255, 256,
220        256, 1, 2, 8, 22, 48, 85, 128, 171, 208, 234, 248, 254, 255, 256,
221        256, 1, 2, 6, 16, 36, 67, 107, 149, 189, 220, 240, 250, 254, 255, 256,
222        256, 1, 2, 5, 13, 29, 55, 90, 128, 166, 201, 227, 243, 251, 254, 255, 256,
223        256, 1, 2, 4, 10, 22, 43, 73, 109, 147, 183, 213, 234, 246, 252, 254, 255, 256
224    },{
225        256, 127, 256,
226        256, 49, 206, 256,
227        256, 20, 127, 236, 256,
228        256, 11, 71, 184, 246, 256,
229        256, 7, 43, 127, 214, 250, 256,
230        256, 6, 30, 87, 169, 229, 252, 256,
231        256, 5, 23, 62, 126, 194, 236, 252, 256,
232        256, 6, 20, 49, 96, 157, 209, 239, 253, 256,
233        256, 1, 16, 39, 74, 125, 175, 215, 245, 255, 256,
234        256, 1, 2, 23, 55, 97, 149, 195, 236, 254, 255, 256,
235        256, 1, 7, 23, 50, 86, 128, 170, 206, 233, 249, 255, 256,
236        256, 1, 6, 18, 39, 70, 108, 148, 186, 217, 238, 250, 255, 256,
237        256, 1, 4, 13, 30, 56, 90, 128, 166, 200, 226, 243, 252, 255, 256,
238        256, 1, 4, 11, 25, 47, 76, 110, 146, 180, 209, 231, 245, 252, 255, 256,
239        256, 1, 3, 8, 19, 37, 62, 93, 128, 163, 194, 219, 237, 248, 253, 255, 256,
240        256, 1, 2, 6, 15, 30, 51, 79, 111, 145, 177, 205, 226, 241, 250, 254, 255, 256
241    },{
242        256, 128, 256,
243        256, 42, 214, 256,
244        256, 21, 128, 235, 256,
245        256, 12, 72, 184, 245, 256,
246        256, 8, 42, 128, 214, 249, 256,
247        256, 8, 31, 86, 176, 231, 251, 256,
248        256, 5, 20, 58, 130, 202, 238, 253, 256,
249        256, 6, 18, 45, 97, 174, 221, 241, 251, 256,
250        256, 6, 25, 53, 88, 128, 168, 203, 231, 250, 256,
251        256, 4, 18, 40, 71, 108, 148, 185, 216, 238, 252, 256,
252        256, 3, 13, 31, 57, 90, 128, 166, 199, 225, 243, 253, 256,
253        256, 2, 10, 23, 44, 73, 109, 147, 183, 212, 233, 246, 254, 256,
254        256, 1, 6, 16, 33, 58, 90, 128, 166, 198, 223, 240, 250, 255, 256,
255        256, 1, 5, 12, 25, 46, 75, 110, 146, 181, 210, 231, 244, 251, 255, 256,
256        256, 1, 3, 8, 18, 35, 60, 92, 128, 164, 196, 221, 238, 248, 253, 255, 256,
257        256, 1, 3, 7, 14, 27, 48, 76, 110, 146, 180, 208, 229, 242, 249, 253, 255, 256
258    }
259};
260
261const uint16_t ff_silk_model_excitation_lsb[] = {256, 136, 256};
262
263const uint16_t ff_silk_model_excitation_sign[3][2][7][3] = {
264    {    // Inactive
265        {    // Low offset
266            {256,   2, 256},
267            {256, 207, 256},
268            {256, 189, 256},
269            {256, 179, 256},
270            {256, 174, 256},
271            {256, 163, 256},
272            {256, 157, 256}
273        }, { // High offset
274            {256,  58, 256},
275            {256, 245, 256},
276            {256, 238, 256},
277            {256, 232, 256},
278            {256, 225, 256},
279            {256, 220, 256},
280            {256, 211, 256}
281        }
282    }, { // Unvoiced
283        {    // Low offset
284            {256,   1, 256},
285            {256, 210, 256},
286            {256, 190, 256},
287            {256, 178, 256},
288            {256, 169, 256},
289            {256, 162, 256},
290            {256, 152, 256}
291        }, { // High offset
292            {256,  48, 256},
293            {256, 242, 256},
294            {256, 235, 256},
295            {256, 224, 256},
296            {256, 214, 256},
297            {256, 205, 256},
298            {256, 190, 256}
299        }
300    }, { // Voiced
301        {    // Low offset
302            {256,   1, 256},
303            {256, 162, 256},
304            {256, 152, 256},
305            {256, 147, 256},
306            {256, 144, 256},
307            {256, 141, 256},
308            {256, 138, 256}
309        }, { // High offset
310            {256,   8, 256},
311            {256, 203, 256},
312            {256, 187, 256},
313            {256, 176, 256},
314            {256, 168, 256},
315            {256, 161, 256},
316            {256, 154, 256}
317        }
318    }
319};
320
321const int16_t ff_silk_stereo_weights[] = {
322    -13732, -10050,  -8266,  -7526,  -6500,  -5000,  -2950,   -820,
323       820,   2950,   5000,   6500,   7526,   8266,  10050,  13732
324};
325
326const uint8_t ff_silk_lsf_s2_model_sel_nbmb[32][10] = {
327    { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
328    { 1, 3, 1, 2, 2, 1, 2, 1, 1, 1 },
329    { 2, 1, 1, 1, 1, 1, 1, 1, 1, 1 },
330    { 1, 2, 2, 2, 2, 1, 2, 1, 1, 1 },
331    { 2, 3, 3, 3, 3, 2, 2, 2, 2, 2 },
332    { 0, 5, 3, 3, 2, 2, 2, 2, 1, 1 },
333    { 0, 2, 2, 2, 2, 2, 2, 2, 2, 1 },
334    { 2, 3, 6, 4, 4, 4, 5, 4, 5, 5 },
335    { 2, 4, 5, 5, 4, 5, 4, 6, 4, 4 },
336    { 2, 4, 4, 7, 4, 5, 4, 5, 5, 4 },
337    { 4, 3, 3, 3, 2, 3, 2, 2, 2, 2 },
338    { 1, 5, 5, 6, 4, 5, 4, 5, 5, 5 },
339    { 2, 7, 4, 6, 5, 5, 5, 5, 5, 5 },
340    { 2, 7, 5, 5, 5, 5, 5, 6, 5, 4 },
341    { 3, 3, 5, 4, 4, 5, 4, 5, 4, 4 },
342    { 2, 3, 3, 5, 5, 4, 4, 4, 4, 4 },
343    { 2, 4, 4, 6, 4, 5, 4, 5, 5, 5 },
344    { 2, 5, 4, 6, 5, 5, 5, 4, 5, 4 },
345    { 2, 7, 4, 5, 4, 5, 4, 5, 5, 5 },
346    { 2, 5, 4, 6, 7, 6, 5, 6, 5, 4 },
347    { 3, 6, 7, 4, 6, 5, 5, 6, 4, 5 },
348    { 2, 7, 6, 4, 4, 4, 5, 4, 5, 5 },
349    { 4, 5, 5, 4, 6, 6, 5, 6, 5, 4 },
350    { 2, 5, 5, 6, 5, 6, 4, 6, 4, 4 },
351    { 4, 5, 5, 5, 3, 7, 4, 5, 5, 4 },
352    { 2, 3, 4, 5, 5, 6, 4, 5, 5, 4 },
353    { 2, 3, 2, 3, 3, 4, 2, 3, 3, 3 },
354    { 1, 1, 2, 2, 2, 2, 2, 3, 2, 2 },
355    { 4, 5, 5, 6, 6, 6, 5, 6, 4, 5 },
356    { 3, 5, 5, 4, 4, 4, 4, 3, 3, 2 },
357    { 2, 5, 3, 7, 5, 5, 4, 4, 5, 4 },
358    { 4, 4, 5, 4, 5, 6, 5, 6, 5, 4 }
359};
360
361const uint8_t ff_silk_lsf_s2_model_sel_wb[32][16] = {
362    {  8,  8,  8,  8,  8,  8,  8,  8,  8,  8,  8,  8,  8,  8,  8,  8 },
363    { 10, 11, 11, 11, 11, 11, 10, 10, 10, 10, 10,  9,  9,  9,  8, 11 },
364    { 10, 13, 13, 11, 15, 12, 12, 13, 10, 13, 12, 13, 13, 12, 11, 11 },
365    {  8, 10,  9, 10, 10,  9,  9,  9,  9,  9,  8,  8,  8,  8,  8,  9 },
366    {  8, 14, 13, 12, 14, 12, 15, 13, 12, 12, 12, 13, 13, 12, 12, 11 },
367    {  8, 11, 13, 13, 12, 11, 11, 13, 11, 11, 11, 11, 11, 11, 10, 12 },
368    {  8,  8,  8,  8,  8,  8,  8,  8,  8,  8,  8,  8,  8,  8,  8,  8 },
369    {  8, 10, 14, 11, 15, 10, 13, 11, 12, 13, 13, 12, 11, 11, 10, 11 },
370    {  8, 14, 10, 14, 14, 12, 13, 12, 14, 13, 12, 12, 13, 11, 11, 11 },
371    { 10,  9,  8,  8,  8,  8,  8,  8,  8,  8,  8,  8,  8,  8,  8,  8 },
372    {  8,  9,  8,  8,  8,  8,  8,  8,  8,  8,  8,  8,  8,  8,  8,  9 },
373    { 10, 10, 11, 12, 13, 11, 11, 11, 11, 11, 11, 11, 10, 10,  9, 11 },
374    { 10, 10, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 10,  9, 11 },
375    { 11, 12, 12, 12, 14, 12, 12, 13, 11, 13, 12, 12, 13, 12, 11, 12 },
376    {  8, 14, 12, 13, 12, 15, 13, 10, 14, 13, 15, 12, 12, 11, 13, 11 },
377    {  8,  9,  8,  9,  9,  9,  9,  9,  9,  9,  8,  8,  8,  8,  9,  8 },
378    {  9, 14, 13, 15, 13, 12, 13, 11, 12, 13, 12, 12, 12, 11, 11, 12 },
379    {  9, 11, 11, 12, 12, 11, 11, 13, 10, 11, 11, 13, 13, 13, 11, 12 },
380    { 10, 11, 11, 10, 10, 10, 11, 10,  9, 10,  9, 10,  9,  9,  9, 12 },
381    {  8, 10, 11, 13, 11, 11, 10, 10, 10,  9,  9,  8,  8,  8,  8,  8 },
382    { 11, 12, 11, 13, 11, 11, 10, 10,  9,  9,  9,  9,  9, 10, 10, 12 },
383    { 10, 14, 11, 15, 15, 12, 13, 12, 13, 11, 13, 11, 11, 10, 11, 11 },
384    { 10, 11, 13, 14, 14, 11, 13, 11, 12, 12, 11, 11, 11, 11, 10, 12 },
385    {  9, 11, 11, 12, 12, 12, 12, 11, 13, 13, 13, 11,  9,  9,  9,  9 },
386    { 10, 13, 11, 14, 14, 12, 15, 12, 12, 13, 11, 12, 12, 11, 11, 11 },
387    {  8, 14,  9,  9,  8,  8,  8,  8,  8,  8,  8,  8,  8,  8,  8,  8 },
388    {  8, 14, 14, 11, 13, 10, 13, 13, 11, 12, 12, 15, 15, 12, 12, 12 },
389    { 11, 11, 15, 11, 13, 12, 11, 11, 11, 10, 10, 11, 11, 11, 10, 11 },
390    {  8,  8,  9,  8,  8,  8, 10,  9, 10,  9,  9, 10, 10, 10,  9,  9 },
391    {  8, 11, 10, 13, 11, 11, 10, 11, 10,  9,  8,  8,  9,  8,  8,  9 },
392    { 11, 13, 13, 12, 15, 13, 11, 11, 10, 11, 10, 10,  9,  8,  9,  8 },
393    { 10, 11, 13, 11, 12, 11, 11, 11, 10,  9, 10, 14, 12,  8,  8,  8 }
394};
395
396const uint8_t ff_silk_lsf_pred_weights_nbmb[2][9] = {
397    {179, 138, 140, 148, 151, 149, 153, 151, 163},
398    {116,  67,  82,  59,  92,  72, 100,  89,  92}
399};
400
401const uint8_t ff_silk_lsf_pred_weights_wb[2][15] = {
402    {175, 148, 160, 176, 178, 173, 174, 164, 177, 174, 196, 182, 198, 192, 182},
403    { 68,  62,  66,  60,  72, 117,  85,  90, 118, 136, 151, 142, 160, 142, 155}
404};
405
406const uint8_t ff_silk_lsf_weight_sel_nbmb[32][9] = {
407    { 0, 1, 0, 0, 0, 0, 0, 0, 0 },
408    { 1, 0, 0, 0, 0, 0, 0, 0, 0 },
409    { 0, 0, 0, 0, 0, 0, 0, 0, 0 },
410    { 1, 1, 1, 0, 0, 0, 0, 1, 0 },
411    { 0, 1, 0, 0, 0, 0, 0, 0, 0 },
412    { 0, 1, 0, 0, 0, 0, 0, 0, 0 },
413    { 1, 0, 1, 1, 0, 0, 0, 1, 0 },
414    { 0, 1, 1, 0, 0, 1, 1, 0, 0 },
415    { 0, 0, 1, 1, 0, 1, 0, 1, 1 },
416    { 0, 0, 1, 1, 0, 0, 1, 1, 1 },
417    { 0, 0, 0, 0, 0, 0, 0, 0, 0 },
418    { 0, 1, 0, 1, 1, 1, 1, 1, 0 },
419    { 0, 1, 0, 1, 1, 1, 1, 1, 0 },
420    { 0, 1, 1, 1, 1, 1, 1, 1, 0 },
421    { 1, 0, 1, 1, 0, 1, 1, 1, 1 },
422    { 0, 1, 1, 1, 1, 1, 0, 1, 0 },
423    { 0, 0, 1, 1, 0, 1, 0, 1, 0 },
424    { 0, 0, 1, 1, 1, 0, 1, 1, 1 },
425    { 0, 1, 1, 0, 0, 1, 1, 1, 0 },
426    { 0, 0, 0, 1, 1, 1, 0, 1, 0 },
427    { 0, 1, 1, 0, 0, 1, 0, 1, 0 },
428    { 0, 1, 1, 0, 0, 0, 1, 1, 0 },
429    { 0, 0, 0, 0, 0, 1, 1, 1, 1 },
430    { 0, 0, 1, 1, 0, 0, 0, 1, 1 },
431    { 0, 0, 0, 1, 0, 1, 1, 1, 1 },
432    { 0, 1, 1, 1, 1, 1, 1, 1, 0 },
433    { 0, 0, 0, 0, 0, 0, 0, 0, 0 },
434    { 0, 0, 0, 0, 0, 0, 0, 0, 0 },
435    { 0, 0, 1, 0, 1, 1, 0, 1, 0 },
436    { 1, 0, 0, 1, 0, 0, 0, 0, 0 },
437    { 0, 0, 0, 1, 1, 0, 1, 0, 1 },
438    { 1, 0, 1, 1, 0, 1, 1, 1, 1 }
439};
440
441const uint8_t ff_silk_lsf_weight_sel_wb[32][15] = {
442    { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1 },
443    { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
444    { 0, 0, 1, 0, 0, 1, 1, 1, 0, 1, 1, 1, 1, 0, 0 },
445    { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 },
446    { 0, 1, 1, 0, 1, 0, 1, 1, 0, 1, 1, 1, 1, 1, 0 },
447    { 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
448    { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0 },
449    { 0, 1, 1, 0, 0, 0, 1, 0, 1, 1, 1, 0, 1, 0, 1 },
450    { 0, 1, 0, 1, 1, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1 },
451    { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1 },
452    { 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
453    { 0, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 0 },
454    { 0, 0, 1, 0, 0, 1, 0, 1, 0, 1, 0, 0, 1, 0, 0 },
455    { 0, 0, 0, 0, 1, 1, 0, 1, 0, 1, 1, 1, 1, 0, 0 },
456    { 0, 1, 0, 0, 0, 1, 1, 0, 1, 1, 1, 0, 1, 1, 1 },
457    { 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0 },
458    { 0, 1, 1, 0, 1, 0, 1, 1, 1, 1, 1, 0, 1, 0, 0 },
459    { 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 0, 0 },
460    { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1 },
461    { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 },
462    { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
463    { 0, 1, 0, 1, 0, 1, 1, 0, 1, 0, 1, 0, 1, 1, 0 },
464    { 0, 0, 1, 1, 1, 1, 0, 1, 1, 0, 0, 1, 1, 0, 0 },
465    { 0, 1, 1, 0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 1, 0 },
466    { 0, 0, 0, 1, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1 },
467    { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1 },
468    { 0, 1, 1, 0, 0, 0, 1, 1, 0, 0, 1, 1, 1, 1, 1 },
469    { 0, 0, 0, 0, 0, 1, 0, 1, 1, 1, 1, 0, 1, 1, 1 },
470    { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1 },
471    { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1 },
472    { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0 },
473    { 0, 0, 1, 0, 0, 1, 1, 1, 0, 0, 1, 0, 0, 1, 0 }
474};
475
476const uint8_t ff_silk_lsf_codebook_nbmb[32][10] = {
477    { 12,  35,  60,  83, 108, 132, 157, 180, 206, 228 },
478    { 15,  32,  55,  77, 101, 125, 151, 175, 201, 225 },
479    { 19,  42,  66,  89, 114, 137, 162, 184, 209, 230 },
480    { 12,  25,  50,  72,  97, 120, 147, 172, 200, 223 },
481    { 26,  44,  69,  90, 114, 135, 159, 180, 205, 225 },
482    { 13,  22,  53,  80, 106, 130, 156, 180, 205, 228 },
483    { 15,  25,  44,  64,  90, 115, 142, 168, 196, 222 },
484    { 19,  24,  62,  82, 100, 120, 145, 168, 190, 214 },
485    { 22,  31,  50,  79, 103, 120, 151, 170, 203, 227 },
486    { 21,  29,  45,  65, 106, 124, 150, 171, 196, 224 },
487    { 30,  49,  75,  97, 121, 142, 165, 186, 209, 229 },
488    { 19,  25,  52,  70,  93, 116, 143, 166, 192, 219 },
489    { 26,  34,  62,  75,  97, 118, 145, 167, 194, 217 },
490    { 25,  33,  56,  70,  91, 113, 143, 165, 196, 223 },
491    { 21,  34,  51,  72,  97, 117, 145, 171, 196, 222 },
492    { 20,  29,  50,  67,  90, 117, 144, 168, 197, 221 },
493    { 22,  31,  48,  66,  95, 117, 146, 168, 196, 222 },
494    { 24,  33,  51,  77, 116, 134, 158, 180, 200, 224 },
495    { 21,  28,  70,  87, 106, 124, 149, 170, 194, 217 },
496    { 26,  33,  53,  64,  83, 117, 152, 173, 204, 225 },
497    { 27,  34,  65,  95, 108, 129, 155, 174, 210, 225 },
498    { 20,  26,  72,  99, 113, 131, 154, 176, 200, 219 },
499    { 34,  43,  61,  78,  93, 114, 155, 177, 205, 229 },
500    { 23,  29,  54,  97, 124, 138, 163, 179, 209, 229 },
501    { 30,  38,  56,  89, 118, 129, 158, 178, 200, 231 },
502    { 21,  29,  49,  63,  85, 111, 142, 163, 193, 222 },
503    { 27,  48,  77, 103, 133, 158, 179, 196, 215, 232 },
504    { 29,  47,  74,  99, 124, 151, 176, 198, 220, 237 },
505    { 33,  42,  61,  76,  93, 121, 155, 174, 207, 225 },
506    { 29,  53,  87, 112, 136, 154, 170, 188, 208, 227 },
507    { 24,  30,  52,  84, 131, 150, 166, 186, 203, 229 },
508    { 37,  48,  64,  84, 104, 118, 156, 177, 201, 230 }
509};
510
511const uint8_t ff_silk_lsf_codebook_wb[32][16] = {
512    {  7,  23,  38,  54,  69,  85, 100, 116, 131, 147, 162, 178, 193, 208, 223, 239 },
513    { 13,  25,  41,  55,  69,  83,  98, 112, 127, 142, 157, 171, 187, 203, 220, 236 },
514    { 15,  21,  34,  51,  61,  78,  92, 106, 126, 136, 152, 167, 185, 205, 225, 240 },
515    { 10,  21,  36,  50,  63,  79,  95, 110, 126, 141, 157, 173, 189, 205, 221, 237 },
516    { 17,  20,  37,  51,  59,  78,  89, 107, 123, 134, 150, 164, 184, 205, 224, 240 },
517    { 10,  15,  32,  51,  67,  81,  96, 112, 129, 142, 158, 173, 189, 204, 220, 236 },
518    {  8,  21,  37,  51,  65,  79,  98, 113, 126, 138, 155, 168, 179, 192, 209, 218 },
519    { 12,  15,  34,  55,  63,  78,  87, 108, 118, 131, 148, 167, 185, 203, 219, 236 },
520    { 16,  19,  32,  36,  56,  79,  91, 108, 118, 136, 154, 171, 186, 204, 220, 237 },
521    { 11,  28,  43,  58,  74,  89, 105, 120, 135, 150, 165, 180, 196, 211, 226, 241 },
522    {  6,  16,  33,  46,  60,  75,  92, 107, 123, 137, 156, 169, 185, 199, 214, 225 },
523    { 11,  19,  30,  44,  57,  74,  89, 105, 121, 135, 152, 169, 186, 202, 218, 234 },
524    { 12,  19,  29,  46,  57,  71,  88, 100, 120, 132, 148, 165, 182, 199, 216, 233 },
525    { 17,  23,  35,  46,  56,  77,  92, 106, 123, 134, 152, 167, 185, 204, 222, 237 },
526    { 14,  17,  45,  53,  63,  75,  89, 107, 115, 132, 151, 171, 188, 206, 221, 240 },
527    {  9,  16,  29,  40,  56,  71,  88, 103, 119, 137, 154, 171, 189, 205, 222, 237 },
528    { 16,  19,  36,  48,  57,  76,  87, 105, 118, 132, 150, 167, 185, 202, 218, 236 },
529    { 12,  17,  29,  54,  71,  81,  94, 104, 126, 136, 149, 164, 182, 201, 221, 237 },
530    { 15,  28,  47,  62,  79,  97, 115, 129, 142, 155, 168, 180, 194, 208, 223, 238 },
531    {  8,  14,  30,  45,  62,  78,  94, 111, 127, 143, 159, 175, 192, 207, 223, 239 },
532    { 17,  30,  49,  62,  79,  92, 107, 119, 132, 145, 160, 174, 190, 204, 220, 235 },
533    { 14,  19,  36,  45,  61,  76,  91, 108, 121, 138, 154, 172, 189, 205, 222, 238 },
534    { 12,  18,  31,  45,  60,  76,  91, 107, 123, 138, 154, 171, 187, 204, 221, 236 },
535    { 13,  17,  31,  43,  53,  70,  83, 103, 114, 131, 149, 167, 185, 203, 220, 237 },
536    { 17,  22,  35,  42,  58,  78,  93, 110, 125, 139, 155, 170, 188, 206, 224, 240 },
537    {  8,  15,  34,  50,  67,  83,  99, 115, 131, 146, 162, 178, 193, 209, 224, 239 },
538    { 13,  16,  41,  66,  73,  86,  95, 111, 128, 137, 150, 163, 183, 206, 225, 241 },
539    { 17,  25,  37,  52,  63,  75,  92, 102, 119, 132, 144, 160, 175, 191, 212, 231 },
540    { 19,  31,  49,  65,  83, 100, 117, 133, 147, 161, 174, 187, 200, 213, 227, 242 },
541    { 18,  31,  52,  68,  88, 103, 117, 126, 138, 149, 163, 177, 192, 207, 223, 239 },
542    { 16,  29,  47,  61,  76,  90, 106, 119, 133, 147, 161, 176, 193, 209, 224, 240 },
543    { 15,  21,  35,  50,  61,  73,  86,  97, 110, 119, 129, 141, 175, 198, 218, 237 }
544};
545
546const uint16_t ff_silk_lsf_min_spacing_nbmb[] = {
547    250, 3, 6, 3, 3, 3, 4, 3, 3, 3, 461
548};
549
550const uint16_t ff_silk_lsf_min_spacing_wb[] = {
551    100, 3, 40, 3, 3, 3, 5, 14, 14, 10, 11, 3, 8, 9, 7, 3, 347
552};
553
554const uint8_t ff_silk_lsf_ordering_nbmb[] = {
555    0, 9, 6, 3, 4, 5, 8, 1, 2, 7
556};
557
558const uint8_t ff_silk_lsf_ordering_wb[] = {
559    0, 15, 8, 7, 4, 11, 12, 3, 2, 13, 10, 5, 6, 9, 14, 1
560};
561
562const int16_t ff_silk_cosine[] = { /* (0.12) */
563     4096,  4095,  4091,  4085,
564     4076,  4065,  4052,  4036,
565     4017,  3997,  3973,  3948,
566     3920,  3889,  3857,  3822,
567     3784,  3745,  3703,  3659,
568     3613,  3564,  3513,  3461,
569     3406,  3349,  3290,  3229,
570     3166,  3102,  3035,  2967,
571     2896,  2824,  2751,  2676,
572     2599,  2520,  2440,  2359,
573     2276,  2191,  2106,  2019,
574     1931,  1842,  1751,  1660,
575     1568,  1474,  1380,  1285,
576     1189,  1093,   995,   897,
577      799,   700,   601,   501,
578      401,   301,   201,   101,
579        0,  -101,  -201,  -301,
580     -401,  -501,  -601,  -700,
581     -799,  -897,  -995, -1093,
582    -1189, -1285, -1380, -1474,
583    -1568, -1660, -1751, -1842,
584    -1931, -2019, -2106, -2191,
585    -2276, -2359, -2440, -2520,
586    -2599, -2676, -2751, -2824,
587    -2896, -2967, -3035, -3102,
588    -3166, -3229, -3290, -3349,
589    -3406, -3461, -3513, -3564,
590    -3613, -3659, -3703, -3745,
591    -3784, -3822, -3857, -3889,
592    -3920, -3948, -3973, -3997,
593    -4017, -4036, -4052, -4065,
594    -4076, -4085, -4091, -4095,
595    -4096
596};
597
598const uint16_t ff_silk_pitch_scale[]   = {  4,   6,   8};
599
600const uint16_t ff_silk_pitch_min_lag[] = { 16,  24,  32};
601
602const uint16_t ff_silk_pitch_max_lag[] = {144, 216, 288};
603
604const int8_t ff_silk_pitch_offset_nb10ms[3][2] = {
605    { 0,  0},
606    { 1,  0},
607    { 0,  1}
608};
609
610const int8_t ff_silk_pitch_offset_nb20ms[11][4] = {
611    { 0,  0,  0,  0},
612    { 2,  1,  0, -1},
613    {-1,  0,  1,  2},
614    {-1,  0,  0,  1},
615    {-1,  0,  0,  0},
616    { 0,  0,  0,  1},
617    { 0,  0,  1,  1},
618    { 1,  1,  0,  0},
619    { 1,  0,  0,  0},
620    { 0,  0,  0, -1},
621    { 1,  0,  0, -1}
622};
623
624const int8_t ff_silk_pitch_offset_mbwb10ms[12][2] = {
625    { 0,  0},
626    { 0,  1},
627    { 1,  0},
628    {-1,  1},
629    { 1, -1},
630    {-1,  2},
631    { 2, -1},
632    {-2,  2},
633    { 2, -2},
634    {-2,  3},
635    { 3, -2},
636    {-3,  3}
637};
638
639const int8_t ff_silk_pitch_offset_mbwb20ms[34][4] = {
640    { 0,  0,  0,  0},
641    { 0,  0,  1,  1},
642    { 1,  1,  0,  0},
643    {-1,  0,  0,  0},
644    { 0,  0,  0,  1},
645    { 1,  0,  0,  0},
646    {-1,  0,  0,  1},
647    { 0,  0,  0, -1},
648    {-1,  0,  1,  2},
649    { 1,  0,  0, -1},
650    {-2, -1,  1,  2},
651    { 2,  1,  0, -1},
652    {-2,  0,  0,  2},
653    {-2,  0,  1,  3},
654    { 2,  1, -1, -2},
655    {-3, -1,  1,  3},
656    { 2,  0,  0, -2},
657    { 3,  1,  0, -2},
658    {-3, -1,  2,  4},
659    {-4, -1,  1,  4},
660    { 3,  1, -1, -3},
661    {-4, -1,  2,  5},
662    { 4,  2, -1, -3},
663    { 4,  1, -1, -4},
664    {-5, -1,  2,  6},
665    { 5,  2, -1, -4},
666    {-6, -2,  2,  6},
667    {-5, -2,  2,  5},
668    { 6,  2, -1, -5},
669    {-7, -2,  3,  8},
670    { 6,  2, -2, -6},
671    { 5,  2, -2, -5},
672    { 8,  3, -2, -7},
673    {-9, -3,  3,  9}
674};
675
676const int8_t ff_silk_ltp_filter0_taps[8][5] = {
677    {  4,   6,  24,   7,   5},
678    {  0,   0,   2,   0,   0},
679    { 12,  28,  41,  13,  -4},
680    { -9,  15,  42,  25,  14},
681    {  1,  -2,  62,  41,  -9},
682    {-10,  37,  65,  -4,   3},
683    { -6,   4,  66,   7,  -8},
684    { 16,  14,  38,  -3,  33}
685};
686
687const int8_t ff_silk_ltp_filter1_taps[16][5] = {
688    { 13,  22,  39,  23,  12},
689    { -1,  36,  64,  27,  -6},
690    { -7,  10,  55,  43,  17},
691    {  1,   1,   8,   1,   1},
692    {  6, -11,  74,  53,  -9},
693    {-12,  55,  76, -12,   8},
694    { -3,   3,  93,  27,  -4},
695    { 26,  39,  59,   3,  -8},
696    {  2,   0,  77,  11,   9},
697    { -8,  22,  44,  -6,   7},
698    { 40,   9,  26,   3,   9},
699    { -7,  20, 101,  -7,   4},
700    {  3,  -8,  42,  26,   0},
701    {-15,  33,  68,   2,  23},
702    { -2,  55,  46,  -2,  15},
703    {  3,  -1,  21,  16,  41}
704};
705
706const int8_t ff_silk_ltp_filter2_taps[32][5] = {
707    { -6,  27,  61,  39,   5},
708    {-11,  42,  88,   4,   1},
709    { -2,  60,  65,   6,  -4},
710    { -1,  -5,  73,  56,   1},
711    { -9,  19,  94,  29,  -9},
712    {  0,  12,  99,   6,   4},
713    {  8, -19, 102,  46, -13},
714    {  3,   2,  13,   3,   2},
715    {  9, -21,  84,  72, -18},
716    {-11,  46, 104, -22,   8},
717    { 18,  38,  48,  23,   0},
718    {-16,  70,  83, -21,  11},
719    {  5, -11, 117,  22,  -8},
720    { -6,  23, 117, -12,   3},
721    {  3,  -8,  95,  28,   4},
722    {-10,  15,  77,  60, -15},
723    { -1,   4, 124,   2,  -4},
724    {  3,  38,  84,  24, -25},
725    {  2,  13,  42,  13,  31},
726    { 21,  -4,  56,  46,  -1},
727    { -1,  35,  79, -13,  19},
728    { -7,  65,  88,  -9, -14},
729    { 20,   4,  81,  49, -29},
730    { 20,   0,  75,   3, -17},
731    {  5,  -9,  44,  92,  -8},
732    {  1,  -3,  22,  69,  31},
733    { -6,  95,  41, -12,   5},
734    { 39,  67,  16,  -4,   1},
735    {  0,  -6, 120,  55, -36},
736    {-13,  44, 122,   4, -24},
737    { 81,   5,  11,   3,   7},
738    {  2,   0,   9,  10,  88}
739};
740
741const uint16_t ff_silk_ltp_scale_factor[] = {15565, 12288, 8192};
742
743const uint8_t ff_silk_shell_blocks[3][2] = {
744    { 5, 10}, // NB
745    { 8, 15}, // MB
746    {10, 20}  // WB
747};
748
749const uint8_t ff_silk_quant_offset[2][2] = { /* (0.23) */
750    {25, 60}, // Inactive or Unvoiced
751    { 8, 25}  // Voiced
752};
753
754const int ff_silk_stereo_interp_len[3] = {
755    64, 96, 128
756};
757
758const uint16_t ff_celt_model_tapset[] = { 4, 2, 3, 4 };
759
760const uint16_t ff_celt_model_spread[] = { 32, 7, 9, 30, 32 };
761
762const uint16_t ff_celt_model_alloc_trim[] = {
763    128,   2,   4,   9,  19,  41,  87, 109, 119, 124, 126, 128
764};
765
766const uint16_t ff_celt_model_energy_small[] = { 4, 2, 3, 4 };
767
768const uint8_t ff_celt_freq_bands[] = { /* in steps of 200Hz */
769    0,  1,  2,  3,  4,  5,  6,  7,  8, 10, 12, 14, 16, 20, 24, 28, 34, 40, 48, 60, 78, 100
770};
771
772const uint8_t ff_celt_freq_range[] = {
773    1,  1,  1,  1,  1,  1,  1,  1,  2,  2,  2,  2,  4,  4,  4,  6,  6,  8, 12, 18, 22
774};
775
776const uint8_t ff_celt_log_freq_range[] = {
777    0,  0,  0,  0,  0,  0,  0,  0,  8,  8,  8,  8, 16, 16, 16, 21, 21, 24, 29, 34, 36
778};
779
780/* Positive - increased freqeuency resolution (only possible on transients)
781 * Negative - increased time resolution */
782const int8_t ff_celt_tf_select[4][2][2][2] = {
783    /*          OFF                        ON                Transient frame */
784    /*     OFF        ON             OFF        ON           TF select flag  */
785    /*   OFF  ON    OFF  ON        OFF  ON    OFF  ON        TF change flag  */
786    { { { 0, -1 }, { 0, -1 } }, { { 0, -1 }, { 0, -1 } } }, /* 120 */
787    { { { 0, -1 }, { 0, -2 } }, { { 1,  0 }, { 1, -1 } } }, /* 240 */
788    { { { 0, -2 }, { 0, -3 } }, { { 2,  0 }, { 1, -1 } } }, /* 480 */
789    { { { 0, -2 }, { 0, -3 } }, { { 3,  0 }, { 1, -1 } } }  /* 960 */
790};
791
792const float ff_celt_mean_energy[] = {
793    6.437500f, 6.250000f, 5.750000f, 5.312500f, 5.062500f,
794    4.812500f, 4.500000f, 4.375000f, 4.875000f, 4.687500f,
795    4.562500f, 4.437500f, 4.875000f, 4.625000f, 4.312500f,
796    4.500000f, 4.375000f, 4.625000f, 4.750000f, 4.437500f,
797    3.750000f, 3.750000f, 3.750000f, 3.750000f, 3.750000f
798};
799
800const float ff_celt_alpha_coef[] = {
801    29440.0f/32768.0f,    26112.0f/32768.0f,    21248.0f/32768.0f,    16384.0f/32768.0f
802};
803
804const float ff_celt_beta_coef[] = {
805    1.0f - (30147.0f/32768.0f), 1.0f - (22282.0f/32768.0f), 1.0f - (12124.0f/32768.0f), 1.0f - (6554.0f/32768.0f),
806};
807
808const uint8_t ff_celt_coarse_energy_dist[4][2][42] = {
809    {
810        {       // 120-sample inter
811             72, 127,  65, 129,  66, 128,  65, 128,  64, 128,  62, 128,  64, 128,
812             64, 128,  92,  78,  92,  79,  92,  78,  90,  79, 116,  41, 115,  40,
813            114,  40, 132,  26, 132,  26, 145,  17, 161,  12, 176,  10, 177,  11
814        }, {    // 120-sample intra
815             24, 179,  48, 138,  54, 135,  54, 132,  53, 134,  56, 133,  55, 132,
816             55, 132,  61, 114,  70,  96,  74,  88,  75,  88,  87,  74,  89,  66,
817             91,  67, 100,  59, 108,  50, 120,  40, 122,  37,  97,  43,  78,  50
818        }
819    }, {
820        {       // 240-sample inter
821             83,  78,  84,  81,  88,  75,  86,  74,  87,  71,  90,  73,  93,  74,
822             93,  74, 109,  40, 114,  36, 117,  34, 117,  34, 143,  17, 145,  18,
823            146,  19, 162,  12, 165,  10, 178,   7, 189,   6, 190,   8, 177,   9
824        }, {    // 240-sample intra
825             23, 178,  54, 115,  63, 102,  66,  98,  69,  99,  74,  89,  71,  91,
826             73,  91,  78,  89,  86,  80,  92,  66,  93,  64, 102,  59, 103,  60,
827            104,  60, 117,  52, 123,  44, 138,  35, 133,  31,  97,  38,  77,  45
828        }
829    }, {
830        {       // 480-sample inter
831             61,  90,  93,  60, 105,  42, 107,  41, 110,  45, 116,  38, 113,  38,
832            112,  38, 124,  26, 132,  27, 136,  19, 140,  20, 155,  14, 159,  16,
833            158,  18, 170,  13, 177,  10, 187,   8, 192,   6, 175,   9, 159,  10
834        }, {    // 480-sample intra
835             21, 178,  59, 110,  71,  86,  75,  85,  84,  83,  91,  66,  88,  73,
836             87,  72,  92,  75,  98,  72, 105,  58, 107,  54, 115,  52, 114,  55,
837            112,  56, 129,  51, 132,  40, 150,  33, 140,  29,  98,  35,  77,  42
838        }
839    }, {
840        {       // 960-sample inter
841             42, 121,  96,  66, 108,  43, 111,  40, 117,  44, 123,  32, 120,  36,
842            119,  33, 127,  33, 134,  34, 139,  21, 147,  23, 152,  20, 158,  25,
843            154,  26, 166,  21, 173,  16, 184,  13, 184,  10, 150,  13, 139,  15
844        }, {    // 960-sample intra
845             22, 178,  63, 114,  74,  82,  84,  83,  92,  82, 103,  62,  96,  72,
846             96,  67, 101,  73, 107,  72, 113,  55, 118,  52, 125,  52, 118,  52,
847            117,  55, 135,  49, 137,  39, 157,  32, 145,  29,  97,  33,  77,  40
848        }
849    }
850};
851
852const uint8_t ff_celt_static_alloc[11][21] = {  /* 1/32 bit/sample */
853    {   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0 },
854    {  90,  80,  75,  69,  63,  56,  49,  40,  34,  29,  20,  18,  10,   0,   0,   0,   0,   0,   0,   0,   0 },
855    { 110, 100,  90,  84,  78,  71,  65,  58,  51,  45,  39,  32,  26,  20,  12,   0,   0,   0,   0,   0,   0 },
856    { 118, 110, 103,  93,  86,  80,  75,  70,  65,  59,  53,  47,  40,  31,  23,  15,   4,   0,   0,   0,   0 },
857    { 126, 119, 112, 104,  95,  89,  83,  78,  72,  66,  60,  54,  47,  39,  32,  25,  17,  12,   1,   0,   0 },
858    { 134, 127, 120, 114, 103,  97,  91,  85,  78,  72,  66,  60,  54,  47,  41,  35,  29,  23,  16,  10,   1 },
859    { 144, 137, 130, 124, 113, 107, 101,  95,  88,  82,  76,  70,  64,  57,  51,  45,  39,  33,  26,  15,   1 },
860    { 152, 145, 138, 132, 123, 117, 111, 105,  98,  92,  86,  80,  74,  67,  61,  55,  49,  43,  36,  20,   1 },
861    { 162, 155, 148, 142, 133, 127, 121, 115, 108, 102,  96,  90,  84,  77,  71,  65,  59,  53,  46,  30,   1 },
862    { 172, 165, 158, 152, 143, 137, 131, 125, 118, 112, 106, 100,  94,  87,  81,  75,  69,  63,  56,  45,  20 },
863    { 200, 200, 200, 200, 200, 200, 200, 200, 198, 193, 188, 183, 178, 173, 168, 163, 158, 153, 148, 129, 104 }
864};
865
866const uint8_t ff_celt_static_caps[4][2][21] = {
867    {       // 120-sample
868        {224, 224, 224, 224, 224, 224, 224, 224, 160, 160,
869         160, 160, 185, 185, 185, 178, 178, 168, 134,  61,  37},
870        {224, 224, 224, 224, 224, 224, 224, 224, 240, 240,
871         240, 240, 207, 207, 207, 198, 198, 183, 144,  66,  40},
872    }, {    // 240-sample
873        {160, 160, 160, 160, 160, 160, 160, 160, 185, 185,
874         185, 185, 193, 193, 193, 183, 183, 172, 138,  64,  38},
875        {240, 240, 240, 240, 240, 240, 240, 240, 207, 207,
876         207, 207, 204, 204, 204, 193, 193, 180, 143,  66,  40},
877    }, {    // 480-sample
878        {185, 185, 185, 185, 185, 185, 185, 185, 193, 193,
879         193, 193, 193, 193, 193, 183, 183, 172, 138,  65,  39},
880        {207, 207, 207, 207, 207, 207, 207, 207, 204, 204,
881         204, 204, 201, 201, 201, 188, 188, 176, 141,  66,  40},
882    }, {    // 960-sample
883        {193, 193, 193, 193, 193, 193, 193, 193, 193, 193,
884         193, 193, 194, 194, 194, 184, 184, 173, 139,  65,  39},
885        {204, 204, 204, 204, 204, 204, 204, 204, 201, 201,
886         201, 201, 198, 198, 198, 187, 187, 175, 140,  66,  40}
887    }
888};
889
890const uint8_t ff_celt_cache_bits[392] = {
891    40, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
892    7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
893    7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 40, 15, 23, 28,
894    31, 34, 36, 38, 39, 41, 42, 43, 44, 45, 46, 47, 47, 49, 50,
895    51, 52, 53, 54, 55, 55, 57, 58, 59, 60, 61, 62, 63, 63, 65,
896    66, 67, 68, 69, 70, 71, 71, 40, 20, 33, 41, 48, 53, 57, 61,
897    64, 66, 69, 71, 73, 75, 76, 78, 80, 82, 85, 87, 89, 91, 92,
898    94, 96, 98, 101, 103, 105, 107, 108, 110, 112, 114, 117, 119, 121, 123,
899    124, 126, 128, 40, 23, 39, 51, 60, 67, 73, 79, 83, 87, 91, 94,
900    97, 100, 102, 105, 107, 111, 115, 118, 121, 124, 126, 129, 131, 135, 139,
901    142, 145, 148, 150, 153, 155, 159, 163, 166, 169, 172, 174, 177, 179, 35,
902    28, 49, 65, 78, 89, 99, 107, 114, 120, 126, 132, 136, 141, 145, 149,
903    153, 159, 165, 171, 176, 180, 185, 189, 192, 199, 205, 211, 216, 220, 225,
904    229, 232, 239, 245, 251, 21, 33, 58, 79, 97, 112, 125, 137, 148, 157,
905    166, 174, 182, 189, 195, 201, 207, 217, 227, 235, 243, 251, 17, 35, 63,
906    86, 106, 123, 139, 152, 165, 177, 187, 197, 206, 214, 222, 230, 237, 250,
907    25, 31, 55, 75, 91, 105, 117, 128, 138, 146, 154, 161, 168, 174, 180,
908    185, 190, 200, 208, 215, 222, 229, 235, 240, 245, 255, 16, 36, 65, 89,
909    110, 128, 144, 159, 173, 185, 196, 207, 217, 226, 234, 242, 250, 11, 41,
910    74, 103, 128, 151, 172, 191, 209, 225, 241, 255, 9, 43, 79, 110, 138,
911    163, 186, 207, 227, 246, 12, 39, 71, 99, 123, 144, 164, 182, 198, 214,
912    228, 241, 253, 9, 44, 81, 113, 142, 168, 192, 214, 235, 255, 7, 49,
913    90, 127, 160, 191, 220, 247, 6, 51, 95, 134, 170, 203, 234, 7, 47,
914    87, 123, 155, 184, 212, 237, 6, 52, 97, 137, 174, 208, 240, 5, 57,
915    106, 151, 192, 231, 5, 59, 111, 158, 202, 243, 5, 55, 103, 147, 187,
916    224, 5, 60, 113, 161, 206, 248, 4, 65, 122, 175, 224, 4, 67, 127,
917    182, 234
918};
919
920const int16_t ff_celt_cache_index[105] = {
921    -1, -1, -1, -1, -1, -1, -1, -1, 0, 0, 0, 0, 41, 41, 41,
922    82, 82, 123, 164, 200, 222, 0, 0, 0, 0, 0, 0, 0, 0, 41,
923    41, 41, 41, 123, 123, 123, 164, 164, 240, 266, 283, 295, 41, 41, 41,
924    41, 41, 41, 41, 41, 123, 123, 123, 123, 240, 240, 240, 266, 266, 305,
925    318, 328, 336, 123, 123, 123, 123, 123, 123, 123, 123, 240, 240, 240, 240,
926    305, 305, 305, 318, 318, 343, 351, 358, 364, 240, 240, 240, 240, 240, 240,
927    240, 240, 305, 305, 305, 305, 343, 343, 343, 351, 351, 370, 376, 382, 387,
928};
929
930const uint8_t ff_celt_log2_frac[] = {
931    0, 8, 13, 16, 19, 21, 23, 24, 26, 27, 28, 29, 30, 31, 32, 32, 33, 34, 34, 35, 36, 36, 37, 37
932};
933
934const uint8_t ff_celt_bit_interleave[] = {
935    0, 1, 1, 1, 2, 3, 3, 3, 2, 3, 3, 3, 2, 3, 3, 3
936};
937
938const uint8_t ff_celt_bit_deinterleave[] = {
939    0x00, 0x03, 0x0C, 0x0F, 0x30, 0x33, 0x3C, 0x3F,
940    0xC0, 0xC3, 0xCC, 0xCF, 0xF0, 0xF3, 0xFC, 0xFF
941};
942
943const uint8_t ff_celt_hadamard_order[] = {
944    1,   0,
945    3,   0,  2,  1,
946    7,   0,  4,  3,  6,  1,  5,  2,
947    15,  0,  8,  7, 12,  3, 11,  4, 14,  1,  9,  6, 13,  2, 10,  5,
948    0,   1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15
949};
950
951const uint16_t ff_celt_qn_exp2[] = {
952    16384, 17866, 19483, 21247, 23170, 25267, 27554, 30048
953};
954
955static const uint32_t celt_pvq_u[1272] = {
956    /* N = 0, K = 0...176 */
957    1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
958    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
959    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
960    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
961    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
962    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
963    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
964    /* N = 1, K = 1...176 */
965    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
966    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
967    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
968    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
969    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
970    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
971    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
972    /* N = 2, K = 2...176 */
973    3, 5, 7, 9, 11, 13, 15, 17, 19, 21, 23, 25, 27, 29, 31, 33, 35, 37, 39, 41,
974    43, 45, 47, 49, 51, 53, 55, 57, 59, 61, 63, 65, 67, 69, 71, 73, 75, 77, 79,
975    81, 83, 85, 87, 89, 91, 93, 95, 97, 99, 101, 103, 105, 107, 109, 111, 113,
976    115, 117, 119, 121, 123, 125, 127, 129, 131, 133, 135, 137, 139, 141, 143,
977    145, 147, 149, 151, 153, 155, 157, 159, 161, 163, 165, 167, 169, 171, 173,
978    175, 177, 179, 181, 183, 185, 187, 189, 191, 193, 195, 197, 199, 201, 203,
979    205, 207, 209, 211, 213, 215, 217, 219, 221, 223, 225, 227, 229, 231, 233,
980    235, 237, 239, 241, 243, 245, 247, 249, 251, 253, 255, 257, 259, 261, 263,
981    265, 267, 269, 271, 273, 275, 277, 279, 281, 283, 285, 287, 289, 291, 293,
982    295, 297, 299, 301, 303, 305, 307, 309, 311, 313, 315, 317, 319, 321, 323,
983    325, 327, 329, 331, 333, 335, 337, 339, 341, 343, 345, 347, 349, 351,
984    /* N = 3, K = 3...176 */
985    13, 25, 41, 61, 85, 113, 145, 181, 221, 265, 313, 365, 421, 481, 545, 613,
986    685, 761, 841, 925, 1013, 1105, 1201, 1301, 1405, 1513, 1625, 1741, 1861,
987    1985, 2113, 2245, 2381, 2521, 2665, 2813, 2965, 3121, 3281, 3445, 3613, 3785,
988    3961, 4141, 4325, 4513, 4705, 4901, 5101, 5305, 5513, 5725, 5941, 6161, 6385,
989    6613, 6845, 7081, 7321, 7565, 7813, 8065, 8321, 8581, 8845, 9113, 9385, 9661,
990    9941, 10225, 10513, 10805, 11101, 11401, 11705, 12013, 12325, 12641, 12961,
991    13285, 13613, 13945, 14281, 14621, 14965, 15313, 15665, 16021, 16381, 16745,
992    17113, 17485, 17861, 18241, 18625, 19013, 19405, 19801, 20201, 20605, 21013,
993    21425, 21841, 22261, 22685, 23113, 23545, 23981, 24421, 24865, 25313, 25765,
994    26221, 26681, 27145, 27613, 28085, 28561, 29041, 29525, 30013, 30505, 31001,
995    31501, 32005, 32513, 33025, 33541, 34061, 34585, 35113, 35645, 36181, 36721,
996    37265, 37813, 38365, 38921, 39481, 40045, 40613, 41185, 41761, 42341, 42925,
997    43513, 44105, 44701, 45301, 45905, 46513, 47125, 47741, 48361, 48985, 49613,
998    50245, 50881, 51521, 52165, 52813, 53465, 54121, 54781, 55445, 56113, 56785,
999    57461, 58141, 58825, 59513, 60205, 60901, 61601,
1000    /* N = 4, K = 4...176 */
1001    63, 129, 231, 377, 575, 833, 1159, 1561, 2047, 2625, 3303, 4089, 4991, 6017,
1002    7175, 8473, 9919, 11521, 13287, 15225, 17343, 19649, 22151, 24857, 27775,
1003    30913, 34279, 37881, 41727, 45825, 50183, 54809, 59711, 64897, 70375, 76153,
1004    82239, 88641, 95367, 102425, 109823, 117569, 125671, 134137, 142975, 152193,
1005    161799, 171801, 182207, 193025, 204263, 215929, 228031, 240577, 253575,
1006    267033, 280959, 295361, 310247, 325625, 341503, 357889, 374791, 392217,
1007    410175, 428673, 447719, 467321, 487487, 508225, 529543, 551449, 573951,
1008    597057, 620775, 645113, 670079, 695681, 721927, 748825, 776383, 804609,
1009    833511, 863097, 893375, 924353, 956039, 988441, 1021567, 1055425, 1090023,
1010    1125369, 1161471, 1198337, 1235975, 1274393, 1313599, 1353601, 1394407,
1011    1436025, 1478463, 1521729, 1565831, 1610777, 1656575, 1703233, 1750759,
1012    1799161, 1848447, 1898625, 1949703, 2001689, 2054591, 2108417, 2163175,
1013    2218873, 2275519, 2333121, 2391687, 2451225, 2511743, 2573249, 2635751,
1014    2699257, 2763775, 2829313, 2895879, 2963481, 3032127, 3101825, 3172583,
1015    3244409, 3317311, 3391297, 3466375, 3542553, 3619839, 3698241, 3777767,
1016    3858425, 3940223, 4023169, 4107271, 4192537, 4278975, 4366593, 4455399,
1017    4545401, 4636607, 4729025, 4822663, 4917529, 5013631, 5110977, 5209575,
1018    5309433, 5410559, 5512961, 5616647, 5721625, 5827903, 5935489, 6044391,
1019    6154617, 6266175, 6379073, 6493319, 6608921, 6725887, 6844225, 6963943,
1020    7085049, 7207551,
1021    /* N = 5, K = 5...176 */
1022    321, 681, 1289, 2241, 3649, 5641, 8361, 11969, 16641, 22569, 29961, 39041,
1023    50049, 63241, 78889, 97281, 118721, 143529, 172041, 204609, 241601, 283401,
1024    330409, 383041, 441729, 506921, 579081, 658689, 746241, 842249, 947241,
1025    1061761, 1186369, 1321641, 1468169, 1626561, 1797441, 1981449, 2179241,
1026    2391489, 2618881, 2862121, 3121929, 3399041, 3694209, 4008201, 4341801,
1027    4695809, 5071041, 5468329, 5888521, 6332481, 6801089, 7295241, 7815849,
1028    8363841, 8940161, 9545769, 10181641, 10848769, 11548161, 12280841, 13047849,
1029    13850241, 14689089, 15565481, 16480521, 17435329, 18431041, 19468809,
1030    20549801, 21675201, 22846209, 24064041, 25329929, 26645121, 28010881,
1031    29428489, 30899241, 32424449, 34005441, 35643561, 37340169, 39096641,
1032    40914369, 42794761, 44739241, 46749249, 48826241, 50971689, 53187081,
1033    55473921, 57833729, 60268041, 62778409, 65366401, 68033601, 70781609,
1034    73612041, 76526529, 79526721, 82614281, 85790889, 89058241, 92418049,
1035    95872041, 99421961, 103069569, 106816641, 110664969, 114616361, 118672641,
1036    122835649, 127107241, 131489289, 135983681, 140592321, 145317129, 150160041,
1037    155123009, 160208001, 165417001, 170752009, 176215041, 181808129, 187533321,
1038    193392681, 199388289, 205522241, 211796649, 218213641, 224775361, 231483969,
1039    238341641, 245350569, 252512961, 259831041, 267307049, 274943241, 282741889,
1040    290705281, 298835721, 307135529, 315607041, 324252609, 333074601, 342075401,
1041    351257409, 360623041, 370174729, 379914921, 389846081, 399970689, 410291241,
1042    420810249, 431530241, 442453761, 453583369, 464921641, 476471169, 488234561,
1043    500214441, 512413449, 524834241, 537479489, 550351881, 563454121, 576788929,
1044    590359041, 604167209, 618216201, 632508801,
1045    /* N = 6, K = 6...96 (technically V(109,5) fits in 32 bits, but that can't be
1046     achieved by splitting an Opus band) */
1047    1683, 3653, 7183, 13073, 22363, 36365, 56695, 85305, 124515, 177045, 246047,
1048    335137, 448427, 590557, 766727, 982729, 1244979, 1560549, 1937199, 2383409,
1049    2908411, 3522221, 4235671, 5060441, 6009091, 7095093, 8332863, 9737793,
1050    11326283, 13115773, 15124775, 17372905, 19880915, 22670725, 25765455,
1051    29189457, 32968347, 37129037, 41699767, 46710137, 52191139, 58175189,
1052    64696159, 71789409, 79491819, 87841821, 96879431, 106646281, 117185651,
1053    128542501, 140763503, 153897073, 167993403, 183104493, 199284183, 216588185,
1054    235074115, 254801525, 275831935, 298228865, 322057867, 347386557, 374284647,
1055    402823977, 433078547, 465124549, 499040399, 534906769, 572806619, 612825229,
1056    655050231, 699571641, 746481891, 795875861, 847850911, 902506913, 959946283,
1057    1020274013, 1083597703, 1150027593, 1219676595, 1292660325, 1369097135,
1058    1449108145, 1532817275, 1620351277, 1711839767, 1807415257, 1907213187,
1059    2011371957, 2120032959,
1060    /* N = 7, K = 7...54 (technically V(60,6) fits in 32 bits, but that can't be
1061     achieved by splitting an Opus band) */
1062    8989, 19825, 40081, 75517, 134245, 227305, 369305, 579125, 880685, 1303777,
1063    1884961, 2668525, 3707509, 5064793, 6814249, 9041957, 11847485, 15345233,
1064    19665841, 24957661, 31388293, 39146185, 48442297, 59511829, 72616013,
1065    88043969, 106114625, 127178701, 151620757, 179861305, 212358985, 249612805,
1066    292164445, 340600625, 395555537, 457713341, 527810725, 606639529, 695049433,
1067    793950709, 904317037, 1027188385, 1163673953, 1314955181, 1482288821,
1068    1667010073, 1870535785, 2094367717,
1069    /* N = 8, K = 8...37 (technically V(40,7) fits in 32 bits, but that can't be
1070     achieved by splitting an Opus band) */
1071    48639, 108545, 224143, 433905, 795455, 1392065, 2340495, 3800305, 5984767,
1072    9173505, 13726991, 20103025, 28875327, 40754369, 56610575, 77500017,
1073    104692735, 139703809, 184327311, 240673265, 311207743, 398796225, 506750351,
1074    638878193, 799538175, 993696769, 1226990095, 1505789553, 1837271615,
1075    2229491905,
1076    /* N = 9, K = 9...28 (technically V(29,8) fits in 32 bits, but that can't be
1077     achieved by splitting an Opus band) */
1078    265729, 598417, 1256465, 2485825, 4673345, 8405905, 14546705, 24331777,
1079    39490049, 62390545, 96220561, 145198913, 214828609, 312193553, 446304145,
1080    628496897, 872893441, 1196924561, 1621925137, 2173806145,
1081    /* N = 10, K = 10...24 */
1082    1462563, 3317445, 7059735, 14218905, 27298155, 50250765, 89129247, 152951073,
1083    254831667, 413442773, 654862247, 1014889769, 1541911931, 2300409629,
1084    3375210671,
1085    /* N = 11, K = 11...19 (technically V(20,10) fits in 32 bits, but that can't be
1086     achieved by splitting an Opus band) */
1087    8097453, 18474633, 39753273, 81270333, 158819253, 298199265, 540279585,
1088    948062325, 1616336765,
1089    /* N = 12, K = 12...18 */
1090    45046719, 103274625, 224298231, 464387817, 921406335, 1759885185,
1091    3248227095,
1092    /* N = 13, K = 13...16 */
1093    251595969, 579168825, 1267854873, 2653649025,
1094    /* N = 14, K = 14 */
1095    1409933619
1096};
1097
1098const float ff_celt_postfilter_taps[3][3] = {
1099    { 0.3066406250f, 0.2170410156f, 0.1296386719f },
1100    { 0.4638671875f, 0.2680664062f, 0.0           },
1101    { 0.7998046875f, 0.1000976562f, 0.0           }
1102};
1103
1104DECLARE_ALIGNED(32, static const float, ff_celt_window_padded)[136] = {
1105    0.00000000f, 0.00000000f, 0.00000000f, 0.00000000f,
1106    0.00000000f, 0.00000000f, 0.00000000f, 0.00000000f,
1107    6.7286966e-05f, 0.00060551348f, 0.0016815970f, 0.0032947962f, 0.0054439943f,
1108    0.0081276923f, 0.011344001f, 0.015090633f, 0.019364886f, 0.024163635f,
1109    0.029483315f, 0.035319905f, 0.041668911f, 0.048525347f, 0.055883718f,
1110    0.063737999f, 0.072081616f, 0.080907428f, 0.090207705f, 0.099974111f,
1111    0.11019769f, 0.12086883f, 0.13197729f, 0.14351214f, 0.15546177f,
1112    0.16781389f, 0.18055550f, 0.19367290f, 0.20715171f, 0.22097682f,
1113    0.23513243f, 0.24960208f, 0.26436860f, 0.27941419f, 0.29472040f,
1114    0.31026818f, 0.32603788f, 0.34200931f, 0.35816177f, 0.37447407f,
1115    0.39092462f, 0.40749142f, 0.42415215f, 0.44088423f, 0.45766484f,
1116    0.47447104f, 0.49127978f, 0.50806798f, 0.52481261f, 0.54149077f,
1117    0.55807973f, 0.57455701f, 0.59090049f, 0.60708841f, 0.62309951f,
1118    0.63891306f, 0.65450896f, 0.66986776f, 0.68497077f, 0.69980010f,
1119    0.71433873f, 0.72857055f, 0.74248043f, 0.75605424f, 0.76927895f,
1120    0.78214257f, 0.79463430f, 0.80674445f, 0.81846456f, 0.82978733f,
1121    0.84070669f, 0.85121779f, 0.86131698f, 0.87100183f, 0.88027111f,
1122    0.88912479f, 0.89756398f, 0.90559094f, 0.91320904f, 0.92042270f,
1123    0.92723738f, 0.93365955f, 0.93969656f, 0.94535671f, 0.95064907f,
1124    0.95558353f, 0.96017067f, 0.96442171f, 0.96834849f, 0.97196334f,
1125    0.97527906f, 0.97830883f, 0.98106616f, 0.98356480f, 0.98581869f,
1126    0.98784191f, 0.98964856f, 0.99125274f, 0.99266849f, 0.99390969f,
1127    0.99499004f, 0.99592297f, 0.99672162f, 0.99739874f, 0.99796667f,
1128    0.99843728f, 0.99882195f, 0.99913147f, 0.99937606f, 0.99956527f,
1129    0.99970802f, 0.99981248f, 0.99988613f, 0.99993565f, 0.99996697f,
1130    0.99998518f, 0.99999457f, 0.99999859f, 0.99999982f, 1.00000000f,
1131    1.00000000f, 1.00000000f, 1.00000000f, 1.00000000f, 1.00000000f,
1132    1.00000000f, 1.00000000f, 1.00000000f,
1133};
1134
1135const float *const ff_celt_window = &ff_celt_window_padded[8];
1136
1137/* square of the window, used for the postfilter */
1138const float ff_celt_window2[120] = {
1139    4.5275357e-09f, 3.66647e-07f, 2.82777e-06f, 1.08557e-05f, 2.96371e-05f, 6.60594e-05f,
1140    0.000128686f, 0.000227727f, 0.000374999f, 0.000583881f, 0.000869266f, 0.0012475f,
1141    0.0017363f, 0.00235471f, 0.00312299f, 0.00406253f, 0.00519576f, 0.00654601f,
1142    0.00813743f, 0.00999482f, 0.0121435f, 0.0146093f, 0.017418f, 0.0205957f, 0.0241684f,
1143    0.0281615f, 0.0326003f, 0.0375092f, 0.0429118f, 0.0488308f, 0.0552873f, 0.0623012f,
1144    0.0698908f, 0.0780723f, 0.0868601f, 0.0962664f, 0.106301f, 0.11697f, 0.12828f,
1145    0.140231f, 0.152822f, 0.166049f, 0.179905f, 0.194379f, 0.209457f, 0.225123f, 0.241356f,
1146    0.258133f, 0.275428f, 0.293212f, 0.311453f, 0.330116f, 0.349163f, 0.368556f, 0.388253f,
1147    0.40821f, 0.428382f, 0.448723f, 0.469185f, 0.48972f, 0.51028f, 0.530815f, 0.551277f,
1148    0.571618f, 0.59179f, 0.611747f, 0.631444f, 0.650837f, 0.669884f, 0.688547f, 0.706788f,
1149    0.724572f, 0.741867f, 0.758644f, 0.774877f, 0.790543f, 0.805621f, 0.820095f, 0.833951f,
1150    0.847178f, 0.859769f, 0.87172f, 0.88303f, 0.893699f, 0.903734f, 0.91314f, 0.921928f,
1151    0.930109f, 0.937699f, 0.944713f, 0.951169f, 0.957088f, 0.962491f, 0.9674f, 0.971838f,
1152    0.975832f, 0.979404f, 0.982582f, 0.985391f, 0.987857f, 0.990005f, 0.991863f, 0.993454f,
1153    0.994804f, 0.995937f, 0.996877f, 0.997645f, 0.998264f, 0.998753f, 0.999131f, 0.999416f,
1154    0.999625f, 0.999772f, 0.999871f, 0.999934f, 0.99997f, 0.999989f, 0.999997f, 0.99999964f, 1.0f,
1155};
1156
1157const uint32_t * const ff_celt_pvq_u_row[15] = {
1158    celt_pvq_u +    0, celt_pvq_u +  176, celt_pvq_u +  351,
1159    celt_pvq_u +  525, celt_pvq_u +  698, celt_pvq_u +  870,
1160    celt_pvq_u + 1041, celt_pvq_u + 1131, celt_pvq_u + 1178,
1161    celt_pvq_u + 1207, celt_pvq_u + 1226, celt_pvq_u + 1240,
1162    celt_pvq_u + 1248, celt_pvq_u + 1254, celt_pvq_u + 1257
1163};
1164