[PATCH 1/1] libcamera: Add formats introduced by MTK platform

Harvey Yang chenghaoyang at chromium.org
Mon Sep 23 11:08:53 CEST 2024


From: Han-Lin Chen <hanlinchen at chromium.org>

The patch adds the following formats.

  - GREY
  - SBGGR10_MTISP
  - SGBRG10_MTISP
  - SGRBG10_MTISP
  - SRGGB10_MTISP
  - NV12_10P_MTISP
  - NV12_12P_MTISP
  - MTFP_MTISP
  - MTFA_MTISP
  - MTFF_MTISP
  - MTFD_MTISP
  - MTFS_MTISP
  - MTFR_MTISP
  - MTSR_MTISP
  - WARP2P_MTISP
  - Y8_MTISP
  - Y16_MTISP
  - Y32_MTISP

Signed-off-by: Han-Lin Chen <hanlinchen at chromium.org>
Co-developed-by: Xing Gu <xinggu at chromium.org>
Co-developed-by: Harvey Yang <chenghaoyang at chromium.org>
---
 include/linux/drm_fourcc.h |  26 +++++
 include/linux/videodev2.h  |  22 ++++
 src/libcamera/formats.cpp  | 203 +++++++++++++++++++++++++++++++++++++
 src/libcamera/formats.yaml |  38 +++++++
 4 files changed, 289 insertions(+)

