ffmpeg: skip duration cliping for passthrough & drop modes
authorMichael Niedermayer <michaelni@gmx.at>
Wed, 19 Nov 2014 18:24:39 +0000 (19:24 +0100)
committerMichael Niedermayer <michaelni@gmx.at>
Wed, 19 Nov 2014 19:18:03 +0000 (20:18 +0100)
Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
ffmpeg.c

index e51e789..2586dcf 100644 (file)
--- a/ffmpeg.c
+++ b/ffmpeg.c
@@ -904,13 +904,6 @@ 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;
@@ -933,6 +926,17 @@ static void do_video_out(AVFormatContext *s,
         }
     }
 
+    if (delta0 < 0 &&
+        delta > 0 &&
+        format_video_sync != VSYNC_PASSTHROUGH &&
+        format_video_sync != VSYNC_DROP) {
+        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;
+    }
+
     switch (format_video_sync) {
     case VSYNC_VSCFR:
         if (ost->frame_number == 0 && delta - duration >= 0.5) {