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