From eff265c1400f6795e284d4e7c9054cf288d6c0cf Mon Sep 17 00:00:00 2001 From: wm4 Date: Tue, 10 Mar 2015 14:05:42 +0100 Subject: vo_opengl_cb: clear last video frame on uninit() mpv_opengl_cb_render() is supposed to clear the screen with the background color if there's no video... I think. It didn't do this, because although uninit() requested gl_video_config() to be called, this didn't happen, because this function checks whether the VO is set - and it's unsert after uninit() releases the lock. Also call the user wakeup callback in this situation, so the user actually redraws immediately. --- video/out/vo_opengl_cb.c | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) (limited to 'video') diff --git a/video/out/vo_opengl_cb.c b/video/out/vo_opengl_cb.c index 7334d31add..cd04f5219b 100644 --- a/video/out/vo_opengl_cb.c +++ b/video/out/vo_opengl_cb.c @@ -306,20 +306,20 @@ int mpv_opengl_cb_render(struct mpv_opengl_cb_context *ctx, int fbo, int vp[4]) gl_video_resize(ctx->renderer, &wnd, &src, &dst, &osd, !ctx->flip); } - if (vo) { - struct vo_priv *p = vo->priv; - if (ctx->reconfigured) - gl_video_config(ctx->renderer, &ctx->img_params); - if (ctx->reconfigured || ctx->update_new_opts) { - struct vo_priv *opts = p->ctx->new_opts ? p->ctx->new_opts : p; + if (ctx->reconfigured) + gl_video_config(ctx->renderer, &ctx->img_params); + if (ctx->update_new_opts) { + struct vo_priv *p = vo ? vo->priv : NULL; + struct vo_priv *opts = ctx->new_opts ? ctx->new_opts : p; + if (opts) { gl_video_set_options(ctx->renderer, opts->renderer_opts); ctx->gl->debug_context = opts->use_gl_debug; gl_video_set_debug(ctx->renderer, opts->use_gl_debug); frame_queue_shrink(ctx, opts->frame_queue_size); } - ctx->reconfigured = false; - ctx->update_new_opts = false; } + ctx->reconfigured = false; + ctx->update_new_opts = false; struct mp_csp_equalizer *eq = gl_video_eq_ptr(ctx->renderer); if (ctx->eq_changed) { @@ -507,6 +507,7 @@ static void uninit(struct vo *vo) p->ctx->img_params = (struct mp_image_params){0}; p->ctx->reconfigured = true; p->ctx->active = NULL; + update(p); pthread_mutex_unlock(&p->ctx->lock); } -- cgit v1.2.3