27 int firorder,
int iirorder,
28 unsigned int filter_shift,
int32_t mask,
int blocksize,
33 const int32_t *fircoeff = coeff;
37 for (i = 0; i < blocksize; i++) {
38 int32_t residual = *sample_buffer;
43 for (order = 0; order < firorder; order++)
44 accum += (int64_t) firbuf[order] * fircoeff[order];
45 for (order = 0; order < iirorder; order++)
46 accum += (int64_t) iirbuf[order] * iircoeff[order];
48 accum = accum >> filter_shift;
49 result = (accum + residual) & mask;
52 *--iirbuf = result - accum;
54 *sample_buffer = result;
62 const int8_t *noise_buffer,
67 int matrix_noise_shift,
68 int access_unit_size_pow2,
71 unsigned int src_ch, i;
72 int index2 = 2 * index + 1;
73 for (i = 0; i < blockpos; i++) {
76 for (src_ch = 0; src_ch <= maxchan; src_ch++)
77 accum += (int64_t) samples[src_ch] * coeffs[src_ch];
79 if (matrix_noise_shift) {
80 index &= access_unit_size_pow2 - 1;
81 accum += noise_buffer[
index] << (matrix_noise_shift + 7);
85 samples[dest_ch] = ((accum >> 14) & mask) + *bypassed_lsbs;
104 int8_t *output_shift,
105 uint8_t max_matrix_channel,
108 unsigned int i, out_ch = 0;
110 int16_t *data_16 =
data;
112 for (i = 0; i < blockpos; i++) {
113 for (out_ch = 0; out_ch <= max_matrix_channel; out_ch++) {
114 int mat_ch = ch_assign[out_ch];
116 << output_shift[mat_ch];
117 lossless_check_data ^= (sample & 0xffffff) << mat_ch;
119 *data_32++ = sample << 8;
121 *data_16++ = sample >> 8;
124 return lossless_check_data;