[libcamera-devel] libcamera: v4l2_videodevice: Add support for all 32-bit ARGB formats

Message ID 20200323230024.9761-1-laurent.pinchart@ideasonboard.com
State Accepted
Commit 45f248da7dbd0dc6df02142bfdf99a5d7f5f80a2
Headers show
Series
  • [libcamera-devel] libcamera: v4l2_videodevice: Add support for all 32-bit ARGB formats
Related show

Commit Message

Laurent Pinchart March 23, 2020, 11 p.m. UTC
The V4L2VideoDevice class implements conversion between PixelFormat and
V4L2PixelFormat for a single flavour of the 32-bit ARGB formats. Add the
three missing ones.

Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
---
 src/libcamera/v4l2_videodevice.cpp | 12 ++++++++++++
 1 file changed, 12 insertions(+)

Comments

Niklas Söderlund March 24, 2020, 8:23 a.m. UTC | #1
Hi Laurent,

Thanks for your work.

On 2020-03-24 01:00:24 +0200, Laurent Pinchart wrote:
> The V4L2VideoDevice class implements conversion between PixelFormat and
> V4L2PixelFormat for a single flavour of the 32-bit ARGB formats. Add the
> three missing ones.
> 
> Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>

Reviewed-by: Niklas Söderlund <niklas.soderlund@ragnatech.se>

> ---
>  src/libcamera/v4l2_videodevice.cpp | 12 ++++++++++++
>  1 file changed, 12 insertions(+)
> 
> diff --git a/src/libcamera/v4l2_videodevice.cpp b/src/libcamera/v4l2_videodevice.cpp
> index b20c8c77260f..b778181a48a4 100644
> --- a/src/libcamera/v4l2_videodevice.cpp
> +++ b/src/libcamera/v4l2_videodevice.cpp
> @@ -1636,8 +1636,14 @@ PixelFormat V4L2VideoDevice::toPixelFormat(V4L2PixelFormat v4l2Fourcc)
>  		return PixelFormat(DRM_FORMAT_BGR888);
>  	case V4L2_PIX_FMT_BGR24:
>  		return PixelFormat(DRM_FORMAT_RGB888);
> +	case V4L2_PIX_FMT_RGBA32:
> +		return PixelFormat(DRM_FORMAT_ABGR8888);
> +	case V4L2_PIX_FMT_ABGR32:
> +		return PixelFormat(DRM_FORMAT_ARGB8888);
>  	case V4L2_PIX_FMT_ARGB32:
>  		return PixelFormat(DRM_FORMAT_BGRA8888);
> +	case V4L2_PIX_FMT_BGRA32:
> +		return PixelFormat(DRM_FORMAT_RGBA8888);
>  
>  	/* YUV packed formats. */
>  	case V4L2_PIX_FMT_YUYV:
> @@ -1720,8 +1726,14 @@ V4L2PixelFormat V4L2VideoDevice::toV4L2PixelFormat(const PixelFormat &pixelForma
>  		return V4L2PixelFormat(V4L2_PIX_FMT_RGB24);
>  	case DRM_FORMAT_RGB888:
>  		return V4L2PixelFormat(V4L2_PIX_FMT_BGR24);
> +	case DRM_FORMAT_ABGR8888:
> +		return V4L2PixelFormat(V4L2_PIX_FMT_RGBA32);
> +	case DRM_FORMAT_ARGB8888:
> +		return V4L2PixelFormat(V4L2_PIX_FMT_ABGR32);
>  	case DRM_FORMAT_BGRA8888:
>  		return V4L2PixelFormat(V4L2_PIX_FMT_ARGB32);
> +	case DRM_FORMAT_RGBA8888:
> +		return V4L2PixelFormat(V4L2_PIX_FMT_BGRA32);
>  
>  	/* YUV packed formats. */
>  	case DRM_FORMAT_YUYV:
> -- 
> Regards,
> 
> Laurent Pinchart
> 
> _______________________________________________
> libcamera-devel mailing list
> libcamera-devel@lists.libcamera.org
> https://lists.libcamera.org/listinfo/libcamera-devel
Jacopo Mondi March 24, 2020, 8:31 a.m. UTC | #2
Hi Laurent,

On Tue, Mar 24, 2020 at 01:00:24AM +0200, Laurent Pinchart wrote:
> The V4L2VideoDevice class implements conversion between PixelFormat and
> V4L2PixelFormat for a single flavour of the 32-bit ARGB formats. Add the
> three missing ones.
>
> Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>

As usual when comparing DRM and V4L2 formats I refer to the conversion
table in rcar_du_kms.c.

Assuming the tables there are correct (you should ask the author...) I
visually compared them with what you got here and they match.

Be aware I have not gone in detail and compared each format
documentation to make sure the layout matches. I assume the author of
the DU conversion table did so :)

Anyway, looks good!

Reviewed-by: Jacopo Mondi <jacopo@jmondi.org>

Thanks
  j

