[FFmpeg-cvslog] ffplay: increase maximum frame duration to 1 hour for streams without TS discontinuity

Marton Balint git at videolan.org
Thu Nov 29 03:25:45 CET 2012


ffmpeg | branch: master | Marton Balint <cus at passwd.hu> | Sat Nov  3 00:30:20 2012 +0100| [f7eb50f3c0704a0d6e87dd218fc948b82a5e6329] | committer: Marton Balint

ffplay: increase maximum frame duration to 1 hour for streams without TS discontinuity

Partially fixes ticket #1707. A-V sync still needs some work after seeking...

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

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

 ffplay.c |    5 ++++-
 1 file changed, 4 insertions(+), 1 deletion(-)

diff --git a/ffplay.c b/ffplay.c
index a3bda0e..842939a 100644
--- a/ffplay.c
+++ b/ffplay.c
@@ -234,6 +234,7 @@ typedef struct VideoState {
     double video_current_pts;       // current displayed pts (different from video_clock if frame fifos are used)
     double video_current_pts_drift; // video_current_pts - time (av_gettime) at which we updated video_current_pts - used to have running video pts
     int64_t video_current_pos;      // current displayed file pos
+    double max_frame_duration;      // maximum duration of a frame - above this, we consider the jump a timestamp discontinuity
     VideoPicture pictq[VIDEO_PICTURE_QUEUE_SIZE];
     int pictq_size, pictq_rindex, pictq_windex;
     SDL_mutex *pictq_mutex;
@@ -1318,7 +1319,7 @@ retry:
 
             /* compute nominal last_duration */
             last_duration = vp->pts - is->frame_last_pts;
-            if (last_duration > 0 && last_duration < 10.0) {
+            if (last_duration > 0 && last_duration < is->max_frame_duration) {
                 /* if duration of the last frame was sane, update last_duration in video state */
                 is->frame_last_duration = last_duration;
             }
@@ -2557,6 +2558,8 @@ static int read_thread(void *arg)
     if (seek_by_bytes < 0)
         seek_by_bytes = !!(ic->iformat->flags & AVFMT_TS_DISCONT);
 
+    is->max_frame_duration = (ic->iformat->flags & AVFMT_TS_DISCONT) ? 10.0 : 3600.0;
+
     /* if seeking requested, we execute it */
     if (start_time != AV_NOPTS_VALUE) {
         int64_t timestamp;



More information about the ffmpeg-cvslog mailing list