diff --git a/include/linux/drm_fourcc.h b/include/linux/drm_fourcc.h
index db679877..ca00a3c7 100644
--- a/include/linux/drm_fourcc.h
+++ b/include/linux/drm_fourcc.h
@@ -466,6 +466,32 @@ extern "C" {
 #define DRM_FORMAT_SGBRG16	fourcc_code('G', 'B', '1', '6')
 #define DRM_FORMAT_SBGGR16	fourcc_code('B', 'Y', 'R', '2')
 
+/* MTK extention */
+
+#define DRM_FORMAT_MTISP_SBGGR10 fourcc_code('M', 'B', 'B', 'A')
+#define DRM_FORMAT_MTISP_SGBRG10 fourcc_code('M', 'B', 'G', 'A')
+#define DRM_FORMAT_MTISP_SGRBG10 fourcc_code('M', 'B', 'g', 'A')
+#define DRM_FORMAT_MTISP_SRGGB10 fourcc_code('M', 'B', 'R', 'A')
+
+#define DRM_FORMAT_MTISP_NV12_10P fourcc_code('1', '2', 'A', 'P')
+#define DRM_FORMAT_MTISP_NV12_12P fourcc_code('1', '2', 'C', 'P')
+
+#define DRM_FORMAT_GREY fourcc_code('G', 'R', 'E', 'Y')
+
+#define DRM_FORMAT_MTISP_PARAMS fourcc_code('M', 'T', 'f', 'p')
+#define DRM_FORMAT_MTISP_3A fourcc_code('M', 'T', 'f', 'a')
+#define DRM_FORMAT_MTISP_AF fourcc_code('M', 'T', 'f', 'f')
+
+#define DRM_FORMAT_MTISP_DESC fourcc_code('M', 'T', 'f', 'd')
+#define DRM_FORMAT_MTISP_SD fourcc_code('M', 'T', 'f', 's')
+#define DRM_FORMAT_MTISP_DESC_NORM fourcc_code('M', 'T', 'f', 'r')
+#define DRM_FORMAT_MTISP_SDNORM fourcc_code('M', 'T', 's', 'r')
+
+#define DRM_FORMAT_MTISP_WARP2P fourcc_code('M', 'W', '2', 'P')
+#define DRM_FORMAT_MTISP_Y8 fourcc_code('M', 'T', '0', '8')
+#define DRM_FORMAT_MTISP_Y16 fourcc_code('M', 'T', '1', '6')
+#define DRM_FORMAT_MTISP_Y32 fourcc_code('M', 'T', '3', '2')
+
 /*
  * Format Modifiers:
  *
diff --git a/include/linux/videodev2.h b/include/linux/videodev2.h
index 3829c0b6..2cee0b86 100644
--- a/include/linux/videodev2.h
+++ b/include/linux/videodev2.h
@@ -789,6 +789,28 @@ struct v4l2_pix_format {
 #define V4L2_PIX_FMT_IPU3_SGRBG10	v4l2_fourcc('i', 'p', '3', 'G') /* IPU3 packed 10-bit GRBG bayer */
 #define V4L2_PIX_FMT_IPU3_SRGGB10	v4l2_fourcc('i', 'p', '3', 'r') /* IPU3 packed 10-bit RGGB bayer */
 
+#define V4L2_PIX_FMT_MTISP_SBGGR10 v4l2_fourcc('M', 'B', 'B', 'A')
+#define V4L2_PIX_FMT_MTISP_SGBRG10 v4l2_fourcc('M', 'B', 'G', 'A')
+#define V4L2_PIX_FMT_MTISP_SGRBG10 v4l2_fourcc('M', 'B', 'g', 'A')
+#define V4L2_PIX_FMT_MTISP_SRGGB10 v4l2_fourcc('M', 'B', 'R', 'A')
+
+#define V4L2_PIX_FMT_MTISP_NV12_10P v4l2_fourcc('1', '2', 'A', 'P') /* Y/CbCr 4:2:0 10 bits packed */
+#define V4L2_PIX_FMT_MTISP_NV12_12P v4l2_fourcc('1', '2', 'C', 'P') /* Y/CbCr 4:2:0 12 bits packed */
+
+#define V4L2_META_FMT_MTISP_PARAMS v4l2_fourcc('M', 'T', 'f', 'p')
+#define V4L2_META_FMT_MTISP_3A v4l2_fourcc('M', 'T', 'f', 'a')
+#define V4L2_META_FMT_MTISP_AF v4l2_fourcc('M', 'T', 'f', 'f')
+
+#define V4L2_META_FMT_MTISP_DESC v4l2_fourcc('M', 'T', 'f', 'd')
+#define V4L2_META_FMT_MTISP_SD v4l2_fourcc('M', 'T', 'f', 's')
+#define V4L2_META_FMT_MTISP_DESCNORM v4l2_fourcc('M', 'T', 'f', 'r')
+#define V4L2_META_FMT_MTISP_SDNORM v4l2_fourcc('M', 'T', 's', 'r')
+
+#define V4L2_PIX_FMT_WARP2P v4l2_fourcc('M', 'W', '2', 'P')
+#define V4L2_PIX_FMT_MTISP_Y8 v4l2_fourcc('M', 'T', '0', '8')
+#define V4L2_PIX_FMT_MTISP_Y16 v4l2_fourcc('M', 'T', '1', '6')
+#define V4L2_PIX_FMT_MTISP_Y32 v4l2_fourcc('M', 'T', '3', '2')
+
 /* Raspberry Pi PiSP compressed formats. */
 #define V4L2_PIX_FMT_PISP_COMP1_RGGB	v4l2_fourcc('P', 'C', '1', 'R') /* PiSP 8-bit mode 1 compressed RGGB bayer */
 #define V4L2_PIX_FMT_PISP_COMP1_GRBG	v4l2_fourcc('P', 'C', '1', 'G') /* PiSP 8-bit mode 1 compressed GRBG bayer */
diff --git a/src/libcamera/formats.cpp b/src/libcamera/formats.cpp
index dbefb094..53ce4e7d 100644
--- a/src/libcamera/formats.cpp
+++ b/src/libcamera/formats.cpp
@@ -506,6 +506,16 @@ const std::map<PixelFormat, PixelFormatInfo> pixelFormatInfo{
 		.pixelsPerGroup = 1,
 		.planes = {{ { 1, 1 }, { 0, 0 }, { 0, 0 } }},
 	} },
