aboutsummaryrefslogtreecommitdiffstats
path: root/libavfilter/f_loop.c
diff options
context:
space:
mode:
authorMarton Balint <cus@passwd.hu>2019-05-19 21:16:03 +0200
committerMarton Balint <cus@passwd.hu>2019-05-24 21:39:07 +0200
commit87e0247a6c0f281158425d0f4958f1f1090bc15b (patch)
treee7fff358b312b86b3ba4f60c56f3d50a51fffbd7 /libavfilter/f_loop.c
parentf811ac52284a01e32143d9ff4eec044254725a09 (diff)
downloadffmpeg-87e0247a6c0f281158425d0f4958f1f1090bc15b.tar.gz
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 <cus@passwd.hu>
Diffstat (limited to 'libavfilter/f_loop.c')
-rw-r--r--libavfilter/f_loop.c8
1 files changed, 5 insertions, 3 deletions
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;
}