[FFmpeg-cvslog] ffplay: add smarter method for determining video picture duration

Marton Balint git at videolan.org
Wed Nov 6 11:10:30 CET 2013


ffmpeg | branch: master | Marton Balint <cus at passwd.hu> | Sat Feb  2 12:37:29 2013 +0100| [5ecfcc7dff04ff0e86d8b6b3a33709ae956dfef7] | committer: Marton Balint

ffplay: add smarter method for determining video picture duration

- consider it an invalid PTS when the next PTS value is the same as the current one
- in case of invalid or unknown PTS, return vp->duration

This fixes ffplay part of ticket #3005.

Signed-off-by: Marton Balint <cus at passwd.hu>

> http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=5ecfcc7dff04ff0e86d8b6b3a33709ae956dfef7
---

 ffplay.c |   14 +++++++++++++-
 1 file changed, 13 insertions(+), 1 deletion(-)

diff --git a/ffplay.c b/ffplay.c
index e4fbdd4..22c269b 100644
--- a/ffplay.c
+++ b/ffplay.c
@@ -1293,6 +1293,18 @@ static double compute_target_delay(double delay, VideoState *is)
     return delay;
 }
 
+static double vp_duration(VideoState *is, VideoPicture *vp, VideoPicture *nextvp) {
+    if (vp->serial == nextvp->serial) {
+        double duration = nextvp->pts - vp->pts;
+        if (isnan(duration) || duration <= 0 || duration > is->max_frame_duration)
+            return vp->duration;
+        else
+            return duration;
+    } else {
+        return 0.0;
+    }
+}
+
 static void pictq_next_picture(VideoState *is) {
     /* update queue size and signal for next picture */
     if (++is->pictq_rindex == VIDEO_PICTURE_QUEUE_SIZE)
@@ -1407,7 +1419,7 @@ retry:
 
             if (is->pictq_size > 1) {
                 VideoPicture *nextvp = &is->pictq[(is->pictq_rindex + 1) % VIDEO_PICTURE_QUEUE_SIZE];
-                duration = nextvp->pts - vp->pts;
+                duration = vp_duration(is, vp, nextvp);
                 if(!is->step && (redisplay || framedrop>0 || (framedrop && get_master_sync_type(is) != AV_SYNC_VIDEO_MASTER)) && time > is->frame_timer + duration){
                     if (!redisplay)
                         is->frame_drops_late++;



More information about the ffmpeg-cvslog mailing list