diff mbox

[FFmpeg-devel] avfilter/af_asetnsamples: fix sample queuing.

Message ID 20190406001115.72480-1-nbowe@google.com
State Accepted
Commit 4c8e3725d9ffe4baa5b5e3adec06aa2e68a89455
Headers show

Commit Message

Diego Felix de Souza via ffmpeg-devel April 6, 2019, 12:11 a.m. UTC
When asetnsamples uses output samples < input samples, remaining samples build up in the fifo over time.
Fix this by marking the filter as ready again if there are enough samples.

Regression since ef3babb2c70f564dc1634b3f29c6e35a2b2dc239
---
 libavfilter/af_asetnsamples.c | 8 ++++++--
 1 file changed, 6 insertions(+), 2 deletions(-)

Comments

Paul B Mahol April 6, 2019, 7:47 a.m. UTC | #1
On 4/6/19, Nikolas Bowe via ffmpeg-devel <ffmpeg-devel@ffmpeg.org> wrote:
> When asetnsamples uses output samples < input samples, remaining samples
> build up in the fifo over time.
> Fix this by marking the filter as ready again if there are enough samples.
>
> Regression since ef3babb2c70f564dc1634b3f29c6e35a2b2dc239
> ---
>  libavfilter/af_asetnsamples.c | 8 ++++++--
>  1 file changed, 6 insertions(+), 2 deletions(-)
>
> diff --git a/libavfilter/af_asetnsamples.c b/libavfilter/af_asetnsamples.c
> index c60ce3063f..cab02d56f6 100644
> --- a/libavfilter/af_asetnsamples.c
> +++ b/libavfilter/af_asetnsamples.c
> @@ -67,8 +67,12 @@ static int activate(AVFilterContext *ctx)
>          return ret;
>
>      if (ret > 0) {
> -        if ((!s->pad || (s->pad && frame->nb_samples ==
> s->nb_out_samples)))
> -            return ff_filter_frame(outlink, frame);
> +        if ((!s->pad || (s->pad && frame->nb_samples ==
> s->nb_out_samples))) {
> +            ret = ff_filter_frame(outlink, frame);
> +            if (ff_framequeue_queued_samples(inlink) >= s->nb_out_samples)
> +                ff_filter_set_ready(ctx, 100);
> +            return ret;
> +        }
>
>          pad_frame = ff_get_audio_buffer(outlink, s->nb_out_samples);
>          if (!pad_frame) {
> --
> 2.21.0.392.gf8f6787159e-goog
>
> _______________________________________________
> ffmpeg-devel mailing list
> ffmpeg-devel@ffmpeg.org
> https://ffmpeg.org/mailman/listinfo/ffmpeg-devel
>
> To unsubscribe, visit link above, or email
> ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe".

ok
Michael Niedermayer April 7, 2019, 2:06 p.m. UTC | #2
On Sat, Apr 06, 2019 at 09:47:07AM +0200, Paul B Mahol wrote:
> On 4/6/19, Nikolas Bowe via ffmpeg-devel <ffmpeg-devel@ffmpeg.org> wrote:
> > When asetnsamples uses output samples < input samples, remaining samples
> > build up in the fifo over time.
> > Fix this by marking the filter as ready again if there are enough samples.
> >
> > Regression since ef3babb2c70f564dc1634b3f29c6e35a2b2dc239
> > ---
> >  libavfilter/af_asetnsamples.c | 8 ++++++--
> >  1 file changed, 6 insertions(+), 2 deletions(-)
> >
> > diff --git a/libavfilter/af_asetnsamples.c b/libavfilter/af_asetnsamples.c
> > index c60ce3063f..cab02d56f6 100644
> > --- a/libavfilter/af_asetnsamples.c
> > +++ b/libavfilter/af_asetnsamples.c
> > @@ -67,8 +67,12 @@ static int activate(AVFilterContext *ctx)
> >          return ret;
> >
> >      if (ret > 0) {
> > -        if ((!s->pad || (s->pad && frame->nb_samples ==
> > s->nb_out_samples)))
> > -            return ff_filter_frame(outlink, frame);
> > +        if ((!s->pad || (s->pad && frame->nb_samples ==
> > s->nb_out_samples))) {
> > +            ret = ff_filter_frame(outlink, frame);
> > +            if (ff_framequeue_queued_samples(inlink) >= s->nb_out_samples)
> > +                ff_filter_set_ready(ctx, 100);
> > +            return ret;
> > +        }
> >
> >          pad_frame = ff_get_audio_buffer(outlink, s->nb_out_samples);
> >          if (!pad_frame) {
> > --
> > 2.21.0.392.gf8f6787159e-goog
> >
> > _______________________________________________
> > ffmpeg-devel mailing list
> > ffmpeg-devel@ffmpeg.org
> > https://ffmpeg.org/mailman/listinfo/ffmpeg-devel
> >
> > To unsubscribe, visit link above, or email
> > ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe".
> 
> ok

will apply

thx

[...]
Tobias Rapp April 9, 2019, 8:32 a.m. UTC | #3
On 06.04.2019 02:11, Nikolas Bowe via ffmpeg-devel wrote:
> When asetnsamples uses output samples < input samples, remaining samples build up in the fifo over time.
> Fix this by marking the filter as ready again if there are enough samples.
> 
> Regression since ef3babb2c70f564dc1634b3f29c6e35a2b2dc239
> [...]

Do you have a FFmpeg command-line at hand that triggers this bug? Maybe 
extending FATE tests would be a good idea.

Regards,
Tobias
diff mbox

Patch

diff --git a/libavfilter/af_asetnsamples.c b/libavfilter/af_asetnsamples.c
index c60ce3063f..cab02d56f6 100644
--- a/libavfilter/af_asetnsamples.c
+++ b/libavfilter/af_asetnsamples.c
@@ -67,8 +67,12 @@  static int activate(AVFilterContext *ctx)
         return ret;
 
     if (ret > 0) {
-        if ((!s->pad || (s->pad && frame->nb_samples == s->nb_out_samples)))
-            return ff_filter_frame(outlink, frame);
+        if ((!s->pad || (s->pad && frame->nb_samples == s->nb_out_samples))) {
+            ret = ff_filter_frame(outlink, frame);
+            if (ff_framequeue_queued_samples(inlink) >= s->nb_out_samples)
+                ff_filter_set_ready(ctx, 100);
+            return ret;
+        }
 
         pad_frame = ff_get_audio_buffer(outlink, s->nb_out_samples);
         if (!pad_frame) {