[libcamera-devel] [PATCH v2] libcamera: stream_option: use format name to set cam/qcam format

Kaaira Gupta kgupta at es.iitr.ac.in
Mon Jun 22 16:42:57 CEST 2020


Replace hex input for pixelformats with their format names, for input in
cam and qcam.

Signed-off-by: Kaaira Gupta <kgupta at es.iitr.ac.in>
---

Changes since v1:
	-use format names, according to formats namespace, instead of
	FourCC

 src/cam/stream_options.cpp | 52 +++++++++++++++++++++++++++++++++++---
 1 file changed, 49 insertions(+), 3 deletions(-)

diff --git a/src/cam/stream_options.cpp b/src/cam/stream_options.cpp
index bd12c8f..9fc428a 100644
--- a/src/cam/stream_options.cpp
+++ b/src/cam/stream_options.cpp
@@ -6,6 +6,8 @@
  */
 #include "stream_options.h"
 
+#include <libcamera/formats.h>
+
 #include <iostream>
 
 using namespace libcamera;
@@ -19,7 +21,7 @@ StreamKeyValueParser::StreamKeyValueParser()
 		  ArgumentRequired);
 	addOption("height", OptionInteger, "Height in pixels",
 		  ArgumentRequired);
-	addOption("pixelformat", OptionInteger, "Pixel format",
+	addOption("pixelformat", OptionString, "Pixel format name",
 		  ArgumentRequired);
 }
 
@@ -96,8 +98,52 @@ int StreamKeyValueParser::updateConfiguration(CameraConfiguration *config,
 		}
 
 		/* \todo Translate 4CC string to pixelformat with modifier. */
-		if (opts.isSet("pixelformat"))
-			cfg.pixelFormat = PixelFormat(opts["pixelformat"]);
+		if (opts.isSet("pixelformat")) {
+			std::map<std::string, PixelFormat> pixelFormatNames{
+				{ "BGR888", formats::BGR888 },
+				{ "RGB888", formats::RGB888 },
+				{ "ABGR8888", formats::ABGR8888 },
+				{ "ARGB8888", formats::ARGB8888 },
+				{ "BGRA8888", formats::BGRA8888 },
+				{ "RGBA8888", formats::RGBA8888 },
+				{ "YUYV", formats::YUYV },
+				{ "YVYU", formats::YVYU },
+				{ "UYVY", formats::UYVY },
+				{ "VYUY", formats::VYUY },
+				{ "NV16", formats::NV16 },
+				{ "NV61", formats::NV61 },
+				{ "NV12", formats::NV12 },
+				{ "NV21", formats::NV21 },
+				{ "YUV420", formats::YUV420 },
+				{ "YUV422", formats::YUV422 },
+				{ "R8", formats::R8 },
+				{ "SBGGR8", formats::SBGGR8 },
+				{ "SGBRG8", formats::SGBRG8 },
+				{ "SGRBG8", formats::SGRBG8 },
+				{ "SRGGB8", formats::SRGGB8 },
+				{ "SBGGR10", formats::SBGGR10 },
+				{ "SGBRG10", formats::SGBRG10 },
+				{ "SGRBG10", formats::SGRBG10 },
+				{ "SRGGB10", formats::SRGGB10 },
+				{ "SBGGR10_CSI2P", formats::SBGGR10_CSI2P },
+				{ "SGBRG10_CSI2P", formats::SGBRG10_CSI2P },
+				{ "SGRBG10_CSI2P", formats::SGRBG10_CSI2P },
+				{ "SRGGB10_CSI2P", formats::SRGGB10_CSI2P },
+				{ "SBGGR12", formats::SBGGR12 },
+				{ "SGBRG12", formats::SGBRG12 },
+				{ "SGRBG12", formats::SGRBG12 },
+				{ "SRGGB12", formats::SRGGB12 },
+				{ "SBGGR12_CSI2P", formats::SBGGR12_CSI2P },
+				{ "SGBRG12_CSI2P", formats::SGBRG12_CSI2P },
+				{ "SGRBG12_CSI2P", formats::SGRBG12_CSI2P },
+				{ "SRGGB12_CSI2P", formats::SRGGB12_CSI2P },
+				{ "MJPEG", formats::MJPEG },
+			};
+
+			std::map<std::string, PixelFormat>::iterator it;
+			it = pixelFormatNames.find(opts["pixelformat"]);
+			cfg.pixelFormat = it->second;
+		}
 	}
 
 	return 0;
-- 
2.17.1



More information about the libcamera-devel mailing list