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