ffmpeg: Check duration for overlap and clip in fps cfr/vfr code
authorMichael Niedermayer <michaelni@gmx.at>
Wed, 19 Nov 2014 16:21:04 +0000 (17:21 +0100)
committerMichael Niedermayer <michaelni@gmx.at>
Wed, 19 Nov 2014 17:36:36 +0000 (18:36 +0100)
Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
ffmpeg.c
tests/ref/fate/gif-disposal-restore

index 3b24cf9..e51e789 100644 (file)
--- a/ffmpeg.c
+++ b/ffmpeg.c
@@ -904,6 +904,13 @@ static void do_video_out(AVFormatContext *s,
     sync_ipts = next_picture->pts;
     delta0 = sync_ipts - ost->sync_opts;
     delta  = delta0 + duration;
+    if (delta0 < 0 && delta > 0) {
+        double cor = FFMIN(-delta0, duration);
+        av_log(NULL, AV_LOG_WARNING, "Past duration %f too large\n", -delta0);
+        sync_ipts += cor;
+        duration -= cor;
+        delta0 += cor;
+    }
 
     /* by default, we output a single frame */
     nb0_frames = 0;
index c0c04b4..0ff1715 100644 (file)
@@ -1,4 +1,4 @@
 #tb 0: 1/1
 0,          0,          0,        1,   112320, 0xb8afe429
-0,          0,          0,        1,   112320, 0xae588a4b
+0,          1,          1,        1,   112320, 0xae588a4b
 0,          3,          3,        1,   112320, 0xccdd27b7