[libcamera-devel] [PATCH v1 1/2] pipeline: ipa: rpi: Flag if the sensor is a mono variant

Naushir Patuck naush at raspberrypi.com
Wed May 31 16:39:45 CEST 2023


Add a flag to the ipa->init() interface to indicate a mono sensor
variant. This flag will be used in a future commit to handle controls
that are invalid for mono sensors.

Signed-off-by: Naushir Patuck <naush at raspberrypi.com>
---
 include/libcamera/ipa/raspberrypi.mojom             | 1 +
 src/ipa/rpi/common/ipa_base.cpp                     | 1 +
 src/ipa/rpi/common/ipa_base.h                       | 1 +
 src/libcamera/pipeline/rpi/common/pipeline_base.cpp | 4 +++-
 4 files changed, 6 insertions(+), 1 deletion(-)

diff --git a/include/libcamera/ipa/raspberrypi.mojom b/include/libcamera/ipa/raspberrypi.mojom
index ba786e647ca1..d35289ee6229 100644
--- a/include/libcamera/ipa/raspberrypi.mojom
+++ b/include/libcamera/ipa/raspberrypi.mojom
@@ -21,6 +21,7 @@ struct SensorConfig {
 
 struct InitParams {
 	bool lensPresent;
+	bool monoSensor;
 };
 
 struct InitResult {
diff --git a/src/ipa/rpi/common/ipa_base.cpp b/src/ipa/rpi/common/ipa_base.cpp
index db7a0eb3a1ca..150fe433d0df 100644
--- a/src/ipa/rpi/common/ipa_base.cpp
+++ b/src/ipa/rpi/common/ipa_base.cpp
@@ -139,6 +139,7 @@ int32_t IpaBase::init(const IPASettings &settings, const InitParams &params, Ini
 	}
 
 	lensPresent_ = params.lensPresent;
+	monoSensor_ = params.monoSensor;
 
 	controller_.initialise();
 
diff --git a/src/ipa/rpi/common/ipa_base.h b/src/ipa/rpi/common/ipa_base.h
index 6f9c46bb16b1..39d00760d012 100644
--- a/src/ipa/rpi/common/ipa_base.h
+++ b/src/ipa/rpi/common/ipa_base.h
@@ -87,6 +87,7 @@ private:
 	std::map<unsigned int, MappedFrameBuffer> buffers_;
 
 	bool lensPresent_;
+	bool monoSensor_;
 	ControlList libcameraMetadata_;
 
 	std::array<RPiController::Metadata, numMetadataContexts> rpiMetadata_;
diff --git a/src/libcamera/pipeline/rpi/common/pipeline_base.cpp b/src/libcamera/pipeline/rpi/common/pipeline_base.cpp
index 3bb5ec531e4f..12698056cda1 100644
--- a/src/libcamera/pipeline/rpi/common/pipeline_base.cpp
+++ b/src/libcamera/pipeline/rpi/common/pipeline_base.cpp
@@ -1131,6 +1131,7 @@ int CameraData::loadPipelineConfiguration()
 int CameraData::loadIPA(ipa::RPi::InitResult *result)
 {
 	ipa_ = IPAManager::createIPA<ipa::RPi::IPAProxyRPi>(pipe(), 1, 1);
+	bool monoSensor = isMonoSensor(sensor_);
 
 	if (!ipa_)
 		return -ENOENT;
@@ -1143,7 +1144,7 @@ int CameraData::loadIPA(ipa::RPi::InitResult *result)
 	char const *configFromEnv = utils::secure_getenv("LIBCAMERA_RPI_TUNING_FILE");
 	if (!configFromEnv || *configFromEnv == '\0') {
 		std::string model = sensor_->model();
-		if (isMonoSensor(sensor_))
+		if (monoSensor)
 			model += "_mono";
 		configurationFile = ipa_->configurationFile(model + ".json");
 	} else {
@@ -1154,6 +1155,7 @@ int CameraData::loadIPA(ipa::RPi::InitResult *result)
 	ipa::RPi::InitParams params;
 
 	params.lensPresent = !!sensor_->focusLens();
+	params.monoSensor = monoSensor;
 	int ret = platformInitIpa(params);
 	if (ret)
 		return ret;
-- 
2.34.1



More information about the libcamera-devel mailing list