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