diff options
Diffstat (limited to 'libmpv')
-rw-r--r-- | libmpv/client.h | 14 | ||||
-rw-r--r-- | libmpv/opengl_cb.h | 43 |
2 files changed, 52 insertions, 5 deletions
diff --git a/libmpv/client.h b/libmpv/client.h index 4ba96bd861..1980cea881 100644 --- a/libmpv/client.h +++ b/libmpv/client.h @@ -215,7 +215,7 @@ extern "C" { * relational operators (<, >, <=, >=). */ #define MPV_MAKE_VERSION(major, minor) (((major) << 16) | (minor) | 0UL) -#define MPV_CLIENT_API_VERSION MPV_MAKE_VERSION(1, 20) +#define MPV_CLIENT_API_VERSION MPV_MAKE_VERSION(1, 21) /** * Return the MPV_CLIENT_API_VERSION the mpv source has been compiled with. @@ -780,6 +780,10 @@ void mpv_free_node_contents(mpv_node *node); * mpv_set_property() to change settings during playback, because the property * mechanism guarantees that changes take effect immediately. * + * Using a format other than MPV_FORMAT_NODE is equivalent to constructing a + * mpv_node with the given format and data, and passing the mpv_node to this + * function. + * * @param name Option name. This is the same as on the mpv command line, but * without the leading "--". * @param format see enum mpv_format. @@ -877,7 +881,13 @@ int mpv_command_node_async(mpv_handle *ctx, uint64_t reply_userdata, * usually will fail with MPV_ERROR_PROPERTY_FORMAT. In some cases, the data * is automatically converted and access succeeds. For example, MPV_FORMAT_INT64 * is always converted to MPV_FORMAT_DOUBLE, and access using MPV_FORMAT_STRING - * usually invokes a string parser. + * usually invokes a string parser. The same happens when calling this function + * with MPV_FORMAT_NODE: the underlying format may be converted to another + * type if possible. + * + * Using a format other than MPV_FORMAT_NODE is equivalent to constructing a + * mpv_node with the given format and data, and passing the mpv_node to this + * function. (Before API version 1.21, this was different.) * * @param name The property name. See input.rst for a list of properties. * @param format see enum mpv_format. diff --git a/libmpv/opengl_cb.h b/libmpv/opengl_cb.h index d117213c53..8751ca01e0 100644 --- a/libmpv/opengl_cb.h +++ b/libmpv/opengl_cb.h @@ -108,6 +108,28 @@ extern "C" { * 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, + * make it load the interop at load time by setting the "hwdec-preload"="auto" + * option before calling mpv_opengl_cb_init_gl(). + * + * 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: GLX is required + * - OSX: CGL is required (CGLGetCurrentContext() returning non-NULL) + * + * Once these things are setup, hardware decoding can be enabled/disabled at + * any time by setting the "hwdec" property. + * * Special windowing system interop considerations * ------------------------------------------------ * @@ -126,19 +148,34 @@ extern "C" { * up until mpv_opengl_cb_uninit_gl() is called. If the name is not anything * you know/expected, return NULL from the function. * - * Windowing system interop on Linux - * --------------------------------- + * Windowing system interop on Intel/Linux with VAAPI + * -------------------------------------------------- * * The new VAAPI OpenGL interop requires an EGL context. EGL provides no way * to query the X11 Display associated to a specific EGL context, so this API * is used to pass it through. * * glMPGetNativeDisplay("x11") should return a X11 "Display*", which then will - * be used to create the hardware decoder state. (On GLX, this is not needed.) + * be used to create the hardware decoder state. + * + * glMPGetNativeDisplay("wl") should return a Wayland "struct wl_display *". + * + * glMPGetNativeDisplay("drm") should return a DRM FD casted to intptr_t (note + * that a 0 FD is not supported - if this can happen in your case, you must + * dup2() it to a non-0 FD). + * + * 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 * ------------------------------------ * + * Warning: the following is only required if native OpenGL instead of ANGLE + * is used. ANGLE is recommended, because it also allows direct + * hardware decoding interop without further setup by the libmpv + * API user, while the same with native OpenGL is either very hard + * to do (via GL/DX interop with D3D9), or not implemented. + * * If OpenGL switches to fullscreen, most players give it access GPU access, * which means DXVA2 hardware decoding in mpv won't work. This can be worked * around by giving mpv access to Direct3D device, which it will then use to |