summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorwm4 <wm4@nowhere>2018-04-20 21:54:03 +0200
committerJan Ekström <jeebjp@gmail.com>2018-04-29 02:21:32 +0300
commit36565c099debbcfdfe800a5c2c1c9c9fada0a48b (patch)
tree8188f3fb35979df0ad739b3d764746a80c32205c
parent44f00a1f5876183530bafb0fd4f5aaf088860672 (diff)
downloadmpv-36565c099debbcfdfe800a5c2c1c9c9fada0a48b.tar.bz2
mpv-36565c099debbcfdfe800a5c2c1c9c9fada0a48b.tar.xz
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.
-rw-r--r--video/out/vo_libmpv.c16
1 files 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;
}