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