From 87e0247a6c0f281158425d0f4958f1f1090bc15b Mon Sep 17 00:00:00 2001 From: Marton Balint Date: Sun, 19 May 2019 21:16:03 +0200 Subject: avfilter/f_loop: fix video loop issues with 0 size or when size is bigger than input Fixes infinte loop with -vf loop=loop=1 and also fixes looping when the input is less frames than the specified loop size. Possible regressions since ef1aadffc785b48ed62c45d954289e754f43ef46. Signed-off-by: Marton Balint --- libavfilter/f_loop.c | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) (limited to 'libavfilter') diff --git a/libavfilter/f_loop.c b/libavfilter/f_loop.c index d9d55f9837..fcbd742eb4 100644 --- a/libavfilter/f_loop.c +++ b/libavfilter/f_loop.c @@ -343,7 +343,7 @@ static int activate(AVFilterContext *ctx) FF_FILTER_FORWARD_STATUS_BACK(outlink, inlink); - if (!s->eof && (s->nb_frames < s->size || !s->loop)) { + if (!s->eof && (s->nb_frames < s->size || !s->loop || !s->size)) { ret = ff_inlink_consume_frame(inlink, &frame); if (ret < 0) return ret; @@ -352,11 +352,13 @@ static int activate(AVFilterContext *ctx) } if (!s->eof && ff_inlink_acknowledge_status(inlink, &status, &pts)) { - if (status == AVERROR_EOF) + if (status == AVERROR_EOF) { + s->size = s->nb_frames; s->eof = 1; + } } - if (s->eof && (s->loop == 0 || s->nb_frames < s->size)) { + if (s->eof && (!s->loop || !s->size)) { ff_outlink_set_status(outlink, AVERROR_EOF, s->duration); return 0; } -- cgit v1.2.3