v4l2bufferpool: Disable create_buf with libv4l2
authorNicolas Dufresne <nicolas.dufresne@collabora.com>
Tue, 16 Dec 2014 20:00:22 +0000 (15:00 -0500)
committerNicolas Dufresne <nicolas.dufresne@collabora.com>
Tue, 16 Dec 2014 20:00:22 +0000 (15:00 -0500)
Libv4l2 does not work with CREATE_BUFS. Instead of failing on random
error caused by libv4l2, disable CREATE_BUFS when an emulated format is
detected.

sys/v4l2/gstv4l2bufferpool.c

index 6445adb..7a6f4a9 100644 (file)
@@ -484,6 +484,14 @@ gst_v4l2_buffer_pool_set_config (GstBufferPool * bpool, GstStructure * config)
       break;
   }
 
+  /* libv4l2 conversion code does not handle CREATE_BUFS, and may lead to
+   * instability and crash, disable it for now */
+  if (can_allocate && obj->fmtdesc->flags & V4L2_FMT_FLAG_EMULATED) {
+    GST_WARNING_OBJECT (pool,
+        "libv4l2 converter detected, disabling CREATE_BUFS");
+    can_allocate = FALSE;
+  }
+
   if (min_buffers < GST_V4L2_MIN_BUFFERS) {
     updated = TRUE;
     min_buffers = GST_V4L2_MIN_BUFFERS;