aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPaul B Mahol <onemda@gmail.com>2023-04-27 22:47:31 +0200
committerPaul B Mahol <onemda@gmail.com>2023-04-27 22:53:13 +0200
commit4e57a0f35a56a4524648530ae6fd9c7f7770d8ca (patch)
treef0765d3b7c427d95218f4f5fb7ede65054c77a26
parent19148a5b9f44bed660258a5896d1d12d77d3d9ab (diff)
downloadffmpeg-4e57a0f35a56a4524648530ae6fd9c7f7770d8ca.tar.gz
avfilter/afir_template: avoid multiplications if memcpy is enough
-rw-r--r--libavfilter/afir_template.c13
1 files changed, 8 insertions, 5 deletions
diff --git a/libavfilter/afir_template.c b/libavfilter/afir_template.c
index 0f0500d8b3..7c6573eeec 100644
--- a/libavfilter/afir_template.c
+++ b/libavfilter/afir_template.c
@@ -294,6 +294,7 @@ static int fn(fir_quantum)(AVFilterContext *ctx, AVFrame *out, int ch, int ioffs
const int nb_samples = FFMIN(min_part_size, out->nb_samples - offset);
const int nb_segments = s->nb_segments[selir];
const float dry_gain = s->dry_gain;
+ const float wet_gain = s->wet_gain;
for (int segment = 0; segment < nb_segments; segment++) {
AudioFIRSegment *seg = &s->seg[selir][segment];
@@ -310,7 +311,9 @@ static int fn(fir_quantum)(AVFilterContext *ctx, AVFrame *out, int ch, int ioffs
int j;
seg->part_index[ch] = seg->part_index[ch] % nb_partitions;
- if (min_part_size >= 8) {
+ if (dry_gain == 1.f) {
+ memcpy(src + input_offset, in, nb_samples * sizeof(*src));
+ } else if (min_part_size >= 8) {
#if DEPTH == 32
s->fdsp->vector_fmul_scalar(src + input_offset, in, dry_gain, FFALIGN(nb_samples, 4));
#else
@@ -374,19 +377,19 @@ static int fn(fir_quantum)(AVFilterContext *ctx, AVFrame *out, int ch, int ioffs
seg->part_index[ch] = (seg->part_index[ch] + 1) % nb_partitions;
}
- if (s->wet_gain == 1.f)
+ if (wet_gain == 1.f)
return 0;
if (min_part_size >= 8) {
#if DEPTH == 32
- s->fdsp->vector_fmul_scalar(ptr, ptr, s->wet_gain, FFALIGN(nb_samples, 4));
+ s->fdsp->vector_fmul_scalar(ptr, ptr, wet_gain, FFALIGN(nb_samples, 4));
#else
- s->fdsp->vector_dmul_scalar(ptr, ptr, s->wet_gain, FFALIGN(nb_samples, 8));
+ s->fdsp->vector_dmul_scalar(ptr, ptr, wet_gain, FFALIGN(nb_samples, 8));
#endif
emms_c();
} else {
for (int n = 0; n < nb_samples; n++)
- ptr[n] *= s->wet_gain;
+ ptr[n] *= wet_gain;
}
return 0;