vaapisink: implements gst_vaapisink_wayland_create_window_from_handle()
authorHyunjun Ko <zzoon@igalia.com>
Wed, 8 Nov 2017 04:23:39 +0000 (13:23 +0900)
committerMichael Olbrich <m.olbrich@pengutronix.de>
Fri, 31 Jul 2020 12:02:33 +0000 (14:02 +0200)
Implements gst_vaapisink_wayland_create_window_from_handle() to support
using external wl_surface.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer-vaapi/-/merge_requests/342>

gst/vaapi/gstvaapisink.c

index 92f9534..c1f56bf 100644 (file)
@@ -561,11 +561,31 @@ gst_vaapisink_wayland_create_window (GstVaapiSink * sink, guint width,
   return TRUE;
 }
 
+static gboolean
+gst_vaapisink_wayland_create_window_from_handle (GstVaapiSink * sink,
+    guintptr window)
+{
+  GstVaapiDisplay *display;
+
+  if (!gst_vaapisink_ensure_display (sink))
+    return FALSE;
+  display = GST_VAAPI_PLUGIN_BASE_DISPLAY (sink);
+
+  if (sink->window == NULL || (guintptr) sink->window != window) {
+    gst_vaapi_window_replace (&sink->window, NULL);
+    sink->window = gst_vaapi_window_wayland_new_with_surface (display, window);
+  }
+
+  return sink->window != NULL;
+}
+
 static const inline GstVaapiSinkBackend *
 gst_vaapisink_backend_wayland (void)
 {
   static const GstVaapiSinkBackend GstVaapiSinkBackendWayland = {
     .create_window = gst_vaapisink_wayland_create_window,
+    .create_window_from_handle =
+        gst_vaapisink_wayland_create_window_from_handle,
     .render_surface = gst_vaapisink_render_surface,
   };
   return &GstVaapiSinkBackendWayland;