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@passwd.hu>
This commit is contained in:
parent
2efd01a32f
commit
f7eb50f3c0
5
ffplay.c
5
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; // 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
|
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
|
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];
|
VideoPicture pictq[VIDEO_PICTURE_QUEUE_SIZE];
|
||||||
int pictq_size, pictq_rindex, pictq_windex;
|
int pictq_size, pictq_rindex, pictq_windex;
|
||||||
SDL_mutex *pictq_mutex;
|
SDL_mutex *pictq_mutex;
|
||||||
@ -1318,7 +1319,7 @@ retry:
|
|||||||
|
|
||||||
/* compute nominal last_duration */
|
/* compute nominal last_duration */
|
||||||
last_duration = vp->pts - is->frame_last_pts;
|
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 */
|
/* if duration of the last frame was sane, update last_duration in video state */
|
||||||
is->frame_last_duration = last_duration;
|
is->frame_last_duration = last_duration;
|
||||||
}
|
}
|
||||||
@ -2557,6 +2558,8 @@ static int read_thread(void *arg)
|
|||||||
if (seek_by_bytes < 0)
|
if (seek_by_bytes < 0)
|
||||||
seek_by_bytes = !!(ic->iformat->flags & AVFMT_TS_DISCONT);
|
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 seeking requested, we execute it */
|
||||||
if (start_time != AV_NOPTS_VALUE) {
|
if (start_time != AV_NOPTS_VALUE) {
|
||||||
int64_t timestamp;
|
int64_t timestamp;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user