From 93ba60f844d8e81435eeefe6cc7cac2d79d518c6 Mon Sep 17 00:00:00 2001 From: Muhammad Faiz <mfc...@gmail.com> Date: Tue, 13 Oct 2015 15:09:17 +0700 Subject: [PATCH] avfilter/fifo: fix failed assertion
some filters make fifo filter fail: at least showcqt and showwaves (i don't check all) command: ffmpeg -loglevel debug -filter_complex "amovie=audio.mp3, showcqt, fifo" -f null -y /dev/null message: Assertion fifo->root.next failed at libavfilter/fifo.c:240 Aborted --- libavfilter/fifo.c | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/libavfilter/fifo.c b/libavfilter/fifo.c index e477cff..ae670e2 100644 --- a/libavfilter/fifo.c +++ b/libavfilter/fifo.c @@ -187,9 +187,9 @@ static int return_audio_frame(AVFilterContext *ctx) } while (s->out->nb_samples < s->allocated_samples) { - int len; + int len, must_break = 0; - if (!s->root.next) { + while (!s->root.next) { ret = ff_request_frame(ctx->inputs[0]); if (ret == AVERROR_EOF) { av_samples_set_silence(s->out->extended_data, @@ -198,11 +198,13 @@ static int return_audio_frame(AVFilterContext *ctx) s->out->nb_samples, nb_channels, link->format); s->out->nb_samples = s->allocated_samples; + must_break = 1; break; } else if (ret < 0) return ret; - av_assert0(s->root.next); // If ff_request_frame() succeeded then we should have a frame } + if (must_break) + break; head = s->root.next->frame; len = FFMIN(s->allocated_samples - s->out->nb_samples, @@ -231,13 +233,12 @@ static int request_frame(AVFilterLink *outlink) FifoContext *fifo = outlink->src->priv; int ret = 0; - if (!fifo->root.next) { + while (!fifo->root.next) { if ((ret = ff_request_frame(outlink->src->inputs[0])) < 0) { if (ret == AVERROR_EOF && outlink->request_samples) return return_audio_frame(outlink->src); return ret; } - av_assert0(fifo->root.next); } if (outlink->request_samples) { -- 1.8.3.1
_______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org http://ffmpeg.org/mailman/listinfo/ffmpeg-devel