mirror of https://github.com/mpv-player/mpv
client API: inactivate the opengl_cb API
The render API replaced the opengl_cb API over 2 years ago. Since then, the opengl_cb API was emulated on top of the render API. While it would probably be reasonable to emulate these APIs until they're removed in an eventual libmpv 2.0 bump, I have some non-technical reasons to disable the API now. The API stubs remain; they're needed for formal ABI compatibility.
This commit is contained in:
parent
80bf6b26ba
commit
4b3500dd14
|
@ -34,6 +34,9 @@ API changes
|
|||
|
||||
--- mpv 0.33.0 ---
|
||||
1.109 - add MPV_RENDER_API_TYPE_SW and related (software rendering API)
|
||||
- inactivate the opengl_cb API (always fails to initialize now)
|
||||
The opengl_cb API was deprecated over 2 years ago. Use the render API
|
||||
instead.
|
||||
1.108 - Deprecate MPV_EVENT_IDLE
|
||||
- add mpv_event_start_file
|
||||
- add the following fields to mpv_event_end_file: playlist_entry_id,
|
||||
|
|
|
@ -83,7 +83,6 @@ struct mp_client_api {
|
|||
int num_custom_protocols;
|
||||
|
||||
struct mpv_render_context *render_context;
|
||||
struct mpv_opengl_cb_context *gl_cb_ctx;
|
||||
};
|
||||
|
||||
struct observe_property {
|
||||
|
@ -195,8 +194,6 @@ void mp_clients_destroy(struct MPContext *mpctx)
|
|||
return;
|
||||
assert(mpctx->clients->num_clients == 0);
|
||||
|
||||
TA_FREEP(&mpctx->clients->gl_cb_ctx);
|
||||
|
||||
// The API user is supposed to call mpv_render_context_free(). It's simply
|
||||
// not allowed not to do this.
|
||||
if (mpctx->clients->render_context) {
|
||||
|
@ -2189,123 +2186,48 @@ mp_client_api_acquire_render_context(struct mp_client_api *ca)
|
|||
#include "libmpv/opengl_cb.h"
|
||||
#include "libmpv/render_gl.h"
|
||||
|
||||
struct mpv_opengl_cb_context {
|
||||
struct mp_client_api *client_api;
|
||||
mpv_opengl_cb_update_fn callback;
|
||||
void *callback_ctx;
|
||||
};
|
||||
|
||||
static mpv_opengl_cb_context *opengl_cb_get_context(mpv_handle *ctx)
|
||||
{
|
||||
pthread_mutex_lock(&ctx->clients->lock);
|
||||
mpv_opengl_cb_context *cb = ctx->clients->gl_cb_ctx;
|
||||
if (!cb) {
|
||||
cb = talloc_zero(NULL, struct mpv_opengl_cb_context);
|
||||
cb->client_api = ctx->clients;
|
||||
cb->client_api->gl_cb_ctx = cb;
|
||||
}
|
||||
pthread_mutex_unlock(&ctx->clients->lock);
|
||||
return cb;
|
||||
}
|
||||
|
||||
void mpv_opengl_cb_set_update_callback(mpv_opengl_cb_context *ctx,
|
||||
mpv_opengl_cb_update_fn callback,
|
||||
void *callback_ctx)
|
||||
{
|
||||
// This was probably supposed to be thread-safe, but we don't care. It's
|
||||
// compatibility code, and if you have problems, use the new API.
|
||||
if (ctx->client_api->render_context) {
|
||||
mpv_render_context_set_update_callback(ctx->client_api->render_context,
|
||||
callback, callback_ctx);
|
||||
}
|
||||
// Nasty thing: could set this even while not initialized, so we need to
|
||||
// preserve it.
|
||||
ctx->callback = callback;
|
||||
ctx->callback_ctx = callback_ctx;
|
||||
}
|
||||
|
||||
int mpv_opengl_cb_init_gl(mpv_opengl_cb_context *ctx, const char *exts,
|
||||
mpv_opengl_cb_get_proc_address_fn get_proc_address,
|
||||
void *get_proc_address_ctx)
|
||||
{
|
||||
if (ctx->client_api->render_context)
|
||||
return MPV_ERROR_INVALID_PARAMETER;
|
||||
|
||||
// mpv_render_context_create() only calls mp_client_get_global() on it.
|
||||
mpv_handle dummy = {.mpctx = ctx->client_api->mpctx};
|
||||
|
||||
mpv_render_param params[] = {
|
||||
{MPV_RENDER_PARAM_API_TYPE, MPV_RENDER_API_TYPE_OPENGL},
|
||||
{MPV_RENDER_PARAM_OPENGL_INIT_PARAMS, &(mpv_opengl_init_params){
|
||||
.get_proc_address = get_proc_address,
|
||||
.get_proc_address_ctx = get_proc_address_ctx,
|
||||
.extra_exts = exts,
|
||||
}},
|
||||
// Hack for explicit legacy hwdec loading. We really want to make it
|
||||
// impossible for proper render API users to trigger this.
|
||||
{(mpv_render_param_type)-1, ctx->client_api->mpctx->global},
|
||||
{0}
|
||||
};
|
||||
int err = mpv_render_context_create(&ctx->client_api->render_context,
|
||||
&dummy, params);
|
||||
if (err >= 0) {
|
||||
mpv_render_context_set_update_callback(ctx->client_api->render_context,
|
||||
ctx->callback, ctx->callback_ctx);
|
||||
}
|
||||
return err;
|
||||
return MPV_ERROR_NOT_IMPLEMENTED;
|
||||
}
|
||||
|
||||
int mpv_opengl_cb_draw(mpv_opengl_cb_context *ctx, int fbo, int w, int h)
|
||||
{
|
||||
if (!ctx->client_api->render_context)
|
||||
return MPV_ERROR_INVALID_PARAMETER;
|
||||
|
||||
mpv_render_param params[] = {
|
||||
{MPV_RENDER_PARAM_OPENGL_FBO, &(mpv_opengl_fbo){
|
||||
.fbo = fbo,
|
||||
.w = w,
|
||||
.h = abs(h),
|
||||
}},
|
||||
{MPV_RENDER_PARAM_FLIP_Y, &(int){h < 0}},
|
||||
{0}
|
||||
};
|
||||
return mpv_render_context_render(ctx->client_api->render_context, params);
|
||||
return MPV_ERROR_NOT_IMPLEMENTED;
|
||||
}
|
||||
|
||||
int mpv_opengl_cb_report_flip(mpv_opengl_cb_context *ctx, int64_t time)
|
||||
{
|
||||
if (!ctx->client_api->render_context)
|
||||
return MPV_ERROR_INVALID_PARAMETER;
|
||||
|
||||
mpv_render_context_report_swap(ctx->client_api->render_context);
|
||||
return 0;
|
||||
return MPV_ERROR_NOT_IMPLEMENTED;
|
||||
}
|
||||
|
||||
int mpv_opengl_cb_uninit_gl(mpv_opengl_cb_context *ctx)
|
||||
{
|
||||
if (ctx->client_api->render_context)
|
||||
mpv_render_context_free(ctx->client_api->render_context);
|
||||
ctx->client_api->render_context = NULL;
|
||||
return 0;
|
||||
}
|
||||
|
||||
int mpv_opengl_cb_render(mpv_opengl_cb_context *ctx, int fbo, int vp[4])
|
||||
{
|
||||
return mpv_opengl_cb_draw(ctx, fbo, vp[2], vp[3]);
|
||||
return MPV_ERROR_NOT_IMPLEMENTED;
|
||||
}
|
||||
|
||||
void *mpv_get_sub_api(mpv_handle *ctx, mpv_sub_api sub_api)
|
||||
{
|
||||
if (!ctx->mpctx->initialized)
|
||||
if (!ctx->mpctx->initialized || sub_api != MPV_SUB_API_OPENGL_CB)
|
||||
return NULL;
|
||||
void *res = NULL;
|
||||
switch (sub_api) {
|
||||
case MPV_SUB_API_OPENGL_CB:
|
||||
res = opengl_cb_get_context(ctx);
|
||||
break;
|
||||
default:;
|
||||
}
|
||||
return res;
|
||||
// Return something non-NULL, as I think most API users will not check
|
||||
// this properly. The other opengl_cb stubs do not use this value.
|
||||
MP_WARN(ctx, "The opengl_cb API is not supported anymore.\n"
|
||||
"Use the similar API in render.h instead.\n");
|
||||
return "no";
|
||||
}
|
||||
|
||||
// stream_cb
|
||||
|
|
Loading…
Reference in New Issue