[libcamera-devel] [PATCH v2 01/10] ipa: raspberrypi Store the target string in the controller

Naushir Patuck naush at raspberrypi.com
Mon Mar 27 14:20:21 CEST 2023


The target string may be used by algorithms to determine the running
hardware target.

Store the target string provided by the camera tuning files in the
controller state. Add a getTarget() member function to retrieve this
string.

Validate the correct hardware target ("bcm2835") during the IPA
initialisation phase.

Signed-off-by: Naushir Patuck <naush at raspberrypi.com>
Reviewed-by: Jacopo Mondi <jacopo.mondi at ideasonboard.com>
---
 src/ipa/raspberrypi/controller/algorithm.h    | 4 ++++
 src/ipa/raspberrypi/controller/controller.cpp | 6 ++++++
 src/ipa/raspberrypi/controller/controller.h   | 4 ++++
 src/ipa/raspberrypi/raspberrypi.cpp           | 8 ++++++++
 4 files changed, 22 insertions(+)

diff --git a/src/ipa/raspberrypi/controller/algorithm.h b/src/ipa/raspberrypi/controller/algorithm.h
index 4f3275987305..7c22fbe4945c 100644
--- a/src/ipa/raspberrypi/controller/algorithm.h
+++ b/src/ipa/raspberrypi/controller/algorithm.h
@@ -41,6 +41,10 @@ public:
 	{
 		return controller_->getGlobalMetadata();
 	}
+	const std::string &getTarget() const
+	{
+		return controller_->getTarget();
+	}
 
 private:
 	Controller *controller_;
diff --git a/src/ipa/raspberrypi/controller/controller.cpp b/src/ipa/raspberrypi/controller/controller.cpp
index e91567852d00..a6250ee140b0 100644
--- a/src/ipa/raspberrypi/controller/controller.cpp
+++ b/src/ipa/raspberrypi/controller/controller.cpp
@@ -38,6 +38,7 @@ int Controller::read(char const *filename)
 
 	std::unique_ptr<YamlObject> root = YamlParser::parse(file);
 	double version = (*root)["version"].get<double>(1.0);
+	target_ = (*root)["target"].get<std::string>("bcm2835");
 
 	if (version < 2.0) {
 		LOG(RPiController, Warning)
@@ -142,3 +143,8 @@ Algorithm *Controller::getAlgorithm(std::string const &name) const
 	}
 	return nullptr;
 }
+
+const std::string &Controller::getTarget() const
+{
+	return target_;
+}
diff --git a/src/ipa/raspberrypi/controller/controller.h b/src/ipa/raspberrypi/controller/controller.h
index e6c950c3a509..24e02903d438 100644
--- a/src/ipa/raspberrypi/controller/controller.h
+++ b/src/ipa/raspberrypi/controller/controller.h
@@ -46,6 +46,7 @@ public:
 	void process(StatisticsPtr stats, Metadata *imageMetadata);
 	Metadata &getGlobalMetadata();
 	Algorithm *getAlgorithm(std::string const &name) const;
+	const std::string &getTarget() const;
 
 protected:
 	int createAlgorithm(const std::string &name, const libcamera::YamlObject &params);
@@ -53,6 +54,9 @@ protected:
 	Metadata globalMetadata_;
 	std::vector<AlgorithmPtr> algorithms_;
 	bool switchModeCalled_;
+
+private:
+	std::string target_;
 };
 
 } /* namespace RPiController */
diff --git a/src/ipa/raspberrypi/raspberrypi.cpp b/src/ipa/raspberrypi/raspberrypi.cpp
index 1375795568e2..86359538cf67 100644
--- a/src/ipa/raspberrypi/raspberrypi.cpp
+++ b/src/ipa/raspberrypi/raspberrypi.cpp
@@ -269,6 +269,14 @@ int IPARPi::init(const IPASettings &settings, bool lensPresent, IPAInitResult *r
 		return ret;
 	}
 
+	const std::string &target = controller_.getTarget();
+	if (target != "bcm2835") {
+		LOG(IPARPI, Error)
+			<< "Tuning data file target returned \"" << target << "\""
+			<< ", expected \"bcm2835\"";
+		return -EINVAL;
+	}
+
 	lensPresent_ = lensPresent;
 
 	controller_.initialise();
-- 
2.34.1



More information about the libcamera-devel mailing list