Check for caps mmap compatibility before allocation
authorJussi Saavalainen <jussi.saavalainen@ixonos.com>
Wed, 13 Mar 2013 15:50:00 +0000 (17:50 +0200)
committerJussi Saavalainen <jussi.saavalainen@ixonos.com>
Tue, 19 Mar 2013 13:41:35 +0000 (15:41 +0200)
libva shared buffers don't work with V4L2_MEMORY_MMAP, so don't
use it in that case. This enables "gst-launch camerasrc ! vaapisink",
but emits a warning.

Change-Id: Ie2e64d7ec194df0487474621ee15fc092acce5eb

gst/mfldv4l2cam/v4l2camsrc_calls.c

index 72b6332..8a11d84 100644 (file)
@@ -2598,6 +2598,15 @@ gst_v4l2camsrc_capture_start (GstCameraSrc * camsrc, GstCaps * caps)
 
   breq.count = v4l2camsrc->num_buffers;
   breq.type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
+
+  if(v4l2camsrc->use_mmap && GST_CAPS_IS_SIMPLE(caps)) {
+    GstStructure *st = gst_caps_get_structure(caps, 0);
+    if(g_str_has_prefix(gst_structure_get_name(st), "video/x-vaapi-sharing")) {
+      v4l2camsrc->use_mmap = FALSE;
+      GST_WARNING_OBJECT(v4l2camsrc, "mmap is not supported with VA shared buffer, turning off");
+    }
+  }
+
   if (v4l2camsrc->use_mmap)
     breq.memory = V4L2_MEMORY_MMAP;
   else