From e6291697e3b7d540dcee3cd49100d69d656f696a Mon Sep 17 00:00:00 2001 From: wm4 Date: Wed, 5 Oct 2016 12:34:47 +0200 Subject: vo_opengl_cb: don't wait for redrawn frames This also removes some extra waiting if no video is active, at least in theory. Also clarify the vo_frame flag comments for redraw/repeat. --- video/out/vo.h | 6 ++++-- video/out/vo_opengl_cb.c | 3 ++- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/video/out/vo.h b/video/out/vo.h index 5dbdc3fa89..d2393f829b 100644 --- a/video/out/vo.h +++ b/video/out/vo.h @@ -196,8 +196,10 @@ struct vo_frame { // Set if the current frame is repeated from the previous. It's guaranteed // that the current is the same as the previous one, even if the image // pointer is different. - // The repeat flag is additionally set if the OSD does not need to be - // redrawn. + // The repeat flag is set if exactly the same frame should be rendered + // again (and the OSD does not need to be redrawn). + // A repeat frame can be redrawn, in which case repeat==redraw==true, and + // OSD should be updated. bool redraw, repeat; // The frame is not in movement - e.g. redrawing while paused. bool still; diff --git a/video/out/vo_opengl_cb.c b/video/out/vo_opengl_cb.c index c94d8b7ce8..20e9523cb0 100644 --- a/video/out/vo_opengl_cb.c +++ b/video/out/vo_opengl_cb.c @@ -296,7 +296,8 @@ int mpv_opengl_cb_draw(mpv_opengl_cb_context *ctx, int fbo, int vp_w, int vp_h) int64_t wait_present_count = ctx->present_count; if (frame) { ctx->next_frame = NULL; - wait_present_count += 1; + if (frame->redraw || !frame->current) + wait_present_count += 1; pthread_cond_signal(&ctx->wakeup); talloc_free(ctx->cur_frame); ctx->cur_frame = vo_frame_ref(frame); -- cgit v1.2.3