[libcamera-devel,4/4] libcamera: v4l2_pixelformat: Add support for 10-bit Bayer formats

Message ID 20200430005226.18162-5-laurent.pinchart@ideasonboard.com
State Superseded
Headers show
Series
  • libcamera: Improve conversion between DRM and V4L2 formats
Related show

Commit Message

Laurent Pinchart April 30, 2020, 12:52 a.m. UTC
Add the MIPI-packed 10-bit Bayer formats to the format tables.

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

Comments

Kieran Bingham April 30, 2020, 8:41 a.m. UTC | #1
Hi Laurent,

On 30/04/2020 01:52, Laurent Pinchart wrote:
> Add the MIPI-packed 10-bit Bayer formats to the format tables.
> 

You also add 12 bit formats below.. (also re: $SUBJECT)

Are these DRM formats accepted upstream already?

What about the 8, and 14 bit equivalents too?

These only add the
 MIPI_FORMAT_MOD_CSI2_PACKED, and
 V4L2_PIX_FMT_S{RGGB*}{10,12}P

conversions.

Perhaps subject should state add support for packed bayer formats ?

Or should the non-packed? (V4L2_PIX_FMT_SBGGR10, ) versions

> Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
> ---
>  src/libcamera/v4l2_pixelformat.cpp | 44 ++++++++++++++++++++++++++++++
>  1 file changed, 44 insertions(+)
> 
> diff --git a/src/libcamera/v4l2_pixelformat.cpp b/src/libcamera/v4l2_pixelformat.cpp
> index e1c96b9862c3..96f408a0bbcd 100644
> --- a/src/libcamera/v4l2_pixelformat.cpp
> +++ b/src/libcamera/v4l2_pixelformat.cpp
> @@ -102,6 +102,32 @@ const std::map<PixelFormat, PixelFormatInfo> pf2vpf{
>  		.v4l2Format = V4L2PixelFormat(V4L2_PIX_FMT_GREY),
>  	} },
>  
> +	/* Bayer formats. */
> +	{ PixelFormat(DRM_FORMAT_SBGGR10, MIPI_FORMAT_MOD_CSI2_PACKED), {
> +		.v4l2Format = V4L2PixelFormat(V4L2_PIX_FMT_SBGGR10P),
> +	} },
> +	{ PixelFormat(DRM_FORMAT_SGBRG10, MIPI_FORMAT_MOD_CSI2_PACKED), {
> +		.v4l2Format = V4L2PixelFormat(V4L2_PIX_FMT_SGBRG10P),
> +	} },
> +	{ PixelFormat(DRM_FORMAT_SGRBG10, MIPI_FORMAT_MOD_CSI2_PACKED), {
> +		.v4l2Format = V4L2PixelFormat(V4L2_PIX_FMT_SGRBG10P),
> +	} },
> +	{ PixelFormat(DRM_FORMAT_SRGGB10, MIPI_FORMAT_MOD_CSI2_PACKED), {
> +		.v4l2Format = V4L2PixelFormat(V4L2_PIX_FMT_SRGGB10P),
> +	} },
> +	{ PixelFormat(DRM_FORMAT_SBGGR12, MIPI_FORMAT_MOD_CSI2_PACKED), {
> +		.v4l2Format = V4L2PixelFormat(V4L2_PIX_FMT_SBGGR12P),
> +	} },
> +	{ PixelFormat(DRM_FORMAT_SGBRG12, MIPI_FORMAT_MOD_CSI2_PACKED), {
> +		.v4l2Format = V4L2PixelFormat(V4L2_PIX_FMT_SGBRG12P),
> +	} },
> +	{ PixelFormat(DRM_FORMAT_SGRBG12, MIPI_FORMAT_MOD_CSI2_PACKED), {
> +		.v4l2Format = V4L2PixelFormat(V4L2_PIX_FMT_SGRBG12P),
> +	} },
> +	{ PixelFormat(DRM_FORMAT_SRGGB12, MIPI_FORMAT_MOD_CSI2_PACKED), {
> +		.v4l2Format = V4L2PixelFormat(V4L2_PIX_FMT_SRGGB12P),
> +	} },
> +
>  	/* Compressed formats. */
>  	{ PixelFormat(DRM_FORMAT_MJPEG), {
>  		.v4l2Format = V4L2PixelFormat(V4L2_PIX_FMT_MJPEG),
> @@ -132,6 +158,24 @@ const std::map<V4L2PixelFormat, PixelFormat> vpf2pf{
>  	/* Greyscale formats. */
>  	{ V4L2PixelFormat(V4L2_PIX_FMT_GREY), PixelFormat(DRM_FORMAT_R8) },
>  
> +	/* Bayer formats. */
> +	{ V4L2PixelFormat(V4L2_PIX_FMT_SBGGR10P),
> +	  PixelFormat(DRM_FORMAT_SBGGR10, MIPI_FORMAT_MOD_CSI2_PACKED) },
> +	{ V4L2PixelFormat(V4L2_PIX_FMT_SGBRG10P),
> +	  PixelFormat(DRM_FORMAT_SGBRG10, MIPI_FORMAT_MOD_CSI2_PACKED) },
> +	{ V4L2PixelFormat(V4L2_PIX_FMT_SGRBG10P),
> +	  PixelFormat(DRM_FORMAT_SGRBG10, MIPI_FORMAT_MOD_CSI2_PACKED) },
> +	{ V4L2PixelFormat(V4L2_PIX_FMT_SRGGB10P),
> +	  PixelFormat(DRM_FORMAT_SRGGB10, MIPI_FORMAT_MOD_CSI2_PACKED) },

new line here to separate groupings?

> +	{ V4L2PixelFormat(V4L2_PIX_FMT_SBGGR12P),
> +	  PixelFormat(DRM_FORMAT_SBGGR12, MIPI_FORMAT_MOD_CSI2_PACKED) },
> +	{ V4L2PixelFormat(V4L2_PIX_FMT_SGBRG12P),
> +	  PixelFormat(DRM_FORMAT_SGBRG12, MIPI_FORMAT_MOD_CSI2_PACKED) },
> +	{ V4L2PixelFormat(V4L2_PIX_FMT_SGRBG12P),
> +	  PixelFormat(DRM_FORMAT_SGRBG12, MIPI_FORMAT_MOD_CSI2_PACKED) },
> +	{ V4L2PixelFormat(V4L2_PIX_FMT_SRGGB12P),
> +	  PixelFormat(DRM_FORMAT_SRGGB12, MIPI_FORMAT_MOD_CSI2_PACKED) },

Tables like this are one place I really hate 80 char limits.

I think things like this are so much more readable in columns, 'almost'
regardless of width.

Wrapping 'table' data to fit to an old terminal size (even though we can
pan right and left, even on small terminals) seems to me to hinder
readability in cases like this more than improve it ...

But either-way, because it's always a difficult subject ... and with
$SUBJECT updated as required...

Reviewed-by: Kieran Bingham <kieran.bingham@ideasonboard.com>

> +
>  	/* Compressed formats. */
>  	{ V4L2PixelFormat(V4L2_PIX_FMT_MJPEG), PixelFormat(DRM_FORMAT_MJPEG) },
>  };
>

Patch

diff --git a/src/libcamera/v4l2_pixelformat.cpp b/src/libcamera/v4l2_pixelformat.cpp
index e1c96b9862c3..96f408a0bbcd 100644
--- a/src/libcamera/v4l2_pixelformat.cpp
+++ b/src/libcamera/v4l2_pixelformat.cpp
@@ -102,6 +102,32 @@  const std::map<PixelFormat, PixelFormatInfo> pf2vpf{
 		.v4l2Format = V4L2PixelFormat(V4L2_PIX_FMT_GREY),
 	} },
 
+	/* Bayer formats. */
+	{ PixelFormat(DRM_FORMAT_SBGGR10, MIPI_FORMAT_MOD_CSI2_PACKED), {
+		.v4l2Format = V4L2PixelFormat(V4L2_PIX_FMT_SBGGR10P),
+	} },
+	{ PixelFormat(DRM_FORMAT_SGBRG10, MIPI_FORMAT_MOD_CSI2_PACKED), {
+		.v4l2Format = V4L2PixelFormat(V4L2_PIX_FMT_SGBRG10P),
+	} },
+	{ PixelFormat(DRM_FORMAT_SGRBG10, MIPI_FORMAT_MOD_CSI2_PACKED), {
+		.v4l2Format = V4L2PixelFormat(V4L2_PIX_FMT_SGRBG10P),
+	} },
+	{ PixelFormat(DRM_FORMAT_SRGGB10, MIPI_FORMAT_MOD_CSI2_PACKED), {
+		.v4l2Format = V4L2PixelFormat(V4L2_PIX_FMT_SRGGB10P),
+	} },
+	{ PixelFormat(DRM_FORMAT_SBGGR12, MIPI_FORMAT_MOD_CSI2_PACKED), {
+		.v4l2Format = V4L2PixelFormat(V4L2_PIX_FMT_SBGGR12P),
+	} },
+	{ PixelFormat(DRM_FORMAT_SGBRG12, MIPI_FORMAT_MOD_CSI2_PACKED), {
+		.v4l2Format = V4L2PixelFormat(V4L2_PIX_FMT_SGBRG12P),
+	} },
+	{ PixelFormat(DRM_FORMAT_SGRBG12, MIPI_FORMAT_MOD_CSI2_PACKED), {
+		.v4l2Format = V4L2PixelFormat(V4L2_PIX_FMT_SGRBG12P),
+	} },
+	{ PixelFormat(DRM_FORMAT_SRGGB12, MIPI_FORMAT_MOD_CSI2_PACKED), {
+		.v4l2Format = V4L2PixelFormat(V4L2_PIX_FMT_SRGGB12P),
+	} },
+
 	/* Compressed formats. */
 	{ PixelFormat(DRM_FORMAT_MJPEG), {
 		.v4l2Format = V4L2PixelFormat(V4L2_PIX_FMT_MJPEG),
@@ -132,6 +158,24 @@  const std::map<V4L2PixelFormat, PixelFormat> vpf2pf{
 	/* Greyscale formats. */
 	{ V4L2PixelFormat(V4L2_PIX_FMT_GREY), PixelFormat(DRM_FORMAT_R8) },
 
+	/* Bayer formats. */
+	{ V4L2PixelFormat(V4L2_PIX_FMT_SBGGR10P),
+	  PixelFormat(DRM_FORMAT_SBGGR10, MIPI_FORMAT_MOD_CSI2_PACKED) },
+	{ V4L2PixelFormat(V4L2_PIX_FMT_SGBRG10P),
+	  PixelFormat(DRM_FORMAT_SGBRG10, MIPI_FORMAT_MOD_CSI2_PACKED) },
+	{ V4L2PixelFormat(V4L2_PIX_FMT_SGRBG10P),
+	  PixelFormat(DRM_FORMAT_SGRBG10, MIPI_FORMAT_MOD_CSI2_PACKED) },
+	{ V4L2PixelFormat(V4L2_PIX_FMT_SRGGB10P),
+	  PixelFormat(DRM_FORMAT_SRGGB10, MIPI_FORMAT_MOD_CSI2_PACKED) },
+	{ V4L2PixelFormat(V4L2_PIX_FMT_SBGGR12P),
+	  PixelFormat(DRM_FORMAT_SBGGR12, MIPI_FORMAT_MOD_CSI2_PACKED) },
+	{ V4L2PixelFormat(V4L2_PIX_FMT_SGBRG12P),
+	  PixelFormat(DRM_FORMAT_SGBRG12, MIPI_FORMAT_MOD_CSI2_PACKED) },
+	{ V4L2PixelFormat(V4L2_PIX_FMT_SGRBG12P),
+	  PixelFormat(DRM_FORMAT_SGRBG12, MIPI_FORMAT_MOD_CSI2_PACKED) },
+	{ V4L2PixelFormat(V4L2_PIX_FMT_SRGGB12P),
+	  PixelFormat(DRM_FORMAT_SRGGB12, MIPI_FORMAT_MOD_CSI2_PACKED) },
+
 	/* Compressed formats. */
 	{ V4L2PixelFormat(V4L2_PIX_FMT_MJPEG), PixelFormat(DRM_FORMAT_MJPEG) },
 };