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