diff --git a/ffplay.c b/ffplay.c index a3bda0eea9..842939a777 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;