mapping_matrix.c (54289B)
1 /* Copyright (c) 2017 Google Inc. 2 Written by Andrew Allen */ 3 /* 4 Redistribution and use in source and binary forms, with or without 5 modification, are permitted provided that the following conditions 6 are met: 7 8 - Redistributions of source code must retain the above copyright 9 notice, this list of conditions and the following disclaimer. 10 11 - Redistributions in binary form must reproduce the above copyright 12 notice, this list of conditions and the following disclaimer in the 13 documentation and/or other materials provided with the distribution. 14 15 THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 16 ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 17 LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 18 A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER 19 OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, 20 EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, 21 PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR 22 PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF 23 LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING 24 NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS 25 SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 26 */ 27 28 #ifdef HAVE_CONFIG_H 29 #include "config.h" 30 #endif 31 32 #include "arch.h" 33 #include "float_cast.h" 34 #include "opus_private.h" 35 #include "opus_defines.h" 36 #include "mapping_matrix.h" 37 38 #define MATRIX_INDEX(nb_rows, row, col) (nb_rows * col + row) 39 40 opus_int32 mapping_matrix_get_size(int rows, int cols) 41 { 42 opus_int32 size; 43 44 /* Mapping Matrix must only support up to 255 channels in or out. 45 * Additionally, the total cell count must be <= 65004 octets in order 46 * for the matrix to be stored in an OGG header. 47 */ 48 if (rows > 255 || cols > 255) 49 return 0; 50 size = rows * (opus_int32)cols * sizeof(opus_int16); 51 if (size > 65004) 52 return 0; 53 54 return align(sizeof(MappingMatrix)) + align(size); 55 } 56 57 opus_int16 *mapping_matrix_get_data(const MappingMatrix *matrix) 58 { 59 /* void* cast avoids clang -Wcast-align warning */ 60 return (opus_int16*)(void*)((char*)matrix + align(sizeof(MappingMatrix))); 61 } 62 63 void mapping_matrix_init(MappingMatrix * const matrix, 64 int rows, int cols, int gain, const opus_int16 *data, opus_int32 data_size) 65 { 66 int i; 67 opus_int16 *ptr; 68 69 #if !defined(ENABLE_ASSERTIONS) 70 (void)data_size; 71 #endif 72 celt_assert(align(data_size) == align(rows * cols * sizeof(opus_int16))); 73 74 matrix->rows = rows; 75 matrix->cols = cols; 76 matrix->gain = gain; 77 ptr = mapping_matrix_get_data(matrix); 78 for (i = 0; i < rows * cols; i++) 79 { 80 ptr[i] = data[i]; 81 } 82 } 83 84 #ifndef DISABLE_FLOAT_API 85 void mapping_matrix_multiply_channel_in_float( 86 const MappingMatrix *matrix, 87 const float *input, 88 int input_rows, 89 opus_res *output, 90 int output_row, 91 int output_rows, 92 int frame_size) 93 { 94 /* Matrix data is ordered col-wise. */ 95 opus_int16* matrix_data; 96 int i, col; 97 98 celt_assert(input_rows <= matrix->cols && output_rows <= matrix->rows); 99 100 matrix_data = mapping_matrix_get_data(matrix); 101 102 for (i = 0; i < frame_size; i++) 103 { 104 float tmp = 0; 105 for (col = 0; col < input_rows; col++) 106 { 107 tmp += 108 matrix_data[MATRIX_INDEX(matrix->rows, output_row, col)] * 109 input[MATRIX_INDEX(input_rows, col, i)]; 110 } 111 output[output_rows * i] = FLOAT2RES((1/32768.f)*tmp); 112 } 113 } 114 115 void mapping_matrix_multiply_channel_out_float( 116 const MappingMatrix *matrix, 117 const opus_res *input, 118 int input_row, 119 int input_rows, 120 float *output, 121 int output_rows, 122 int frame_size 123 ) 124 { 125 /* Matrix data is ordered col-wise. */ 126 opus_int16* matrix_data; 127 int i, row; 128 float input_sample; 129 130 celt_assert(input_rows <= matrix->cols && output_rows <= matrix->rows); 131 132 matrix_data = mapping_matrix_get_data(matrix); 133 134 for (i = 0; i < frame_size; i++) 135 { 136 input_sample = RES2FLOAT(input[input_rows * i]); 137 for (row = 0; row < output_rows; row++) 138 { 139 float tmp = 140 (1/32768.f)*matrix_data[MATRIX_INDEX(matrix->rows, row, input_row)] * 141 input_sample; 142 output[MATRIX_INDEX(output_rows, row, i)] += tmp; 143 } 144 } 145 } 146 #endif /* DISABLE_FLOAT_API */ 147 148 void mapping_matrix_multiply_channel_in_short( 149 const MappingMatrix *matrix, 150 const opus_int16 *input, 151 int input_rows, 152 opus_res *output, 153 int output_row, 154 int output_rows, 155 int frame_size) 156 { 157 /* Matrix data is ordered col-wise. */ 158 opus_int16* matrix_data; 159 int i, col; 160 161 celt_assert(input_rows <= matrix->cols && output_rows <= matrix->rows); 162 163 matrix_data = mapping_matrix_get_data(matrix); 164 165 for (i = 0; i < frame_size; i++) 166 { 167 opus_val32 tmp = 0; 168 for (col = 0; col < input_rows; col++) 169 { 170 #if defined(FIXED_POINT) 171 tmp += 172 ((opus_int32)matrix_data[MATRIX_INDEX(matrix->rows, output_row, col)] * 173 (opus_int32)input[MATRIX_INDEX(input_rows, col, i)]) >> 8; 174 #else 175 tmp += 176 matrix_data[MATRIX_INDEX(matrix->rows, output_row, col)] * 177 input[MATRIX_INDEX(input_rows, col, i)]; 178 #endif 179 } 180 #if defined(FIXED_POINT) 181 #ifdef ENABLE_RES24 182 output[output_rows * i] = SHL32(tmp, RES_SHIFT-7); 183 #else 184 output[output_rows * i] = SATURATE16((tmp + 64) >> 7); 185 #endif 186 #else 187 output[output_rows * i] = (1/(32768.f*32768.f))*tmp; 188 #endif 189 } 190 } 191 192 void mapping_matrix_multiply_channel_out_short( 193 const MappingMatrix *matrix, 194 const opus_res *input, 195 int input_row, 196 int input_rows, 197 opus_int16 *output, 198 int output_rows, 199 int frame_size) 200 { 201 /* Matrix data is ordered col-wise. */ 202 opus_int16* matrix_data; 203 int i, row; 204 opus_int32 input_sample; 205 206 celt_assert(input_rows <= matrix->cols && output_rows <= matrix->rows); 207 208 matrix_data = mapping_matrix_get_data(matrix); 209 210 for (i = 0; i < frame_size; i++) 211 { 212 input_sample = RES2INT16(input[input_rows * i]); 213 for (row = 0; row < output_rows; row++) 214 { 215 opus_int32 tmp = 216 (opus_int32)matrix_data[MATRIX_INDEX(matrix->rows, row, input_row)] * 217 input_sample; 218 output[MATRIX_INDEX(output_rows, row, i)] += (tmp + 16384) >> 15; 219 } 220 } 221 } 222 223 void mapping_matrix_multiply_channel_in_int24( 224 const MappingMatrix *matrix, 225 const opus_int32 *input, 226 int input_rows, 227 opus_res *output, 228 int output_row, 229 int output_rows, 230 int frame_size) 231 { 232 /* Matrix data is ordered col-wise. */ 233 opus_int16* matrix_data; 234 int i, col; 235 236 celt_assert(input_rows <= matrix->cols && output_rows <= matrix->rows); 237 238 matrix_data = mapping_matrix_get_data(matrix); 239 240 for (i = 0; i < frame_size; i++) 241 { 242 opus_val64 tmp = 0; 243 for (col = 0; col < input_rows; col++) 244 { 245 tmp += 246 matrix_data[MATRIX_INDEX(matrix->rows, output_row, col)] * 247 (opus_val64)input[MATRIX_INDEX(input_rows, col, i)]; 248 } 249 #if defined(FIXED_POINT) 250 output[output_rows * i] = INT24TORES((tmp + 16384) >> 15); 251 #else 252 output[output_rows * i] = INT24TORES((1/(32768.f))*tmp); 253 #endif 254 } 255 } 256 257 void mapping_matrix_multiply_channel_out_int24( 258 const MappingMatrix *matrix, 259 const opus_res *input, 260 int input_row, 261 int input_rows, 262 opus_int32 *output, 263 int output_rows, 264 int frame_size) 265 { 266 /* Matrix data is ordered col-wise. */ 267 opus_int16* matrix_data; 268 int i, row; 269 opus_int32 input_sample; 270 271 celt_assert(input_rows <= matrix->cols && output_rows <= matrix->rows); 272 273 matrix_data = mapping_matrix_get_data(matrix); 274 275 for (i = 0; i < frame_size; i++) 276 { 277 input_sample = RES2INT24(input[input_rows * i]); 278 for (row = 0; row < output_rows; row++) 279 { 280 opus_int64 tmp = 281 (opus_int64)matrix_data[MATRIX_INDEX(matrix->rows, row, input_row)] * 282 input_sample; 283 output[MATRIX_INDEX(output_rows, row, i)] += (tmp + 16384) >> 15; 284 } 285 } 286 } 287 288 289 const MappingMatrix mapping_matrix_foa_mixing = { 6, 6, 0 }; 290 const opus_int16 mapping_matrix_foa_mixing_data[36] = { 291 16384, 0, -16384, 23170, 0, 0, 16384, 23170, 292 16384, 0, 0, 0, 16384, 0, -16384, -23170, 293 0, 0, 16384, -23170, 16384, 0, 0, 0, 294 0, 0, 0, 0, 32767, 0, 0, 0, 295 0, 0, 0, 32767 296 }; 297 298 const MappingMatrix mapping_matrix_soa_mixing = { 11, 11, 0 }; 299 const opus_int16 mapping_matrix_soa_mixing_data[121] = { 300 10923, 7723, 13377, -13377, 11585, 9459, 7723, -16384, 301 -6689, 0, 0, 10923, 7723, 13377, 13377, -11585, 302 9459, 7723, 16384, -6689, 0, 0, 10923, -15447, 303 13377, 0, 0, -18919, 7723, 0, 13377, 0, 304 0, 10923, 7723, -13377, -13377, 11585, -9459, 7723, 305 16384, -6689, 0, 0, 10923, -7723, 0, 13377, 306 -16384, 0, -15447, 0, 9459, 0, 0, 10923, 307 -7723, 0, -13377, 16384, 0, -15447, 0, 9459, 308 0, 0, 10923, 15447, 0, 0, 0, 0, 309 -15447, 0, -18919, 0, 0, 10923, 7723, -13377, 310 13377, -11585, -9459, 7723, -16384, -6689, 0, 0, 311 10923, -15447, -13377, 0, 0, 18919, 7723, 0, 312 13377, 0, 0, 0, 0, 0, 0, 0, 313 0, 0, 0, 0, 32767, 0, 0, 0, 314 0, 0, 0, 0, 0, 0, 0, 0, 315 32767 316 }; 317 318 const MappingMatrix mapping_matrix_toa_mixing = { 18, 18, 0 }; 319 const opus_int16 mapping_matrix_toa_mixing_data[324] = { 320 8208, 0, -881, 14369, 0, 0, -8192, -4163, 321 13218, 0, 0, 0, 11095, -8836, -6218, 14833, 322 0, 0, 8208, -10161, 881, 10161, -13218, -2944, 323 -8192, 2944, 0, -10488, -6218, 6248, -11095, -6248, 324 0, -10488, 0, 0, 8208, 10161, 881, -10161, 325 -13218, 2944, -8192, -2944, 0, 10488, -6218, -6248, 326 -11095, 6248, 0, 10488, 0, 0, 8176, 5566, 327 -11552, 5566, 9681, -11205, 8192, -11205, 0, 4920, 328 -15158, 9756, -3334, 9756, 0, -4920, 0, 0, 329 8176, 7871, 11552, 0, 0, 15846, 8192, 0, 330 -9681, -6958, 0, 13797, 3334, 0, -15158, 0, 331 0, 0, 8176, 0, 11552, 7871, 0, 0, 332 8192, 15846, 9681, 0, 0, 0, 3334, 13797, 333 15158, 6958, 0, 0, 8176, 5566, -11552, -5566, 334 -9681, -11205, 8192, 11205, 0, 4920, 15158, 9756, 335 -3334, -9756, 0, 4920, 0, 0, 8208, 14369, 336 -881, 0, 0, -4163, -8192, 0, -13218, -14833, 337 0, -8836, 11095, 0, 6218, 0, 0, 0, 338 8208, 10161, 881, 10161, 13218, 2944, -8192, 2944, 339 0, 10488, 6218, -6248, -11095, -6248, 0, -10488, 340 0, 0, 8208, -14369, -881, 0, 0, 4163, 341 -8192, 0, -13218, 14833, 0, 8836, 11095, 0, 342 6218, 0, 0, 0, 8208, 0, -881, -14369, 343 0, 0, -8192, 4163, 13218, 0, 0, 0, 344 11095, 8836, -6218, -14833, 0, 0, 8176, -5566, 345 -11552, 5566, -9681, 11205, 8192, -11205, 0, -4920, 346 15158, -9756, -3334, 9756, 0, -4920, 0, 0, 347 8176, 0, 11552, -7871, 0, 0, 8192, -15846, 348 9681, 0, 0, 0, 3334, -13797, 15158, -6958, 349 0, 0, 8176, -7871, 11552, 0, 0, -15846, 350 8192, 0, -9681, 6958, 0, -13797, 3334, 0, 351 -15158, 0, 0, 0, 8176, -5566, -11552, -5566, 352 9681, 11205, 8192, 11205, 0, -4920, -15158, -9756, 353 -3334, -9756, 0, 4920, 0, 0, 8208, -10161, 354 881, -10161, 13218, -2944, -8192, -2944, 0, -10488, 355 6218, 6248, -11095, 6248, 0, 10488, 0, 0, 356 0, 0, 0, 0, 0, 0, 0, 0, 357 0, 0, 0, 0, 0, 0, 0, 0, 358 32767, 0, 0, 0, 0, 0, 0, 0, 359 0, 0, 0, 0, 0, 0, 0, 0, 360 0, 0, 0, 32767 361 }; 362 363 const MappingMatrix mapping_matrix_fourthoa_mixing = { 27, 27, 0 }; 364 const opus_int16 mapping_matrix_fourthoa_mixing_data[729] = { 365 9243, 0, 16010, 0, 0, 0, 20669, 0, 366 0, 0, 0, 0, 24456, 0, 0, 0, 367 0, 0, 0, 0, 27731, 0, 0, 0, 368 0, 0, 0, 9243, 0, 10884, 11741, 0, 369 0, 3995, 17849, 9626, 0, 0, 0, -5727, 370 14399, 17315, 7625, 0, 0, 0, 0, -11747, 371 2574, 18637, 15552, 5930, 0, 0, 9243, -14302, 372 -2682, -6677, 13337, 5357, -9464, 2501, -11170, 4770, 373 -5911, 11501, 5858, 5369, 4951, 17901, -19071, -2397, 374 -9281, -9198, 7576, -4294, 7773, -8997, -3399, 0, 375 0, 9243, 9940, 11991, -3705, -5144, 16647, 7057, 376 -6206, -5941, -2698, -10194, 16781, -1788, -6256, -11772, 377 4935, 3912, -6062, -13039, 9446, -9758, -3521, -15058, 378 11089, 565, 0, 0, 9243, -15376, 3720, 2461, 379 -5285, -7989, -8660, 1278, -16087, 15811, -3249, 10500, 380 -7757, -1680, -9890, -8153, 10884, 11022, 2847, 12828, 381 5137, -2053, 8666, -5684, 14776, 0, 0, 9243, 382 -10577, 10304, -6186, 9139, -15222, 2507, -8902, -5140, 383 -145, 15562, -10596, -7311, -6197, -8753, 8667, -6014, 384 -281, 15033, 938, -11859, 548, -8456, 16735, -3654, 385 0, 0, 9243, 8974, 4839, -12343, -15472, 6066, 386 -7501, -8343, 5015, 15920, -12374, -4559, -9400, 6271, 387 4011, 5191, -9932, 14438, 4828, -8768, 1909, 12059, 388 -1565, 4707, -13711, 0, 0, 9243, 15799, 2085, 389 -1534, -3386, 4602, -9808, -447, -17267, -18054, -1167, 390 -13525, -4644, 1313, -5951, 5397, 7485, -7056, 2584, 391 -8120, 8669, 788, 13177, 2109, 18349, 0, 0, 392 9243, 12371, -10036, 1597, 2760, -17341, 1848, -2239, 393 -10509, -8474, -4577, 11164, 7935, 1441, 17430, -3436, 394 -3713, 15936, 4184, 2647, -11730, 341, -15934, 6462, 395 6581, 0, 0, 9243, -8963, 2184, 13084, -16381, 396 -2734, -9757, 3991, 6345, -18297, -5912, 7604, -4849, 397 -11100, 2290, -4304, -13305, -7488, 12338, 4805, 8505, 398 -7014, -4779, -1761, -14597, 0, 0, 9243, 1301, 399 -15498, 3799, 690, -2816, 18718, -8223, 889, 255, 400 -1768, 4485, -19951, 13097, -2278, 167, 78, -740, 401 3324, -6139, 19488, -17925, 4283, -486, 20, 0, 402 0, 9243, -13470, -6719, 5452, -10257, 12641, -4873, 403 -5116, -10595, 5856, 11389, 1502, 10876, -608, 11765, 404 -13218, 13911, -7373, -2070, -13679, -4154, 5536, -2138, 405 16643, 451, 0, 0, 9243, 2455, -3679, -15387, 406 -5277, -1261, -8697, 7906, 16112, 8147, 3208, -1690, 407 7687, 10593, -9796, -15852, -10884, -5616, 2881, 2032, 408 5246, -12735, -8796, 10928, 14833, 0, 0, 9243, 409 -6849, 2775, -14202, 13586, -2655, -9402, -5505, 10809, 410 -18013, 6231, 5444, -6041, 11288, 4958, -4078, 18799, 411 -9368, -9291, 4535, 7383, 9405, -7391, -2121, -4336, 412 0, 0, 9243, 6423, -9040, 11548, 10359, -8109, 413 -450, -14580, 6431, 10857, -15475, 3569, 9707, 6416, 414 -9607, 521, 8528, -18391, 11049, 3815, -10423, 6860, 415 6860, -883, -4221, 0, 0, 9243, 11932, -5968, 416 -8850, -14749, -9946, -6026, 7377, -4472, 5206, 14547, 417 -3406, 10508, 2526, 4411, 14543, 8444, -5822, 347, 418 12347, -1709, -9158, 105, -16265, -12642, 0, 0, 419 9243, 13044, -150, 9282, 16910, -274, -10332, -194, 420 -5864, 5428, -420, -12196, 344, -8679, 145, -18554, 421 -12695, -152, -14635, 503, 10389, 358, 5076, 522, 422 -16100, 0, 0, 9243, -8374, -13590, -1221, 1428, 423 15896, 12005, 2318, -4793, 2590, -3209, -20390, -6256, 424 -2974, 10766, 1202, -876, -6597, 5004, 19896, -1541, 425 2902, -16788, -3062, 1340, 0, 0, 9243, 9879, 426 10267, 7300, 10073, 14167, 2416, 10469, -3094, 2899, 427 17092, 9762, -7400, 7214, -5250, -8238, -3989, 5578, 428 16392, -1050, -11848, -776, -5034, -15850, -5882, 0, 429 0, 9243, -4974, -9068, 12221, -8490, 6299, -388, 430 -15478, 8702, -9920, 12723, -2810, 9668, 6905, -13040, 431 4325, -9456, 16856, -9159, -2909, -10476, 7149, 9387, 432 -7350, 233, 0, 0, 9243, 3627, -13823, -7218, 433 -3656, -7002, 12776, 13935, 2719, 2446, 8352, 9252, 434 -7676, -18413, -6212, -429, -1272, -6335, -13356, -9510, 435 295, 18926, 9934, 1112, -382, 0, 0, 9243, 436 -6383, -9343, -11326, 10097, 8329, 223, 14780, 6114, 437 -10348, -15590, -4195, 9257, -7445, -9439, -323, 7902, 438 18117, 12101, -3142, -10944, -5577, 7327, 566, -4133, 439 0, 0, 9243, 2626, 865, 15769, 5783, 317, 440 -10244, 1905, 16884, 9144, 826, -2420, -1972, -14536, 441 2413, 16939, 12500, 1482, -4906, -578, 10096, -3476, 442 -14323, 2745, 16105, 0, 0, 9243, -8975, 12086, 443 5450, -6832, -15149, 7333, 9200, -3550, -362, -13645, 444 -15525, -1391, 9428, -7091, -5442, 3105, -820, -17685, 445 -9175, -9462, 5572, -9191, -12325, -2180, 0, 0, 446 9243, -114, 11576, -11058, 177, -185, 5875, -17880, 447 8539, -198, 339, -173, -3411, -16698, 16336, -6369, 448 193, -430, 408, -75, -10806, -7225, 19670, -13817, 449 4665, 0, 0, 0, 0, 0, 0, 0, 450 0, 0, 0, 0, 0, 0, 0, 0, 451 0, 0, 0, 0, 0, 0, 0, 0, 452 0, 0, 0, 0, 32767, 0, 0, 0, 453 0, 0, 0, 0, 0, 0, 0, 0, 454 0, 0, 0, 0, 0, 0, 0, 0, 455 0, 0, 0, 0, 0, 0, 0, 0, 456 32767 457 }; 458 459 const MappingMatrix mapping_matrix_fifthoa_mixing = { 38, 38, 0 }; 460 const opus_int16 mapping_matrix_fifthoa_mixing_data[1444] = { 461 9243, 0, 16010, 0, 0, 0, 20669, 0, 462 0, 0, 0, 0, 24456, 0, 0, 0, 463 0, 0, 0, 0, 27731, 0, 0, 0, 464 0, 0, 0, 0, 0, 0, 30657, 0, 465 0, 0, 0, 0, 0, 0, 9243, 0, 466 -7023, 14387, 0, 0, -4369, -14112, 14455, 0, 467 0, 0, 10931, -510, -16777, 14031, 0, 0, 468 0, 0, -5118, 14286, 4343, -18465, 13374, 0, 469 0, 0, 0, 0, -6494, -12221, 11761, 8513, 470 -19458, 12605, 0, 0, 9243, -14128, 5093, 5547, 471 -10946, -10050, -7197, 3945, -11790, 7142, -9213, 6529, 472 -9701, -2563, -9923, -14846, 16521, 6816, 2764, 14103, 473 1118, -5537, 2977, -14168, 1228, 4866, 17430, -528, 474 10639, 2641, 10437, -1037, 11460, 1098, 1296, 15737, 475 0, 0, 9243, 1128, -14775, 6062, 955, -2329, 476 16069, -12511, 2477, 579, -2333, 3440, -14197, 18478, 477 -6050, 940, 303, -1604, 4106, -4223, 9829, -22688, 478 10647, -2604, 334, 145, -927, 3203, -6017, 4507, 479 -3812, 24212, -15600, 5198, -1023, 110, 0, 0, 480 9243, 1158, 12997, 9277, 1501, 2103, 10097, 16840, 481 5916, 1402, 3225, 2488, 2929, 19916, 12706, 3585, 482 1137, 3415, 4698, 2078, -5442, 16634, 18511, 8731, 483 2095, 850, 3061, 5733, 5225, 960, -11728, 7689, 484 20588, 14659, 5642, 1187, 0, 0, 9243, -4663, 485 -3081, -15003, 9771, 2007, -9185, 6457, 14199, -14357, 486 -4976, 3554, 6625, 11434, -7231, -11297, 17760, 8291, 487 -6267, -3368, 6712, -10837, -9107, 6524, 6793, -19531, 488 -11338, 7934, 7335, -2205, -9215, -7094, 10659, 6243, 489 -4337, -1250, 0, 0, 9243, -13515, 7679, -3831, 490 7232, -14496, -3201, -4109, -11731, 8828, 9178, -1901, 491 -10848, -539, -14888, 9626, -10860, 12703, 3824, 12334, 492 -7104, 3496, -6203, 13852, 5461, -2109, -17277, 7837, 493 -4714, 13901, 4097, 3940, 7647, 8546, 8688, -10986, 494 0, 0, 9243, 8113, -9860, 9657, 10943, -11174, 495 1426, -13300, 1915, 8178, -17833, 6805, 8309, 8100, 496 -3121, -4742, 2683, -15111, 15688, 2358, -11590, 2807, 497 2746, 8762, -7430, -2251, -5481, 16370, -4081, -9694, 498 5872, -11539, -714, -9492, 15177, -6126, 0, 0, 499 9243, 9933, -9215, -8528, -11831, -12785, -62, 10976, 500 -1811, 5593, 18018, 6100, 9455, -5237, 2758, 8971, 501 2743, -9659, -13517, 5330, -10737, -4576, -2069, -15491, 502 -8749, -7226, -5237, 9191, -181, -12277, 2815, 10540, 503 -27, 14741, 16703, 3103, 0, 0, 9243, -10067, 504 -8881, -8723, 12265, 12487, -793, 10821, -1762, -6021, 505 -18002, -5072, 9912, -4395, 2587, 9368, -2767, 10021, 506 12259, -6468, -10113, -5605, -1761, -15590, -9430, 7800, 507 5092, -8835, 2293, 12314, 1222, 10671, -329, 13745, 508 17349, 3563, 0, 0, 9243, -6485, 12991, -6743, 509 6108, -11768, 10080, -12236, 238, -2883, 13115, -13907, 510 2900, -14460, 511, 2564, 186, -7019, 19094, -11597, 511 -5472, -12058, 744, 6243, -2384, 930, 501, -11778, 512 21214, -5330, -11746, -5542, 827, 10475, -6418, 1132, 513 0, 0, 9243, 3862, 5238, -14627, -7891, 2826, 514 -7015, -10701, 13900, 11410, -6831, -1679, -9861, 6359, 515 12032, -11660, -14041, 11199, 1713, -3895, 657, 14749, 516 -3017, -11445, 8380, 15575, -15236, -346, 7690, -923, 517 10317, 3498, -13545, 354, 9093, -4476, 0, 0, 518 9243, -8417, 13183, 3418, -4018, -15498, 10685, 6294, 519 -4132, 1419, -8755, -18818, 3926, 7642, -9001, -3235, 520 2125, 3506, -13037, -16570, -4337, 6729, -13404, -7991, 521 59, 443, 5804, 6005, -15011, -9060, -11044, 3679, 522 -15434, -13685, 161, 1185, 0, 0, 9243, -5288, 523 6773, -13508, 9977, -5002, -4784, -12780, 10790, -12942, 524 11168, 519, -10890, 1326, 12078, -6274, 13780, -16427, 525 2186, 5352, -4328, 13671, 2364, -7963, 1080, -12568, 526 19336, -6557, -8574, 4084, 7277, 10433, -9273, -3178, 527 1516, 3817, 0, 0, 9243, 9660, 7817, 10093, 528 13619, 10548, -2942, 11021, 597, 9663, 17594, 1736, 529 -10794, 1814, 771, -8469, 1041, 14155, 7891, -8597, 530 -7498, -8982, 346, -12407, -11848, -6809, 1686, 9181, 531 -8306, -10247, 3538, -10706, -364, -8047, -19188, -8493, 532 0, 0, 9243, -7163, -1020, 14282, -14289, 1021, 533 -10208, -2036, 10660, -18919, 2410, 6564, 2323, -13088, 534 -1798, 3365, -19498, 3619, 12022, -1858, 9978, 3705, 535 -8969, -643, -5794, -15523, 4123, 15113, -3949, -6265, 536 -3596, 12490, 2946, -2688, 1225, -14570, 0, 0, 537 9243, -12187, 772, -10354, 17623, -1314, -10262, -1117, 538 -2885, -9937, 2249, 11267, -1763, 9572, -368, 16506, 539 -6510, -1438, -15014, 2402, 10157, 2041, 2458, 2389, 540 -19346, 19860, -1041, 8067, -3704, -10931, 2743, -9286, 541 606, -13399, -3095, 7924, 0, 0, 9243, 15545, 542 -2367, -3011, -6538, -5139, -9657, 995, -16242, -15706, 543 2557, -12952, 5226, 2508, 6353, 10156, 13593, 6966, 544 4795, 8960, 8183, -1735, 11914, -4504, 14149, 11727, 545 -6665, 10460, -3962, 10145, -7648, -1965, -9845, -6764, 546 -6938, -16633, 0, 0, 9243, 3098, 12983, -8841, 547 -3826, 5618, 10053, -16031, 4787, 3283, -8209, 6632, 548 2856, -18922, 10272, -2055, -2344, 7987, -11939, 5516, 549 -5520, -15739, 14940, -5001, 530, 1465, -6306, 13388, 550 -13243, 2513, -11772, -7170, 16572, -8384, 1426, 168, 551 0, 0, 9243, -15767, -2008, -1916, 4220, 4422, 552 -9846, 537, -17105, 17650, -1400, 13589, 4481, 1651, 553 5677, 6701, -9241, -6642, -3252, -7827, 8792, -951, 554 13182, -2522, 17586, -17005, 3845, -12562, 2213, -11472, 555 -6688, -1394, -8970, -4769, -7316, -11753, 0, 0, 556 9243, -13344, -3829, 7975, -14863, 7136, -8561, -4265, 557 -7992, -801, 9405, 8912, 7937, -5326, 5057, -17681, 558 15207, 575, 7717, -11360, 4847, 6789, 4150, 12686, 559 -10050, 16730, -12063, 322, -12920, -3313, -10267, 1980, 560 -6948, 7112, 7972, 8042, 0, 0, 9243, 7791, 561 -1021, 13949, 15180, -1111, -10208, -1989, 9348, 19199, 562 -2561, -7140, 2323, -12782, -1577, 817, 18164, -3673, 563 -12771, 2022, 9978, 3620, -7865, -156, -9155, 11924, 564 -3842, -15336, 4196, 6814, -3596, 12199, 2583, -652, 565 1936, -17637, 0, 0, 9243, -4810, -15144, -1958, 566 1315, 10175, 17406, 4142, -1348, 263, -3292, -15632, 567 -17046, -6363, 3374, 605, -227, -748, 5997, 20334, 568 14481, 8277, -6146, -1717, 5, 27, 712, 1542, 569 -9197, -23572, -10163, -9595, 9425, 3539, -17, -72, 570 0, 0, 9243, -7366, 8261, 11568, -11901, -8499, 571 -2079, 13347, 5556, -12049, -16247, -2282, -10529, 3584, 572 7585, -1577, -8464, -18652, -8902, 5913, -8688, -9287, 573 4156, -2442, -7089, -2993, -14485, -13949, 5422, 8459, 574 1638, -13285, -2531, -1826, -12132, -9456, 0, 0, 575 9243, 11716, 698, -10889, -17818, 1143, -10275, -1062, 576 -1305, 12057, -2057, -10855, -1595, 10088, -150, 15043, 577 2978, 1578, 15225, -2090, 10201, 1943, 1115, 1969, 578 -20211, -17636, 430, -9826, 3391, 10572, 2485, -9826, 579 248, -12259, -2924, 12131, 0, 0, 9243, 4361, 580 -4594, -14703, -8956, -2798, -7781, 9434, 13769, 12936, 581 6800, -2400, 9082, 8091, -10453, -11023, -15786, -11136, 582 3285, 4153, 2658, -14002, -5051, 9489, 7000, 17206, 583 15024, -2777, -8491, -42, -10626, 141, 13053, 2366, 584 -6662, -2231, 0, 0, 9243, -752, -11933, -10646, 585 1119, 1254, 6890, 17745, 7875, -1203, -2207, -1251, 586 2024, -17706, -15532, -5600, 1128, 2691, 2800, 683, 587 -9927, 9661, 19706, 12522, 3889, -978, -2789, -3992, 588 -2440, 206, 12695, 2921, -17173, -18575, -9616, -2657, 589 0, 0, 9243, 4791, -15001, -2887, -1931, -10037, 590 16885, 6048, -1020, 46, 4789, 15191, -15922, -9154, 591 2530, 823, 252, -130, -8608, -19335, 12613, 11651, 592 -4549, -2314, -172, -101, -784, 265, 12975, 21741, 593 -7551, -13101, 6856, 4710, 535, -46, 0, 0, 594 9243, -12153, -10395, 754, -1281, 17644, 2735, -1095, 595 -10274, 8359, 2200, -12593, 7083, 782, 17650, -1573, 596 1685, -16282, -2164, -530, -11878, 32, -17359, 3065, 597 6651, -5212, -3628, 19365, 965, 13180, 8243, -818, 598 7746, -3645, -14323, 1670, 0, 0, 9243, -6961, 599 -11198, 9081, -8829, 10887, 4833, -14202, 2374, -6524, 600 16339, -9417, 4737, 12284, -4394, -2691, -2683, 13690, 601 -18539, 2830, -11438, -3692, 4985, 5648, -4628, 514, 602 6225, -18409, 12672, 5311, 11170, -6928, -3407, -7595, 603 10737, -3977, 0, 0, 9243, 12099, -10405, 1294, 604 2187, -17582, 2760, -1880, -10105, -8058, -3760, 12583, 605 7058, 1346, 17376, -2667, -2829, 15710, 3705, 468, 606 -11880, 50, -17123, 5201, 6230, 4698, 6098, -18716, 607 -1665, -13088, 8285, -1400, 7696, -6196, -13429, 2770, 608 0, 0, 9243, 8602, 13392, 1722, 2070, 16090, 609 11359, 3222, -4960, -2638, 4581, 20106, 5099, 4026, 610 -10978, -1778, -1314, -6620, 6988, 18701, -2965, 3745, 611 -16745, -4461, 1300, 584, -3646, -11588, 8350, 11847, 612 -10050, 2372, -20010, -7809, 3608, 887, 0, 0, 613 9243, 14252, -1958, 7026, 13986, -3899, -9870, -1922, 614 -10736, -3693, -4527, -12333, 4376, -6080, 3475, -18537, 615 -19222, 1355, -10843, 6913, 8869, 3408, 8323, 6804, 616 -5141, -13648, 7800, 2649, 7171, 10505, -6548, 5179, 617 -5505, 13299, 2086, 15579, 0, 0, 9243, 11323, 618 9021, -6835, -10810, 14267, -489, -8613, -5689, 639, 619 -16117, 6224, -9731, -3757, -8482, 10882, 7873, 1080, 620 -11447, -6791, -10388, 4099, -6025, 18396, -5407, -7536, 621 14714, 984, 1267, -13940, -1889, 8416, 666, 16762, 622 -10106, -3418, 0, 0, 9243, 871, 4833, 15238, 623 1855, 588, -7508, 10287, 16162, 2857, 1481, -443, 624 -9392, -7758, 12910, 16506, 3837, 2588, -581, -851, 625 1928, -14879, -5066, 14950, 16498, 4773, 3842, -425, 626 -1785, -82, 10578, -1435, -15554, -2459, 16520, 16250, 627 0, 0, 9243, 14762, 5967, 1673, 3450, 12303, 628 -6027, 1394, -15022, -14571, 3402, -4217, -10507, -478, 629 -14813, -5131, -6634, -16293, -82, -15276, -1705, -1731, 630 358, -5738, 13681, 12503, -8200, -3023, -3290, -7384, 631 9272, -837, 14328, -1064, 16913, 7915, 0, 0, 632 0, 0, 0, 0, 0, 0, 0, 0, 633 0, 0, 0, 0, 0, 0, 0, 0, 634 0, 0, 0, 0, 0, 0, 0, 0, 635 0, 0, 0, 0, 0, 0, 0, 0, 636 0, 0, 0, 0, 32767, 0, 0, 0, 637 0, 0, 0, 0, 0, 0, 0, 0, 638 0, 0, 0, 0, 0, 0, 0, 0, 639 0, 0, 0, 0, 0, 0, 0, 0, 640 0, 0, 0, 0, 0, 0, 0, 0, 641 0, 0, 0, 32767 642 }; 643 644 const MappingMatrix mapping_matrix_foa_demixing = { 6, 6, 0 }; 645 const opus_int16 mapping_matrix_foa_demixing_data[36] = { 646 16384, 16384, 16384, 16384, 0, 0, 0, 23170, 647 0, -23170, 0, 0, -16384, 16384, -16384, 16384, 648 0, 0, 23170, 0, -23170, 0, 0, 0, 649 0, 0, 0, 0, 32767, 0, 0, 0, 650 0, 0, 0, 32767 651 }; 652 653 const MappingMatrix mapping_matrix_soa_demixing = { 11, 11, 3050 }; 654 const opus_int16 mapping_matrix_soa_demixing_data[121] = { 655 2771, 2771, 2771, 2771, 2771, 2771, 2771, 2771, 656 2771, 0, 0, 10033, 10033, -20066, 10033, 14189, 657 14189, -28378, 10033, -20066, 0, 0, 3393, 3393, 658 3393, -3393, 0, 0, 0, -3393, -3393, 0, 659 0, -17378, 17378, 0, -17378, -24576, 24576, 0, 660 17378, 0, 0, 0, -14189, 14189, 0, -14189, 661 -28378, 28378, 0, 14189, 0, 0, 0, 2399, 662 2399, -4799, -2399, 0, 0, 0, -2399, 4799, 663 0, 0, 1959, 1959, 1959, 1959, -3918, -3918, 664 -3918, 1959, 1959, 0, 0, -4156, 4156, 0, 665 4156, 0, 0, 0, -4156, 0, 0, 0, 666 8192, 8192, -16384, 8192, 16384, 16384, -32768, 8192, 667 -16384, 0, 0, 0, 0, 0, 0, 0, 668 0, 0, 0, 0, 8312, 0, 0, 0, 669 0, 0, 0, 0, 0, 0, 0, 0, 670 8312 671 }; 672 673 const MappingMatrix mapping_matrix_toa_demixing = { 18, 18, 0 }; 674 const opus_int16 mapping_matrix_toa_demixing_data[324] = { 675 8192, 8192, 8192, 8192, 8192, 8192, 8192, 8192, 676 8192, 8192, 8192, 8192, 8192, 8192, 8192, 8192, 677 0, 0, 0, -9779, 9779, 6263, 8857, 0, 678 6263, 13829, 9779, -13829, 0, -6263, 0, -8857, 679 -6263, -9779, 0, 0, -3413, 3413, 3413, -11359, 680 11359, 11359, -11359, -3413, 3413, -3413, -3413, -11359, 681 11359, 11359, -11359, 3413, 0, 0, 13829, 9779, 682 -9779, 6263, 0, 8857, -6263, 0, 9779, 0, 683 -13829, 6263, -8857, 0, -6263, -9779, 0, 0, 684 0, -15617, -15617, 6406, 0, 0, -6406, 0, 685 15617, 0, 0, -6406, 0, 0, 6406, 15617, 686 0, 0, 0, -5003, 5003, -10664, 15081, 0, 687 -10664, -7075, 5003, 7075, 0, 10664, 0, -15081, 688 10664, -5003, 0, 0, -8176, -8176, -8176, 8208, 689 8208, 8208, 8208, -8176, -8176, -8176, -8176, 8208, 690 8208, 8208, 8208, -8176, 0, 0, -7075, 5003, 691 -5003, -10664, 0, 15081, 10664, 0, 5003, 0, 692 7075, -10664, -15081, 0, 10664, -5003, 0, 0, 693 15617, 0, 0, 0, -6406, 6406, 0, -15617, 694 0, -15617, 15617, 0, 6406, -6406, 0, 0, 695 0, 0, 0, -11393, 11393, 2993, -4233, 0, 696 2993, -16112, 11393, 16112, 0, -2993, 0, 4233, 697 -2993, -11393, 0, 0, 0, -9974, -9974, -13617, 698 0, 0, 13617, 0, 9974, 0, 0, 13617, 699 0, 0, -13617, 9974, 0, 0, 0, 5579, 700 -5579, 10185, 14403, 0, 10185, -7890, -5579, 7890, 701 0, -10185, 0, -14403, -10185, 5579, 0, 0, 702 11826, -11826, -11826, -901, 901, 901, -901, 11826, 703 -11826, 11826, 11826, -901, 901, 901, -901, -11826, 704 0, 0, -7890, -5579, 5579, 10185, 0, 14403, 705 -10185, 0, -5579, 0, 7890, 10185, -14403, 0, 706 -10185, 5579, 0, 0, -9974, 0, 0, 0, 707 -13617, 13617, 0, 9974, 0, 9974, -9974, 0, 708 13617, -13617, 0, 0, 0, 0, 16112, -11393, 709 11393, -2993, 0, 4233, 2993, 0, -11393, 0, 710 -16112, -2993, -4233, 0, 2993, 11393, 0, 0, 711 0, 0, 0, 0, 0, 0, 0, 0, 712 0, 0, 0, 0, 0, 0, 0, 0, 713 32767, 0, 0, 0, 0, 0, 0, 0, 714 0, 0, 0, 0, 0, 0, 0, 0, 715 0, 0, 0, 32767 716 }; 717 718 const MappingMatrix mapping_matrix_fourthoa_demixing = { 27, 27, 0 }; 719 const opus_int16 mapping_matrix_fourthoa_demixing_data[729] = { 720 4870, 4484, 4870, 4347, 4440, 4726, 4683, 4821, 721 4883, 4842, 4603, 4484, 4683, 4698, 4234, 4368, 722 4603, 4783, 4783, 4820, 4821, 4347, 4820, 4440, 723 4698, 0, 0, 101, 84, -7818, 4640, -7178, 724 -5492, 4629, 8384, 6547, -4966, 617, -6345, 1061, 725 -3241, 2939, 5549, 6390, -4434, 4994, -2610, 1993, 726 -2873, 1547, -4356, -164, 0, 0, 8797, 5074, 727 -1553, 5383, 1906, 5297, 2722, 1158, -5226, 1311, 728 -7760, -3327, -1940, 1586, -4093, -2951, -214, -6873, 729 5450, -4875, -7193, -4438, 558, 5593, 5607, 0, 730 0, -26, 5761, -3723, -1460, 1195, -3065, -6357, 731 -1175, 608, 6965, 2310, 2759, -8023, -7138, 5162, 732 -3624, 5006, -809, 3592, 6209, -4159, -4968, 8150, 733 2513, -5702, 0, 0, 301, 109, 7161, -2462, 734 -2443, 5044, -7125, -2256, 1967, -9107, 259, -4928, 735 -2592, 6514, 4111, -7236, 8695, 635, 5009, -4025, 736 -1937, 4794, 3420, -3507, -400, 0, 0, -134, 737 85, 2771, 7842, -3649, -8225, 2866, 2586, -9200, 738 -1945, -1563, 6155, -720, -1061, -3494, -4513, -487, 739 8389, 7317, 3348, -3721, 3806, 371, -6896, 70, 740 0, 0, 10919, 2072, -4867, 3472, -4429, 1721, 741 -4066, -5193, 1032, -5253, 9501, -2017, -3971, -5261, 742 -306, -2737, -5137, 5713, 1237, -8, 6387, 364, 743 -5423, 3364, 2888, 0, 0, -48, 8946, 1048, 744 -2691, 602, -4332, -4302, -514, -1730, 2459, -4328, 745 -2156, 3335, -2748, -6029, 4023, 155, 897, 5268, 746 -8380, 7625, 7395, 508, 3945, -8951, 0, 0, 747 39, 4151, -5965, -3398, -7006, -3534, 2697, -8989, 748 -5237, 2913, 46, -5540, 8196, 5766, 2711, -2520, 749 -3043, -2146, -948, 4965, 1806, 2472, 8988, -1266, 750 4840, 0, 0, -407, -189, 2179, -1627, 6516, 751 259, 7196, -9449, -4905, -9766, 561, 4021, 3371, 752 -8650, 5032, 3329, 2534, 641, 2224, -5747, 1047, 753 -4074, 5252, -24, 674, 0, 0, 664, 237, 754 -2837, -4072, -1205, 8252, -5875, -1670, -2743, -3984, 755 381, 5059, 1765, 2666, -8295, 7403, 1154, -2086, 756 7622, 7105, 3677, -6943, 1050, -6632, -694, 0, 757 0, 382, -133, 5699, 7650, 5154, -5713, -1645, 758 -6902, 6181, 4450, 1151, 410, -993, 3829, 2444, 759 -2405, -6618, -9514, 5366, -1896, 5844, -2886, -1524, 760 -7321, -1007, 0, 0, 12767, -2530, 3183, -1409, 761 -4015, -2894, -5155, -1710, 3841, -2107, -10274, 5119, 762 3979, -4010, 5550, 4822, -746, -2507, -3080, 4289, 763 -3675, 4333, -1416, -1230, -1122, 0, 0, 17, 764 8048, 2398, -2167, -73, -3606, 3125, 398, 731, 765 -5973, 5705, -1032, 4679, 7305, 3134, 1301, -3858, 766 -89, 2938, 4359, -9155, -4805, -8407, 3673, -8645, 767 0, 0, 187, 7355, 3145, -6719, -4432, -5939, 768 2541, -2810, 9723, 778, -1105, 5687, -4174, 2534, 769 -4461, 1017, -244, 5481, -1655, -6765, -3350, -4894, 770 1592, -2318, 8827, 0, 0, 196, 3588, 9631, 771 3063, -4564, 6043, 2683, 2595, -2488, -2186, 173, 772 -6059, -8270, -2386, 409, 7441, -8608, 376, -4364, 773 2321, -280, 97, 8331, -3022, -4721, 0, 0, 774 117, -748, -10833, 1533, 4200, -2875, -997, -109, 775 -3661, -6119, 4454, 8808, -9189, 8294, 1521, 7265, 776 -2348, -5094, -948, -5400, -3193, 8914, 5763, 1716, 777 -1070, 0, 0, 2497, 399, -5201, -2038, 7843, 778 -376, 7567, -5073, 7616, -5537, 2086, -3453, -5544, 779 -56, -11648, -1314, 3546, -3432, -117, 8694, -4245, 780 9621, 3098, -2582, -2351, 0, 0, 4386, -3104, 781 -3132, -10512, 566, 5217, 5128, 4967, 1348, 7035, 782 -1470, 91, -125, -3548, 8244, -3029, -10033, 2186, 783 9745, -6440, -2074, 3638, -1477, -7045, -562, 0, 784 0, 2154, 8116, -6102, 6570, 12998, -712, -4126, 785 -4996, 30, 1571, -6393, -12794, 425, 5036, 1190, 786 5763, 5653, 12933, -6671, 5197, -2964, -3316, -6354, 787 -10554, -2652, 0, 0, 12618, -3737, 93, -5901, 788 4262, -3364, 4444, 3103, -2767, 3403, 4925, -2584, 789 -989, 4977, -3714, -1965, 3076, 326, -2946, -2568, 790 1026, -2980, 3362, -6132, -5966, 0, 0, 6001, 791 48, -1979, -7275, 3476, -2096, 10591, 3793, 2629, 792 -447, -14747, -3689, -5525, 8358, 6883, -9703, -4556, 793 7471, 2965, 4056, 13221, -7327, -3073, -2353, -6720, 794 0, 0, 621, 11034, -44, -2828, 5978, -1850, 795 -1772, 3894, -7471, -1397, 945, -2028, -2928, -2240, 796 3172, 2222, 4544, -4243, -5645, 3745, 2573, 3511, 797 -8206, -7286, 5700, 0, 0, 321, 10818, -4982, 798 7813, -749, 9907, 1360, -1443, 568, -1103, 2305, 799 6045, 2270, -1063, -1920, -3073, 5893, -3476, -11346, 800 -1657, -588, 2957, -2287, -8527, -8041, 0, 0, 801 119, -268, 2372, -3040, 4979, -3789, -5630, 10619, 802 5900, -5109, -4585, -3862, 10467, -3527, -385, -10034, 803 -9991, 4860, 984, 2362, 2311, -6804, 6324, 433, 804 5291, 0, 0, 0, 0, 0, 0, 0, 805 0, 0, 0, 0, 0, 0, 0, 0, 806 0, 0, 0, 0, 0, 0, 0, 0, 807 0, 0, 0, 0, 32767, 0, 0, 0, 808 0, 0, 0, 0, 0, 0, 0, 0, 809 0, 0, 0, 0, 0, 0, 0, 0, 810 0, 0, 0, 0, 0, 0, 0, 0, 811 32767 812 }; 813 814 const MappingMatrix mapping_matrix_fifthoa_demixing = { 38, 38, 0 }; 815 const opus_int16 mapping_matrix_fifthoa_demixing_data[1444] = { 816 3188, 3247, 3268, 3368, 3368, 3138, 3268, 3099, 817 3211, 3368, 3099, 3247, 3211, 3368, 3368, 3368, 818 3149, 3268, 3247, 3211, 3099, 3188, 3138, 3149, 819 3099, 3188, 3368, 3149, 3188, 3247, 3268, 3138, 820 3211, 3368, 3138, 3149, 0, 0, 118, -47, 821 -5011, 282, 333, -1497, -4584, 2908, 3388, -3647, 822 -2493, 1139, -2882, -1719, 3604, -2543, -4328, 5443, 823 1286, -5498, -4583, 2510, -1743, -2556, 4168, 1446, 824 -290, 1812, -4074, -2377, 4152, 2847, 4991, 3980, 825 393, 5072, 0, 0, 5489, -2235, 1507, -5326, 826 4609, -1096, 2926, -3427, -3301, -3078, 4226, 1730, 827 4627, 2561, 2966, -592, 143, -677, 4617, -755, 828 -956, -433, -5138, 3037, 157, -1394, -4498, -4984, 829 -3661, -4112, -3756, 4628, -570, 3356, 1605, 1803, 830 0, 0, -162, 5162, 2132, 2392, 3556, -5141, 831 -1536, 2975, -3001, -3350, -2231, -5230, 1294, -4965, 832 3494, 5230, -3292, -1359, -2945, -773, 2670, 4867, 833 -660, 3720, -3415, -5112, -3700, -1211, 407, 3013, 834 763, 591, 2481, -2657, 5210, 784, 0, 0, 835 -156, 338, -4246, 510, 462, 3296, 2846, 3333, 836 -4292, 4574, 1940, -2986, -1275, 3701, 5022, -5250, 837 5780, -2676, -1180, 1516, -4852, 4877, 342, -3923, 838 -5703, -2920, 379, -657, -361, -3346, 1044, 795, 839 5257, -4004, 698, 1115, 0, 0, 47, -140, 840 -3292, -1097, 652, 855, -5260, -3691, -4470, 4521, 841 -3863, 1093, -5552, -2016, 3831, 334, -456, -1532, 842 2068, 1788, 2054, -295, 3668, -2820, 328, -994, 843 295, -3301, 5770, 4282, -6353, 5632, -1371, 5005, 844 238, 4041, 0, 0, 6764, -1659, -2730, 5726, 845 3715, -3216, -933, 531, -52, -345, 3022, -2818, 846 4005, -1617, -1189, -3748, -3403, -3592, 4040, -3553, 847 -2806, -3444, 6023, -711, -3298, -2503, 2548, 5564, 848 940, 1848, 1207, 4010, -3488, -358, -2511, -1966, 849 0, 0, -64, -5039, 1403, -4455, 6240, 2189, 850 -1716, -4348, 4183, 3951, -4042, -3606, 2399, -4563, 851 4050, -612, -395, 348, -5791, 391, -1440, -735, 852 1398, 4359, -518, 2969, 6556, 1951, -518, -4993, 853 -925, 998, -569, -2934, 3460, 420, 0, 0, 854 16, 5482, -4122, 770, 2082, 5020, -3961, 485, 855 -584, -793, 3, 5222, -1416, 3673, 78, 3549, 856 -937, -5723, 1673, -6162, -2540, 3082, -355, 1838, 857 -615, 4601, 2832, -359, -3346, 668, -3393, -1583, 858 -3774, -2206, 5754, -4961, 0, 0, -328, 299, 859 2470, 317, 525, -4494, 2805, 2617, 2383, -2363, 860 -1037, 4085, 895, -4622, 3218, -6607, -3381, -5933, 861 1397, 6394, -446, 5694, 14, -4510, 4329, 3690, 862 -334, 0, 2932, -2478, -2944, -577, -599, -230, 863 1553, -4736, 0, 0, -324, 142, -3252, -867, 864 1111, -1882, 3378, -6055, 6502, -6840, 4280, -2694, 865 -2876, 4190, 6454, 655, 1061, 626, -2669, -798, 866 3192, -985, -898, -5482, -548, 2315, -558, 1302, 867 900, 5747, -1325, 1599, -1384, -5749, 624, 1110, 868 0, 0, 321, 312, 2188, 1322, 237, 708, 869 -304, 2463, 1500, -1094, -5112, -1010, -6799, 646, 870 992, 1969, 3423, -3996, 2628, 4451, 3432, -2833, 871 -6101, -330, -3768, -3, -707, 5961, -4037, -3736, 872 4080, 7254, -4113, 2151, 54, -2150, 0, 0, 873 7735, 4064, -3884, -5240, 577, 2229, -3947, 2914, 874 3555, 4011, 774, -3519, 1985, -3701, -3824, 330, 875 -905, 2085, 1155, 2176, 3006, 340, -5533, -3264, 876 -902, 3114, 344, -5060, 1524, 1805, 1926, 2350, 877 1905, -3203, -2762, -4162, 0, 0, 193, -151, 878 -1434, 6289, 7354, 4234, 169, 2868, -1977, -1375, 879 -4987, 2345, 2742, 599, 939, -4837, 2688, 991, 880 -6907, 716, -1542, -4346, -1833, 1493, 3134, 2903, 881 -7019, -2835, 93, 4395, 621, 870, -2357, -975, 882 -2933, -127, 0, 0, -616, -5968, -3479, -1651, 883 4932, -2445, -5512, -1451, 691, 739, 479, 4227, 884 -2886, 3853, 8, -501, 188, 1990, 3842, 2270, 885 1662, -174, 1290, 2456, 67, -3267, -5535, 483, 886 5721, -1642, 6501, -3432, 1184, -3246, 4101, -4880, 887 0, 0, -465, 5264, -4812, 682, 1683, -4539, 888 2916, -1985, 2899, 3324, 1060, -4398, -745, -2137, 889 -3827, 1044, 6225, 3609, -532, 1980, -6001, 564, 890 -209, -1299, 5336, -3605, -1484, 37, 19, -1295, 891 -665, -385, -6773, 3651, 6153, -1291, 0, 0, 892 193, -415, 5166, -110, 626, 6743, -2860, 1425, 893 1101, -1341, 80, -4533, 249, 4231, -119, -6009, 894 -2970, 5170, -822, -2610, 4527, 5948, 182, -2589, 895 837, -5471, 371, -43, 373, -665, -1233, -626, 896 -7353, 2606, 1339, -1398, 0, 0, -533, 147, 897 2075, -672, 1043, 3503, 4402, -4971, -3287, 3731, 898 -2606, 3817, 1972, -5603, 5114, 1185, -1318, 1906, 899 3018, -1999, 343, -1943, 207, -6744, 913, -4060, 900 645, -349, -5667, 4766, 5575, -1733, 1116, 160, 901 1534, -5690, 0, 0, -137, -36, 1556, 1325, 902 1553, -2230, 1188, 5296, -5104, 4673, 6295, 498, 903 -4723, 933, 2994, 4067, -4700, 1758, -4116, -1252, 904 2444, -4092, 1653, -2802, 5069, 1133, 790, -2355, 905 -934, -6304, 1642, 2045, -4259, -3873, -213, 215, 906 0, 0, -364, 423, 4888, -1316, 118, -950, 907 4027, 114, 2961, -3136, -3012, -883, -6192, 1340, 908 -3210, -1193, 1376, 3128, 1596, -2994, -3194, 533, 909 8502, 2487, -1485, 1032, 301, -8007, -577, 887, 910 297, 7778, 3121, -1901, -94, -6401, 0, 0, 911 9260, -1845, 668, 2787, -2255, 2699, -2512, -3737, 912 -3675, -3601, -1803, 210, -1701, -1442, -2700, 3457, 913 2868, 2079, -2113, 3178, 1277, 3578, 5240, -2482, 914 3324, 1020, -4027, 3835, -3758, -3633, -3170, -1310, 915 2509, -3110, 713, 174, 0, 0, -399, 4969, 916 -2321, -7744, 6494, -3776, 1478, 758, -1794, -2233, 917 -4059, 4932, 2770, 4761, -3475, 1243, 829, -651, 918 -5358, -436, 2381, 1360, 2561, -3118, 858, -4366, 919 3933, 3646, -43, -1310, -16, 924, 1197, 1415, 920 -5036, -376, 0, 0, 100, 1410, 1290, 3199, 921 7091, -3638, -2641, 1118, 45, -441, 794, -974, 922 -5033, 889, 438, -3102, 895, 3555, 4672, 4795, 923 1129, -2408, -2153, 1742, 159, -2040, 7578, -2006, 924 -5737, 1986, -5568, -6413, 2428, -1387, -2441, 667, 925 0, 0, -37, -6031, -4434, -904, 3290, 1806, 926 4736, 2516, -5905, -5927, 1754, -4300, -2468, -2203, 927 -4836, -672, 1444, -1591, -1631, -1789, 4311, -153, 928 -688, -1222, 1058, 3139, 4659, -353, 1543, 1838, 929 2180, -1448, 2432, 6277, 5304, -1692, 0, 0, 930 -280, 4506, 807, -477, 823, 3550, 1427, -1856, 931 -3003, -3501, -1203, 2679, 933, 778, -4954, -1977, 932 -7458, 4687, 435, 7045, -4053, -3130, 257, -3917, 933 -6165, 1889, 927, 235, 1889, -1097, 1985, 630, 934 -2172, -2130, 7080, 4810, 0, 0, -300, 496, 935 2808, 279, 667, -7179, -2661, -526, -2832, 1751, 936 2849, 4829, -906, -4151, -1124, -3062, 8166, 5361, 937 -1656, -6017, 3265, 2551, -864, -432, -6966, 6295, 938 -168, 901, 442, -582, 269, 236, -3574, 799, 939 472, 565, 0, 0, 805, -2466, 6208, -4592, 940 -170, -6701, -5610, 3678, -4242, 4561, -724, -5534, 941 2415, 7354, 2761, 2699, -349, 3822, -2372, 1756, 942 -5523, -3445, -588, -5749, -3986, 9804, -3871, 5375, 943 -2308, 5504, -2766, -1651, 1472, 6832, 2705, -5104, 944 0, 0, -700, -1179, 4402, 400, 1383, 939, 945 -1342, 6013, 2577, -3472, 472, 2883, 1450, -3917, 946 2849, 5084, 4990, 5392, 342, -4925, -3329, -5372, 947 -2674, -6035, -5072, -836, 179, 2506, 7987, -3647, 948 -8202, -1437, 1891, 2400, 1607, -3611, 0, 0, 949 -4706, -4003, 9928, -379, 5557, 3738, -8789, 685, 950 1937, -5157, 13388, 7995, -4119, -9909, -5079, 4804, 951 5586, 774, -5430, 299, -9943, 3264, -3690, -3901, 952 -1133, -6199, 3182, 1544, 5467, 3686, -2639, 4068, 953 1163, -185, -1299, -506, 0, 0, 843, 1005, 954 -1059, 467, -1279, -2259, 6057, -1694, -5885, 5342, 955 -5160, -3748, -1382, 4420, -697, -2000, -3808, 3100, 956 2685, -4073, 531, 318, -7822, 2414, 2901, 3399, 957 -1340, 8449, 3685, 463, -3341, 2423, 2304, -2723, 958 84, -2622, 0, 0, 12088, -265, 2562, -435, 959 -4348, -2426, 3538, 1552, 1279, 883, -4166, 2634, 960 -6130, 2994, 3729, -1570, -601, -1753, -5124, -2788, 961 -2096, -1920, -2649, 2793, -1079, -1952, 2983, -1530, 962 2499, 1769, 1492, -6757, -2108, 2841, 1466, 2597, 963 0, 0, -3830, -4093, 2448, 12720, 7737, -665, 964 -832, -9257, 2971, -2400, 791, 1873, 1072, -587, 965 -7440, 8055, 1531, -4736, 616, -1782, -2982, 9663, 966 -5057, -5926, 1610, -4489, 7033, -8658, 6010, -5673, 967 5648, 812, -271, -1802, -4500, 4392, 0, 0, 968 -888, -327, 3373, -1084, 7959, 2430, 1898, -2360, 969 -1820, -1377, -1090, -4436, -3422, -1106, -3230, 3876, 970 -41, -5128, 6375, -1848, -3824, 5844, 617, -1957, 971 4232, 1345, -1439, -83, 3046, -214, 5458, -5566, 972 -4387, -3738, -5740, 8657, 0, 0, 6978, 6239, 973 -3686, -981, -2854, 78, 5859, -357, 4618, 7391, 974 -138, 971, -5799, 2135, 4478, -7004, -5949, 1668, 975 -6933, -1163, 7010, -5624, 2990, 6192, -8075, 3567, 976 -8308, 2236, -5098, -2120, -4355, -4238, 4955, 10230, 977 692, -5606, 0, 0, -1348, -7069, -12, -4927, 978 1211, 651, 1360, 7744, 3404, 5069, -2438, -105, 979 2332, 1494, -4686, 1336, -3628, -881, 2474, 1736, 980 -26, -257, 2135, -4452, 446, -641, -4704, 2605, 981 -6436, 6662, -4939, 990, -1100, -3782, 5028, 4753, 982 0, 0, -2875, 6410, 3518, 3950, 1271, 869, 983 -2842, -5837, 1532, -2899, 1140, -597, 1712, -1988, 984 -4819, -4783, 4773, -8796, 2240, -4596, 3565, -4853, 985 -556, -3974, 7366, -4370, 3113, -3548, 3552, -5450, 986 3869, 2514, 6736, -4570, 6074, 3151, 0, 0, 987 0, 0, 0, 0, 0, 0, 0, 0, 988 0, 0, 0, 0, 0, 0, 0, 0, 989 0, 0, 0, 0, 0, 0, 0, 0, 990 0, 0, 0, 0, 0, 0, 0, 0, 991 0, 0, 0, 0, 32767, 0, 0, 0, 992 0, 0, 0, 0, 0, 0, 0, 0, 993 0, 0, 0, 0, 0, 0, 0, 0, 994 0, 0, 0, 0, 0, 0, 0, 0, 995 0, 0, 0, 0, 0, 0, 0, 0, 996 0, 0, 0, 32767 997 };