From 36565c099debbcfdfe800a5c2c1c9c9fada0a48b Mon Sep 17 00:00:00 2001 From: wm4 Date: Fri, 20 Apr 2018 21:54:03 +0200 Subject: vo_libmpv: adjust redraw handling to new API semantics In MPV_RENDER_PARAM_ADVANCED_CONTROL mode, a simple update callback does not necessarily make the API user redraw. So handle it differently. For one, setting vo->want_redraw already uses the "normal" redraw path, which will call draw_frame() and set next_frame. Then there are redraws trigered by mpv_render_context_set_parameter(), which are on the render thread, and would require a separate mechanism. I decided this is not really a good idea, since it's not even clear that setting an arbitrary parameter should redraw. Also this could trigger an unbounded number of redraws. The user can trigger redraws manually if really needed, depending on the parameter that's being set. If we really wanted vo_libmpv to do this, we could add a new flag like need_redraw, which would be 4 lines of code or so. --- video/out/vo_libmpv.c | 16 ++++------------ 1 file changed, 4 insertions(+), 12 deletions(-) diff --git a/video/out/vo_libmpv.c b/video/out/vo_libmpv.c index e6cd5f6444..ba8a19f947 100644 --- a/video/out/vo_libmpv.c +++ b/video/out/vo_libmpv.c @@ -427,15 +427,7 @@ uint64_t mpv_render_context_update(mpv_render_context *ctx) int mpv_render_context_set_parameter(mpv_render_context *ctx, mpv_render_param param) { - int err = ctx->renderer->fns->set_parameter(ctx->renderer, param); - if (err >= 0) { - // Might need to redraw. - pthread_mutex_lock(&ctx->lock); - if (ctx->vo) - update(ctx); - pthread_mutex_unlock(&ctx->lock); - } - return err; + return ctx->renderer->fns->set_parameter(ctx->renderer, param); } static void draw_frame(struct vo *vo, struct vo_frame *frame) @@ -530,7 +522,7 @@ static int control(struct vo *vo, uint32_t request, void *data) forget_frames(ctx, false); ctx->need_reset = true; pthread_mutex_unlock(&ctx->lock); - update(ctx); + vo->want_redraw = true; return VO_TRUE; case VOCTRL_PAUSE: vo->want_redraw = true; @@ -542,13 +534,13 @@ static int control(struct vo *vo, uint32_t request, void *data) pthread_mutex_lock(&ctx->lock); ctx->need_resize = true; pthread_mutex_unlock(&ctx->lock); - update(ctx); + vo->want_redraw = true; return VO_TRUE; case VOCTRL_UPDATE_RENDER_OPTS: pthread_mutex_lock(&ctx->lock); ctx->need_update_external = true; pthread_mutex_unlock(&ctx->lock); - update(ctx); + vo->want_redraw = true; return VO_TRUE; } -- cgit v1.2.3