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