[v6,04/12] libcamera: formats: Add a helper to check for a raw pixel info
diff mbox series

Message ID 20250526101536.29222-5-mzamazal@redhat.com
State New
Headers show
Series
  • Enable raw streams with software ISP
Related show

Commit Message

Milan Zamazal May 26, 2025, 10:15 a.m. UTC
There is another common pattern checking for raw colour encoding,
present in multiple places:

  pixelFormatInfo.colourEncoding == PixelFormatInfo::ColourEncodingRAW

Let's extract it into a helper too.

Signed-off-by: Milan Zamazal <mzamazal@redhat.com>
---
 include/libcamera/internal/formats.h          | 1 +
 src/libcamera/formats.cpp                     | 9 +++++++--
 src/libcamera/pipeline/imx8-isi/imx8-isi.cpp  | 7 +++----
 src/libcamera/pipeline/ipu3/ipu3.cpp          | 4 ++--
 src/libcamera/pipeline/rkisp1/rkisp1.cpp      | 4 ++--
 src/libcamera/pipeline/rkisp1/rkisp1_path.cpp | 7 +++----
 6 files changed, 18 insertions(+), 14 deletions(-)

Patch
diff mbox series

diff --git a/include/libcamera/internal/formats.h b/include/libcamera/internal/formats.h
index bc4417d0..dd81a888 100644
--- a/include/libcamera/internal/formats.h
+++ b/include/libcamera/internal/formats.h
@@ -32,6 +32,7 @@  public:
 	};
 
 	bool isValid() const { return format.isValid(); }
+	bool isRaw() const { return colourEncoding == ColourEncodingRAW; }
 
 	static const PixelFormatInfo &info(const PixelFormat &format);
 	static const PixelFormatInfo &info(const V4L2PixelFormat &format);
diff --git a/src/libcamera/formats.cpp b/src/libcamera/formats.cpp
index c6e0a262..02888acf 100644
--- a/src/libcamera/formats.cpp
+++ b/src/libcamera/formats.cpp
@@ -993,6 +993,12 @@  const std::map<PixelFormat, PixelFormatInfo> pixelFormatInfo{
  * \return True if the pixel format info is valid, false otherwise
  */
 
+/**
+ * \fn bool PixelFormatInfo::isRaw() const
+ * \brief Check if the colour encoding is raw
+ * \return True if the colour encoding is raw, false otherwise
+ */
+
 /**
  * \brief Retrieve information about a pixel format
  * \param[in] format The pixel format
@@ -1222,8 +1228,7 @@  unsigned int PixelFormatInfo::numPlanes() const
  */
 bool isFormatRaw(const libcamera::PixelFormat &pixFmt)
 {
-	return libcamera::PixelFormatInfo::info(pixFmt).colourEncoding ==
-	       libcamera::PixelFormatInfo::ColourEncodingRAW;
+	return libcamera::PixelFormatInfo::info(pixFmt).isRaw();
 }
 
 } /* namespace libcamera */
