diff options
author | Marton Balint <cus@passwd.hu> | 2015-11-26 00:25:47 +0100 |
---|---|---|
committer | Marton Balint <cus@passwd.hu> | 2016-05-31 00:33:50 +0200 |
commit | 37d201aad9f7e7f233955345aee1198421a68f5e (patch) | |
tree | dffeb312d179d127472469293a4bbc8f9575e767 | |
parent | 0b9b3163f2a9be54b986f1e7e7d55a88d1e2f2a8 (diff) | |
download | ffmpeg-37d201aad9f7e7f233955345aee1198421a68f5e.tar.gz |
ffplay: simplify display code
And get rid of frame_queue_prev.
Signed-off-by: Marton Balint <cus@passwd.hu>
-rw-r--r-- | ffplay.c | 43 |
1 files changed, 13 insertions, 30 deletions
@@ -769,14 +769,6 @@ static void frame_queue_next(FrameQueue *f) SDL_UnlockMutex(f->mutex); } -/* jump back to the previous frame if available by resetting rindex_shown */ -static int frame_queue_prev(FrameQueue *f) -{ - int ret = f->rindex_shown; - f->rindex_shown = 0; - return ret; -} - /* return the number of undisplayed frames in the queue */ static int frame_queue_nb_remaining(FrameQueue *f) { @@ -947,7 +939,7 @@ static void video_image_display(VideoState *is) SDL_Rect rect; int i; - vp = frame_queue_peek(&is->pictq); + vp = frame_queue_peek_last(&is->pictq); if (vp->bmp) { if (is->subtitle_st) { if (frame_queue_nb_remaining(&is->subpq) > 0) { @@ -1527,9 +1519,6 @@ static void video_refresh(void *opaque, double *remaining_time) } if (is->video_st) { - int redisplay = 0; - if (is->force_refresh) - redisplay = frame_queue_prev(&is->pictq); retry: if (frame_queue_nb_remaining(&is->pictq) == 0) { // nothing to do, no picture to display in the queue @@ -1543,11 +1532,10 @@ retry: if (vp->serial != is->videoq.serial) { frame_queue_next(&is->pictq); - redisplay = 0; goto retry; } - if (lastvp->serial != vp->serial && !redisplay) + if (lastvp->serial != vp->serial) is->frame_timer = av_gettime_relative() / 1000000.0; if (is->paused) @@ -1555,15 +1543,12 @@ retry: /* compute nominal last_duration */ last_duration = vp_duration(is, lastvp, vp); - if (redisplay) - delay = 0.0; - else - delay = compute_target_delay(last_duration, is); + delay = compute_target_delay(last_duration, is); time= av_gettime_relative()/1000000.0; - if (time < is->frame_timer + delay && !redisplay) { + if (time < is->frame_timer + delay) { *remaining_time = FFMIN(is->frame_timer + delay - time, *remaining_time); - return; + goto display; } is->frame_timer += delay; @@ -1571,18 +1556,16 @@ retry: is->frame_timer = time; SDL_LockMutex(is->pictq.mutex); - if (!redisplay && !isnan(vp->pts)) + if (!isnan(vp->pts)) update_video_pts(is, vp->pts, vp->pos, vp->serial); SDL_UnlockMutex(is->pictq.mutex); if (frame_queue_nb_remaining(&is->pictq) > 1) { Frame *nextvp = frame_queue_peek_next(&is->pictq); duration = vp_duration(is, vp, nextvp); - 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++; + if(!is->step && (framedrop>0 || (framedrop && get_master_sync_type(is) != AV_SYNC_VIDEO_MASTER)) && time > is->frame_timer + duration){ + is->frame_drops_late++; frame_queue_next(&is->pictq); - redisplay = 0; goto retry; } } @@ -1607,16 +1590,16 @@ retry: } } -display: - /* display picture */ - if (!display_disable && is->show_mode == SHOW_MODE_VIDEO) - video_display(is); - frame_queue_next(&is->pictq); + is->force_refresh = 1; if (is->step && !is->paused) stream_toggle_pause(is); } +display: + /* display picture */ + if (!display_disable && is->force_refresh && is->show_mode == SHOW_MODE_VIDEO && is->pictq.rindex_shown) + video_display(is); } is->force_refresh = 0; if (show_status) { |