]> git.sesse.net Git - ffmpeg/blob - libavcodec/opustab.c
avformat/avio: Add Metacube support
[ffmpeg] / libavcodec / opustab.c
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
27 const uint8_t ff_opus_default_coupled_streams[] = { 0, 1, 1, 2, 2, 2, 2, 3 };
28
29 const uint8_t ff_celt_band_end[] = { 13, 17, 17, 19, 21 };
30
31 const uint16_t ff_silk_model_lbrr_flags_40[] = { 256, 0, 53, 106, 256 };
32 const uint16_t ff_silk_model_lbrr_flags_60[] = { 256, 0, 41, 61, 90, 131, 146, 174, 256 };
33
34 const 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
39 const uint16_t ff_silk_model_stereo_s2[] = {256, 85, 171, 256};
40
41 const uint16_t ff_silk_model_stereo_s3[] = {256, 51, 102, 154, 205, 256};
42
43 const uint16_t ff_silk_model_mid_only[] = {256, 192, 256};
44
45 const uint16_t ff_silk_model_frame_type_inactive[] = {256, 26, 256};
46
47 const uint16_t ff_silk_model_frame_type_active[] = {256, 24, 98, 246, 256};
48
49 const 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
55 const uint16_t ff_silk_model_gain_lowbits[] = {256, 32, 64, 96, 128, 160, 192, 224, 256};
56
57 const 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 };
62 const 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
82 const 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
104 const uint16_t ff_silk_model_lsf_s2_ext[] = { 256, 156, 216, 240, 249, 253, 255, 256 };
105
106 const uint16_t ff_silk_model_lsf_interpolation_offset[] = { 256, 13, 35, 64, 75, 256 };
107
108 const 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
113 const uint16_t ff_silk_model_pitch_lowbits_nb[] = { 256, 64, 128, 192, 256 };
114
115 const uint16_t ff_silk_model_pitch_lowbits_mb[] = { 256, 43, 85, 128, 171, 213, 256 };
116
117 const uint16_t ff_silk_model_pitch_lowbits_wb[] = { 256, 32, 64, 96, 128, 160, 192, 224, 256 };
118
119 const 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
124 const uint16_t ff_silk_model_pitch_contour_nb10ms[] = { 256, 143, 193, 256 };
125
126 const uint16_t ff_silk_model_pitch_contour_nb20ms[] = {
127     256,  68,  80, 101, 118, 137, 159, 189, 213, 230, 246, 256
128 };
129
130 const uint16_t ff_silk_model_pitch_contour_mbwb10ms[] = {
131     256,  91, 137, 176, 195, 209, 221, 229, 236, 242, 247, 252, 256
132 };
133
134 const 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
140 const uint16_t ff_silk_model_ltp_filter[] = { 256, 77, 157, 256 };
141
142 const uint16_t ff_silk_model_ltp_filter0_sel[] = {
143     256, 185, 200, 213, 226, 235, 244, 250, 256
144 };
145
146 const 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
150 const 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
155 const uint16_t ff_silk_model_ltp_scale_index[] = { 256, 128, 192, 256 };
156
157 const uint16_t ff_silk_model_lcg_seed[] = { 256, 64, 128, 192, 256 };
158
159 const 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
164 const 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
189 const 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
261 const uint16_t ff_silk_model_excitation_lsb[] = {256, 136, 256};
262
263 const 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
321 const 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
326 const 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
361 const 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
396 const 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
401 const 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
406 const 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
441 const 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
476 const 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
511 const 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
546 const uint16_t ff_silk_lsf_min_spacing_nbmb[] = {
547     250, 3, 6, 3, 3, 3, 4, 3, 3, 3, 461
548 };
549
550 const 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
554 const uint8_t ff_silk_lsf_ordering_nbmb[] = {
555     0, 9, 6, 3, 4, 5, 8, 1, 2, 7
556 };
557
558 const 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
562 const 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
598 const uint16_t ff_silk_pitch_scale[]   = {  4,   6,   8};
599
600 const uint16_t ff_silk_pitch_min_lag[] = { 16,  24,  32};
601
602 const uint16_t ff_silk_pitch_max_lag[] = {144, 216, 288};
603
604 const int8_t ff_silk_pitch_offset_nb10ms[3][2] = {
605     { 0,  0},
606     { 1,  0},
607     { 0,  1}
608 };
609
610 const 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
624 const 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
639 const 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
676 const 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
687 const 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
706 const 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
741 const uint16_t ff_silk_ltp_scale_factor[] = {15565, 12288, 8192};
742
743 const uint8_t ff_silk_shell_blocks[3][2] = {
744     { 5, 10}, // NB
745     { 8, 15}, // MB
746     {10, 20}  // WB
747 };
748
749 const uint8_t ff_silk_quant_offset[2][2] = { /* (0.23) */
750     {25, 60}, // Inactive or Unvoiced
751     { 8, 25}  // Voiced
752 };
753
754 const int ff_silk_stereo_interp_len[3] = {
755     64, 96, 128
756 };
757
758 const uint16_t ff_celt_model_tapset[] = { 4, 2, 3, 4 };
759
760 const uint16_t ff_celt_model_spread[] = { 32, 7, 9, 30, 32 };
761
762 const uint16_t ff_celt_model_alloc_trim[] = {
763     128,   2,   4,   9,  19,  41,  87, 109, 119, 124, 126, 128
764 };
765
766 const uint16_t ff_celt_model_energy_small[] = { 4, 2, 3, 4 };
767
768 const 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
772 const 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
776 const 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 */
782 const 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
792 const 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
800 const float ff_celt_alpha_coef[] = {
801     29440.0f/32768.0f,    26112.0f/32768.0f,    21248.0f/32768.0f,    16384.0f/32768.0f
802 };
803
804 const 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
808 const 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
852 const 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
866 const 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
890 const 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
920 const 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
930 const 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
934 const 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
938 const 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
943 const 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
951 const uint16_t ff_celt_qn_exp2[] = {
952     16384, 17866, 19483, 21247, 23170, 25267, 27554, 30048
953 };
954
955 static 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
1098 const 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
1104 DECLARE_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
1135 const float *const ff_celt_window = &ff_celt_window_padded[8];
1136
1137 /* square of the window, used for the postfilter */
1138 const 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
1157 const 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 };