v4l2object: add support for ABGR, xBGR, RGBA, and RGBx formats

Map them to the new V4L2_PIX_FMT_{BGRA32,BGRX32,RGBA32,RGBX32} pixel
formats.
This commit is contained in:
Philipp Zabel 2019-09-23 14:34:20 +02:00 committed by Philipp Zabel
parent 06a084d70c
commit 2b1658fca2

View file

@ -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;