]> git.sesse.net Git - ffmpeg/commitdiff
avfilter/vf_decimate: always properly handle EOF
authorPaul B Mahol <onemda@gmail.com>
Sun, 27 Dec 2020 21:22:40 +0000 (22:22 +0100)
committerPaul B Mahol <onemda@gmail.com>
Sun, 27 Dec 2020 21:24:43 +0000 (22:24 +0100)
libavfilter/vf_decimate.c

index 32a4cdc535fb9a3cbdd90dfe6ea9b3b742680a0b..73d9ba89281b73582207cf3f64dcf7c9b1d10518 100644 (file)
@@ -267,20 +267,25 @@ static int activate(AVFilterContext *ctx)
     }
     if (ret < 0) {
         return ret;
-    } else if (dm->eof == ((1 << INPUT_MAIN) | ((dm->ppsrc << INPUT_CLEANSRC) * dm->ppsrc))) {
+    } else if (dm->eof == ((1 << INPUT_MAIN) | (dm->ppsrc << INPUT_CLEANSRC))) {
         ff_outlink_set_status(ctx->outputs[0], AVERROR_EOF, dm->last_pts);
         return 0;
     } else if (!(dm->eof & (1 << INPUT_MAIN)) && ff_inlink_acknowledge_status(ctx->inputs[INPUT_MAIN], &status, &pts)) {
         if (status == AVERROR_EOF) { // flushing
             dm->eof |= 1 << INPUT_MAIN;
-            if (!dm->ppsrc)
-                return filter_frame(ctx->inputs[INPUT_MAIN], NULL);
+            if (dm->ppsrc)
+                filter_frame(ctx->inputs[INPUT_CLEANSRC], NULL);
+            filter_frame(ctx->inputs[INPUT_MAIN], NULL);
+            ff_outlink_set_status(ctx->outputs[0], AVERROR_EOF, dm->last_pts);
+            return 0;
         }
     } else if (dm->ppsrc && !(dm->eof & (1 << INPUT_CLEANSRC)) && ff_inlink_acknowledge_status(ctx->inputs[INPUT_CLEANSRC], &status, &pts)) {
         if (status == AVERROR_EOF) { // flushing
             dm->eof |= 1 << INPUT_CLEANSRC;
             filter_frame(ctx->inputs[INPUT_MAIN], NULL);
-            return filter_frame(ctx->inputs[INPUT_CLEANSRC], NULL);
+            filter_frame(ctx->inputs[INPUT_CLEANSRC], NULL);
+            ff_outlink_set_status(ctx->outputs[0], AVERROR_EOF, dm->last_pts);
+            return 0;
         }
     }