1
0
mirror of https://github.com/FFmpeg/FFmpeg.git synced 2025-08-10 06:10:52 +02:00

avfilter/af_afir: make use of vector_fmac_scalar() too

This commit is contained in:
Paul B Mahol
2020-08-23 17:50:00 +02:00
parent 751f2a27f7
commit e2589ac650

View File

@@ -64,6 +64,16 @@ static void direct(const float *in, const FFTComplex *ir, int len, float *out)
out[n] += ir[m].re * in[n - m]; out[n] += ir[m].re * in[n - m];
} }
static void fir_fadd(AudioFIRContext *s, float *dst, const float *src, int nb_samples)
{
if ((nb_samples & 15) == 0 && nb_samples >= 16) {
s->fdsp->vector_fmac_scalar(dst, src, 1.f, nb_samples);
} else {
for (int n = 0; n < nb_samples; n++)
dst[n] += src[n];
}
}
static int fir_quantum(AVFilterContext *ctx, AVFrame *out, int ch, int offset) static int fir_quantum(AVFilterContext *ctx, AVFrame *out, int ch, int offset)
{ {
AudioFIRContext *s = ctx->priv; AudioFIRContext *s = ctx->priv;
@@ -93,9 +103,7 @@ static int fir_quantum(AVFilterContext *ctx, AVFrame *out, int ch, int offset)
memmove(src, src + s->min_part_size, (seg->input_size - s->min_part_size) * sizeof(*src)); memmove(src, src + s->min_part_size, (seg->input_size - s->min_part_size) * sizeof(*src));
dst += seg->output_offset[ch]; dst += seg->output_offset[ch];
for (n = 0; n < nb_samples; n++) { fir_fadd(s, ptr, dst, nb_samples);
ptr[n] += dst[n];
}
continue; continue;
} }
@@ -153,9 +161,7 @@ static int fir_quantum(AVFilterContext *ctx, AVFrame *out, int ch, int offset)
av_rdft_calc(seg->irdft[ch], sum); av_rdft_calc(seg->irdft[ch], sum);
buf = (float *)seg->buffer->extended_data[ch]; buf = (float *)seg->buffer->extended_data[ch];
for (n = 0; n < seg->part_size; n++) { fir_fadd(s, buf, sum, seg->part_size);
buf[n] += sum[n];
}
memcpy(dst, buf, seg->part_size * sizeof(*dst)); memcpy(dst, buf, seg->part_size * sizeof(*dst));
@@ -166,9 +172,7 @@ static int fir_quantum(AVFilterContext *ctx, AVFrame *out, int ch, int offset)
memmove(src, src + s->min_part_size, (seg->input_size - s->min_part_size) * sizeof(*src)); memmove(src, src + s->min_part_size, (seg->input_size - s->min_part_size) * sizeof(*src));
for (n = 0; n < nb_samples; n++) { fir_fadd(s, ptr, dst, nb_samples);
ptr[n] += dst[n];
}
} }
if (s->min_part_size >= 8) { if (s->min_part_size >= 8) {