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