25 #define SAMPLE_FORMAT float
31 #define SAMPLE_FORMAT double
38 #define fn3(a,b) a##_##b
39 #define fn2(a,b) fn3(a,b)
40 #define fn(a) fn2(a, SAMPLE_FORMAT)
45 const int order =
s->order;
53 output =
s->fdsp->scalarproduct_float(delay,
tmp,
s->kernel_size);
55 output =
s->fdsp->scalarproduct_double(delay,
tmp,
s->kernel_size);
66 ftype *coeffs = (
ftype *)
s->coeffs->extended_data[ch];
67 ftype *delay = (
ftype *)
s->delay->extended_data[ch];
68 ftype *gains = (
ftype *)
s->gains->extended_data[ch];
73 int *offsetp = (
int *)
s->offset->extended_data[ch];
74 const int kernel_size =
s->kernel_size;
75 const int order =
s->order;
76 const ftype lambda =
s->lambda;
87 const int ikernel_size =
i * kernel_size;
91 u[
i] += p[ikernel_size + k] * delay[
pos];
98 for (
int i = 0;
i < order;
i++) {
99 const int ikernel_size =
i * kernel_size;
102 coeffs[
i] = coeffs[order +
i] = coeffs[
i] + gains[
i] * e;
105 tmp[
i] += p[ikernel_size + k] * delay[
pos];
108 for (
int i = 0;
i < order;
i++) {
109 const int ikernel_size =
i * kernel_size;
111 for (
int k = 0; k < order; k++)
112 dp[ikernel_size + k] = gains[
i] *
tmp[k];
115 for (
int i = 0;
i < order;
i++) {
116 const int ikernel_size =
i * kernel_size;
118 for (
int k = 0; k < order; k++)
119 p[ikernel_size + k] = (p[ikernel_size + k] - (dp[ikernel_size + k] + dp[kernel_size * k +
i]) *
HALF) * lambda;
122 switch (
s->output_mode) {
136 const int start = (
out->ch_layout.nb_channels * jobnr) / nb_jobs;
137 const int end = (
out->ch_layout.nb_channels * (jobnr+1)) / nb_jobs;
139 for (
int c = start;
c < end;
c++) {
141 const ftype *desired = (
const ftype *)
s->frame[1]->extended_data[
c];
144 for (
int n = 0; n <
out->nb_samples; n++) {
146 if (
ctx->is_disabled)