diff --git a/DOCS/client-api-changes.rst b/DOCS/client-api-changes.rst index 308ce44b4b..203ada5906 100644 --- a/DOCS/client-api-changes.rst +++ b/DOCS/client-api-changes.rst @@ -32,6 +32,12 @@ API changes :: + --- mpv 0.35.0 --- + 2.0 - remove headers/functions of the obsolete opengl_cb API + - remove mpv_opengl_init_params.extra_exts field + - remove deprecated mpv_detach_destroy. Use mpv_destroy instead. + - remove obsolete mpv_suspend and mpv_resume + - remove deprecated SCRIPT_INPUT_DISPATCH, PAUSE and UNPAUSE events --- 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) @@ -54,7 +60,6 @@ API changes It is a good idea to write better wrappers for your use, though. --- mpv 0.31.0 --- 1.107 - Deprecate MPV_EVENT_TICK - --- mpv 0.30.0 --- 1.106 - Add cancel_fn to mpv_stream_cb_info 1.105 - Fix deadlock problems with MPV_RENDER_PARAM_ADVANCED_CONTROL and if @@ -72,7 +77,6 @@ API changes - add mpv_abort_async_command() 1.102 - rename struct mpv_opengl_drm_osd_size to mpv_opengl_drm_draw_surface_size - rename MPV_RENDER_PARAM_DRM_OSD_SIZE to MPV_RENDER_PARAM_DRM_DRAW_SURFACE_SIZE - --- mpv 0.29.0 --- 1.101 - add MPV_RENDER_PARAM_ADVANCED_CONTROL and related API - add MPV_RENDER_PARAM_NEXT_FRAME_INFO and related symbols diff --git a/DOCS/man/input.rst b/DOCS/man/input.rst index 5a733a5da1..c7af5842bd 100644 --- a/DOCS/man/input.rst +++ b/DOCS/man/input.rst @@ -1601,7 +1601,7 @@ This list uses the event name field value, and the C API symbol in brackets: The new value of the property. The following events also happen, but are deprecated: ``tracks-changed``, -``track-switched``, ``pause``, ``unpause``, ``metadata-update``, ``idle``, +``track-switched``, ``metadata-update``, ``idle``, ``tick``, ``chapter-change``. Use ``mpv_observe_property()`` (Lua: ``mp.observe_property()``) instead. diff --git a/libmpv/client.h b/libmpv/client.h index 5a3d2d202e..77265c2d32 100644 --- a/libmpv/client.h +++ b/libmpv/client.h @@ -224,10 +224,8 @@ extern "C" { * This are the planned changes that will most likely be done on the next major * bump of the library: * - * - remove all symbols and include files that are marked as deprecated + * - remove all symbols that are marked as deprecated * - reassign enum numerical values to remove gaps - * - remove the mpv_opengl_init_params.extra_exts field - * - change the type of mpv_event_end_file.reason * - disabling all events by default */ @@ -244,7 +242,7 @@ extern "C" { * relational operators (<, >, <=, >=). */ #define MPV_MAKE_VERSION(major, minor) (((major) << 16) | (minor) | 0UL) -#define MPV_CLIENT_API_VERSION MPV_MAKE_VERSION(1, 109) +#define MPV_CLIENT_API_VERSION MPV_MAKE_VERSION(2, 0) /** * The API user is allowed to "#define MPV_ENABLE_DEPRECATED 0" before @@ -510,26 +508,6 @@ MPV_EXPORT int mpv_initialize(mpv_handle *ctx); */ MPV_EXPORT void mpv_destroy(mpv_handle *ctx); -#if MPV_ENABLE_DEPRECATED -/** - * @deprecated use mpv_destroy(), which has exactly the same semantics (the - * deprecation is a mere rename) - * - * Since mpv client API version 1.29: - * If the last mpv_handle is detached, the core player is destroyed. In - * addition, if there are only weak mpv_handles (such as created by - * mpv_create_weak_client() or internal scripts), these mpv_handles will - * be sent MPV_EVENT_SHUTDOWN. This function may block until these clients - * have responded to the shutdown event, and the core is finally destroyed. - * - * Before mpv client API version 1.29: - * This left the player running. If you want to be sure that the - * player is terminated, send a "quit" command, and wait until the - * MPV_EVENT_SHUTDOWN event is received, or use mpv_terminate_destroy(). - */ -MPV_EXPORT void mpv_detach_destroy(mpv_handle *ctx); -#endif - /** * Similar to mpv_destroy(), but brings the player and all clients down * as well, and waits until all of them are destroyed. This function blocks. The @@ -617,43 +595,6 @@ MPV_EXPORT mpv_handle *mpv_create_weak_client(mpv_handle *ctx, const char *name) */ MPV_EXPORT int mpv_load_config_file(mpv_handle *ctx, const char *filename); -#if MPV_ENABLE_DEPRECATED - -/** - * This does nothing since mpv 0.23.0 (API version 1.24). Below is the - * description of the old behavior. - * - * Stop the playback thread. This means the core will stop doing anything, and - * only run and answer to client API requests. This is sometimes useful; for - * example, no new frame will be queued to the video output, so doing requests - * which have to wait on the video output can run instantly. - * - * Suspension is reentrant and recursive for convenience. Any thread can call - * the suspend function multiple times, and the playback thread will remain - * suspended until the last thread resumes it. Note that during suspension, all - * clients still have concurrent access to the core, which is serialized through - * a single mutex. - * - * Call mpv_resume() to resume the playback thread. You must call mpv_resume() - * for each mpv_suspend() call. Calling mpv_resume() more often than - * mpv_suspend() is not allowed. - * - * Calling this on an uninitialized player (see mpv_create()) will deadlock. - * - * @deprecated This function, as well as mpv_resume(), are deprecated, and - * will stop doing anything soon. Their semantics were never - * well-defined, and their usefulness is extremely limited. The - * calls will remain stubs in order to keep ABI compatibility. - */ -MPV_EXPORT void mpv_suspend(mpv_handle *ctx); - -/** - * See mpv_suspend(). - */ -MPV_EXPORT void mpv_resume(mpv_handle *ctx); - -#endif - /** * Return the internal time in microseconds. This has an arbitrary start offset, * but will never wrap or go backwards. @@ -917,28 +858,11 @@ MPV_EXPORT void mpv_free_node_contents(mpv_node *node); * Starting with mpv version 0.21.0 (version 1.23) most options can be set * with mpv_set_property() (and related functions), and even before * mpv_initialize(). In some obscure corner cases, using this function - * to set options might still be required (see below, and also section - * "Inconsistencies between options and properties" on the manpage). Once + * to set options might still be required (see + * "Inconsistencies between options and properties" in the manpage). Once * these are resolved, the option setting functions might be fully * deprecated. * - * The following options still need to be set either _before_ - * mpv_initialize() with mpv_set_property() (or related functions), or - * with mpv_set_option() (or related functions) at any time: - * - options shadowed by deprecated properties: - * - demuxer (property deprecated in 0.21.0) - * - idle (property deprecated in 0.21.0) - * - fps (property deprecated in 0.21.0) - * - cache (property deprecated in 0.21.0) - * - length (property deprecated in 0.10.0) - * - audio-samplerate (property deprecated in 0.10.0) - * - audio-channels (property deprecated in 0.10.0) - * - audio-format (property deprecated in 0.10.0) - * - deprecated options shadowed by properties: - * - chapter (option deprecated in 0.21.0) - * - playlist-pos (option deprecated in 0.21.0) - * The deprecated properties were removed in mpv 0.23.0. - * * @param name Option name. This is the same as on the mpv command line, but * without the leading "--". * @param format see enum mpv_format. @@ -1372,35 +1296,6 @@ typedef enum mpv_event_id { * start of the program), while the property behaves correctly. */ MPV_EVENT_IDLE = 11, - /** - * Playback was paused. This indicates the user pause state. - * - * The user pause state is the state the user requested (changed with the - * "pause" property). There is an internal pause state too, which is entered - * if e.g. the network is too slow (the "core-idle" property generally - * indicates whether the core is playing or waiting). - * - * This event is sent whenever any pause states change, not only the user - * state. You might get multiple events in a row while these states change - * independently. But the event ID sent always indicates the user pause - * state. - * - * If you don't want to deal with this, use mpv_observe_property() on the - * "pause" property and ignore MPV_EVENT_PAUSE/UNPAUSE. Likewise, the - * "core-idle" property tells you whether video is actually playing or not. - * - * @deprecated The event is redundant with mpv_observe_property() as - * mentioned above, and might be removed in the far future. - */ - MPV_EVENT_PAUSE = 12, - /** - * Playback was unpaused. See MPV_EVENT_PAUSE for not so obvious details. - * - * @deprecated The event is redundant with mpv_observe_property() as - * explained in the MPV_EVENT_PAUSE comments, and might be - * removed in the far future. - */ - MPV_EVENT_UNPAUSE = 13, /** * Sent every time after a video frame is displayed. Note that currently, * this will be sent in lower frequency if there is no video, or playback @@ -1411,15 +1306,6 @@ typedef enum mpv_event_id { * (such as "playback-time"). */ MPV_EVENT_TICK = 14, - /** - * @deprecated This was used internally with the internal "script_dispatch" - * command to dispatch keyboard and mouse input for the OSC. - * It was never useful in general and has been completely - * replaced with "script-binding". - * This event never happens anymore, and is included in this - * header only for compatibility. - */ - MPV_EVENT_SCRIPT_INPUT_DISPATCH = 15, #endif /** * Triggered by the script-message input command. The command uses the @@ -1636,12 +1522,11 @@ typedef struct mpv_event_start_file { typedef struct mpv_event_end_file { /** - * Corresponds to the values in enum mpv_end_file_reason (the "int" type - * will be replaced with mpv_end_file_reason on the next ABI bump). + * Corresponds to the values in enum mpv_end_file_reason. * * Unknown values should be treated as unknown. */ - int reason; + mpv_end_file_reason reason; /** * If reason==MPV_END_FILE_REASON_ERROR, this contains a mpv error code * (one of MPV_ERROR_...) giving an approximate reason why playback @@ -1679,15 +1564,6 @@ typedef struct mpv_event_end_file { int playlist_insert_num_entries; } mpv_event_end_file; -#if MPV_ENABLE_DEPRECATED -/** @deprecated see MPV_EVENT_SCRIPT_INPUT_DISPATCH for remarks - */ -typedef struct mpv_event_script_input_dispatch { - int arg0; - const char *type; -} mpv_event_script_input_dispatch; -#endif - typedef struct mpv_event_client_message { /** * Arbitrary arguments chosen by the sender of the message. If num_args > 0, @@ -2043,30 +1919,6 @@ MPV_EXPORT int mpv_hook_continue(mpv_handle *ctx, uint64_t id); */ MPV_EXPORT int mpv_get_wakeup_pipe(mpv_handle *ctx); -/** - * @deprecated use render.h - */ -typedef enum mpv_sub_api { - /** - * For using mpv's OpenGL renderer on an external OpenGL context. - * mpv_get_sub_api(MPV_SUB_API_OPENGL_CB) returns mpv_opengl_cb_context*. - * This context can be used with mpv_opengl_cb_* functions. - * Will return NULL if unavailable (if OpenGL support was not compiled in). - * See opengl_cb.h for details. - * - * @deprecated use render.h - */ - MPV_SUB_API_OPENGL_CB = 1 -} mpv_sub_api; - -/** - * This is used for additional APIs that are not strictly part of the core API. - * See the individual mpv_sub_api member values. - * - * @deprecated use render.h - */ -MPV_EXPORT void *mpv_get_sub_api(mpv_handle *ctx, mpv_sub_api sub_api); - #endif #ifdef __cplusplus diff --git a/libmpv/mpv.def b/libmpv/mpv.def index 50a713531f..232490d44d 100644 --- a/libmpv/mpv.def +++ b/libmpv/mpv.def @@ -12,7 +12,6 @@ mpv_create mpv_create_client mpv_create_weak_client mpv_destroy -mpv_detach_destroy mpv_error_string mpv_event_to_node mpv_event_name @@ -22,7 +21,6 @@ mpv_get_property mpv_get_property_async mpv_get_property_osd_string mpv_get_property_string -mpv_get_sub_api mpv_get_time_us mpv_get_wakeup_pipe mpv_hook_add @@ -30,12 +28,6 @@ mpv_hook_continue mpv_initialize mpv_load_config_file mpv_observe_property -mpv_opengl_cb_draw -mpv_opengl_cb_init_gl -mpv_opengl_cb_report_flip -mpv_opengl_cb_render -mpv_opengl_cb_set_update_callback -mpv_opengl_cb_uninit_gl mpv_render_context_create mpv_render_context_free mpv_render_context_get_info @@ -46,7 +38,6 @@ mpv_render_context_set_update_callback mpv_render_context_update mpv_request_event mpv_request_log_messages -mpv_resume mpv_set_option mpv_set_option_string mpv_set_property @@ -54,9 +45,8 @@ mpv_set_property_async mpv_set_property_string mpv_set_wakeup_callback mpv_stream_cb_add_ro -mpv_suspend mpv_terminate_destroy mpv_unobserve_property mpv_wait_async_requests mpv_wait_event -mpv_wakeup \ No newline at end of file +mpv_wakeup diff --git a/libmpv/opengl_cb.h b/libmpv/opengl_cb.h deleted file mode 100644 index 682068133a..0000000000 --- a/libmpv/opengl_cb.h +++ /dev/null @@ -1,339 +0,0 @@ -/* Copyright (C) 2017 the mpv developers - * - * Permission to use, copy, modify, and/or distribute this software for any - * purpose with or without fee is hereby granted, provided that the above - * copyright notice and this permission notice appear in all copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES - * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR - * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN - * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF - * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - */ - -#ifndef MPV_CLIENT_API_OPENGL_CB_H_ -#define MPV_CLIENT_API_OPENGL_CB_H_ - -#include "client.h" - -#if !MPV_ENABLE_DEPRECATED -#error "This header and all API provided by it is deprecated. Use render.h instead." -#else - -#ifdef __cplusplus -extern "C" { -#endif - -/** - * - * Overview - * -------- - * - * Warning: this API is deprecated. A very similar API is provided by render.h - * and render_gl.h. The deprecated API is emulated with the new API. - * - * This API can be used to make mpv render into a foreign OpenGL context. It - * can be used to handle video display. - * - * The renderer needs to be explicitly initialized with mpv_opengl_cb_init_gl(), - * and then video can be drawn with mpv_opengl_cb_draw(). The user thread can - * be notified by new frames with mpv_opengl_cb_set_update_callback(). - * - * You can output and embed video without this API by setting the mpv "wid" - * option to a native window handle (see "Embedding the video window" section - * in the client.h header). In general, using the opengl-cb API is recommended, - * because window embedding can cause various issues, especially with GUI - * toolkits and certain platforms. - * - * OpenGL interop - * -------------- - * - * This assumes the OpenGL context lives on a certain thread controlled by the - * API user. The following functions require access to the OpenGL context: - * mpv_opengl_cb_init_gl - * mpv_opengl_cb_draw - * mpv_opengl_cb_uninit_gl - * - * The OpenGL context is indirectly accessed through the OpenGL function - * pointers returned by the get_proc_address callback in mpv_opengl_cb_init_gl. - * Generally, mpv will not load the system OpenGL library when using this API. - * - * Only "desktop" OpenGL version 2.1 and later and OpenGL ES version 2.0 and - * later are supported. With OpenGL 2.1, the GL_ARB_texture_rg is required. The - * renderer was written for the OpenGL 3.x core profile, with additional support - * for OpenGL 2.1 and OpenGL ES 2.0. - * - * Note that some hardware decoding interop API (as set with the "hwdec" option) - * may actually access some sort of host API, such as EGL. - * - * OpenGL state - * ------------ - * - * OpenGL has a large amount of implicit state. All the mpv functions mentioned - * above expect that the OpenGL state is reasonably set to OpenGL standard - * defaults. Likewise, mpv will attempt to leave the OpenGL context with - * standard defaults. The following state is excluded from this: - * - * - the glViewport state - * - the glScissor state (but GL_SCISSOR_TEST is in its default value) - * - glBlendFuncSeparate() state (but GL_BLEND is in its default value) - * - glClearColor() state - * - mpv may overwrite the callback set with glDebugMessageCallback() - * - mpv always disables GL_DITHER at init - * - * Messing with the state could be avoided by creating shared OpenGL contexts, - * but this is avoided for the sake of compatibility and interoperability. - * - * On OpenGL 2.1, mpv will strictly call functions like glGenTextures() to - * create OpenGL objects. You will have to do the same. This ensures that - * objects created by mpv and the API users don't clash. Also, legacy state - * must be either in its defaults, or not interfere with core state. - * - * Threading - * --------- - * - * The mpv_opengl_cb_* functions can be called from any thread, under the - * following conditions: - * - only one of the mpv_opengl_cb_* functions can be called at the same time - * (unless they belong to different mpv cores created by mpv_create()) - * - for functions which need an OpenGL context (see above) the OpenGL context - * must be "current" in the current thread, and it must be the same context - * as used with mpv_opengl_cb_init_gl() - * - never can be called from within the callbacks set with - * mpv_set_wakeup_callback() or mpv_opengl_cb_set_update_callback() - * - * Context and handle lifecycle - * ---------------------------- - * - * Video initialization will fail if the OpenGL context was not initialized yet - * (with mpv_opengl_cb_init_gl()). Likewise, mpv_opengl_cb_uninit_gl() will - * disable video. - * - * When the mpv core is destroyed (e.g. via mpv_terminate_destroy()), the OpenGL - * context must have been uninitialized. If this doesn't happen, undefined - * behavior will result. - * - * Hardware decoding - * ----------------- - * - * Hardware decoding via opengl_cb is fully supported, but requires some - * additional setup. (At least if direct hardware decoding modes are wanted, - * instead of copying back surface data from GPU to CPU RAM.) - * - * While "normal" mpv loads the OpenGL hardware decoding interop on demand, - * this can't be done with opengl_cb for internal technical reasons. Instead, - * it loads them by default, even if hardware decoding is not going to be used. - * In older mpv releases, this had to be done by setting the - * "opengl-hwdec-interop" or "hwdec-preload" options before calling - * mpv_opengl_cb_init_gl(). You can still use the newer "gpu-hwdec-interop" - * option to prevent loading of interop, or to load only a specific interop. - * - * There may be certain requirements on the OpenGL implementation: - * - Windows: ANGLE is required (although in theory GL/DX interop could be used) - * - Intel/Linux: EGL is required, and also a glMPGetNativeDisplay() callback - * must be provided (see sections below) - * - nVidia/Linux: Both GLX and EGL should work (GLX is required if vdpau is - * used, e.g. due to old drivers.) - * - OSX: CGL is required (CGLGetCurrentContext() returning non-NULL) - * - iOS: EAGL is required (EAGLContext.currentContext returning non-nil) - * - * Once these things are setup, hardware decoding can be enabled/disabled at - * any time by setting the "hwdec" property. - * - * Special windowing system interop considerations - * ------------------------------------------------ - * - * In some cases, libmpv needs to have access to the windowing system's handles. - * This can be a pointer to a X11 "Display" for example. Usually this is needed - * only for hardware decoding. - * - * You can communicate these handles to libmpv by adding a pseudo-OpenGL - * extension "GL_MP_MPGetNativeDisplay" to the additional extension string when - * calling mpv_opengl_cb_init_gl(). The get_proc_address callback should resolve - * a function named "glMPGetNativeDisplay", which has the signature: - * - * void* GLAPIENTRY glMPGetNativeDisplay(const char* name) - * - * See below what names are defined. Usually, libmpv will use the native handle - * up until mpv_opengl_cb_uninit_gl() is called. If the name is not anything - * you know/expected, return NULL from the function. - */ - -// Legacy - not supported anymore. -struct mpv_opengl_cb_window_pos { - int x; // left coordinates of window (usually 0) - int y; // top coordinates of window (usually 0) - int width; // width of GL window - int height; // height of GL window -}; - -// Legacy - not supported anymore. -struct mpv_opengl_cb_drm_params { - // DRM fd (int). set this to -1 if invalid. - int fd; - - // currently used crtc id - int crtc_id; - - // currently used connector id - int connector_id; - - // pointer to the drmModeAtomicReq that is being used for the renderloop. - // This atomic request pointer should be usually created at every renderloop. - struct _drmModeAtomicReq *atomic_request; -}; - -/** - * nVidia/Linux via VDPAU requires GLX, which does not have this problem (the - * GLX API can return the current X11 Display). - * - * Windowing system interop on MS win32 - * ------------------------------------ - * - * You should use ANGLE, and make sure your application and libmpv are linked - * to the same ANGLE DLLs. libmpv will pick the device context (needed for - * hardware decoding) from the current ANGLE EGL context. - */ - -/** - * Opaque context, returned by mpv_get_sub_api(MPV_SUB_API_OPENGL_CB). - * - * A context is bound to the mpv_handle it was retrieved from. The context - * will always be the same (for the same mpv_handle), and is valid until the - * mpv_handle it belongs to is released. - */ -typedef struct mpv_opengl_cb_context mpv_opengl_cb_context; - -typedef void (*mpv_opengl_cb_update_fn)(void *cb_ctx); -typedef void *(*mpv_opengl_cb_get_proc_address_fn)(void *fn_ctx, const char *name); - -/** - * Set the callback that notifies you when a new video frame is available, or - * if the video display configuration somehow changed and requires a redraw. - * Similar to mpv_set_wakeup_callback(), you must not call any mpv API from - * the callback, and all the other listed restrictions apply (such as not - * exiting the callback by throwing exceptions). - * - * @param callback callback(callback_ctx) is called if the frame should be - * redrawn - * @param callback_ctx opaque argument to the callback - */ -void mpv_opengl_cb_set_update_callback(mpv_opengl_cb_context *ctx, - mpv_opengl_cb_update_fn callback, - void *callback_ctx); - -/** - * Initialize the mpv OpenGL state. This retrieves OpenGL function pointers via - * get_proc_address, and creates OpenGL objects needed by mpv internally. It - * will also call APIs needed for rendering hardware decoded video in OpenGL, - * according to the mpv "hwdec" option. - * - * You must free the associated state at some point by calling the - * mpv_opengl_cb_uninit_gl() function. Not doing so may result in memory leaks - * or worse. - * - * @param exts optional _additional_ extension string, can be NULL - * @param get_proc_address callback used to retrieve function pointers to OpenGL - * functions. This is used for both standard functions - * and extension functions. (The extension string is - * checked whether extensions are really available.) - * The callback will be called from this function only - * (it is not stored and never used later). - * Usually, GL context APIs do this for you (e.g. with - * glXGetProcAddressARB or wglGetProcAddress), but - * some APIs do not always return pointers for all - * standard functions (even if present); in this case - * you have to compensate by looking up these functions - * yourself. - * @param get_proc_address_ctx arbitrary opaque user context passed to the - * get_proc_address callback - * @return error code (same as normal mpv_* API), including but not limited to: - * MPV_ERROR_UNSUPPORTED: the OpenGL version is not supported - * (or required extensions are missing) - * MPV_ERROR_INVALID_PARAMETER: the OpenGL state was already initialized - */ -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); - -/** - * Render video. Requires that the OpenGL state is initialized. - * - * The video will use the full provided framebuffer. Options like "panscan" are - * applied to determine which part of the video should be visible and how the - * video should be scaled. You can change these options at runtime by using the - * mpv property API. - * - * The renderer will reconfigure itself every time the output rectangle/size - * is changed. (If you want to do animations, it might be better to do the - * animation on a FBO instead.) - * - * This function implicitly pulls a video frame from the internal queue and - * renders it. If no new frame is available, the previous frame is redrawn. - * The update callback set with mpv_opengl_cb_set_update_callback() notifies - * you when a new frame was added. - * - * @param fbo The framebuffer object to render on. Because the renderer might - * manage multiple FBOs internally for the purpose of video - * postprocessing, it will always bind and unbind FBOs itself. If - * you want mpv to render on the main framebuffer, pass 0. - * @param w Width of the framebuffer. This is either the video size if the fbo - * parameter is 0, or the allocated size of the texture backing the - * fbo. The renderer will always use the full size of the fbo. - * @param h Height of the framebuffer. Same as with the w parameter, except - * that this parameter can be negative. In this case, the video - * frame will be rendered flipped. - * @return 0 - */ -int mpv_opengl_cb_draw(mpv_opengl_cb_context *ctx, int fbo, int w, int h); - -/** - * Deprecated. Use mpv_opengl_cb_draw(). This function is equivalent to: - * - * 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]); } - * - * vp[0] and vp[1] used to have a meaning, but are ignored in newer versions. - * - * This function will be removed in the future without version bump (this API - * was never marked as stable). - */ -int mpv_opengl_cb_render(mpv_opengl_cb_context *ctx, int fbo, int vp[4]); - -/** - * Tell the renderer that a frame was flipped at the given time. This is - * optional, but can help the player to achieve better timing. - * - * Note that calling this at least once informs libmpv that you will use this - * function. If you use it inconsistently, expect bad video playback. - * - * If this is called while no video or no OpenGL is initialized, it is ignored. - * - * @param time The mpv time (using mpv_get_time_us()) at which the flip call - * returned. If 0 is passed, mpv_get_time_us() is used instead. - * Currently, this parameter is ignored. - * @return error code - */ -int mpv_opengl_cb_report_flip(mpv_opengl_cb_context *ctx, int64_t time); - -/** - * Destroy the mpv OpenGL state. - * - * If video is still active (e.g. a file playing), video will be disabled - * forcefully. - * - * Calling this multiple times is ok. - * - * @return error code - */ -int mpv_opengl_cb_uninit_gl(mpv_opengl_cb_context *ctx); - -#ifdef __cplusplus -} -#endif - -#endif /* else #if MPV_ENABLE_DEPRECATED */ - -#endif diff --git a/libmpv/render_gl.h b/libmpv/render_gl.h index 5bc892903c..a2c31f0c72 100644 --- a/libmpv/render_gl.h +++ b/libmpv/render_gl.h @@ -120,10 +120,6 @@ typedef struct mpv_opengl_init_params { * Value passed as ctx parameter to get_proc_address(). */ void *get_proc_address_ctx; - /** - * This should not be used. It is deprecated and ignored. - */ - const char *extra_exts; } mpv_opengl_init_params; /** diff --git a/meson.build b/meson.build index 4f4d66335d..56f42013f9 100644 --- a/meson.build +++ b/meson.build @@ -1833,8 +1833,8 @@ endif if get_option('libmpv') client_h_define = cc.get_define('MPV_CLIENT_API_VERSION', prefix: '#include "libmpv/client.h"', include_directories: include_directories('.')) - major = client_h_define.split('|')[0][3] - minor = client_h_define.split('|')[1].substring(2,5) + major = client_h_define.split('|')[0].split('<<')[0].strip('() ') + minor = client_h_define.split('|')[1].strip('() ') client_api_version = major + '.' + minor + '.0' libmpv = library('mpv', sources, dependencies: [dependencies, luajit_partial], @@ -1844,7 +1844,7 @@ if get_option('libmpv') pkg.generate(libmpv, version: client_api_version, description: 'mpv media player client library') - headers = ['libmpv/client.h', 'libmpv/opengl_cb.h', 'libmpv/render.h', + headers = ['libmpv/client.h', 'libmpv/render.h', 'libmpv/render_gl.h', 'libmpv/stream_cb.h'] install_headers(headers, subdir: 'mpv') endif diff --git a/osdep/macos/libmpv_helper.swift b/osdep/macos/libmpv_helper.swift index b140f99587..4ac8f2748f 100644 --- a/osdep/macos/libmpv_helper.swift +++ b/osdep/macos/libmpv_helper.swift @@ -50,8 +50,7 @@ class LibmpvHelper { let advanced: CInt = 1 let api = UnsafeMutableRawPointer(mutating: (MPV_RENDER_API_TYPE_OPENGL as NSString).utf8String) let pAddress = mpv_opengl_init_params(get_proc_address: getProcAddress, - get_proc_address_ctx: nil, - extra_exts: nil) + get_proc_address_ctx: nil) MPVHelper.withUnsafeMutableRawPointers([pAddress, advanced]) { (pointers: [UnsafeMutableRawPointer?]) in var params: [mpv_render_param] = [ diff --git a/player/client.c b/player/client.c index 0c6e829015..009f37d587 100644 --- a/player/client.c +++ b/player/client.c @@ -383,15 +383,6 @@ void mpv_set_wakeup_callback(mpv_handle *ctx, void (*cb)(void *d), void *d) pthread_mutex_unlock(&ctx->wakeup_lock); } -void mpv_suspend(mpv_handle *ctx) -{ - MP_ERR(ctx, "mpv_suspend() is deprecated and does nothing.\n"); -} - -void mpv_resume(mpv_handle *ctx) -{ -} - static void lock_core(mpv_handle *ctx) { mp_dispatch_lock(ctx->mpctx->dispatch); @@ -554,11 +545,6 @@ void mpv_destroy(mpv_handle *ctx) mp_destroy_client(ctx, false); } -void mpv_detach_destroy(mpv_handle *ctx) -{ - mpv_destroy(ctx); -} - void mpv_terminate_destroy(mpv_handle *ctx) { mp_destroy_client(ctx, true); @@ -860,14 +846,11 @@ int mp_client_send_event_dup(struct MPContext *mpctx, const char *client_name, return mp_client_send_event(mpctx, client_name, 0, event, event_data.data); } -static bool deprecated_events[] = { +const static bool deprecated_events[] = { [MPV_EVENT_TRACKS_CHANGED] = true, [MPV_EVENT_TRACK_SWITCHED] = true, [MPV_EVENT_IDLE] = true, - [MPV_EVENT_PAUSE] = true, - [MPV_EVENT_UNPAUSE] = true, [MPV_EVENT_TICK] = true, - [MPV_EVENT_SCRIPT_INPUT_DISPATCH] = true, [MPV_EVENT_METADATA_UPDATE] = true, [MPV_EVENT_CHAPTER_CHANGE] = true, }; @@ -2098,10 +2081,7 @@ static const char *const event_table[] = { [MPV_EVENT_TRACKS_CHANGED] = "tracks-changed", [MPV_EVENT_TRACK_SWITCHED] = "track-switched", [MPV_EVENT_IDLE] = "idle", - [MPV_EVENT_PAUSE] = "pause", - [MPV_EVENT_UNPAUSE] = "unpause", [MPV_EVENT_TICK] = "tick", - [MPV_EVENT_SCRIPT_INPUT_DISPATCH] = "script-input-dispatch", [MPV_EVENT_CLIENT_MESSAGE] = "client-message", [MPV_EVENT_VIDEO_RECONFIG] = "video-reconfig", [MPV_EVENT_AUDIO_RECONFIG] = "audio-reconfig", @@ -2181,54 +2161,6 @@ mp_client_api_acquire_render_context(struct mp_client_api *ca) return res; } -// Stubs of the old opengl_cb API. - -#include "libmpv/opengl_cb.h" - -void mpv_opengl_cb_set_update_callback(mpv_opengl_cb_context *ctx, - mpv_opengl_cb_update_fn callback, - void *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) -{ - return MPV_ERROR_NOT_IMPLEMENTED; -} - -int mpv_opengl_cb_draw(mpv_opengl_cb_context *ctx, int fbo, int w, int h) -{ - return MPV_ERROR_NOT_IMPLEMENTED; -} - -int mpv_opengl_cb_report_flip(mpv_opengl_cb_context *ctx, int64_t time) -{ - return MPV_ERROR_NOT_IMPLEMENTED; -} - -int mpv_opengl_cb_uninit_gl(mpv_opengl_cb_context *ctx) -{ - return 0; -} - -int mpv_opengl_cb_render(mpv_opengl_cb_context *ctx, int fbo, int vp[4]) -{ - return MPV_ERROR_NOT_IMPLEMENTED; -} - -void *mpv_get_sub_api(mpv_handle *ctx, mpv_sub_api sub_api) -{ - if (!ctx->mpctx->initialized || sub_api != MPV_SUB_API_OPENGL_CB) - return NULL; - // 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 struct mp_custom_protocol { diff --git a/player/command.c b/player/command.c index b13bea5ca6..62c8ca8b13 100644 --- a/player/command.c +++ b/player/command.c @@ -6603,9 +6603,6 @@ void mp_option_change_callback(void *ctx, struct m_config_option *co, int flags, if (co) mp_notify_property(mpctx, co->name); - if (opt_ptr == &opts->pause) - mp_notify(mpctx, opts->pause ? MPV_EVENT_PAUSE : MPV_EVENT_UNPAUSE, 0); - if (self_update) return; diff --git a/player/playloop.c b/player/playloop.c index d0e7d26526..f2c39eb7a3 100644 --- a/player/playloop.c +++ b/player/playloop.c @@ -180,10 +180,6 @@ void set_pause_state(struct MPContext *mpctx, bool user_pause) } else { (void)get_relative_time(mpctx); // ignore time that passed during pause } - - // For some reason, these events are supposed to be sent even if only - // the internal pause state changed (and "pause" property didn't)... OK. - mp_notify(mpctx, opts->pause ? MPV_EVENT_PAUSE : MPV_EVENT_UNPAUSE, 0); } update_core_idle_state(mpctx); diff --git a/wscript_build.py b/wscript_build.py index 9fc0d25a51..9db04a6ffe 100644 --- a/wscript_build.py +++ b/wscript_build.py @@ -711,7 +711,7 @@ def build(ctx): PRIV_LIBS = get_deps(), ) - headers = ["client.h", "opengl_cb.h", "render.h", + headers = ["client.h", "render.h", "render_gl.h", "stream_cb.h"] for f in headers: ctx.install_as(ctx.env.INCLUDEDIR + '/mpv/' + f, 'libmpv/' + f)