From 7edb6a56349e7bf3b434a309a23b3097ed376c2d Mon Sep 17 00:00:00 2001 From: Nicolas Dufresne Date: Mon, 3 Feb 2025 14:09:16 +0100 Subject: [PATCH] waylandsink: Prefer DMABuf over system memory Swap the template and caps query around to that the sink can describe a preference for DMAbuf over system memory. Part-of: --- .../docs/plugins/gst_plugins_cache.json | 4 ++-- .../gst-plugins-bad/ext/gtk/gstgtkwaylandsink.c | 16 ++++++++-------- .../gst-plugins-bad/ext/wayland/gstwaylandsink.c | 16 ++++++++-------- 3 files changed, 18 insertions(+), 18 deletions(-) diff --git a/subprojects/gst-plugins-bad/docs/plugins/gst_plugins_cache.json b/subprojects/gst-plugins-bad/docs/plugins/gst_plugins_cache.json index d700fb955e..b1ce241759 100644 --- a/subprojects/gst-plugins-bad/docs/plugins/gst_plugins_cache.json +++ b/subprojects/gst-plugins-bad/docs/plugins/gst_plugins_cache.json @@ -39699,7 +39699,7 @@ "long-name": "Gtk Wayland Video Sink", "pad-templates": { "sink": { - "caps": "video/x-raw:\n format: { AYUV, RGBA, ARGB, BGRA, ABGR, P010_10LE, NV12_10LE40, v308, RGBx, xRGB, BGRx, xBGR, RGB, BGR, Y42B, NV16, NV61, YUY2, YVYU, UYVY, I420, YV12, NV12, NV21, Y41B, YUV9, YVU9, BGR16, RGB16 }\n width: [ 1, 2147483647 ]\n height: [ 1, 2147483647 ]\n framerate: [ 0/1, 2147483647/1 ]\n\nvideo/x-raw(memory:DMABuf):\n format: DMA_DRM\n width: [ 1, 2147483647 ]\n height: [ 1, 2147483647 ]\n framerate: [ 0/1, 2147483647/1 ]\n", + "caps": "video/x-raw(memory:DMABuf):\n format: DMA_DRM\n width: [ 1, 2147483647 ]\n height: [ 1, 2147483647 ]\n framerate: [ 0/1, 2147483647/1 ]\nvideo/x-raw:\n format: { AYUV, RGBA, ARGB, BGRA, ABGR, P010_10LE, NV12_10LE40, v308, RGBx, xRGB, BGRx, xBGR, RGB, BGR, Y42B, NV16, NV61, YUY2, YVYU, UYVY, I420, YV12, NV12, NV21, Y41B, YUV9, YVU9, BGR16, RGB16 }\n width: [ 1, 2147483647 ]\n height: [ 1, 2147483647 ]\n framerate: [ 0/1, 2147483647/1 ]\n", "direction": "sink", "presence": "always" } @@ -253228,7 +253228,7 @@ "long-name": "wayland video sink", "pad-templates": { "sink": { - "caps": "video/x-raw:\n format: { AYUV, RGBA, ARGB, BGRA, ABGR, P010_10LE, NV12_10LE40, v308, RGBx, xRGB, BGRx, xBGR, RGB, BGR, Y42B, NV16, NV61, YUY2, YVYU, UYVY, I420, YV12, NV12, NV21, Y41B, YUV9, YVU9, BGR16, RGB16 }\n width: [ 1, 2147483647 ]\n height: [ 1, 2147483647 ]\n framerate: [ 0/1, 2147483647/1 ]\n\nvideo/x-raw(memory:DMABuf):\n format: DMA_DRM\n width: [ 1, 2147483647 ]\n height: [ 1, 2147483647 ]\n framerate: [ 0/1, 2147483647/1 ]\n", + "caps": "video/x-raw(memory:DMABuf):\n format: DMA_DRM\n width: [ 1, 2147483647 ]\n height: [ 1, 2147483647 ]\n framerate: [ 0/1, 2147483647/1 ]\nvideo/x-raw:\n format: { AYUV, RGBA, ARGB, BGRA, ABGR, P010_10LE, NV12_10LE40, v308, RGBx, xRGB, BGRx, xBGR, RGB, BGR, Y42B, NV16, NV61, YUY2, YVYU, UYVY, I420, YV12, NV12, NV21, Y41B, YUV9, YVU9, BGR16, RGB16 }\n width: [ 1, 2147483647 ]\n height: [ 1, 2147483647 ]\n framerate: [ 0/1, 2147483647/1 ]\n", "direction": "sink", "presence": "always" } diff --git a/subprojects/gst-plugins-bad/ext/gtk/gstgtkwaylandsink.c b/subprojects/gst-plugins-bad/ext/gtk/gstgtkwaylandsink.c index b530eea357..82180ae98e 100644 --- a/subprojects/gst-plugins-bad/ext/gtk/gstgtkwaylandsink.c +++ b/subprojects/gst-plugins-bad/ext/gtk/gstgtkwaylandsink.c @@ -45,8 +45,8 @@ GST_DEBUG_CATEGORY_STATIC (GST_CAT_DEFAULT); static GstStaticPadTemplate sink_template = GST_STATIC_PAD_TEMPLATE ("sink", GST_PAD_SINK, GST_PAD_ALWAYS, - GST_STATIC_CAPS (GST_VIDEO_CAPS_MAKE (GST_WL_VIDEO_FORMATS) ";" - GST_VIDEO_DMA_DRM_CAPS_MAKE) + GST_STATIC_CAPS (GST_VIDEO_DMA_DRM_CAPS_MAKE ";" + GST_VIDEO_CAPS_MAKE (GST_WL_VIDEO_FORMATS)) ); static void gst_gtk_wayland_sink_get_property (GObject * object, @@ -784,16 +784,16 @@ gst_gtk_wayland_sink_get_caps (GstBaseSink * bsink, GstCaps * filter) g_value_init (&format_list, GST_TYPE_LIST); - /* Add corresponding shm formats */ - gst_wl_display_fill_shm_format_list (priv->display, &format_list); - gst_structure_take_value (gst_caps_get_structure (caps, 0), "format", + /* Add corresponding dmabuf formats */ + gst_wl_display_fill_dmabuf_format_list (priv->display, &format_list); + gst_structure_take_value (gst_caps_get_structure (caps, 0), "drm-format", &format_list); g_value_init (&format_list, GST_TYPE_LIST); - /* Add corresponding dmabuf formats */ - gst_wl_display_fill_dmabuf_format_list (priv->display, &format_list); - gst_structure_take_value (gst_caps_get_structure (caps, 1), "drm-format", + /* Add corresponding shm formats */ + gst_wl_display_fill_shm_format_list (priv->display, &format_list); + gst_structure_take_value (gst_caps_get_structure (caps, 1), "format", &format_list); GST_DEBUG_OBJECT (self, "display caps: %" GST_PTR_FORMAT, caps); diff --git a/subprojects/gst-plugins-bad/ext/wayland/gstwaylandsink.c b/subprojects/gst-plugins-bad/ext/wayland/gstwaylandsink.c index 50c8ed6991..bd801212d6 100644 --- a/subprojects/gst-plugins-bad/ext/wayland/gstwaylandsink.c +++ b/subprojects/gst-plugins-bad/ext/wayland/gstwaylandsink.c @@ -72,8 +72,8 @@ GST_DEBUG_CATEGORY (gstwayland_debug); static GstStaticPadTemplate sink_template = GST_STATIC_PAD_TEMPLATE ("sink", GST_PAD_SINK, GST_PAD_ALWAYS, - GST_STATIC_CAPS (GST_VIDEO_CAPS_MAKE (GST_WL_VIDEO_FORMATS) ";" - GST_VIDEO_DMA_DRM_CAPS_MAKE) + GST_STATIC_CAPS (GST_VIDEO_DMA_DRM_CAPS_MAKE ";" + GST_VIDEO_CAPS_MAKE (GST_WL_VIDEO_FORMATS)) ); static void gst_wayland_sink_get_property (GObject * object, @@ -569,16 +569,16 @@ gst_wayland_sink_get_caps (GstBaseSink * bsink, GstCaps * filter) g_value_init (&format_list, GST_TYPE_LIST); - /* Add corresponding shm formats */ - gst_wl_display_fill_shm_format_list (self->display, &format_list); - gst_structure_take_value (gst_caps_get_structure (caps, 0), "format", + /* Add corresponding dmabuf formats */ + gst_wl_display_fill_dmabuf_format_list (self->display, &format_list); + gst_structure_take_value (gst_caps_get_structure (caps, 0), "drm-format", &format_list); g_value_init (&format_list, GST_TYPE_LIST); - /* Add corresponding dmabuf formats */ - gst_wl_display_fill_dmabuf_format_list (self->display, &format_list); - gst_structure_take_value (gst_caps_get_structure (caps, 1), "drm-format", + /* Add corresponding shm formats */ + gst_wl_display_fill_shm_format_list (self->display, &format_list); + gst_structure_take_value (gst_caps_get_structure (caps, 1), "format", &format_list); GST_DEBUG_OBJECT (self, "display caps: %" GST_PTR_FORMAT, caps);