[libcamera-devel,1/2] libcamera: formats: Add field for name of V4L2 format
diff mbox series

Message ID 20210907071311.3364713-1-paul.elder@ideasonboard.com
State Superseded
Headers show
Series
  • [libcamera-devel,1/2] libcamera: formats: Add field for name of V4L2 format
Related show

Commit Message

Paul Elder Sept. 7, 2021, 7:13 a.m. UTC
The v4l2 compatibility layer needs to report the proper human-readable
name for the V4L2 formats. To prepare for this, add a field to
PixelFormatInfo to hold the V4L2 name, and populate it with the names
from drivers/media/v4l2-core/v4l2-ioctl.c from the kernel.

Signed-off-by: Paul Elder <paul.elder@ideasonboard.com>
---
 include/libcamera/internal/formats.h |  1 +
 src/libcamera/formats.cpp            | 58 ++++++++++++++++++++++++++++
 2 files changed, 59 insertions(+)

Comments

Laurent Pinchart Sept. 7, 2021, 9:03 a.m. UTC | #1
Hi Paul,

Thank you for the patch.

On Tue, Sep 07, 2021 at 04:13:10PM +0900, Paul Elder wrote:
> The v4l2 compatibility layer needs to report the proper human-readable
> name for the V4L2 formats. To prepare for this, add a field to
> PixelFormatInfo to hold the V4L2 name, and populate it with the names
> from drivers/media/v4l2-core/v4l2-ioctl.c from the kernel.
> 
> Signed-off-by: Paul Elder <paul.elder@ideasonboard.com>
> ---
>  include/libcamera/internal/formats.h |  1 +
>  src/libcamera/formats.cpp            | 58 ++++++++++++++++++++++++++++
>  2 files changed, 59 insertions(+)
> 
> diff --git a/include/libcamera/internal/formats.h b/include/libcamera/internal/formats.h
> index 51a8a6b8..82ab9a02 100644
> --- a/include/libcamera/internal/formats.h
> +++ b/include/libcamera/internal/formats.h
> @@ -52,6 +52,7 @@ public:
>  	const char *name;
>  	PixelFormat format;
>  	V4L2PixelFormat v4l2Format;
> +	const char *v4l2Name;

This will conflict with "[PATCH v3 07/30] libcamera: formats: Support
V4L2 non-contiguous formats" which I'd like to merge ASAP.

As the V4L2 format name is only needed by the V4L2 compat layer,
wouldn't it be better to store it in there ? The only drawback I can see
is that someone may forget to update it when adding new V4L2 formats.
That's something we could catch during review, possibly with the help of
checkstyle.py.

If we want to keep the name in the libcamera core, I think it would be
best placed in v4l2_pixelformat.cpp. The vpf2pf map would need to be
reworked with a V4L2 pixel format info structure as the mapped type.

