[libcamera-devel,v3,15/17] ipa: ipu3: Validate controls before assigning them
diff mbox series

Message ID 20220818094410.1671-16-jacopo@jmondi.org
State New
Headers show
Series
  • libcamera: Align IPU3 and RKISP1 interfaces
Related show

Commit Message

Jacopo Mondi Aug. 18, 2022, 9:44 a.m. UTC
The IPU3 IPA configure() implementation assigns to the class member
sensorCtrls_ the list of controls before having validated it.

Rework the flow of operations to first validate the controls and then
copy them in the class member variables.

Signed-off-by: Jacopo Mondi <jacopo@jmondi.org>
---
 src/ipa/ipu3/ipu3.cpp | 25 +++++++------------------
 1 file changed, 7 insertions(+), 18 deletions(-)

Patch
diff mbox series

diff --git a/src/ipa/ipu3/ipu3.cpp b/src/ipa/ipu3/ipu3.cpp
index 072d6cc28f33..dd9d21e4df52 100644
--- a/src/ipa/ipu3/ipu3.cpp
+++ b/src/ipa/ipu3/ipu3.cpp
@@ -161,7 +161,7 @@  protected:
 	std::string logPrefix() const override;
 
 private:
-	bool validateSensorControls();
+	bool validateSensorControls(const ControlInfoMap &sensorCtrls);
 	void updateControls(const IPACameraSensorInfo &sensorInfo,
 			    const ControlInfoMap &sensorControls,
 			    ControlInfoMap *ipaControls);
@@ -343,7 +343,7 @@  void IPAIPU3::calculateBdsGrid(const Size &bdsOutputSize)
 /**
  * \brief Validate that the sensor controls mandatory for the IPA exists
  */
-bool IPAIPU3::validateSensorControls()
+bool IPAIPU3::validateSensorControls(const ControlInfoMap &sensorCtrls)
 {
 	static const uint32_t ctrls[] = {
 		V4L2_CID_ANALOGUE_GAIN,
@@ -352,7 +352,7 @@  bool IPAIPU3::validateSensorControls()
 	};
 
 	for (auto c : ctrls) {
-		if (sensorCtrls_.find(c) == sensorCtrls_.end()) {
+		if (sensorCtrls.find(c) == sensorCtrls.end()) {
 			LOG(IPAIPU3, Error) << "Unable to find sensor control "
 					    << utils::hex(c);
 			return false;
@@ -482,28 +482,17 @@  void IPAIPU3::updateSessionConfiguration(const IPAConfigInfo &configInfo)
 int IPAIPU3::configure(const IPAConfigInfo &configInfo,
 		       ControlInfoMap *ipaControls)
 {
-	if (configInfo.sensorControls.empty()) {
-		LOG(IPAIPU3, Error) << "No sensor controls provided";
-		return -ENODATA;
+	if (!validateSensorControls(configInfo.sensorControls)) {
+		LOG(IPAIPU3, Error) << "Sensor control validation failed.";
+		return -EINVAL;
 	}
 
+	sensorCtrls_ = configInfo.sensorControls;
 	sensorInfo_ = configInfo.sensorInfo;
-
 	lensCtrls_ = configInfo.lensControls;
 
-	/*
-	 * Compute the sensor V4L2 controls to be used by the algorithms and
-	 * to be set on the sensor.
-	 */
-	sensorCtrls_ = configInfo.sensorControls;
-
 	calculateBdsGrid(configInfo.bdsOutputSize);
 
-	if (!validateSensorControls()) {
-		LOG(IPAIPU3, Error) << "Sensor control validation failed.";
-		return -EINVAL;
-	}
-
 	/* Update the camera controls using the new sensor settings. */
 	updateControls(sensorInfo_, sensorCtrls_, ipaControls);