const TYPE_COEFF()

in src/cubeb_mixer.cpp [440:478]


         const TYPE_COEFF (&matrix_coeff)[COLS][COLS], F && aF, uint32_t frames)
{
  static_assert(
      std::is_same<TYPE_COEFF, decltype(aF(matrix_coeff[0][0]))>::value,
      "function must return the same type as used by matrix_coeff");

  for (uint32_t out_i = 0; out_i < s->_out_ch_count; out_i++) {
    TYPE * out = aOut + out_i;
    switch (s->_matrix_ch[out_i][0]) {
    case 0:
      for (uint32_t i = 0; i < frames; i++) {
        out[i * s->_out_ch_count] = 0;
      }
      break;
    case 1: {
      int in_i = s->_matrix_ch[out_i][1];
      copy(out, s->_out_ch_count, aIn + in_i, s->_in_ch_count,
           matrix_coeff[out_i][in_i], aF, frames);
    } break;
    case 2:
      sum2(out, s->_out_ch_count, aIn + s->_matrix_ch[out_i][1],
           aIn + s->_matrix_ch[out_i][2], s->_in_ch_count,
           matrix_coeff[out_i][s->_matrix_ch[out_i][1]],
           matrix_coeff[out_i][s->_matrix_ch[out_i][2]], aF, frames);
      break;
    default:
      for (uint32_t i = 0; i < frames; i++) {
        TYPE_COEFF v = 0;
        for (uint32_t j = 0; j < s->_matrix_ch[out_i][0]; j++) {
          uint32_t in_i = s->_matrix_ch[out_i][1 + j];
          v += *(aIn + in_i + i * s->_in_ch_count) * matrix_coeff[out_i][in_i];
        }
        out[i * s->_out_ch_count] = aF(v);
      }
      break;
    }
  }
  return 0;
}