v4l2object: fix capture with bayer formats other than bggr
authorAlban Bedel <alban.bedel@avionic-design.de>
Tue, 8 Mar 2016 12:03:55 +0000 (13:03 +0100)
committerNicolas Dufresne <nicolas.dufresne@collabora.com>
Tue, 8 Mar 2016 16:15:08 +0000 (11:15 -0500)
gst_v4l2_object_get_caps_info() always return V4L2_PIX_FMT_SBGGR8
for all bayer formats. This is obviously broken if the device use
another ordering. Fix this by properly reading the format parameter.

https://bugzilla.gnome.org/show_bug.cgi?id=763318

sys/v4l2/gstv4l2object.c

index c326849..21c16fa 100644 (file)
@@ -1736,7 +1736,17 @@ gst_v4l2_object_get_caps_info (GstV4l2Object * v4l2object, GstCaps * caps,
     } else if (g_str_equal (mimetype, "video/x-vp8")) {
       fourcc = V4L2_PIX_FMT_VP8;
     } else if (g_str_equal (mimetype, "video/x-bayer")) {
-      fourcc = V4L2_PIX_FMT_SBGGR8;
+      const gchar *format = gst_structure_get_string (structure, "format");
+      if (format) {
+       if (!g_ascii_strcasecmp (format, "bggr"))
+         fourcc = V4L2_PIX_FMT_SBGGR8;
+       else if (!g_ascii_strcasecmp (format, "gbrg"))
+         fourcc = V4L2_PIX_FMT_SGBRG8;
+       else if (!g_ascii_strcasecmp (format, "grbg"))
+         fourcc = V4L2_PIX_FMT_SGRBG8;
+       else if (!g_ascii_strcasecmp (format, "rggb"))
+         fourcc = V4L2_PIX_FMT_SRGGB8;
+      }
     } else if (g_str_equal (mimetype, "video/x-sonix")) {
       fourcc = V4L2_PIX_FMT_SN9C10X;
     } else if (g_str_equal (mimetype, "video/x-pwc1")) {