vlc | branch: master | Rémi Denis-Courmont <[email protected]> | Sun Oct 27 19:46:58 2019 +0200| [da572bb019e2439f59fedcc32553b897f33ab90a] | committer: Rémi Denis-Courmont
Wayland SHM: use registry helpers > http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=da572bb019e2439f59fedcc32553b897f33ab90a --- modules/video_output/wayland/Makefile.am | 4 ++- modules/video_output/wayland/shm.c | 60 +++++++------------------------- 2 files changed, 16 insertions(+), 48 deletions(-) diff --git a/modules/video_output/wayland/Makefile.am b/modules/video_output/wayland/Makefile.am index f14ecdb3a5..65dc2ad299 100644 --- a/modules/video_output/wayland/Makefile.am +++ b/modules/video_output/wayland/Makefile.am @@ -1,5 +1,7 @@ ### Wayland ### -libwl_shm_plugin_la_SOURCES = video_output/wayland/shm.c +libwl_shm_plugin_la_SOURCES = \ + video_output/wayland/registry.c video_output/wayland/registry.h \ + video_output/wayland/shm.c nodist_libwl_shm_plugin_la_SOURCES = \ video_output/wayland/viewporter-client-protocol.h \ video_output/wayland/viewporter-protocol.c diff --git a/modules/video_output/wayland/shm.c b/modules/video_output/wayland/shm.c index cf75931aa5..9e22ff549f 100644 --- a/modules/video_output/wayland/shm.c +++ b/modules/video_output/wayland/shm.c @@ -35,6 +35,7 @@ #include <wayland-client.h> #include "viewporter-client-protocol.h" +#include "registry.h" #include <vlc_common.h> #include <vlc_plugin.h> @@ -55,7 +56,6 @@ struct vout_display_sys_t unsigned display_width; unsigned display_height; - bool use_buffer_transform; }; struct buffer_data @@ -238,40 +238,6 @@ static const struct wl_shm_listener shm_cbs = shm_format_cb, }; -static void registry_global_cb(void *data, struct wl_registry *registry, - uint32_t name, const char *iface, uint32_t vers) -{ - vout_display_t *vd = data; - vout_display_sys_t *sys = vd->sys; - - msg_Dbg(vd, "global %3"PRIu32": %s version %"PRIu32, name, iface, vers); - - if (!strcmp(iface, "wl_shm")) - sys->shm = wl_registry_bind(registry, name, &wl_shm_interface, 1); - else - if (!strcmp(iface, "wp_viewporter")) - sys->viewporter = wl_registry_bind(registry, name, - &wp_viewporter_interface, 1); - else - if (!strcmp(iface, "wl_compositor")) - sys->use_buffer_transform = vers >= 2; -} - -static void registry_global_remove_cb(void *data, struct wl_registry *registry, - uint32_t name) -{ - vout_display_t *vd = data; - - msg_Dbg(vd, "global remove %3"PRIu32, name); - (void) registry; -} - -static const struct wl_registry_listener registry_cbs = -{ - registry_global_cb, - registry_global_remove_cb, -}; - static void Close(vout_display_t *vd) { vout_display_sys_t *sys = vd->sys; @@ -312,11 +278,9 @@ static int Open(vout_display_t *vd, const vout_display_cfg_t *cfg, sys->embed = NULL; sys->eventq = NULL; sys->shm = NULL; - sys->viewporter = NULL; sys->active_buffers = 0; sys->display_width = cfg->display.width; sys->display_height = cfg->display.height; - sys->use_buffer_transform = false; /* Get window */ sys->embed = cfg->window; @@ -328,18 +292,19 @@ static int Open(vout_display_t *vd, const vout_display_cfg_t *cfg, if (sys->eventq == NULL) goto error; - struct wl_registry *registry = wl_display_get_registry(display); + struct vlc_wl_registry *registry = vlc_wl_registry_get(display, + sys->eventq); if (registry == NULL) goto error; - wl_proxy_set_queue((struct wl_proxy *)registry, sys->eventq); - wl_registry_add_listener(registry, ®istry_cbs, vd); - wl_display_roundtrip_queue(display, sys->eventq); - wl_registry_destroy(registry); - + sys->shm = vlc_wl_shm_get(registry); if (sys->shm == NULL) goto error; + sys->viewporter = (struct wp_viewporter *) + vlc_wl_interface_bind(registry, "wp_viewporter", + &wp_viewporter_interface, NULL); + wl_shm_add_listener(sys->shm, &shm_cbs, vd); wl_display_roundtrip_queue(display, sys->eventq); @@ -361,7 +326,7 @@ static int Open(vout_display_t *vd, const vout_display_cfg_t *cfg, [ORIENT_RIGHT_BOTTOM] = WL_OUTPUT_TRANSFORM_FLIPPED_90, }; - if (sys->use_buffer_transform) + if (vlc_wl_interface_get_version(registry, "wl_compositor") >= 2) { wl_surface_set_buffer_transform(surface, transforms[fmtp->orientation]); @@ -379,16 +344,17 @@ static int Open(vout_display_t *vd, const vout_display_cfg_t *cfg, vd->control = Control; vd->close = Close; + vlc_wl_registry_destroy(registry); (void) context; return VLC_SUCCESS; error: - if (sys->viewporter != NULL) - wp_viewporter_destroy(sys->viewporter); - if (sys->shm != NULL) wl_shm_destroy(sys->shm); + if (registry != NULL) + vlc_wl_registry_destroy(registry); + if (sys->eventq != NULL) wl_event_queue_destroy(sys->eventq); free(sys); _______________________________________________ vlc-commits mailing list [email protected] https://mailman.videolan.org/listinfo/vlc-commits
