From 2b1658fca2e25b321580a066955de3dd453b2846 Mon Sep 17 00:00:00 2001
From: Philipp Zabel
Date: Mon, 23 Sep 2019 14:34:20 +0200
Subject: [PATCH] v4l2object: add support for ABGR, xBGR, RGBA, and RGBx
formats
Map them to the new V4L2_PIX_FMT_{BGRA32,BGRX32,RGBA32,RGBX32} pixel
formats.
---
sys/v4l2/gstv4l2object.c | 40 ++++++++++++++++++++++++++++++++++++++++
1 file changed, 40 insertions(+)
diff --git a/sys/v4l2/gstv4l2object.c b/sys/v4l2/gstv4l2object.c
index 49c878a20f..f2a0576a9c 100644
--- a/sys/v4l2/gstv4l2object.c
+++ b/sys/v4l2/gstv4l2object.c
@@ -94,6 +94,10 @@ static const GstV4L2FormatDesc gst_v4l2_formats[] = {
{V4L2_PIX_FMT_RGB24, TRUE, GST_V4L2_RAW},
{V4L2_PIX_FMT_ABGR32, TRUE, GST_V4L2_RAW},
{V4L2_PIX_FMT_XBGR32, TRUE, GST_V4L2_RAW},
+ {V4L2_PIX_FMT_BGRA32, TRUE, GST_V4L2_RAW},
+ {V4L2_PIX_FMT_BGRX32, TRUE, GST_V4L2_RAW},
+ {V4L2_PIX_FMT_RGBA32, TRUE, GST_V4L2_RAW},
+ {V4L2_PIX_FMT_RGBX32, TRUE, GST_V4L2_RAW},
{V4L2_PIX_FMT_ARGB32, TRUE, GST_V4L2_RAW},
{V4L2_PIX_FMT_XRGB32, TRUE, GST_V4L2_RAW},
@@ -1037,6 +1041,10 @@ gst_v4l2_object_format_get_rank (const struct v4l2_fmtdesc *fmt)
case V4L2_PIX_FMT_BGR32:
case V4L2_PIX_FMT_ABGR32:
case V4L2_PIX_FMT_XBGR32:
+ case V4L2_PIX_FMT_BGRA32:
+ case V4L2_PIX_FMT_BGRX32:
+ case V4L2_PIX_FMT_RGBA32:
+ case V4L2_PIX_FMT_RGBX32:
case V4L2_PIX_FMT_ARGB32:
case V4L2_PIX_FMT_XRGB32:
rank = RGB_BASE_RANK;
@@ -1301,13 +1309,25 @@ gst_v4l2_object_v4l2fourcc_to_video_format (guint32 fourcc)
case V4L2_PIX_FMT_RGB32:
format = GST_VIDEO_FORMAT_xRGB;
break;
+ case V4L2_PIX_FMT_RGBX32:
+ format = GST_VIDEO_FORMAT_RGBx;
+ break;
case V4L2_PIX_FMT_XBGR32:
case V4L2_PIX_FMT_BGR32:
format = GST_VIDEO_FORMAT_BGRx;
break;
+ case V4L2_PIX_FMT_BGRX32:
+ format = GST_VIDEO_FORMAT_xBGR;
+ break;
case V4L2_PIX_FMT_ABGR32:
format = GST_VIDEO_FORMAT_BGRA;
break;
+ case V4L2_PIX_FMT_BGRA32:
+ format = GST_VIDEO_FORMAT_ABGR;
+ break;
+ case V4L2_PIX_FMT_RGBA32:
+ format = GST_VIDEO_FORMAT_RGB;
+ break;
case V4L2_PIX_FMT_ARGB32:
format = GST_VIDEO_FORMAT_ARGB;
break;
@@ -1384,8 +1404,12 @@ gst_v4l2_object_v4l2fourcc_is_rgb (guint32 fourcc)
case V4L2_PIX_FMT_BGR24:
case V4L2_PIX_FMT_XRGB32:
case V4L2_PIX_FMT_RGB32:
+ case V4L2_PIX_FMT_RGBA32:
+ case V4L2_PIX_FMT_RGBX32:
case V4L2_PIX_FMT_XBGR32:
case V4L2_PIX_FMT_BGR32:
+ case V4L2_PIX_FMT_BGRA32:
+ case V4L2_PIX_FMT_BGRX32:
case V4L2_PIX_FMT_ABGR32:
case V4L2_PIX_FMT_ARGB32:
case V4L2_PIX_FMT_SBGGR8:
@@ -1472,7 +1496,11 @@ gst_v4l2_object_v4l2fourcc_to_bare_struct (guint32 fourcc)
case V4L2_PIX_FMT_RGB32:
case V4L2_PIX_FMT_XRGB32:
case V4L2_PIX_FMT_ARGB32:
+ case V4L2_PIX_FMT_RGBX32:
+ case V4L2_PIX_FMT_RGBA32:
case V4L2_PIX_FMT_BGR32:
+ case V4L2_PIX_FMT_BGRX32:
+ case V4L2_PIX_FMT_BGRA32:
case V4L2_PIX_FMT_XBGR32:
case V4L2_PIX_FMT_ABGR32:
case V4L2_PIX_FMT_NV12: /* 12 Y/CbCr 4:2:0 */
@@ -1766,18 +1794,30 @@ gst_v4l2_object_get_caps_info (GstV4l2Object * v4l2object, GstCaps * caps,
fourcc = V4L2_PIX_FMT_RGB32;
fourcc_nc = V4L2_PIX_FMT_XRGB32;
break;
+ case GST_VIDEO_FORMAT_RGBx:
+ fourcc = V4L2_PIX_FMT_RGBX32;
+ break;
case GST_VIDEO_FORMAT_ARGB:
fourcc = V4L2_PIX_FMT_RGB32;
fourcc_nc = V4L2_PIX_FMT_ARGB32;
break;
+ case GST_VIDEO_FORMAT_RGBA:
+ fourcc = V4L2_PIX_FMT_RGBA32;
+ break;
case GST_VIDEO_FORMAT_BGRx:
fourcc = V4L2_PIX_FMT_BGR32;
fourcc_nc = V4L2_PIX_FMT_XBGR32;
break;
+ case GST_VIDEO_FORMAT_xBGR:
+ fourcc = V4L2_PIX_FMT_BGRX32;
+ break;
case GST_VIDEO_FORMAT_BGRA:
fourcc = V4L2_PIX_FMT_BGR32;
fourcc_nc = V4L2_PIX_FMT_ABGR32;
break;
+ case GST_VIDEO_FORMAT_ABGR:
+ fourcc = V4L2_PIX_FMT_BGRA32;
+ break;
case GST_VIDEO_FORMAT_GRAY8:
fourcc = V4L2_PIX_FMT_GREY;
break;