+	{ formats::GREY, {
+		.name = "GREY",
+		.format = formats::R8,
+		.v4l2Formats = { V4L2PixelFormat(V4L2_PIX_FMT_GREY), },
+		.bitsPerPixel = 8,
+		.colourEncoding = PixelFormatInfo::ColourEncodingYUV,
+		.packed = false,
+		.pixelsPerGroup = 1,
+		.planes = {{ { 1, 1 }, { 0, 0 }, { 0, 0 } }},
+	} },
 	{ formats::R10, {
 		.name = "R10",
 		.format = formats::R10,
@@ -969,6 +979,199 @@ const std::map<PixelFormat, PixelFormatInfo> pixelFormatInfo{
 		.pixelsPerGroup = 2,
 		.planes = {{ { 2, 1 }, { 0, 0 }, { 0, 0 } }},
 	} },
+	{ formats::SBGGR10_MTISP, {
+		.name = "SBGGR10_MTISP",
+		.format = formats::SBGGR10_MTISP,
+		.v4l2Formats = { V4L2PixelFormat(V4L2_PIX_FMT_MTISP_SBGGR10), },
+		.bitsPerPixel = 10,
+		.colourEncoding = PixelFormatInfo::ColourEncodingRAW,
+		.packed = true,
+		.pixelsPerGroup = 64,
+		.planes = {{ { 80, 1 }, { 0, 0 }, { 0, 0 } }},
+	} },
+	{ formats::SGBRG10_MTISP, {
+		.name = "SGBRG10_MTISP",
+		.format = formats::SGBRG10_MTISP,
+		.v4l2Formats = { V4L2PixelFormat(V4L2_PIX_FMT_MTISP_SGBRG10), },
+		.bitsPerPixel = 10,
+		.colourEncoding = PixelFormatInfo::ColourEncodingRAW,
+		.packed = true,
+		.pixelsPerGroup = 64,
+		.planes = {{ { 80, 1 }, { 0, 0 }, { 0, 0 } }},
+	} },
+	{ formats::SGRBG10_MTISP, {
+		.name = "SGRBG10_MTISP",
+		.format = formats::SGRBG10_MTISP,
+		.v4l2Formats = { V4L2PixelFormat(V4L2_PIX_FMT_MTISP_SGRBG10), },
+		.bitsPerPixel = 10,
+		.colourEncoding = PixelFormatInfo::ColourEncodingRAW,
+		.packed = true,
+		.pixelsPerGroup = 64,
+		.planes = {{ { 80, 1 }, { 0, 0 }, { 0, 0 } }},
+	} },
+	{ formats::SRGGB10_MTISP, {
+		.name = "SRGGB10_MTISP",
+		.format = formats::SRGGB10_MTISP,
+		.v4l2Formats = { V4L2PixelFormat(V4L2_PIX_FMT_MTISP_SRGGB10), },
+		.bitsPerPixel = 10,
+		.colourEncoding = PixelFormatInfo::ColourEncodingRAW,
+		.packed = true,
+		.pixelsPerGroup = 64,
+		.planes = {{ { 80, 1 }, { 0, 0 }, { 0, 0 } }},
+	} },
+	{ formats::NV12_10P_MTISP, {
+		.name = "NV12_10P_MTISP",
+		.format = formats::NV12_10P_MTISP,
+		.v4l2Formats = { V4L2PixelFormat(V4L2_PIX_FMT_MTISP_NV12_10P), },
+		.bitsPerPixel = 15,
+		.colourEncoding = PixelFormatInfo::ColourEncodingYUV,
+		.packed = true,
+		.pixelsPerGroup = 64,
+		.planes = {{ { 80, 1 }, { 80, 2 }, { 0, 0 } }},
+	} },
+	{ formats::NV12_12P_MTISP, {
+		.name = "NV12_12P_MTISP",
+		.format = formats::NV12_12P_MTISP,
+		.v4l2Formats = { V4L2PixelFormat(V4L2_PIX_FMT_MTISP_NV12_12P), },
+		.bitsPerPixel = 12,
+		.colourEncoding = PixelFormatInfo::ColourEncodingYUV,
+		.packed = true,
+		.pixelsPerGroup = 64,
+		.planes = {{ { 96, 1 }, { 96, 2 }, { 0, 0 } }},
+	} },
+	{ formats::MTFP_MTISP, {
+		.name = "MTFP_MTISP",
+		.format = formats::MTFP_MTISP,
+		.v4l2Formats = {
+			V4L2PixelFormat(V4L2_META_FMT_MTISP_PARAMS),
+		},
+		.bitsPerPixel = 0,
+		.colourEncoding = PixelFormatInfo::ColourEncodingYUV,
+		.packed = false,
+		.pixelsPerGroup = 1,
+		.planes = {{ { 1, 1 }, { 0, 0 }, { 0, 0 } }},
+	} },
+	{ formats::MTFA_MTISP, {
+		.name = "MTFA_MTISP",
+		.format = formats::MTFA_MTISP,
+		.v4l2Formats = {
+			V4L2PixelFormat(V4L2_META_FMT_MTISP_3A),
+		},
+		.bitsPerPixel = 0,
+		.colourEncoding = PixelFormatInfo::ColourEncodingYUV,
+		.packed = false,
+		.pixelsPerGroup = 1,
+		.planes = {{ { 1, 1 }, { 0, 0 }, { 0, 0 } }},
+	} },
+	{ formats::MTFF_MTISP, {
+		.name = "MTFF_MTISP",
+		.format = formats::MTFF_MTISP,
+		.v4l2Formats = {
+			V4L2PixelFormat(V4L2_META_FMT_MTISP_AF),
+		},
+		.bitsPerPixel = 0,
+		.colourEncoding = PixelFormatInfo::ColourEncodingYUV,
+		.packed = false,
+		.pixelsPerGroup = 1,
+		.planes = {{ { 1, 1 }, { 0, 0 }, { 0, 0 } }},
+	} },
+	{ formats::MTFD_MTISP, {
+		.name = "MTFD_MTISP",
+		.format = formats::MTFD_MTISP,
+		.v4l2Formats = {
+			V4L2PixelFormat(V4L2_META_FMT_MTISP_DESC),
+		},
+		.bitsPerPixel = 8,
+		.colourEncoding = PixelFormatInfo::ColourEncodingYUV,
+		.packed = false,
+		.pixelsPerGroup = 8,
+		.planes = {{ { 8, 1 }, { 0, 0 }, { 0, 0 } }},
+	} },
+	{ formats::MTFS_MTISP, {
+		.name = "MTFS_MTISP",
+		.format = formats::MTFS_MTISP,
+		.v4l2Formats = {
+			V4L2PixelFormat(V4L2_META_FMT_MTISP_SD),
+		},
+		.bitsPerPixel = 8,
+		.colourEncoding = PixelFormatInfo::ColourEncodingYUV,
+		.packed = false,
+		.pixelsPerGroup = 8,
+		.planes = {{ { 8, 1 }, { 0, 0 }, { 0, 0 } }},
+	} },
+	{ formats::MTFR_MTISP, {
+		.name = "MTFR_MTISP",
+		.format = formats::MTFR_MTISP,
+		.v4l2Formats = {
+			V4L2PixelFormat(V4L2_META_FMT_MTISP_DESCNORM),
+		},
+		.bitsPerPixel = 0,
+		.colourEncoding = PixelFormatInfo::ColourEncodingYUV,
+		.packed = false,
+		.pixelsPerGroup = 1,
+		.planes = {{ { 1, 1 }, { 0, 0 }, { 0, 0 } }},
+	} },
+	{ formats::MTSR_MTISP, {
+		.name = "MTSR_MTISP",
+		.format = formats::MTSR_MTISP,
+		.v4l2Formats = {
+			V4L2PixelFormat(V4L2_META_FMT_MTISP_SDNORM),
+		},
+		.bitsPerPixel = 0,
+		.colourEncoding = PixelFormatInfo::ColourEncodingYUV,
+		.packed = false,
+		.pixelsPerGroup = 1,
+		.planes = {{ { 1, 1 }, { 0, 0 }, { 0, 0 } }},
+	} },
+	{ formats::WARP2P_MTISP, {
+		.name = "WARP2P_MTISP",
+		.format = formats::WARP2P_MTISP,
+		.v4l2Formats = {
+			V4L2PixelFormat(V4L2_PIX_FMT_WARP2P),
+		},
+		.bitsPerPixel = 32,
+		.colourEncoding = PixelFormatInfo::ColourEncodingYUV,
+		.packed = false,
+		.pixelsPerGroup = 2,
+		.planes = {{ { 8, 1 }, { 8, 1 }, { 0, 0 } }},
+	} },
+	{ formats::Y8_MTISP, {
+		.name = "Y8_MTISP",
+		.format = formats::Y8_MTISP,
+		.v4l2Formats = {
+			V4L2PixelFormat(V4L2_PIX_FMT_MTISP_Y8),
+		},
+		.bitsPerPixel = 8,
+		.colourEncoding = PixelFormatInfo::ColourEncodingYUV,
+		.packed = false,
+		.pixelsPerGroup = 1,
+		.planes = {{ { 1, 1 }, { 0, 0 }, { 0, 0 } }},
+	} },
+	{ formats::Y16_MTISP, {
+		.name = "Y16_MTISP",
+		.format = formats::Y16_MTISP,
+		.v4l2Formats = {
+			V4L2PixelFormat(V4L2_PIX_FMT_MTISP_Y16),
+		},
+		.bitsPerPixel = 16,
+		.colourEncoding = PixelFormatInfo::ColourEncodingYUV,
+		.packed = false,
+		.pixelsPerGroup = 1,
+		.planes = {{ { 2, 1 }, { 0, 0 }, { 0, 0 } }},
+	} },
+	{ formats::Y32_MTISP, {
+		.name = "Y32_MTISP",
+		.format = formats::Y32_MTISP,
+		.v4l2Formats = {
+			V4L2PixelFormat(V4L2_PIX_FMT_MTISP_Y32),
+		},
+		.bitsPerPixel = 32,
+		.colourEncoding = PixelFormatInfo::ColourEncodingYUV,
+		.packed = false,
+		.pixelsPerGroup = 1,
+		.planes = {{ { 4, 1 }, { 0, 0 }, { 0, 0 } }},
+	} },
+
 	/* Compressed formats. */
 	{ formats::MJPEG, {
 		.name = "MJPEG",
diff --git a/src/libcamera/formats.yaml b/src/libcamera/formats.yaml
index 2d54d391..8c72d706 100644
--- a/src/libcamera/formats.yaml
+++ b/src/libcamera/formats.yaml
@@ -209,4 +209,42 @@ formats:
   - MONO_PISP_COMP1:
       fourcc: DRM_FORMAT_R16
       mod: PISP_FORMAT_MOD_COMPRESS_MODE1
+
+  - GREY:
+      fourcc: DRM_FORMAT_GREY
+  - SBGGR10_MTISP:
+      fourcc: DRM_FORMAT_MTISP_SBGGR10
+  - SGBRG10_MTISP:
+      fourcc: DRM_FORMAT_MTISP_SGBRG10
+  - SGRBG10_MTISP:
+      fourcc: DRM_FORMAT_MTISP_SGRBG10
+  - SRGGB10_MTISP:
+      fourcc: DRM_FORMAT_MTISP_SRGGB10
+  - NV12_10P_MTISP:
+      fourcc: DRM_FORMAT_MTISP_NV12_10P
+  - NV12_12P_MTISP:
+      fourcc: DRM_FORMAT_MTISP_NV12_12P
+  - MTFP_MTISP:
+      fourcc: DRM_FORMAT_MTISP_PARAMS
+  - MTFA_MTISP:
+      fourcc: DRM_FORMAT_MTISP_3A
+  - MTFF_MTISP:
+      fourcc: DRM_FORMAT_MTISP_AF
+  - MTFD_MTISP:
+      fourcc: DRM_FORMAT_MTISP_DESC
+  - MTFS_MTISP:
+      fourcc: DRM_FORMAT_MTISP_SD
+  - MTFR_MTISP:
+      fourcc: DRM_FORMAT_MTISP_DESC_NORM
+  - MTSR_MTISP:
+      fourcc: DRM_FORMAT_MTISP_SDNORM
+  - WARP2P_MTISP:
+      fourcc: DRM_FORMAT_MTISP_WARP2P
+  - Y8_MTISP:
+      fourcc: DRM_FORMAT_MTISP_Y8
+  - Y16_MTISP:
+      fourcc: DRM_FORMAT_MTISP_Y16
+  - Y32_MTISP:
+      fourcc: DRM_FORMAT_MTISP_Y32
+
 ...
-- 
2.46.0.792.g87dc391469-goog



More information about the libcamera-devel mailing list