33 memset(fc_out, 0, len *
sizeof(int16_t));
37 for (i = 0; i <
len; i++) {
39 for (k = 0; k < i; k++)
40 fc_out[k] += (fc_in[i] * filter[len + k - i]) >> 15;
42 for (k = i; k <
len; k++)
43 fc_out[k] += (fc_in[i] * filter[ k - i]) >> 15;
49 const float *lagged,
int lag,
float fac,
int n)
52 for (k = 0; k < lag; k++)
53 out[k] = in[k] + fac * lagged[n + k - lag];
55 out[k] = in[k] + fac * lagged[ k - lag];
59 const int16_t *in,
int buffer_length,
60 int filter_length,
int stop_on_overflow,
65 for (n = 0; n < buffer_length; n++) {
67 for (i = 1; i <= filter_length; i++)
68 sum -= filter_coeffs[i-1] * out[n-i];
70 sum = (sum >> 12) + in[n];
72 if (sum + 0x8000 > 0xFFFFU) {
75 sum = (sum >> 31) ^ 32767;
84 const float* in,
int buffer_length,
89 #if 0 // Unoptimized code path for improved readability
90 for (n = 0; n < buffer_length; n++) {
92 for (i = 1; i <= filter_length; i++)
93 out[n] -= filter_coeffs[i-1] * out[n-i];
96 float out0, out1, out2, out3;
97 float old_out0, old_out1, old_out2, old_out3;
100 a = filter_coeffs[0];
101 b = filter_coeffs[1];
102 c = filter_coeffs[2];
103 b -= filter_coeffs[0] * filter_coeffs[0];
104 c -= filter_coeffs[1] * filter_coeffs[0];
105 c -= filter_coeffs[0] *
b;
111 for (n = 0; n <= buffer_length - 4; n+=4) {
112 float tmp0,tmp1,tmp2;
120 out0 -= filter_coeffs[2] * old_out1;
121 out1 -= filter_coeffs[2] * old_out2;
122 out2 -= filter_coeffs[2] * old_out3;
124 out0 -= filter_coeffs[1] * old_out2;
125 out1 -= filter_coeffs[1] * old_out3;
127 out0 -= filter_coeffs[0] * old_out3;
129 val = filter_coeffs[3];
131 out0 -= val * old_out0;
132 out1 -= val * old_out1;
133 out2 -= val * old_out2;
134 out3 -= val * old_out3;
136 for (i = 5; i <= filter_length; i += 2) {
138 val = filter_coeffs[i-1];
140 out0 -= val * old_out3;
141 out1 -= val * old_out0;
142 out2 -= val * old_out1;
143 out3 -= val * old_out2;
145 old_out2 = out[-i-1];
147 val = filter_coeffs[i];
149 out0 -= val * old_out2;
150 out1 -= val * old_out3;
151 out2 -= val * old_out0;
152 out3 -= val * old_out1;
154 FFSWAP(
float, old_out0, old_out2);
188 for (; n < buffer_length; n++) {
190 for (i = 1; i <= filter_length; i++)
191 out[n] -= filter_coeffs[i-1] * out[n-i];
197 const float *in,
int buffer_length,
202 for (n = 0; n < buffer_length; n++) {
204 for (i = 1; i <= filter_length; i++)
205 out[n] += filter_coeffs[i-1] * in[n-i];