From 31c04f162b8c7bfaed7f76eaa18da3c4f41c090e Mon Sep 17 00:00:00 2001 From: wm4 Date: Thu, 26 Sep 2019 14:09:14 +0200 Subject: client API: be explicit about usage rules and deadlocks some more I think a popular libmpv application did exactly this: enabling advanced control, and then receiving deadlocks. I didn't confirm it, though. In any case, the API docs should avoid tricking users into making this easy mistake. --- DOCS/client-api-changes.rst | 2 ++ libmpv/render.h | 7 +++++++ 2 files changed, 9 insertions(+) diff --git a/DOCS/client-api-changes.rst b/DOCS/client-api-changes.rst index 5b595047d0..81e915d4eb 100644 --- a/DOCS/client-api-changes.rst +++ b/DOCS/client-api-changes.rst @@ -37,6 +37,8 @@ API changes There were no actual API changes. API users on older API versions and mpv releases should set "vd-lavc-dr" to "no" to avoid these issues. + API users must still adhere to the tricky rules documented in render.h + to avoid other deadlocks. 1.104 - Deprecate struct mpv_opengl_drm_params. Replaced by mpv_opengl_drm_params_v2 - Deprecate MPV_RENDER_PARAM_DRM_DISPLAY. Replaced by MPV_RENDER_PARAM_DRM_DISPLAY_V2. 1.103 - redo handling of async commands diff --git a/libmpv/render.h b/libmpv/render.h index afea7c2e10..293de3c9f0 100644 --- a/libmpv/render.h +++ b/libmpv/render.h @@ -239,6 +239,13 @@ typedef enum mpv_render_param_type { * - Rendering screenshots with the GPU API if supported by the backend * (instead of using a suboptimal software fallback via libswscale). * + * Warning: do not just add this without reading the "Threading" section + * above, and then wondering that deadlocks happen. The + * requirements are tricky. But also note that even if advanced + * control is disabled, not adhering to the rules will lead to + * playback problems. Enabling advanced controls simply makes + * violating these rules fatal. + * * Type: int*: 0 for disable (default), 1 for enable */ MPV_RENDER_PARAM_ADVANCED_CONTROL = 10, -- cgit v1.2.3