>  	unsigned int bitsPerPixel;
>  	enum ColourEncoding colourEncoding;
>  	bool packed;
> diff --git a/src/libcamera/formats.cpp b/src/libcamera/formats.cpp
> index 603d8861..0fb29fb5 100644
> --- a/src/libcamera/formats.cpp
> +++ b/src/libcamera/formats.cpp
> @@ -57,6 +57,10 @@ LOG_DEFINE_CATEGORY(Formats)
>   * \var PixelFormatInfo::v4l2Format
>   * \brief The V4L2 pixel format corresponding to the PixelFormat
>   *
> + * \var PixelFormatInfo::v4l2Name
> + * \brief The human-readable name of the V4L2 pixel format corresponding to the
> + * PixelFormat
> + *
>   * \var PixelFormatInfo::bitsPerPixel
>   * \brief The average number of bits per pixel
>   *
> @@ -149,6 +153,7 @@ const std::map<PixelFormat, PixelFormatInfo> pixelFormatInfo{
>  		.name = "RGB565",
>  		.format = formats::RGB565,
>  		.v4l2Format = V4L2PixelFormat(V4L2_PIX_FMT_RGB565),
> +		.v4l2Name = "16-bit RGB 5-6-5",
>  		.bitsPerPixel = 16,
>  		.colourEncoding = PixelFormatInfo::ColourEncodingRGB,
>  		.packed = false,
> @@ -159,6 +164,7 @@ const std::map<PixelFormat, PixelFormatInfo> pixelFormatInfo{
>  		.name = "RGB565_BE",
>  		.format = formats::RGB565_BE,
>  		.v4l2Format = V4L2PixelFormat(V4L2_PIX_FMT_RGB565X),
> +		.v4l2Name = "16-bit RGB 5-6-5 BE",
>  		.bitsPerPixel = 16,
>  		.colourEncoding = PixelFormatInfo::ColourEncodingRGB,
>  		.packed = false,
> @@ -169,6 +175,7 @@ const std::map<PixelFormat, PixelFormatInfo> pixelFormatInfo{
>  		.name = "BGR888",
>  		.format = formats::BGR888,
>  		.v4l2Format = V4L2PixelFormat(V4L2_PIX_FMT_RGB24),
> +		.v4l2Name = "24-bit RGB 8-8-8",
>  		.bitsPerPixel = 24,
>  		.colourEncoding = PixelFormatInfo::ColourEncodingRGB,
>  		.packed = false,
> @@ -179,6 +186,7 @@ const std::map<PixelFormat, PixelFormatInfo> pixelFormatInfo{
>  		.name = "RGB888",
>  		.format = formats::RGB888,
>  		.v4l2Format = V4L2PixelFormat(V4L2_PIX_FMT_BGR24),
> +		.v4l2Name = "24-bit BGR 8-8-8",
>  		.bitsPerPixel = 24,
>  		.colourEncoding = PixelFormatInfo::ColourEncodingRGB,
>  		.packed = false,
> @@ -189,6 +197,7 @@ const std::map<PixelFormat, PixelFormatInfo> pixelFormatInfo{
>  		.name = "XRGB8888",
>  		.format = formats::XRGB8888,
>  		.v4l2Format = V4L2PixelFormat(V4L2_PIX_FMT_XBGR32),
> +		.v4l2Name = "32-bit BGRX 8-8-8-8",
>  		.bitsPerPixel = 32,
>  		.colourEncoding = PixelFormatInfo::ColourEncodingRGB,
>  		.packed = false,
> @@ -199,6 +208,7 @@ const std::map<PixelFormat, PixelFormatInfo> pixelFormatInfo{
>  		.name = "XBGR8888",
>  		.format = formats::XBGR8888,
>  		.v4l2Format = V4L2PixelFormat(V4L2_PIX_FMT_RGBX32),
> +		.v4l2Name = "32-bit RGBX 8-8-8-8",
>  		.bitsPerPixel = 32,
>  		.colourEncoding = PixelFormatInfo::ColourEncodingRGB,
>  		.packed = false,
> @@ -209,6 +219,7 @@ const std::map<PixelFormat, PixelFormatInfo> pixelFormatInfo{
>  		.name = "BGRX8888",
>  		.format = formats::BGRX8888,
>  		.v4l2Format = V4L2PixelFormat(V4L2_PIX_FMT_XRGB32),
> +		.v4l2Name = "32-bit XRGB 8-8-8-8",
>  		.bitsPerPixel = 32,
>  		.colourEncoding = PixelFormatInfo::ColourEncodingRGB,
>  		.packed = false,
> @@ -219,6 +230,7 @@ const std::map<PixelFormat, PixelFormatInfo> pixelFormatInfo{
>  		.name = "ABGR8888",
>  		.format = formats::ABGR8888,
>  		.v4l2Format = V4L2PixelFormat(V4L2_PIX_FMT_RGBA32),
> +		.v4l2Name = "32-bit RGBA 8-8-8-8",
>  		.bitsPerPixel = 32,
>  		.colourEncoding = PixelFormatInfo::ColourEncodingRGB,
>  		.packed = false,
> @@ -229,6 +241,7 @@ const std::map<PixelFormat, PixelFormatInfo> pixelFormatInfo{
>  		.name = "ARGB8888",
>  		.format = formats::ARGB8888,
>  		.v4l2Format = V4L2PixelFormat(V4L2_PIX_FMT_ABGR32),
> +		.v4l2Name = "32-bit BGRA 8-8-8-8",
>  		.bitsPerPixel = 32,
>  		.colourEncoding = PixelFormatInfo::ColourEncodingRGB,
>  		.packed = false,
> @@ -239,6 +252,7 @@ const std::map<PixelFormat, PixelFormatInfo> pixelFormatInfo{
>  		.name = "BGRA8888",
>  		.format = formats::BGRA8888,
>  		.v4l2Format = V4L2PixelFormat(V4L2_PIX_FMT_ARGB32),
> +		.v4l2Name = "32-bit ARGB 8-8-8-8",
>  		.bitsPerPixel = 32,
>  		.colourEncoding = PixelFormatInfo::ColourEncodingRGB,
>  		.packed = false,
> @@ -249,6 +263,7 @@ const std::map<PixelFormat, PixelFormatInfo> pixelFormatInfo{
>  		.name = "RGBA8888",
>  		.format = formats::RGBA8888,
>  		.v4l2Format = V4L2PixelFormat(V4L2_PIX_FMT_BGRA32),
> +		.v4l2Name = "32-bit ABGR 8-8-8-8",
>  		.bitsPerPixel = 32,
>  		.colourEncoding = PixelFormatInfo::ColourEncodingRGB,
>  		.packed = false,
> @@ -261,6 +276,7 @@ const std::map<PixelFormat, PixelFormatInfo> pixelFormatInfo{
>  		.name = "YUYV",
>  		.format = formats::YUYV,
>  		.v4l2Format = V4L2PixelFormat(V4L2_PIX_FMT_YUYV),
> +		.v4l2Name = "YUYV 4:2:2",
>  		.bitsPerPixel = 16,
>  		.colourEncoding = PixelFormatInfo::ColourEncodingYUV,
>  		.packed = false,
> @@ -271,6 +287,7 @@ const std::map<PixelFormat, PixelFormatInfo> pixelFormatInfo{
>  		.name = "YVYU",
>  		.format = formats::YVYU,
>  		.v4l2Format = V4L2PixelFormat(V4L2_PIX_FMT_YVYU),
> +		.v4l2Name = "YVYU 4:2:2",
>  		.bitsPerPixel = 16,
>  		.colourEncoding = PixelFormatInfo::ColourEncodingYUV,
>  		.packed = false,
> @@ -281,6 +298,7 @@ const std::map<PixelFormat, PixelFormatInfo> pixelFormatInfo{
>  		.name = "UYVY",
>  		.format = formats::UYVY,
>  		.v4l2Format = V4L2PixelFormat(V4L2_PIX_FMT_UYVY),
> +		.v4l2Name = "UYVY 4:2:2",
>  		.bitsPerPixel = 16,
>  		.colourEncoding = PixelFormatInfo::ColourEncodingYUV,
>  		.packed = false,
> @@ -291,6 +309,7 @@ const std::map<PixelFormat, PixelFormatInfo> pixelFormatInfo{
>  		.name = "VYUY",
>  		.format = formats::VYUY,
>  		.v4l2Format = V4L2PixelFormat(V4L2_PIX_FMT_VYUY),
> +		.v4l2Name = "VYUY 4:2:2",
>  		.bitsPerPixel = 16,
>  		.colourEncoding = PixelFormatInfo::ColourEncodingYUV,
>  		.packed = false,
> @@ -303,6 +322,7 @@ const std::map<PixelFormat, PixelFormatInfo> pixelFormatInfo{
>  		.name = "NV12",
>  		.format = formats::NV12,
>  		.v4l2Format = V4L2PixelFormat(V4L2_PIX_FMT_NV12),
> +		.v4l2Name = "Y/CbCr 4:2:0",
>  		.bitsPerPixel = 12,
>  		.colourEncoding = PixelFormatInfo::ColourEncodingYUV,
>  		.packed = false,
> @@ -313,6 +333,7 @@ const std::map<PixelFormat, PixelFormatInfo> pixelFormatInfo{
>  		.name = "NV21",
>  		.format = formats::NV21,
>  		.v4l2Format = V4L2PixelFormat(V4L2_PIX_FMT_NV21),
> +		.v4l2Name = "Y/CrCb 4:2:0",
>  		.bitsPerPixel = 12,
>  		.colourEncoding = PixelFormatInfo::ColourEncodingYUV,
>  		.packed = false,
> @@ -323,6 +344,7 @@ const std::map<PixelFormat, PixelFormatInfo> pixelFormatInfo{
>  		.name = "NV16",
>  		.format = formats::NV16,
>  		.v4l2Format = V4L2PixelFormat(V4L2_PIX_FMT_NV16),
> +		.v4l2Name = "Y/CbCr 4:2:2",
>  		.bitsPerPixel = 16,
>  		.colourEncoding = PixelFormatInfo::ColourEncodingYUV,
>  		.packed = false,
> @@ -333,6 +355,7 @@ const std::map<PixelFormat, PixelFormatInfo> pixelFormatInfo{
>  		.name = "NV61",
>  		.format = formats::NV61,
>  		.v4l2Format = V4L2PixelFormat(V4L2_PIX_FMT_NV61),
> +		.v4l2Name = "Y/CrCb 4:2:2",
>  		.bitsPerPixel = 16,
>  		.colourEncoding = PixelFormatInfo::ColourEncodingYUV,
>  		.packed = false,
> @@ -343,6 +366,7 @@ const std::map<PixelFormat, PixelFormatInfo> pixelFormatInfo{
>  		.name = "NV24",
>  		.format = formats::NV24,
>  		.v4l2Format = V4L2PixelFormat(V4L2_PIX_FMT_NV24),
> +		.v4l2Name = "Y/CbCr 4:4:4",
>  		.bitsPerPixel = 24,
>  		.colourEncoding = PixelFormatInfo::ColourEncodingYUV,
>  		.packed = false,
> @@ -353,6 +377,7 @@ const std::map<PixelFormat, PixelFormatInfo> pixelFormatInfo{
>  		.name = "NV42",
>  		.format = formats::NV42,
>  		.v4l2Format = V4L2PixelFormat(V4L2_PIX_FMT_NV42),
> +		.v4l2Name = "Y/CrCb 4:4:4",
>  		.bitsPerPixel = 24,
>  		.colourEncoding = PixelFormatInfo::ColourEncodingYUV,
>  		.packed = false,
> @@ -363,6 +388,7 @@ const std::map<PixelFormat, PixelFormatInfo> pixelFormatInfo{
>  		.name = "YUV420",
>  		.format = formats::YUV420,
>  		.v4l2Format = V4L2PixelFormat(V4L2_PIX_FMT_YUV420),
> +		.v4l2Name = "Planar YUV 4:2:0",
>  		.bitsPerPixel = 12,
>  		.colourEncoding = PixelFormatInfo::ColourEncodingYUV,
>  		.packed = false,
> @@ -373,6 +399,7 @@ const std::map<PixelFormat, PixelFormatInfo> pixelFormatInfo{
>  		.name = "YVU420",
>  		.format = formats::YVU420,
>  		.v4l2Format = V4L2PixelFormat(V4L2_PIX_FMT_YVU420),
> +		.v4l2Name = "Planar YVU 4:2:0",
>  		.bitsPerPixel = 12,
>  		.colourEncoding = PixelFormatInfo::ColourEncodingYUV,
>  		.packed = false,
> @@ -383,6 +410,7 @@ const std::map<PixelFormat, PixelFormatInfo> pixelFormatInfo{
>  		.name = "YUV422",
>  		.format = formats::YUV422,
>  		.v4l2Format = V4L2PixelFormat(V4L2_PIX_FMT_YUV422P),
> +		.v4l2Name = "Planar YUV 4:2:2",
>  		.bitsPerPixel = 16,
>  		.colourEncoding = PixelFormatInfo::ColourEncodingYUV,
>  		.packed = false,
> @@ -395,6 +423,7 @@ const std::map<PixelFormat, PixelFormatInfo> pixelFormatInfo{
>  		.name = "R8",
>  		.format = formats::R8,
>  		.v4l2Format = V4L2PixelFormat(V4L2_PIX_FMT_GREY),
> +		.v4l2Name = "8-bit Greyscale",
>  		.bitsPerPixel = 8,
>  		.colourEncoding = PixelFormatInfo::ColourEncodingYUV,
>  		.packed = false,
> @@ -407,6 +436,7 @@ const std::map<PixelFormat, PixelFormatInfo> pixelFormatInfo{
>  		.name = "SBGGR8",
>  		.format = formats::SBGGR8,
>  		.v4l2Format = V4L2PixelFormat(V4L2_PIX_FMT_SBGGR8),
> +		.v4l2Name = "8-bit Bayer BGBG/GRGR",
>  		.bitsPerPixel = 8,
>  		.colourEncoding = PixelFormatInfo::ColourEncodingRAW,
>  		.packed = false,
> @@ -417,6 +447,7 @@ const std::map<PixelFormat, PixelFormatInfo> pixelFormatInfo{
>  		.name = "SGBRG8",
>  		.format = formats::SGBRG8,
>  		.v4l2Format = V4L2PixelFormat(V4L2_PIX_FMT_SGBRG8),
> +		.v4l2Name = "8-bit Bayer GBGB/RGRG",
>  		.bitsPerPixel = 8,
>  		.colourEncoding = PixelFormatInfo::ColourEncodingRAW,
>  		.packed = false,
> @@ -427,6 +458,7 @@ const std::map<PixelFormat, PixelFormatInfo> pixelFormatInfo{
>  		.name = "SGRBG8",
>  		.format = formats::SGRBG8,
>  		.v4l2Format = V4L2PixelFormat(V4L2_PIX_FMT_SGRBG8),
> +		.v4l2Name = "8-bit Bayer GRGR/BGBG",
>  		.bitsPerPixel = 8,
>  		.colourEncoding = PixelFormatInfo::ColourEncodingRAW,
>  		.packed = false,
> @@ -437,6 +469,7 @@ const std::map<PixelFormat, PixelFormatInfo> pixelFormatInfo{
>  		.name = "SRGGB8",
>  		.format = formats::SRGGB8,
>  		.v4l2Format = V4L2PixelFormat(V4L2_PIX_FMT_SRGGB8),
> +		.v4l2Name = "8-bit Bayer RGRG/GBGB",
>  		.bitsPerPixel = 8,
>  		.colourEncoding = PixelFormatInfo::ColourEncodingRAW,
>  		.packed = false,
> @@ -447,6 +480,7 @@ const std::map<PixelFormat, PixelFormatInfo> pixelFormatInfo{
>  		.name = "SBGGR10",
>  		.format = formats::SBGGR10,
>  		.v4l2Format = V4L2PixelFormat(V4L2_PIX_FMT_SBGGR10),
> +		.v4l2Name = "10-bit Bayer BGBG/GRGR",
>  		.bitsPerPixel = 10,
>  		.colourEncoding = PixelFormatInfo::ColourEncodingRAW,
>  		.packed = false,
> @@ -457,6 +491,7 @@ const std::map<PixelFormat, PixelFormatInfo> pixelFormatInfo{
>  		.name = "SGBRG10",
>  		.format = formats::SGBRG10,
>  		.v4l2Format = V4L2PixelFormat(V4L2_PIX_FMT_SGBRG10),
> +		.v4l2Name = "10-bit Bayer GBGB/RGRG",
>  		.bitsPerPixel = 10,
>  		.colourEncoding = PixelFormatInfo::ColourEncodingRAW,
>  		.packed = false,
> @@ -467,6 +502,7 @@ const std::map<PixelFormat, PixelFormatInfo> pixelFormatInfo{
>  		.name = "SGRBG10",
>  		.format = formats::SGRBG10,
>  		.v4l2Format = V4L2PixelFormat(V4L2_PIX_FMT_SGRBG10),
> +		.v4l2Name = "10-bit Bayer GRGR/BGBG",
>  		.bitsPerPixel = 10,
>  		.colourEncoding = PixelFormatInfo::ColourEncodingRAW,
>  		.packed = false,
> @@ -477,6 +513,7 @@ const std::map<PixelFormat, PixelFormatInfo> pixelFormatInfo{
>  		.name = "SRGGB10",
>  		.format = formats::SRGGB10,
>  		.v4l2Format = V4L2PixelFormat(V4L2_PIX_FMT_SRGGB10),
> +		.v4l2Name = "10-bit Bayer RGRG/GBGB",
>  		.bitsPerPixel = 10,
>  		.colourEncoding = PixelFormatInfo::ColourEncodingRAW,
>  		.packed = false,
> @@ -487,6 +524,7 @@ const std::map<PixelFormat, PixelFormatInfo> pixelFormatInfo{
>  		.name = "SBGGR10_CSI2P",
>  		.format = formats::SBGGR10_CSI2P,
>  		.v4l2Format = V4L2PixelFormat(V4L2_PIX_FMT_SBGGR10P),
> +		.v4l2Name = "10-bit Bayer BGBG/GRGR Packed",
>  		.bitsPerPixel = 10,
>  		.colourEncoding = PixelFormatInfo::ColourEncodingRAW,
>  		.packed = true,
> @@ -497,6 +535,7 @@ const std::map<PixelFormat, PixelFormatInfo> pixelFormatInfo{
>  		.name = "SGBRG10_CSI2P",
>  		.format = formats::SGBRG10_CSI2P,
>  		.v4l2Format = V4L2PixelFormat(V4L2_PIX_FMT_SGBRG10P),
> +		.v4l2Name = "10-bit Bayer GBGB/RGRG Packed",
>  		.bitsPerPixel = 10,
>  		.colourEncoding = PixelFormatInfo::ColourEncodingRAW,
>  		.packed = true,
> @@ -507,6 +546,7 @@ const std::map<PixelFormat, PixelFormatInfo> pixelFormatInfo{
>  		.name = "SGRBG10_CSI2P",
>  		.format = formats::SGRBG10_CSI2P,
>  		.v4l2Format = V4L2PixelFormat(V4L2_PIX_FMT_SGRBG10P),
> +		.v4l2Name = "10-bit Bayer GRGR/BGBG Packed",
>  		.bitsPerPixel = 10,
>  		.colourEncoding = PixelFormatInfo::ColourEncodingRAW,
>  		.packed = true,
> @@ -517,6 +557,7 @@ const std::map<PixelFormat, PixelFormatInfo> pixelFormatInfo{
>  		.name = "SRGGB10_CSI2P",
>  		.format = formats::SRGGB10_CSI2P,
>  		.v4l2Format = V4L2PixelFormat(V4L2_PIX_FMT_SRGGB10P),
> +		.v4l2Name = "10-bit Bayer RGRG/GBGB Packed",
>  		.bitsPerPixel = 10,
>  		.colourEncoding = PixelFormatInfo::ColourEncodingRAW,
>  		.packed = true,
> @@ -527,6 +568,7 @@ const std::map<PixelFormat, PixelFormatInfo> pixelFormatInfo{
>  		.name = "SBGGR12",
>  		.format = formats::SBGGR12,
>  		.v4l2Format = V4L2PixelFormat(V4L2_PIX_FMT_SBGGR12),
> +		.v4l2Name = "12-bit Bayer BGBG/GRGR",
>  		.bitsPerPixel = 12,
>  		.colourEncoding = PixelFormatInfo::ColourEncodingRAW,
>  		.packed = false,
> @@ -537,6 +579,7 @@ const std::map<PixelFormat, PixelFormatInfo> pixelFormatInfo{
>  		.name = "SGBRG12",
>  		.format = formats::SGBRG12,
>  		.v4l2Format = V4L2PixelFormat(V4L2_PIX_FMT_SGBRG12),
> +		.v4l2Name = "12-bit Bayer GBGB/RGRG",
>  		.bitsPerPixel = 12,
>  		.colourEncoding = PixelFormatInfo::ColourEncodingRAW,
>  		.packed = false,
> @@ -547,6 +590,7 @@ const std::map<PixelFormat, PixelFormatInfo> pixelFormatInfo{
>  		.name = "SGRBG12",
>  		.format = formats::SGRBG12,
>  		.v4l2Format = V4L2PixelFormat(V4L2_PIX_FMT_SGRBG12),
> +		.v4l2Name = "12-bit Bayer GRGR/BGBG",
>  		.bitsPerPixel = 12,
>  		.colourEncoding = PixelFormatInfo::ColourEncodingRAW,
>  		.packed = false,
> @@ -557,6 +601,7 @@ const std::map<PixelFormat, PixelFormatInfo> pixelFormatInfo{
>  		.name = "SRGGB12",
>  		.format = formats::SRGGB12,
>  		.v4l2Format = V4L2PixelFormat(V4L2_PIX_FMT_SRGGB12),
> +		.v4l2Name = "12-bit Bayer RGRG/GBGB",
>  		.bitsPerPixel = 12,
>  		.colourEncoding = PixelFormatInfo::ColourEncodingRAW,
>  		.packed = false,
> @@ -567,6 +612,7 @@ const std::map<PixelFormat, PixelFormatInfo> pixelFormatInfo{
>  		.name = "SBGGR12_CSI2P",
>  		.format = formats::SBGGR12_CSI2P,
>  		.v4l2Format = V4L2PixelFormat(V4L2_PIX_FMT_SBGGR12P),
> +		.v4l2Name = "12-bit Bayer BGBG/GRGR Packed",
>  		.bitsPerPixel = 12,
>  		.colourEncoding = PixelFormatInfo::ColourEncodingRAW,
>  		.packed = true,
> @@ -577,6 +623,7 @@ const std::map<PixelFormat, PixelFormatInfo> pixelFormatInfo{
>  		.name = "SGBRG12_CSI2P",
>  		.format = formats::SGBRG12_CSI2P,
>  		.v4l2Format = V4L2PixelFormat(V4L2_PIX_FMT_SGBRG12P),
> +		.v4l2Name = "12-bit Bayer GBGB/RGRG Packed",
>  		.bitsPerPixel = 12,
>  		.colourEncoding = PixelFormatInfo::ColourEncodingRAW,
>  		.packed = true,
> @@ -587,6 +634,7 @@ const std::map<PixelFormat, PixelFormatInfo> pixelFormatInfo{
>  		.name = "SGRBG12_CSI2P",
>  		.format = formats::SGRBG12_CSI2P,
>  		.v4l2Format = V4L2PixelFormat(V4L2_PIX_FMT_SGRBG12P),
> +		.v4l2Name = "12-bit Bayer GRGR/BGBG Packed",
>  		.bitsPerPixel = 12,
>  		.colourEncoding = PixelFormatInfo::ColourEncodingRAW,
>  		.packed = true,
> @@ -597,6 +645,7 @@ const std::map<PixelFormat, PixelFormatInfo> pixelFormatInfo{
>  		.name = "SRGGB12_CSI2P",
>  		.format = formats::SRGGB12_CSI2P,
>  		.v4l2Format = V4L2PixelFormat(V4L2_PIX_FMT_SRGGB12P),
> +		.v4l2Name = "12-bit Bayer RGRG/GBGB Packed",
>  		.bitsPerPixel = 12,
>  		.colourEncoding = PixelFormatInfo::ColourEncodingRAW,
>  		.packed = true,
> @@ -607,6 +656,7 @@ const std::map<PixelFormat, PixelFormatInfo> pixelFormatInfo{
>  		.name = "SBGGR16",
>  		.format = formats::SBGGR16,
>  		.v4l2Format = V4L2PixelFormat(V4L2_PIX_FMT_SBGGR16),
> +		.v4l2Name = "16-bit Bayer BGBG/GRGR",
>  		.bitsPerPixel = 16,
>  		.colourEncoding = PixelFormatInfo::ColourEncodingRAW,
>  		.packed = false,
> @@ -617,6 +667,7 @@ const std::map<PixelFormat, PixelFormatInfo> pixelFormatInfo{
>  		.name = "SGBRG16",
>  		.format = formats::SGBRG16,
>  		.v4l2Format = V4L2PixelFormat(V4L2_PIX_FMT_SGBRG16),
> +		.v4l2Name = "16-bit Bayer GBGB/RGRG",
>  		.bitsPerPixel = 16,
>  		.colourEncoding = PixelFormatInfo::ColourEncodingRAW,
>  		.packed = false,
> @@ -627,6 +678,7 @@ const std::map<PixelFormat, PixelFormatInfo> pixelFormatInfo{
>  		.name = "SGRBG16",
>  		.format = formats::SGRBG16,
>  		.v4l2Format = V4L2PixelFormat(V4L2_PIX_FMT_SGRBG16),
> +		.v4l2Name = "16-bit Bayer GRGR/BGBG",
>  		.bitsPerPixel = 16,
>  		.colourEncoding = PixelFormatInfo::ColourEncodingRAW,
>  		.packed = false,
> @@ -637,6 +689,7 @@ const std::map<PixelFormat, PixelFormatInfo> pixelFormatInfo{
>  		.name = "SRGGB16",
>  		.format = formats::SRGGB16,
>  		.v4l2Format = V4L2PixelFormat(V4L2_PIX_FMT_SRGGB16),
> +		.v4l2Name = "16-bit Bayer RGRG/GBGB",
>  		.bitsPerPixel = 16,
>  		.colourEncoding = PixelFormatInfo::ColourEncodingRAW,
>  		.packed = false,
> @@ -647,6 +700,7 @@ const std::map<PixelFormat, PixelFormatInfo> pixelFormatInfo{
>  		.name = "SBGGR10_IPU3",
>  		.format = formats::SBGGR10_IPU3,
>  		.v4l2Format = V4L2PixelFormat(V4L2_PIX_FMT_IPU3_SBGGR10),
> +		.v4l2Name = "10-bit bayer BGGR IPU3 Packed",
>  		.bitsPerPixel = 10,
>  		.colourEncoding = PixelFormatInfo::ColourEncodingRAW,
>  		.packed = true,
> @@ -658,6 +712,7 @@ const std::map<PixelFormat, PixelFormatInfo> pixelFormatInfo{
>  		.name = "SGBRG10_IPU3",
>  		.format = formats::SGBRG10_IPU3,
>  		.v4l2Format = V4L2PixelFormat(V4L2_PIX_FMT_IPU3_SGBRG10),
> +		.v4l2Name = "10-bit bayer GBRG IPU3 Packed",
>  		.bitsPerPixel = 10,
>  		.colourEncoding = PixelFormatInfo::ColourEncodingRAW,
>  		.packed = true,
> @@ -668,6 +723,7 @@ const std::map<PixelFormat, PixelFormatInfo> pixelFormatInfo{
>  		.name = "SGRBG10_IPU3",
>  		.format = formats::SGRBG10_IPU3,
>  		.v4l2Format = V4L2PixelFormat(V4L2_PIX_FMT_IPU3_SGRBG10),
> +		.v4l2Name = "10-bit bayer GRBG IPU3 Packed",
>  		.bitsPerPixel = 10,
>  		.colourEncoding = PixelFormatInfo::ColourEncodingRAW,
>  		.packed = true,
> @@ -678,6 +734,7 @@ const std::map<PixelFormat, PixelFormatInfo> pixelFormatInfo{
>  		.name = "SRGGB10_IPU3",
>  		.format = formats::SRGGB10_IPU3,
>  		.v4l2Format = V4L2PixelFormat(V4L2_PIX_FMT_IPU3_SRGGB10),
> +		.v4l2Name = "10-bit bayer RGGB IPU3 Packed",
>  		.bitsPerPixel = 10,
>  		.colourEncoding = PixelFormatInfo::ColourEncodingRAW,
>  		.packed = true,
> @@ -690,6 +747,7 @@ const std::map<PixelFormat, PixelFormatInfo> pixelFormatInfo{
>  		.name = "MJPEG",
>  		.format = formats::MJPEG,
>  		.v4l2Format = V4L2PixelFormat(V4L2_PIX_FMT_MJPEG),
> +		.v4l2Name = "Motion-JPEG",
>  		.bitsPerPixel = 0,
>  		.colourEncoding = PixelFormatInfo::ColourEncodingYUV,
>  		.packed = false,

Patch
diff mbox series

diff --git a/include/libcamera/internal/formats.h b/include/libcamera/internal/formats.h
index 51a8a6b8..82ab9a02 100644
--- a/include/libcamera/internal/formats.h
+++ b/include/libcamera/internal/formats.h
@@ -52,6 +52,7 @@  public:
 	const char *name;
 	PixelFormat format;
 	V4L2PixelFormat v4l2Format;
+	const char *v4l2Name;
 	unsigned int bitsPerPixel;
 	enum ColourEncoding colourEncoding;
 	bool packed;
diff --git a/src/libcamera/formats.cpp b/src/libcamera/formats.cpp
index 603d8861..0fb29fb5 100644
--- a/src/libcamera/formats.cpp
+++ b/src/libcamera/formats.cpp
@@ -57,6 +57,10 @@  LOG_DEFINE_CATEGORY(Formats)
  * \var PixelFormatInfo::v4l2Format
  * \brief The V4L2 pixel format corresponding to the PixelFormat
  *
+ * \var PixelFormatInfo::v4l2Name
+ * \brief The human-readable name of the V4L2 pixel format corresponding to the
+ * PixelFormat
+ *
  * \var PixelFormatInfo::bitsPerPixel
  * \brief The average number of bits per pixel
  *
@@ -149,6 +153,7 @@  const std::map<PixelFormat, PixelFormatInfo> pixelFormatInfo{
 		.name = "RGB565",
 		.format = formats::RGB565,
 		.v4l2Format = V4L2PixelFormat(V4L2_PIX_FMT_RGB565),
+		.v4l2Name = "16-bit RGB 5-6-5",
 		.bitsPerPixel = 16,
 		.colourEncoding = PixelFormatInfo::ColourEncodingRGB,
 		.packed = false,
@@ -159,6 +164,7 @@  const std::map<PixelFormat, PixelFormatInfo> pixelFormatInfo{
 		.name = "RGB565_BE",
 		.format = formats::RGB565_BE,
 		.v4l2Format = V4L2PixelFormat(V4L2_PIX_FMT_RGB565X),
+		.v4l2Name = "16-bit RGB 5-6-5 BE",
 		.bitsPerPixel = 16,
 		.colourEncoding = PixelFormatInfo::ColourEncodingRGB,
 		.packed = false,
@@ -169,6 +175,7 @@  const std::map<PixelFormat, PixelFormatInfo> pixelFormatInfo{
 		.name = "BGR888",
 		.format = formats::BGR888,
 		.v4l2Format = V4L2PixelFormat(V4L2_PIX_FMT_RGB24),
+		.v4l2Name = "24-bit RGB 8-8-8",
 		.bitsPerPixel = 24,
 		.colourEncoding = PixelFormatInfo::ColourEncodingRGB,
 		.packed = false,
@@ -179,6 +186,7 @@  const std::map<PixelFormat, PixelFormatInfo> pixelFormatInfo{
 		.name = "RGB888",
 		.format = formats::RGB888,
 		.v4l2Format = V4L2PixelFormat(V4L2_PIX_FMT_BGR24),
+		.v4l2Name = "24-bit BGR 8-8-8",
 		.bitsPerPixel = 24,
 		.colourEncoding = PixelFormatInfo::ColourEncodingRGB,
 		.packed = false,
@@ -189,6 +197,7 @@  const std::map<PixelFormat, PixelFormatInfo> pixelFormatInfo{
 		.name = "XRGB8888",
 		.format = formats::XRGB8888,
 		.v4l2Format = V4L2PixelFormat(V4L2_PIX_FMT_XBGR32),
+		.v4l2Name = "32-bit BGRX 8-8-8-8",
 		.bitsPerPixel = 32,
 		.colourEncoding = PixelFormatInfo::ColourEncodingRGB,
 		.packed = false,
@@ -199,6 +208,7 @@  const std::map<PixelFormat, PixelFormatInfo> pixelFormatInfo{
 		.name = "XBGR8888",
 		.format = formats::XBGR8888,
 		.v4l2Format = V4L2PixelFormat(V4L2_PIX_FMT_RGBX32),
+		.v4l2Name = "32-bit RGBX 8-8-8-8",
 		.bitsPerPixel = 32,
 		.colourEncoding = PixelFormatInfo::ColourEncodingRGB,
 		.packed = false,
@@ -209,6 +219,7 @@  const std::map<PixelFormat, PixelFormatInfo> pixelFormatInfo{
 		.name = "BGRX8888",
 		.format = formats::BGRX8888,
 		.v4l2Format = V4L2PixelFormat(V4L2_PIX_FMT_XRGB32),
+		.v4l2Name = "32-bit XRGB 8-8-8-8",
 		.bitsPerPixel = 32,
 		.colourEncoding = PixelFormatInfo::ColourEncodingRGB,
 		.packed = false,
@@ -219,6 +230,7 @@  const std::map<PixelFormat, PixelFormatInfo> pixelFormatInfo{
 		.name = "ABGR8888",
 		.format = formats::ABGR8888,
 		.v4l2Format = V4L2PixelFormat(V4L2_PIX_FMT_RGBA32),
+		.v4l2Name = "32-bit RGBA 8-8-8-8",
 		.bitsPerPixel = 32,
 		.colourEncoding = PixelFormatInfo::ColourEncodingRGB,
 		.packed = false,
@@ -229,6 +241,7 @@  const std::map<PixelFormat, PixelFormatInfo> pixelFormatInfo{
 		.name = "ARGB8888",
 		.format = formats::ARGB8888,
 		.v4l2Format = V4L2PixelFormat(V4L2_PIX_FMT_ABGR32),
+		.v4l2Name = "32-bit BGRA 8-8-8-8",
 		.bitsPerPixel = 32,
 		.colourEncoding = PixelFormatInfo::ColourEncodingRGB,
 		.packed = false,
@@ -239,6 +252,7 @@  const std::map<PixelFormat, PixelFormatInfo> pixelFormatInfo{
 		.name = "BGRA8888",
 		.format = formats::BGRA8888,
 		.v4l2Format = V4L2PixelFormat(V4L2_PIX_FMT_ARGB32),
+		.v4l2Name = "32-bit ARGB 8-8-8-8",
 		.bitsPerPixel = 32,
 		.colourEncoding = PixelFormatInfo::ColourEncodingRGB,
 		.packed = false,
@@ -249,6 +263,7 @@  const std::map<PixelFormat, PixelFormatInfo> pixelFormatInfo{
 		.name = "RGBA8888",
 		.format = formats::RGBA8888,
 		.v4l2Format = V4L2PixelFormat(V4L2_PIX_FMT_BGRA32),
+		.v4l2Name = "32-bit ABGR 8-8-8-8",
 		.bitsPerPixel = 32,
 		.colourEncoding = PixelFormatInfo::ColourEncodingRGB,
 		.packed = false,
@@ -261,6 +276,7 @@  const std::map<PixelFormat, PixelFormatInfo> pixelFormatInfo{
 		.name = "YUYV",
 		.format = formats::YUYV,
 		.v4l2Format = V4L2PixelFormat(V4L2_PIX_FMT_YUYV),
+		.v4l2Name = "YUYV 4:2:2",
 		.bitsPerPixel = 16,
 		.colourEncoding = PixelFormatInfo::ColourEncodingYUV,
 		.packed = false,
@@ -271,6 +287,7 @@  const std::map<PixelFormat, PixelFormatInfo> pixelFormatInfo{
 		.name = "YVYU",
 		.format = formats::YVYU,
 		.v4l2Format = V4L2PixelFormat(V4L2_PIX_FMT_YVYU),
+		.v4l2Name = "YVYU 4:2:2",
 		.bitsPerPixel = 16,
 		.colourEncoding = PixelFormatInfo::ColourEncodingYUV,
 		.packed = false,
@@ -281,6 +298,7 @@  const std::map<PixelFormat, PixelFormatInfo> pixelFormatInfo{
 		.name = "UYVY",
 		.format = formats::UYVY,
 		.v4l2Format = V4L2PixelFormat(V4L2_PIX_FMT_UYVY),
+		.v4l2Name = "UYVY 4:2:2",
 		.bitsPerPixel = 16,
 		.colourEncoding = PixelFormatInfo::ColourEncodingYUV,
 		.packed = false,
@@ -291,6 +309,7 @@  const std::map<PixelFormat, PixelFormatInfo> pixelFormatInfo{
 		.name = "VYUY",
 		.format = formats::VYUY,
 		.v4l2Format = V4L2PixelFormat(V4L2_PIX_FMT_VYUY),
+		.v4l2Name = "VYUY 4:2:2",
 		.bitsPerPixel = 16,
 		.colourEncoding = PixelFormatInfo::ColourEncodingYUV,
 		.packed = false,
@@ -303,6 +322,7 @@  const std::map<PixelFormat, PixelFormatInfo> pixelFormatInfo{
 		.name = "NV12",
 		.format = formats::NV12,
 		.v4l2Format = V4L2PixelFormat(V4L2_PIX_FMT_NV12),
+		.v4l2Name = "Y/CbCr 4:2:0",
 		.bitsPerPixel = 12,
 		.colourEncoding = PixelFormatInfo::ColourEncodingYUV,
 		.packed = false,
@@ -313,6 +333,7 @@  const std::map<PixelFormat, PixelFormatInfo> pixelFormatInfo{
 		.name = "NV21",
 		.format = formats::NV21,
 		.v4l2Format = V4L2PixelFormat(V4L2_PIX_FMT_NV21),
+		.v4l2Name = "Y/CrCb 4:2:0",
 		.bitsPerPixel = 12,
 		.colourEncoding = PixelFormatInfo::ColourEncodingYUV,
 		.packed = false,
@@ -323,6 +344,7 @@  const std::map<PixelFormat, PixelFormatInfo> pixelFormatInfo{
 		.name = "NV16",
 		.format = formats::NV16,
 		.v4l2Format = V4L2PixelFormat(V4L2_PIX_FMT_NV16),
+		.v4l2Name = "Y/CbCr 4:2:2",
 		.bitsPerPixel = 16,
 		.colourEncoding = PixelFormatInfo::ColourEncodingYUV,
 		.packed = false,
@@ -333,6 +355,7 @@  const std::map<PixelFormat, PixelFormatInfo> pixelFormatInfo{
 		.name = "NV61",
 		.format = formats::NV61,
 		.v4l2Format = V4L2PixelFormat(V4L2_PIX_FMT_NV61),
+		.v4l2Name = "Y/CrCb 4:2:2",
 		.bitsPerPixel = 16,
 		.colourEncoding = PixelFormatInfo::ColourEncodingYUV,
 		.packed = false,
@@ -343,6 +366,7 @@  const std::map<PixelFormat, PixelFormatInfo> pixelFormatInfo{
 		.name = "NV24",
 		.format = formats::NV24,
 		.v4l2Format = V4L2PixelFormat(V4L2_PIX_FMT_NV24),
+		.v4l2Name = "Y/CbCr 4:4:4",
 		.bitsPerPixel = 24,
 		.colourEncoding = PixelFormatInfo::ColourEncodingYUV,
 		.packed = false,
@@ -353,6 +377,7 @@  const std::map<PixelFormat, PixelFormatInfo> pixelFormatInfo{
 		.name = "NV42",
 		.format = formats::NV42,
 		.v4l2Format = V4L2PixelFormat(V4L2_PIX_FMT_NV42),
+		.v4l2Name = "Y/CrCb 4:4:4",
 		.bitsPerPixel = 24,
 		.colourEncoding = PixelFormatInfo::ColourEncodingYUV,
 		.packed = false,
@@ -363,6 +388,7 @@  const std::map<PixelFormat, PixelFormatInfo> pixelFormatInfo{
 		.name = "YUV420",
 		.format = formats::YUV420,
 		.v4l2Format = V4L2PixelFormat(V4L2_PIX_FMT_YUV420),
+		.v4l2Name = "Planar YUV 4:2:0",
 		.bitsPerPixel = 12,
 		.colourEncoding = PixelFormatInfo::ColourEncodingYUV,
 		.packed = false,
@@ -373,6 +399,7 @@  const std::map<PixelFormat, PixelFormatInfo> pixelFormatInfo{
 		.name = "YVU420",
 		.format = formats::YVU420,
 		.v4l2Format = V4L2PixelFormat(V4L2_PIX_FMT_YVU420),
+		.v4l2Name = "Planar YVU 4:2:0",
 		.bitsPerPixel = 12,
 		.colourEncoding = PixelFormatInfo::ColourEncodingYUV,
 		.packed = false,
@@ -383,6 +410,7 @@  const std::map<PixelFormat, PixelFormatInfo> pixelFormatInfo{
 		.name = "YUV422",
 		.format = formats::YUV422,
 		.v4l2Format = V4L2PixelFormat(V4L2_PIX_FMT_YUV422P),
+		.v4l2Name = "Planar YUV 4:2:2",
 		.bitsPerPixel = 16,
 		.colourEncoding = PixelFormatInfo::ColourEncodingYUV,
 		.packed = false,
@@ -395,6 +423,7 @@  const std::map<PixelFormat, PixelFormatInfo> pixelFormatInfo{
 		.name = "R8",
 		.format = formats::R8,
 		.v4l2Format = V4L2PixelFormat(V4L2_PIX_FMT_GREY),
+		.v4l2Name = "8-bit Greyscale",
 		.bitsPerPixel = 8,
 		.colourEncoding = PixelFormatInfo::ColourEncodingYUV,
 		.packed = false,
@@ -407,6 +436,7 @@  const std::map<PixelFormat, PixelFormatInfo> pixelFormatInfo{
 		.name = "SBGGR8",
 		.format = formats::SBGGR8,
 		.v4l2Format = V4L2PixelFormat(V4L2_PIX_FMT_SBGGR8),
+		.v4l2Name = "8-bit Bayer BGBG/GRGR",
 		.bitsPerPixel = 8,
 		.colourEncoding = PixelFormatInfo::ColourEncodingRAW,
 		.packed = false,
@@ -417,6 +447,7 @@  const std::map<PixelFormat, PixelFormatInfo> pixelFormatInfo{
 		.name = "SGBRG8",
 		.format = formats::SGBRG8,
 		.v4l2Format = V4L2PixelFormat(V4L2_PIX_FMT_SGBRG8),
+		.v4l2Name = "8-bit Bayer GBGB/RGRG",
 		.bitsPerPixel = 8,
 		.colourEncoding = PixelFormatInfo::ColourEncodingRAW,
 		.packed = false,
@@ -427,6 +458,7 @@  const std::map<PixelFormat, PixelFormatInfo> pixelFormatInfo{
 		.name = "SGRBG8",
 		.format = formats::SGRBG8,
 		.v4l2Format = V4L2PixelFormat(V4L2_PIX_FMT_SGRBG8),
+		.v4l2Name = "8-bit Bayer GRGR/BGBG",
 		.bitsPerPixel = 8,
 		.colourEncoding = PixelFormatInfo::ColourEncodingRAW,
 		.packed = false,
@@ -437,6 +469,7 @@  const std::map<PixelFormat, PixelFormatInfo> pixelFormatInfo{
 		.name = "SRGGB8",
 		.format = formats::SRGGB8,
 		.v4l2Format = V4L2PixelFormat(V4L2_PIX_FMT_SRGGB8),
+		.v4l2Name = "8-bit Bayer RGRG/GBGB",
 		.bitsPerPixel = 8,
 		.colourEncoding = PixelFormatInfo::ColourEncodingRAW,
 		.packed = false,
@@ -447,6 +480,7 @@  const std::map<PixelFormat, PixelFormatInfo> pixelFormatInfo{
 		.name = "SBGGR10",
 		.format = formats::SBGGR10,
 		.v4l2Format = V4L2PixelFormat(V4L2_PIX_FMT_SBGGR10),
+		.v4l2Name = "10-bit Bayer BGBG/GRGR",
 		.bitsPerPixel = 10,
 		.colourEncoding = PixelFormatInfo::ColourEncodingRAW,
 		.packed = false,
@@ -457,6 +491,7 @@  const std::map<PixelFormat, PixelFormatInfo> pixelFormatInfo{
 		.name = "SGBRG10",
 		.format = formats::SGBRG10,
 		.v4l2Format = V4L2PixelFormat(V4L2_PIX_FMT_SGBRG10),
+		.v4l2Name = "10-bit Bayer GBGB/RGRG",
 		.bitsPerPixel = 10,
 		.colourEncoding = PixelFormatInfo::ColourEncodingRAW,
 		.packed = false,
@@ -467,6 +502,7 @@  const std::map<PixelFormat, PixelFormatInfo> pixelFormatInfo{
 		.name = "SGRBG10",
 		.format = formats::SGRBG10,
 		.v4l2Format = V4L2PixelFormat(V4L2_PIX_FMT_SGRBG10),
+		.v4l2Name = "10-bit Bayer GRGR/BGBG",
 		.bitsPerPixel = 10,
 		.colourEncoding = PixelFormatInfo::ColourEncodingRAW,
 		.packed = false,
@@ -477,6 +513,7 @@  const std::map<PixelFormat, PixelFormatInfo> pixelFormatInfo{
 		.name = "SRGGB10",
 		.format = formats::SRGGB10,
 		.v4l2Format = V4L2PixelFormat(V4L2_PIX_FMT_SRGGB10),
+		.v4l2Name = "10-bit Bayer RGRG/GBGB",
 		.bitsPerPixel = 10,
 		.colourEncoding = PixelFormatInfo::ColourEncodingRAW,
 		.packed = false,
@@ -487,6 +524,7 @@  const std::map<PixelFormat, PixelFormatInfo> pixelFormatInfo{
 		.name = "SBGGR10_CSI2P",
 		.format = formats::SBGGR10_CSI2P,
 		.v4l2Format = V4L2PixelFormat(V4L2_PIX_FMT_SBGGR10P),
+		.v4l2Name = "10-bit Bayer BGBG/GRGR Packed",
 		.bitsPerPixel = 10,
 		.colourEncoding = PixelFormatInfo::ColourEncodingRAW,
 		.packed = true,
@@ -497,6 +535,7 @@  const std::map<PixelFormat, PixelFormatInfo> pixelFormatInfo{
 		.name = "SGBRG10_CSI2P",
 		.format = formats::SGBRG10_CSI2P,
 		.v4l2Format = V4L2PixelFormat(V4L2_PIX_FMT_SGBRG10P),
+		.v4l2Name = "10-bit Bayer GBGB/RGRG Packed",
 		.bitsPerPixel = 10,
 		.colourEncoding = PixelFormatInfo::ColourEncodingRAW,
 		.packed = true,
@@ -507,6 +546,7 @@  const std::map<PixelFormat, PixelFormatInfo> pixelFormatInfo{
 		.name = "SGRBG10_CSI2P",
 		.format = formats::SGRBG10_CSI2P,
 		.v4l2Format = V4L2PixelFormat(V4L2_PIX_FMT_SGRBG10P),
+		.v4l2Name = "10-bit Bayer GRGR/BGBG Packed",
 		.bitsPerPixel = 10,
 		.colourEncoding = PixelFormatInfo::ColourEncodingRAW,
 		.packed = true,
@@ -517,6 +557,7 @@  const std::map<PixelFormat, PixelFormatInfo> pixelFormatInfo{
 		.name = "SRGGB10_CSI2P",
 		.format = formats::SRGGB10_CSI2P,
 		.v4l2Format = V4L2PixelFormat(V4L2_PIX_FMT_SRGGB10P),
+		.v4l2Name = "10-bit Bayer RGRG/GBGB Packed",
 		.bitsPerPixel = 10,
 		.colourEncoding = PixelFormatInfo::ColourEncodingRAW,
 		.packed = true,
@@ -527,6 +568,7 @@  const std::map<PixelFormat, PixelFormatInfo> pixelFormatInfo{
 		.name = "SBGGR12",
 		.format = formats::SBGGR12,
 		.v4l2Format = V4L2PixelFormat(V4L2_PIX_FMT_SBGGR12),
+		.v4l2Name = "12-bit Bayer BGBG/GRGR",
 		.bitsPerPixel = 12,
 		.colourEncoding = PixelFormatInfo::ColourEncodingRAW,
 		.packed = false,
@@ -537,6 +579,7 @@  const std::map<PixelFormat, PixelFormatInfo> pixelFormatInfo{
 		.name = "SGBRG12",
 		.format = formats::SGBRG12,
 		.v4l2Format = V4L2PixelFormat(V4L2_PIX_FMT_SGBRG12),
+		.v4l2Name = "12-bit Bayer GBGB/RGRG",
 		.bitsPerPixel = 12,
 		.colourEncoding = PixelFormatInfo::ColourEncodingRAW,
 		.packed = false,
@@ -547,6 +590,7 @@  const std::map<PixelFormat, PixelFormatInfo> pixelFormatInfo{
 		.name = "SGRBG12",
 		.format = formats::SGRBG12,
 		.v4l2Format = V4L2PixelFormat(V4L2_PIX_FMT_SGRBG12),
+		.v4l2Name = "12-bit Bayer GRGR/BGBG",
 		.bitsPerPixel = 12,
 		.colourEncoding = PixelFormatInfo::ColourEncodingRAW,
 		.packed = false,
@@ -557,6 +601,7 @@  const std::map<PixelFormat, PixelFormatInfo> pixelFormatInfo{
 		.name = "SRGGB12",
 		.format = formats::SRGGB12,
 		.v4l2Format = V4L2PixelFormat(V4L2_PIX_FMT_SRGGB12),
+		.v4l2Name = "12-bit Bayer RGRG/GBGB",
 		.bitsPerPixel = 12,
 		.colourEncoding = PixelFormatInfo::ColourEncodingRAW,
 		.packed = false,
@@ -567,6 +612,7 @@  const std::map<PixelFormat, PixelFormatInfo> pixelFormatInfo{
 		.name = "SBGGR12_CSI2P",
 		.format = formats::SBGGR12_CSI2P,
 		.v4l2Format = V4L2PixelFormat(V4L2_PIX_FMT_SBGGR12P),
+		.v4l2Name = "12-bit Bayer BGBG/GRGR Packed",
 		.bitsPerPixel = 12,
 		.colourEncoding = PixelFormatInfo::ColourEncodingRAW,
 		.packed = true,
@@ -577,6 +623,7 @@  const std::map<PixelFormat, PixelFormatInfo> pixelFormatInfo{
 		.name = "SGBRG12_CSI2P",
 		.format = formats::SGBRG12_CSI2P,
 		.v4l2Format = V4L2PixelFormat(V4L2_PIX_FMT_SGBRG12P),
+		.v4l2Name = "12-bit Bayer GBGB/RGRG Packed",
 		.bitsPerPixel = 12,
 		.colourEncoding = PixelFormatInfo::ColourEncodingRAW,
 		.packed = true,
@@ -587,6 +634,7 @@  const std::map<PixelFormat, PixelFormatInfo> pixelFormatInfo{
 		.name = "SGRBG12_CSI2P",
 		.format = formats::SGRBG12_CSI2P,
 		.v4l2Format = V4L2PixelFormat(V4L2_PIX_FMT_SGRBG12P),
+		.v4l2Name = "12-bit Bayer GRGR/BGBG Packed",
 		.bitsPerPixel = 12,
 		.colourEncoding = PixelFormatInfo::ColourEncodingRAW,
 		.packed = true,
@@ -597,6 +645,7 @@  const std::map<PixelFormat, PixelFormatInfo> pixelFormatInfo{
 		.name = "SRGGB12_CSI2P",
 		.format = formats::SRGGB12_CSI2P,
 		.v4l2Format = V4L2PixelFormat(V4L2_PIX_FMT_SRGGB12P),
+		.v4l2Name = "12-bit Bayer RGRG/GBGB Packed",
 		.bitsPerPixel = 12,
 		.colourEncoding = PixelFormatInfo::ColourEncodingRAW,
 		.packed = true,
@@ -607,6 +656,7 @@  const std::map<PixelFormat, PixelFormatInfo> pixelFormatInfo{
 		.name = "SBGGR16",
 		.format = formats::SBGGR16,
 		.v4l2Format = V4L2PixelFormat(V4L2_PIX_FMT_SBGGR16),
+		.v4l2Name = "16-bit Bayer BGBG/GRGR",
 		.bitsPerPixel = 16,
 		.colourEncoding = PixelFormatInfo::ColourEncodingRAW,
 		.packed = false,
@@ -617,6 +667,7 @@  const std::map<PixelFormat, PixelFormatInfo> pixelFormatInfo{
 		.name = "SGBRG16",
 		.format = formats::SGBRG16,
 		.v4l2Format = V4L2PixelFormat(V4L2_PIX_FMT_SGBRG16),
+		.v4l2Name = "16-bit Bayer GBGB/RGRG",
 		.bitsPerPixel = 16,
 		.colourEncoding = PixelFormatInfo::ColourEncodingRAW,
 		.packed = false,
@@ -627,6 +678,7 @@  const std::map<PixelFormat, PixelFormatInfo> pixelFormatInfo{
 		.name = "SGRBG16",
 		.format = formats::SGRBG16,
 		.v4l2Format = V4L2PixelFormat(V4L2_PIX_FMT_SGRBG16),
+		.v4l2Name = "16-bit Bayer GRGR/BGBG",
 		.bitsPerPixel = 16,
 		.colourEncoding = PixelFormatInfo::ColourEncodingRAW,
 		.packed = false,
@@ -637,6 +689,7 @@  const std::map<PixelFormat, PixelFormatInfo> pixelFormatInfo{
 		.name = "SRGGB16",
 		.format = formats::SRGGB16,
 		.v4l2Format = V4L2PixelFormat(V4L2_PIX_FMT_SRGGB16),
+		.v4l2Name = "16-bit Bayer RGRG/GBGB",
 		.bitsPerPixel = 16,
 		.colourEncoding = PixelFormatInfo::ColourEncodingRAW,
 		.packed = false,
@@ -647,6 +700,7 @@  const std::map<PixelFormat, PixelFormatInfo> pixelFormatInfo{
 		.name = "SBGGR10_IPU3",
 		.format = formats::SBGGR10_IPU3,
 		.v4l2Format = V4L2PixelFormat(V4L2_PIX_FMT_IPU3_SBGGR10),
+		.v4l2Name = "10-bit bayer BGGR IPU3 Packed",
 		.bitsPerPixel = 10,
 		.colourEncoding = PixelFormatInfo::ColourEncodingRAW,
 		.packed = true,
@@ -658,6 +712,7 @@  const std::map<PixelFormat, PixelFormatInfo> pixelFormatInfo{
 		.name = "SGBRG10_IPU3",
 		.format = formats::SGBRG10_IPU3,
 		.v4l2Format = V4L2PixelFormat(V4L2_PIX_FMT_IPU3_SGBRG10),
+		.v4l2Name = "10-bit bayer GBRG IPU3 Packed",
 		.bitsPerPixel = 10,
 		.colourEncoding = PixelFormatInfo::ColourEncodingRAW,
 		.packed = true,
@@ -668,6 +723,7 @@  const std::map<PixelFormat, PixelFormatInfo> pixelFormatInfo{
 		.name = "SGRBG10_IPU3",
 		.format = formats::SGRBG10_IPU3,
 		.v4l2Format = V4L2PixelFormat(V4L2_PIX_FMT_IPU3_SGRBG10),
+		.v4l2Name = "10-bit bayer GRBG IPU3 Packed",
 		.bitsPerPixel = 10,
 		.colourEncoding = PixelFormatInfo::ColourEncodingRAW,
 		.packed = true,
@@ -678,6 +734,7 @@  const std::map<PixelFormat, PixelFormatInfo> pixelFormatInfo{
 		.name = "SRGGB10_IPU3",
 		.format = formats::SRGGB10_IPU3,
 		.v4l2Format = V4L2PixelFormat(V4L2_PIX_FMT_IPU3_SRGGB10),
+		.v4l2Name = "10-bit bayer RGGB IPU3 Packed",
 		.bitsPerPixel = 10,
 		.colourEncoding = PixelFormatInfo::ColourEncodingRAW,
 		.packed = true,
@@ -690,6 +747,7 @@  const std::map<PixelFormat, PixelFormatInfo> pixelFormatInfo{
 		.name = "MJPEG",
 		.format = formats::MJPEG,
 		.v4l2Format = V4L2PixelFormat(V4L2_PIX_FMT_MJPEG),
+		.v4l2Name = "Motion-JPEG",
 		.bitsPerPixel = 0,
 		.colourEncoding = PixelFormatInfo::ColourEncodingYUV,
 		.packed = false,