> ---
>  src/libcamera/v4l2_videodevice.cpp | 12 ++++++++++++
>  1 file changed, 12 insertions(+)
>
> diff --git a/src/libcamera/v4l2_videodevice.cpp b/src/libcamera/v4l2_videodevice.cpp
> index b20c8c77260f..b778181a48a4 100644
> --- a/src/libcamera/v4l2_videodevice.cpp
> +++ b/src/libcamera/v4l2_videodevice.cpp
> @@ -1636,8 +1636,14 @@ PixelFormat V4L2VideoDevice::toPixelFormat(V4L2PixelFormat v4l2Fourcc)
>  		return PixelFormat(DRM_FORMAT_BGR888);
>  	case V4L2_PIX_FMT_BGR24:
>  		return PixelFormat(DRM_FORMAT_RGB888);
> +	case V4L2_PIX_FMT_RGBA32:
> +		return PixelFormat(DRM_FORMAT_ABGR8888);
> +	case V4L2_PIX_FMT_ABGR32:
> +		return PixelFormat(DRM_FORMAT_ARGB8888);
>  	case V4L2_PIX_FMT_ARGB32:
>  		return PixelFormat(DRM_FORMAT_BGRA8888);
> +	case V4L2_PIX_FMT_BGRA32:
> +		return PixelFormat(DRM_FORMAT_RGBA8888);
>
>  	/* YUV packed formats. */
>  	case V4L2_PIX_FMT_YUYV:
> @@ -1720,8 +1726,14 @@ V4L2PixelFormat V4L2VideoDevice::toV4L2PixelFormat(const PixelFormat &pixelForma
>  		return V4L2PixelFormat(V4L2_PIX_FMT_RGB24);
>  	case DRM_FORMAT_RGB888:
>  		return V4L2PixelFormat(V4L2_PIX_FMT_BGR24);
> +	case DRM_FORMAT_ABGR8888:
> +		return V4L2PixelFormat(V4L2_PIX_FMT_RGBA32);
> +	case DRM_FORMAT_ARGB8888:
> +		return V4L2PixelFormat(V4L2_PIX_FMT_ABGR32);
>  	case DRM_FORMAT_BGRA8888:
>  		return V4L2PixelFormat(V4L2_PIX_FMT_ARGB32);
> +	case DRM_FORMAT_RGBA8888:
> +		return V4L2PixelFormat(V4L2_PIX_FMT_BGRA32);
>
>  	/* YUV packed formats. */
>  	case DRM_FORMAT_YUYV:
> --
> Regards,
>
> Laurent Pinchart
>
> _______________________________________________
> libcamera-devel mailing list
> libcamera-devel@lists.libcamera.org
> https://lists.libcamera.org/listinfo/libcamera-devel

Patch

diff --git a/src/libcamera/v4l2_videodevice.cpp b/src/libcamera/v4l2_videodevice.cpp
index b20c8c77260f..b778181a48a4 100644
--- a/src/libcamera/v4l2_videodevice.cpp
+++ b/src/libcamera/v4l2_videodevice.cpp
@@ -1636,8 +1636,14 @@  PixelFormat V4L2VideoDevice::toPixelFormat(V4L2PixelFormat v4l2Fourcc)
 		return PixelFormat(DRM_FORMAT_BGR888);
 	case V4L2_PIX_FMT_BGR24:
 		return PixelFormat(DRM_FORMAT_RGB888);
+	case V4L2_PIX_FMT_RGBA32:
+		return PixelFormat(DRM_FORMAT_ABGR8888);
+	case V4L2_PIX_FMT_ABGR32:
+		return PixelFormat(DRM_FORMAT_ARGB8888);
 	case V4L2_PIX_FMT_ARGB32:
 		return PixelFormat(DRM_FORMAT_BGRA8888);
+	case V4L2_PIX_FMT_BGRA32:
+		return PixelFormat(DRM_FORMAT_RGBA8888);
 
 	/* YUV packed formats. */
 	case V4L2_PIX_FMT_YUYV:
@@ -1720,8 +1726,14 @@  V4L2PixelFormat V4L2VideoDevice::toV4L2PixelFormat(const PixelFormat &pixelForma
 		return V4L2PixelFormat(V4L2_PIX_FMT_RGB24);
 	case DRM_FORMAT_RGB888:
 		return V4L2PixelFormat(V4L2_PIX_FMT_BGR24);
+	case DRM_FORMAT_ABGR8888:
+		return V4L2PixelFormat(V4L2_PIX_FMT_RGBA32);
+	case DRM_FORMAT_ARGB8888:
+		return V4L2PixelFormat(V4L2_PIX_FMT_ABGR32);
 	case DRM_FORMAT_BGRA8888:
 		return V4L2PixelFormat(V4L2_PIX_FMT_ARGB32);
+	case DRM_FORMAT_RGBA8888:
+		return V4L2PixelFormat(V4L2_PIX_FMT_BGRA32);
 
 	/* YUV packed formats. */
 	case DRM_FORMAT_YUYV: