summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNicolas Dufresne <nicolas.dufresne@collabora.com>2016-01-21 17:41:55 -0500
committerNicolas Dufresne <nicolas.dufresne@collabora.com>2016-04-07 11:41:45 -0400
commit1fb9330f35f169d6aec2dcd86c0dd47247fd04b4 (patch)
tree203b20decb3f3f341155c1ad9438e3252be5ff02
parent6cf89bf684f7c5fbd46bdab804a4ed3292108a8b (diff)
downloadgstreamer-plugins-good-1fb9330f35f169d6aec2dcd86c0dd47247fd04b4.tar.gz
v4l2: Re-add colorimetry field for RGB formats
This time, check if it's an RGB format and sets the transformation matrix to identity. The rest of the colorimetry information is meaningfull and shall be kept. https://bugzilla.gnome.org/show_bug.cgi?id=759624
-rw-r--r--sys/v4l2/gstv4l2object.c45
1 files changed, 20 insertions, 25 deletions
diff --git a/sys/v4l2/gstv4l2object.c b/sys/v4l2/gstv4l2object.c
index 90f569ff0..b3586802b 100644
--- a/sys/v4l2/gstv4l2object.c
+++ b/sys/v4l2/gstv4l2object.c
@@ -1203,31 +1203,24 @@ gst_v4l2_object_v4l2fourcc_to_video_format (guint32 fourcc)
}
static gboolean
-gst_v4l2_object_v4l2fourcc_is_yuv (guint32 fourcc)
+gst_v4l2_object_v4l2fourcc_is_rgb (guint32 fourcc)
{
gboolean ret = FALSE;
switch (fourcc) {
- case V4L2_PIX_FMT_NV12:
- case V4L2_PIX_FMT_NV12M:
- case V4L2_PIX_FMT_NV12MT:
- case V4L2_PIX_FMT_NV21:
- case V4L2_PIX_FMT_NV21M:
- case V4L2_PIX_FMT_YVU410:
- case V4L2_PIX_FMT_YUV410:
- case V4L2_PIX_FMT_YUV420:
- case V4L2_PIX_FMT_YUV420M:
- case V4L2_PIX_FMT_YUYV:
- case V4L2_PIX_FMT_YVU420:
- case V4L2_PIX_FMT_UYVY:
- case V4L2_PIX_FMT_YUV411P:
- case V4L2_PIX_FMT_YUV422P:
- case V4L2_PIX_FMT_YVYU:
- case V4L2_PIX_FMT_NV16:
- case V4L2_PIX_FMT_NV16M:
- case V4L2_PIX_FMT_NV61:
- case V4L2_PIX_FMT_NV61M:
- case V4L2_PIX_FMT_NV24:
+ case V4L2_PIX_FMT_XRGB555:
+ case V4L2_PIX_FMT_RGB555:
+ case V4L2_PIX_FMT_XRGB555X:
+ case V4L2_PIX_FMT_RGB555X:
+ case V4L2_PIX_FMT_RGB565:
+ case V4L2_PIX_FMT_RGB24:
+ case V4L2_PIX_FMT_BGR24:
+ case V4L2_PIX_FMT_XRGB32:
+ case V4L2_PIX_FMT_RGB32:
+ case V4L2_PIX_FMT_XBGR32:
+ case V4L2_PIX_FMT_BGR32:
+ case V4L2_PIX_FMT_ABGR32:
+ case V4L2_PIX_FMT_ARGB32:
ret = TRUE;
break;
default:
@@ -1963,10 +1956,6 @@ gst_v4l2_object_add_colorspace (GstV4l2Object * v4l2object, GstStructure * s,
GValue colorimetry = G_VALUE_INIT;
GstVideoColorimetry cinfo;
- /* Don't expose colorimetry unless this is a YUV format */
- if (!gst_v4l2_object_v4l2fourcc_is_yuv (pixelformat))
- return;
-
memset (&fmt, 0, sizeof (fmt));
fmt.type = v4l2object->type;
fmt.fmt.pix.width = width;
@@ -1993,6 +1982,12 @@ gst_v4l2_object_add_colorspace (GstV4l2Object * v4l2object, GstStructure * s,
if (gst_v4l2_object_get_colorspace (colorspace, range, matrix, transfer,
&cinfo)) {
+ /* Set identity matrix for R'G'B' formats to avoid creating
+ * confusion. This though is cosmetic as it's now properly ignored by
+ * the video info API and videoconvert. */
+ if (gst_v4l2_object_v4l2fourcc_is_rgb (pixelformat))
+ cinfo.matrix = GST_VIDEO_COLOR_MATRIX_RGB;
+
g_value_init (&colorimetry, G_TYPE_STRING);
g_value_take_string (&colorimetry,
gst_video_colorimetry_to_string (&cinfo));