Message ID | 20190406001115.72480-1-nbowe@google.com |
---|---|
State | Accepted |
Commit | 4c8e3725d9ffe4baa5b5e3adec06aa2e68a89455 |
Headers | show |
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
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 [...]
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 --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) {