int mpv_opengl_cb_uninit_gl(struct mpv_opengl_cb_context *ctx) { // Bring down the decoder etc., which still might be using the hwdec // context. Setting initialized=false guarantees it can't come back. pthread_mutex_lock(&ctx->lock); ctx->initialized = false; pthread_mutex_unlock(&ctx->lock); kill_video(ctx->client_api); pthread_mutex_lock(&ctx->lock); assert(!ctx->active); pthread_mutex_unlock(&ctx->lock); gl_video_uninit(ctx->renderer); ctx->renderer = NULL; gl_hwdec_uninit(ctx->hwdec); ctx->hwdec = NULL; talloc_free(ctx->gl); ctx->gl = NULL; talloc_free(ctx->new_opts_cfg); ctx->new_opts = NULL; ctx->new_opts_cfg = NULL; return 0; }
static void uninit(struct vo *vo) { struct gl_priv *p = vo->priv; gl_video_uninit(p->renderer); gl_hwdec_uninit(p->hwdec); hwdec_devices_set_loader(vo->hwdec_devs, NULL, NULL); hwdec_devices_destroy(vo->hwdec_devs); mpgl_uninit(p->glctx); }