tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

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 };