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)
43 static double scalarproduct_double(
const double *v1,
const double *v2,
int len)
47 for (
int i = 0;
i <
len;
i++)
57 const int order =
s->order;
65 output =
s->fdsp->scalarproduct_float(delay,
tmp,
s->kernel_size);
67 output = scalarproduct_double(delay,
tmp,
s->kernel_size);
78 ftype *coeffs = (
ftype *)
s->coeffs->extended_data[ch];
79 ftype *delay = (
ftype *)
s->delay->extended_data[ch];
80 ftype *gains = (
ftype *)
s->gains->extended_data[ch];
85 int *offsetp = (
int *)
s->offset->extended_data[ch];
86 const int kernel_size =
s->kernel_size;
87 const int order =
s->order;
88 const ftype lambda =
s->lambda;
99 const int ikernel_size =
i * kernel_size;
103 u[
i] += p[ikernel_size + k] * delay[
pos];
110 for (
int i = 0;
i < order;
i++) {
111 const int ikernel_size =
i * kernel_size;
114 coeffs[
i] = coeffs[order +
i] = coeffs[
i] + gains[
i] * e;
117 tmp[
i] += p[ikernel_size + k] * delay[
pos];
120 for (
int i = 0;
i < order;
i++) {
121 const int ikernel_size =
i * kernel_size;
123 for (
int k = 0; k < order; k++)
124 dp[ikernel_size + k] = gains[
i] *
tmp[k];
127 for (
int i = 0;
i < order;
i++) {
128 const int ikernel_size =
i * kernel_size;
130 for (
int k = 0; k < order; k++)
131 p[ikernel_size + k] = (p[ikernel_size + k] - (dp[ikernel_size + k] + dp[kernel_size * k +
i]) *
HALF) * lambda;
134 switch (
s->output_mode) {
148 const int start = (
out->ch_layout.nb_channels * jobnr) / nb_jobs;
149 const int end = (
out->ch_layout.nb_channels * (jobnr+1)) / nb_jobs;
151 for (
int c = start;
c < end;
c++) {
153 const ftype *desired = (
const ftype *)
s->frame[1]->extended_data[
c];
156 for (
int n = 0; n <
out->nb_samples; n++) {
158 if (
ctx->is_disabled)