From b8bb398a40b1636de7a70131a45ddbc2944a242f Mon Sep 17 00:00:00 2001 From: Michael Niedermayer Date: Mon, 1 Feb 2010 11:30:31 +0000 Subject: [PATCH] Schedule refreshes from a thread that actually knows the PTS. Fixes wernfried_1.avi Originally committed as revision 21586 to svn://svn.ffmpeg.org/ffmpeg/trunk --- ffplay.c | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/ffplay.c b/ffplay.c index 496e7a4bf9..739653d719 100644 --- a/ffplay.c +++ b/ffplay.c @@ -1061,8 +1061,7 @@ static void video_refresh_timer(void *opaque) if (is->video_st) { if (is->pictq_size == 0) { - /* if no picture, need to wait */ - schedule_refresh(is, 1); +// fprintf(stderr, "Internal error detected in the SDL timer\n"); } else { /* dequeue the picture */ vp = &is->pictq[is->pictq_rindex]; @@ -1071,9 +1070,6 @@ static void video_refresh_timer(void *opaque) is->video_current_pts = vp->pts; is->video_current_pts_drift = is->video_current_pts - av_gettime() / 1000000.0; - /* launch timer for next picture */ - schedule_refresh(is, (int)(compute_frame_delay(vp->pts, is) * 1000 + 0.5)); - if(is->subtitle_st) { if (is->subtitle_stream_changed) { SDL_LockMutex(is->subpq_mutex); @@ -1282,6 +1278,7 @@ static int queue_picture(VideoState *is, AVFrame *src_frame, double pts) SDL_LockMutex(is->pictq_mutex); is->pictq_size++; SDL_UnlockMutex(is->pictq_mutex); + schedule_refresh(is, (int)(compute_frame_delay(vp->pts, is) * 1000 + 0.5)); } return 0; }