diff --git a/src/libcamera/pipeline/imx8-isi/imx8-isi.cpp b/src/libcamera/pipeline/imx8-isi/imx8-isi.cpp
index ad36ebea..5feaaa65 100644
--- a/src/libcamera/pipeline/imx8-isi/imx8-isi.cpp
+++ b/src/libcamera/pipeline/imx8-isi/imx8-isi.cpp
@@ -452,9 +452,8 @@  ISICameraConfiguration::validateYuv(std::set<Stream *> &availableStreams,
 
 		/* If the stream is RAW or not supported default it to YUYV. */
 		const PixelFormatInfo &cfgInfo = PixelFormatInfo::info(cfg.pixelFormat);
-		if (cfgInfo.colourEncoding == PixelFormatInfo::ColourEncodingRAW ||
-		    !formatsMap_.count(cfg.pixelFormat)) {
 
+		if (cfgInfo.isRaw() || !formatsMap_.count(cfg.pixelFormat)) {
 			LOG(ISI, Debug) << "Stream " << i << " format: "
 					<< cfg.pixelFormat << " adjusted to YUYV";
 
@@ -523,7 +522,7 @@  CameraConfiguration::Status ISICameraConfiguration::validate()
 	const PixelFormatInfo info = PixelFormatInfo::info(config_[0].pixelFormat);
 
 	Status validationStatus;
-	if (info.colourEncoding == PixelFormatInfo::ColourEncodingRAW)
+	if (info.isRaw())
 		validationStatus = validateRaw(availableStreams, maxResolution);
 	else
 		validationStatus = validateYuv(availableStreams, maxResolution);
@@ -651,7 +650,7 @@  StreamConfiguration PipelineHandlerISI::generateYUVConfiguration(Camera *camera,
 
 	for (const auto &[pixFmt, pipeFmt] : ISICameraConfiguration::formatsMap_) {
 		const PixelFormatInfo &info = PixelFormatInfo::info(pixFmt);
-		if (info.colourEncoding == PixelFormatInfo::ColourEncodingRAW)
+		if (info.isRaw())
 			continue;
 
 		streamFormats[pixFmt] = { { kMinISISize, sensorSize } };
diff --git a/src/libcamera/pipeline/ipu3/ipu3.cpp b/src/libcamera/pipeline/ipu3/ipu3.cpp
index e31e3879..6d10ed7f 100644
--- a/src/libcamera/pipeline/ipu3/ipu3.cpp
+++ b/src/libcamera/pipeline/ipu3/ipu3.cpp
@@ -218,7 +218,7 @@  CameraConfiguration::Status IPU3CameraConfiguration::validate()
 	for (const StreamConfiguration &cfg : config_) {
 		const PixelFormatInfo &info = PixelFormatInfo::info(cfg.pixelFormat);
 
-		if (info.colourEncoding == PixelFormatInfo::ColourEncodingRAW) {
+		if (info.isRaw()) {
 			rawCount++;
 			rawSize = std::max(rawSize, cfg.size);
 		} else {
@@ -286,7 +286,7 @@  CameraConfiguration::Status IPU3CameraConfiguration::validate()
 
 		LOG(IPU3, Debug) << "Validating stream: " << config_[i].toString();
 
-		if (info.colourEncoding == PixelFormatInfo::ColourEncodingRAW) {
+		if (info.isRaw()) {
 			/* Initialize the RAW stream with the CIO2 configuration. */
 			cfg->size = cio2Configuration_.size;
 			cfg->pixelFormat = cio2Configuration_.pixelFormat;
diff --git a/src/libcamera/pipeline/rkisp1/rkisp1.cpp b/src/libcamera/pipeline/rkisp1/rkisp1.cpp
index 50c83fb7..4c6be9b7 100644
--- a/src/libcamera/pipeline/rkisp1/rkisp1.cpp
+++ b/src/libcamera/pipeline/rkisp1/rkisp1.cpp
@@ -651,7 +651,7 @@  CameraConfiguration::Status RkISP1CameraConfiguration::validate()
 
 	for (const StreamConfiguration &cfg : config_) {
 		const PixelFormatInfo &info = PixelFormatInfo::info(cfg.pixelFormat);
-		if (info.colourEncoding == PixelFormatInfo::ColourEncodingRAW)
+		if (info.isRaw())
 			rawFormat = cfg.pixelFormat;
 
 		maxSize = std::max(maxSize, cfg.size);
@@ -842,7 +842,7 @@  int PipelineHandlerRkISP1::configure(Camera *camera, CameraConfiguration *c)
 	Rectangle outputCrop = inputCrop;
 	const PixelFormat &streamFormat = config->at(0).pixelFormat;
 	const PixelFormatInfo &info = PixelFormatInfo::info(streamFormat);
-	isRaw_ = info.colourEncoding == PixelFormatInfo::ColourEncodingRAW;
+	isRaw_ = info.isRaw();
 	useDewarper_ = dewarper_ && !isRaw_;
 
 	/* YUYV8_2X8 is required on the ISP source path pad for YUV output. */
diff --git a/src/libcamera/pipeline/rkisp1/rkisp1_path.cpp b/src/libcamera/pipeline/rkisp1/rkisp1_path.cpp
index 64018dc5..3e437b0c 100644
--- a/src/libcamera/pipeline/rkisp1/rkisp1_path.cpp
+++ b/src/libcamera/pipeline/rkisp1/rkisp1_path.cpp
@@ -188,7 +188,7 @@  RkISP1Path::generateConfiguration(const CameraSensor *sensor, const Size &size,
 		const PixelFormatInfo &info = PixelFormatInfo::info(format);
 
 		/* Populate stream formats for non-RAW configurations. */
-		if (info.colourEncoding != PixelFormatInfo::ColourEncodingRAW) {
+		if (!info.isRaw()) {
 			if (role == StreamRole::Raw)
 				continue;
 
@@ -279,7 +279,7 @@  RkISP1Path::validate(const CameraSensor *sensor,
 	for (const auto &format : streamFormats_) {
 		const PixelFormatInfo &info = PixelFormatInfo::info(format);
 
-		if (info.colourEncoding == PixelFormatInfo::ColourEncodingRAW) {
+		if (info.isRaw()) {
 			/* Skip raw formats not supported by the sensor. */
 			uint32_t mbusCode = formatToMediaBus.at(format);
 			if (std::find(mbusCodes.begin(), mbusCodes.end(), mbusCode) ==
@@ -310,8 +310,7 @@  RkISP1Path::validate(const CameraSensor *sensor,
 	if (sensorConfig && !rawFormat.isValid())
 		return CameraConfiguration::Invalid;
 
-	bool isRaw = PixelFormatInfo::info(cfg->pixelFormat).colourEncoding ==
-		     PixelFormatInfo::ColourEncodingRAW;
+	bool isRaw = PixelFormatInfo::info(cfg->pixelFormat).isRaw();
 
 	/*
 	 * If no raw format supported by the sensor has been found, use a