[FFmpeg-cvslog] avfilter/af_afir: properly split IR into multiple segments

Paul B Mahol git at videolan.org
Sun Dec 30 14:42:59 EET 2018


ffmpeg | branch: master | Paul B Mahol <onemda at gmail.com> | Sat Dec 29 10:57:58 2018 +0100| [300dc45fdca43fe1e308d37be8cded550d7b3a1e] | committer: Paul B Mahol

avfilter/af_afir: properly split IR into multiple segments

> http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=300dc45fdca43fe1e308d37be8cded550d7b3a1e
---

 libavfilter/af_afir.c | 6 ++++--
 1 file changed, 4 insertions(+), 2 deletions(-)

diff --git a/libavfilter/af_afir.c b/libavfilter/af_afir.c
index 0d626063b5..3dda875e35 100644
--- a/libavfilter/af_afir.c
+++ b/libavfilter/af_afir.c
@@ -387,6 +387,7 @@ static int convert_coeffs(AVFilterContext *ctx)
 
     for (ch = 0; ch < ctx->inputs[1]->channels; ch++) {
         float *time = (float *)s->in[1]->extended_data[!s->one2many * ch];
+        int toffset = 0;
 
         for (i = FFMAX(1, s->length * s->nb_taps); i < s->nb_taps; i++)
             time[i] = 0;
@@ -402,9 +403,8 @@ static int convert_coeffs(AVFilterContext *ctx)
 
             for (i = 0; i < seg->nb_partitions; i++) {
                 const float scale = 1.f / seg->part_size;
-                const int toffset = i * seg->part_size;
                 const int coffset = i * seg->coeff_size;
-                const int remaining = s->nb_taps - (i * seg->part_size);
+                const int remaining = s->nb_taps - toffset;
                 const int size = remaining >= seg->part_size ? seg->part_size : remaining;
 
                 memset(block, 0, sizeof(*block) * seg->fft_length);
@@ -420,6 +420,8 @@ static int convert_coeffs(AVFilterContext *ctx)
                 }
                 coeff[coffset + seg->part_size].re = block[1] * scale;
                 coeff[coffset + seg->part_size].im = 0;
+
+                toffset += size;
             }
 
             av_log(ctx, AV_LOG_DEBUG, "nb_partitions: %d\n", seg->nb_partitions);



More information about the ffmpeg-cvslog mailing list