v4l2: object: Adjust DMABuf negotiation base on io-mode
authorNicolas Dufresne <nicolas.dufresne@collabora.com>
Wed, 18 Dec 2024 20:30:24 +0000 (15:30 -0500)
committerGStreamer Marge Bot <gitlab-merge-bot@gstreamer-foundation.org>
Wed, 18 Dec 2024 23:34:08 +0000 (23:34 +0000)
If the io-mode is forced by user to MMAP, USERPTR or RW, don't try and
negotiated DMABuf caps feature. This would otherwise fail later.

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

subprojects/gst-plugins-good/sys/v4l2/gstv4l2object.c

index 4730df42ba41f00f45aa494d99a3f6f98c5d2490..c8d82e5222454e3d811f2ce8128a7cec3e68603d 100644 (file)
@@ -5190,6 +5190,7 @@ gst_v4l2_object_probe_caps (GstV4l2Object * v4l2object, GstCaps * filter)
   GSList *walk;
   GSList *formats;
   guint32 fourcc = 0;
+  gboolean enable_dmabuf = FALSE;
 
   if (v4l2object->fmtdesc)
     fourcc = GST_V4L2_PIXELFORMAT (v4l2object);
@@ -5197,6 +5198,17 @@ gst_v4l2_object_probe_caps (GstV4l2Object * v4l2object, GstCaps * filter)
   gst_v4l2_object_clear_format_list (v4l2object);
   formats = gst_v4l2_object_get_format_list (v4l2object);
 
+  switch (v4l2object->req_mode) {
+    case GST_V4L2_IO_AUTO:
+    case GST_V4L2_IO_DMABUF:
+    case GST_V4L2_IO_DMABUF_IMPORT:
+      enable_dmabuf = TRUE;
+      break;
+    default:
+      break;
+  }
+
+
   /* Recover the fmtdesc, it may no longer exist, in which case it will be set
    * to null */
   if (fourcc)
@@ -5250,7 +5262,7 @@ gst_v4l2_object_probe_caps (GstV4l2Object * v4l2object, GstCaps * filter)
 
     sysmem_tmpl =
         gst_v4l2_object_v4l2fourcc_to_bare_struct (format->pixelformat,
-        &dmabuf_tmpl);
+        enable_dmabuf ? &dmabuf_tmpl : NULL);
 
     if (!sysmem_tmpl && !dmabuf_tmpl) {
       GST_DEBUG_OBJECT (v4l2object->dbg_obj,