From 38f649662c12c0d23d1be6f066c6ca597f6c1cbb Mon Sep 17 00:00:00 2001 From: Marton Balint Date: Sat, 16 Feb 2013 14:24:34 +0100 Subject: [PATCH] ffplay: allow frame dropping if we redisplay an already displayed frame Signed-off-by: Marton Balint --- ffplay.c | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/ffplay.c b/ffplay.c index 0d4fde6344..b4394e3619 100644 --- a/ffplay.c +++ b/ffplay.c @@ -1307,8 +1307,9 @@ static void video_refresh(void *opaque, double *remaining_time) } if (is->video_st) { + int redisplay = 0; if (is->force_refresh) - pictq_prev_picture(is); + redisplay = pictq_prev_picture(is); retry: if (is->pictq_size == 0) { SDL_LockMutex(is->pictq_mutex); @@ -1325,6 +1326,7 @@ retry: if (vp->serial != is->videoq.serial) { pictq_next_picture(is); + redisplay = 0; goto retry; } @@ -1355,9 +1357,11 @@ retry: if (is->pictq_size > 1) { VideoPicture *nextvp = &is->pictq[(is->pictq_rindex + 1) % VIDEO_PICTURE_QUEUE_SIZE]; duration = nextvp->pts - vp->pts; - if(!is->step && (framedrop>0 || (framedrop && get_master_sync_type(is) != AV_SYNC_VIDEO_MASTER)) && time > is->frame_timer + duration){ - is->frame_drops_late++; + 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++; pictq_next_picture(is); + redisplay = 0; goto retry; } }