v4l2: Don't warn when optional CID are not implement
authorNicolas Dufresne <nicolas.dufresne@collabora.co.uk>
Fri, 5 Jun 2015 19:32:10 +0000 (15:32 -0400)
committerNicolas Dufresne <nicolas.dufresne@collabora.co.uk>
Fri, 5 Jun 2015 19:34:12 +0000 (15:34 -0400)
gst_v4l2_get_attributre() shall only be used when the CID is expected
to be supported. Otherwise, we get unwanted warning posted to the bus.

sys/v4l2/gstv4l2object.c

index 816b42c..d76b9a2 100644 (file)
@@ -723,20 +723,19 @@ gst_v4l2_object_get_property_helper (GstV4l2Object * v4l2object,
 static void
 gst_v4l2_get_driver_min_buffers (GstV4l2Object * v4l2object)
 {
-  int min;
-  gboolean ret = FALSE;
+  struct v4l2_control control = { 0, };
+
+  g_return_if_fail (GST_V4L2_IS_OPEN (v4l2object));
 
-  /* Certain driver may expose a minimum number of buffers through controls. */
-  /* If the ioctl is not supported by the driver, min_buffers remains zero.  */
-  ret = gst_v4l2_get_attribute (v4l2object,
-      V4L2_TYPE_IS_OUTPUT (v4l2object->type)
-      ? V4L2_CID_MIN_BUFFERS_FOR_OUTPUT : V4L2_CID_MIN_BUFFERS_FOR_CAPTURE,
-      &min);
+  if (V4L2_TYPE_IS_OUTPUT (v4l2object->type))
+    control.id = V4L2_CID_MIN_BUFFERS_FOR_OUTPUT;
+  else
+    control.id = V4L2_CID_MIN_BUFFERS_FOR_CAPTURE;
 
-  if (ret) {
+  if (v4l2_ioctl (v4l2object->video_fd, VIDIOC_G_CTRL, &control) == 0) {
     GST_DEBUG_OBJECT (v4l2object->element,
-        "driver requires a minimum of %d buffers", min);
-    v4l2object->min_buffers = min;
+        "driver requires a minimum of %d buffers", control.value);
+    v4l2object->min_buffers = control.value;
   } else {
     v4l2object->min_buffers = 0;
   }