ipa: ipu3: Ensure controls exists in before they are queried

Add a validation check for sensor controls validateSensorControls()
before they are queried in IPAIPU3::updateSessionConfiguration().
Fail the IPAIPU3::configure() if the required sensor controls are
not found.

Signed-off-by: Umang Jain <umang.jain@ideasonboard.com>
Reviewed-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
This commit is contained in:
Umang Jain
2022-03-25 15:52:05 +05:30
parent 36f0cd57cb
commit 60c3d32a89

View File

@@ -155,6 +155,7 @@ private:
void parseStatistics(unsigned int frame,
int64_t frameTimestamp,
const ipu3_uapi_stats_3a *stats);
bool validateSensorControls();
void setControls(unsigned int frame);
void calculateBdsGrid(const Size &bdsOutputSize);
@@ -268,6 +269,28 @@ void IPAIPU3::updateControls(const IPACameraSensorInfo &sensorInfo,
*ipaControls = ControlInfoMap(std::move(controls), controls::controls);
}
/**
* \brief Validate that the sensor controls mandatory for the IPA exists
*/
bool IPAIPU3::validateSensorControls()
{
static const uint32_t ctrls[] = {
V4L2_CID_ANALOGUE_GAIN,
V4L2_CID_EXPOSURE,
V4L2_CID_VBLANK,
};
for (auto c : ctrls) {
if (sensorCtrls_.find(c) == sensorCtrls_.end()) {
LOG(IPAIPU3, Error) << "Unable to find sensor control "
<< utils::hex(c);
return false;
}
}
return true;
}
/**
* \brief Initialize the IPA module and its controls
*
@@ -433,6 +456,11 @@ int IPAIPU3::configure(const IPAConfigInfo &configInfo,
/* Clean frameContext at each reconfiguration. */
context_.frameContext = {};
if (!validateSensorControls()) {
LOG(IPAIPU3, Error) << "Sensor control validation failed.";
return -EINVAL;
}
/* Update the camera controls using the new sensor settings. */
updateControls(sensorInfo_, sensorCtrls_, ipaControls);