diff options
author | Dudemanguy <random342@airmail.cc> | 2023-02-17 11:24:15 -0600 |
---|---|---|
committer | Dudemanguy <random342@airmail.cc> | 2023-02-18 02:21:54 +0000 |
commit | e2cdc23af06f0911ced2d17034ee3ff6f5a98820 (patch) | |
tree | 709450aa90d7e9454f7641ce5adf365bcba6695b /video/out/wayland_common.c | |
parent | 7607432127d5aa4e2a6e8cc05ea112c19aa9ff7f (diff) | |
download | mpv-e2cdc23af06f0911ced2d17034ee3ff6f5a98820.tar.bz2 mpv-e2cdc23af06f0911ced2d17034ee3ff6f5a98820.tar.xz |
Revert "vo_dmabuf_wayland: drop support for linux-dmabuf-v2"
This was originally dropped because it was thought to be unneeded at the
time, but at least some devices (rockchip) apparently are still on old
compositors that use linux-dmabuf v2. It's not much code, and for
testing purposes it's good to have around since it's hard to test
drmprime otherwise. Some minor additions are here to support the newly
added vaapi-format mapping in v2 of the protocol.
This reverts commit a5b9d529eec8d4bb6fc858143337c3573ec8afd0.
Diffstat (limited to 'video/out/wayland_common.c')
-rw-r--r-- | video/out/wayland_common.c | 23 |
1 files changed, 23 insertions, 0 deletions
diff --git a/video/out/wayland_common.c b/video/out/wayland_common.c index 9c415b38de..59381c753c 100644 --- a/video/out/wayland_common.c +++ b/video/out/wayland_common.c @@ -1124,6 +1124,24 @@ static const struct wl_callback_listener frame_listener = { frame_callback, }; +static void dmabuf_format(void *data, struct zwp_linux_dmabuf_v1 *zwp_linux_dmabuf, + uint32_t format) +{ + struct vo_wayland_state *wl = data; + + if (wl->drm_format_ct == wl->drm_format_ct_max) { + wl->drm_format_ct_max *= 2; + wl->drm_formats = talloc_realloc(wl, wl->drm_formats, int, wl->drm_format_ct_max); + } + + wl->drm_formats[wl->drm_format_ct++] = format; + MP_VERBOSE(wl, "%s is supported by the compositor.\n", mp_tag_str(format)); +} + +static const struct zwp_linux_dmabuf_v1_listener dmabuf_listener = { + dmabuf_format +}; + #if HAVE_WAYLAND_PROTOCOLS_1_24 static void done(void *data, struct zwp_linux_dmabuf_feedback_v1 *zwp_linux_dmabuf_feedback_v1) @@ -1214,6 +1232,11 @@ static void registry_handle_add(void *data, struct wl_registry *reg, uint32_t id wl->dmabuf_feedback = zwp_linux_dmabuf_v1_get_default_feedback(wl->dmabuf); zwp_linux_dmabuf_feedback_v1_add_listener(wl->dmabuf_feedback, &dmabuf_feedback_listener, wl); #endif + } else if (!strcmp (interface, zwp_linux_dmabuf_v1_interface.name) && (ver >= 2) && found++) { + wl->dmabuf = wl_registry_bind(reg, id, &zwp_linux_dmabuf_v1_interface, 2); + zwp_linux_dmabuf_v1_add_listener(wl->dmabuf, &dmabuf_listener, wl); + wl->drm_format_ct_max = 64; + wl->drm_formats = talloc_array(wl, int, wl->drm_format_ct_max); } if (!strcmp (interface, wp_viewporter_interface.name) && (ver >= 1) && found++) { |