[libcamera-devel,v2,2/2] libcamera: Add support for 16-bit Bayer formats

Message ID 20200724171404.736509-3-niklas.soderlund@ragnatech.se
State Accepted
Commit 3437067e9bd923ee4dce857d83d7bce0f791537d
Headers show
Series
  • libcamera: Add support for 16-bit Bayer formats
Related show

Commit Message

Niklas Söderlund July 24, 2020, 5:14 p.m. UTC
Add support for 16-bit Bayer formats.

Signed-off-by: Niklas Söderlund <niklas.soderlund@ragnatech.se>
Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
---
 src/libcamera/formats.cpp          | 40 ++++++++++++++++++++++++++++++
 src/libcamera/formats.yaml         |  9 +++++++
 src/libcamera/v4l2_pixelformat.cpp |  4 +++
 3 files changed, 53 insertions(+)

Patch

diff --git a/src/libcamera/formats.cpp b/src/libcamera/formats.cpp
index 11774b0cfb123f58..cd63c15cb926d569 100644
--- a/src/libcamera/formats.cpp
+++ b/src/libcamera/formats.cpp
@@ -563,6 +563,46 @@  const std::map<PixelFormat, PixelFormatInfo> pixelFormatInfo{
 		.pixelsPerGroup = 2,
 		.planes = {{ { 3, 1 }, { 0, 0 }, { 0, 0 } }},
 	} },
+	{ formats::SBGGR16, {
+		.name = "SBGGR16",
+		.format = formats::SBGGR16,
+		.v4l2Format = V4L2PixelFormat(V4L2_PIX_FMT_SBGGR16),
+		.bitsPerPixel = 16,
+		.colourEncoding = PixelFormatInfo::ColourEncodingRAW,
+		.packed = false,
+		.pixelsPerGroup = 2,
+		.planes = {{ { 4, 1 }, { 0, 0 }, { 0, 0 } }},
+	} },
+	{ formats::SGBRG16, {
+		.name = "SGBRG16",
+		.format = formats::SGBRG16,
+		.v4l2Format = V4L2PixelFormat(V4L2_PIX_FMT_SGBRG16),
+		.bitsPerPixel = 16,
+		.colourEncoding = PixelFormatInfo::ColourEncodingRAW,
+		.packed = false,
+		.pixelsPerGroup = 2,
+		.planes = {{ { 4, 1 }, { 0, 0 }, { 0, 0 } }},
+	} },
+	{ formats::SGRBG16, {
+		.name = "SGRBG16",
+		.format = formats::SGRBG16,
+		.v4l2Format = V4L2PixelFormat(V4L2_PIX_FMT_SGRBG16),
+		.bitsPerPixel = 16,
+		.colourEncoding = PixelFormatInfo::ColourEncodingRAW,
+		.packed = false,
+		.pixelsPerGroup = 2,
+		.planes = {{ { 4, 1 }, { 0, 0 }, { 0, 0 } }},
+	} },
+	{ formats::SRGGB16, {
+		.name = "SRGGB16",
+		.format = formats::SRGGB16,
+		.v4l2Format = V4L2PixelFormat(V4L2_PIX_FMT_SRGGB16),
+		.bitsPerPixel = 16,
+		.colourEncoding = PixelFormatInfo::ColourEncodingRAW,
+		.packed = false,
+		.pixelsPerGroup = 2,
+		.planes = {{ { 4, 1 }, { 0, 0 }, { 0, 0 } }},
+	} },
 	{ formats::SBGGR10_IPU3, {
 		.name = "SBGGR10_IPU3",
 		.format = formats::SBGGR10_IPU3,
diff --git a/src/libcamera/formats.yaml b/src/libcamera/formats.yaml
index 3a69c05fcc04fb93..6a2fb721b7c649b6 100644
--- a/src/libcamera/formats.yaml
+++ b/src/libcamera/formats.yaml
@@ -93,6 +93,15 @@  formats:
   - SBGGR12:
       fourcc: DRM_FORMAT_SBGGR12
 
+  - SRGGB16:
+      fourcc: DRM_FORMAT_SRGGB16
+  - SGRBG16:
+      fourcc: DRM_FORMAT_SGRBG16
+  - SGBRG16:
+      fourcc: DRM_FORMAT_SGBRG16
+  - SBGGR16:
+      fourcc: DRM_FORMAT_SBGGR16
+
   - SRGGB10_CSI2P:
       fourcc: DRM_FORMAT_SRGGB10
       mod: MIPI_FORMAT_MOD_CSI2_PACKED
diff --git a/src/libcamera/v4l2_pixelformat.cpp b/src/libcamera/v4l2_pixelformat.cpp
index c8f69ee9654223b3..8391ec48ac1009b6 100644
--- a/src/libcamera/v4l2_pixelformat.cpp
+++ b/src/libcamera/v4l2_pixelformat.cpp
@@ -92,6 +92,10 @@  const std::map<V4L2PixelFormat, PixelFormat> vpf2pf{
 	{ V4L2PixelFormat(V4L2_PIX_FMT_SGBRG12P), formats::SGBRG12_CSI2P },
 	{ V4L2PixelFormat(V4L2_PIX_FMT_SGRBG12P), formats::SGRBG12_CSI2P },
 	{ V4L2PixelFormat(V4L2_PIX_FMT_SRGGB12P), formats::SRGGB12_CSI2P },
+	{ V4L2PixelFormat(V4L2_PIX_FMT_SBGGR16), formats::SBGGR16 },
+	{ V4L2PixelFormat(V4L2_PIX_FMT_SGBRG16), formats::SGBRG16 },
+	{ V4L2PixelFormat(V4L2_PIX_FMT_SGRBG16), formats::SGRBG16 },
+	{ V4L2PixelFormat(V4L2_PIX_FMT_SRGGB16), formats::SRGGB16 },
 
 	/* Compressed formats. */
 	{ V4L2PixelFormat(V4L2_PIX_FMT_MJPEG), formats::MJPEG },