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:
@@ -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);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user