ipa: rpi: agc: Gracefully handle missing agc modes
If a metering/exposure/constraint mode is not listed in the sensor tuning file, and a control for the missing mode is set on the agc, we terminate the application with a fatal log message. Instead of this fatal termination, log a warning message and switch to the appropriate default mode so that the application continues running. Bug: https://github.com/raspberrypi/libcamera/issues/59 Bug: https://github.com/ayufan/camera-streamer/issues/67 Signed-off-by: Naushir Patuck <naush@raspberrypi.com> Reviewed-by: Kieran Bingham <kieran.bingham@ideasonboard.com> Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com> Signed-off-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
This commit is contained in:
parent
5242b78c0b
commit
0ee9339331
1 changed files with 24 additions and 9 deletions
|
@ -540,24 +540,39 @@ void Agc::housekeepConfig()
|
|||
*/
|
||||
if (meteringModeName_ != status_.meteringMode) {
|
||||
auto it = config_.meteringModes.find(meteringModeName_);
|
||||
if (it == config_.meteringModes.end())
|
||||
LOG(RPiAgc, Fatal) << "No metering mode " << meteringModeName_;
|
||||
meteringMode_ = &it->second;
|
||||
if (it == config_.meteringModes.end()) {
|
||||
LOG(RPiAgc, Warning) << "No metering mode " << meteringModeName_
|
||||
<< ", defaulting to " << config_.defaultMeteringMode;
|
||||
meteringModeName_ = config_.defaultMeteringMode;
|
||||
meteringMode_ = &config_.meteringModes[meteringModeName_];
|
||||
} else {
|
||||
meteringMode_ = &it->second;
|
||||
}
|
||||
status_.meteringMode = meteringModeName_;
|
||||
}
|
||||
if (exposureModeName_ != status_.exposureMode) {
|
||||
auto it = config_.exposureModes.find(exposureModeName_);
|
||||
if (it == config_.exposureModes.end())
|
||||
LOG(RPiAgc, Fatal) << "No exposure profile " << exposureModeName_;
|
||||
exposureMode_ = &it->second;
|
||||
if (it == config_.exposureModes.end()) {
|
||||
LOG(RPiAgc, Warning) << "No exposure profile " << exposureModeName_
|
||||
<< ", defaulting to " << config_.defaultExposureMode;
|
||||
exposureModeName_ = config_.defaultExposureMode;
|
||||
exposureMode_ = &config_.exposureModes[exposureModeName_];
|
||||
} else {
|
||||
exposureMode_ = &it->second;
|
||||
}
|
||||
status_.exposureMode = exposureModeName_;
|
||||
}
|
||||
if (constraintModeName_ != status_.constraintMode) {
|
||||
auto it =
|
||||
config_.constraintModes.find(constraintModeName_);
|
||||
if (it == config_.constraintModes.end())
|
||||
LOG(RPiAgc, Fatal) << "No constraint list " << constraintModeName_;
|
||||
constraintMode_ = &it->second;
|
||||
if (it == config_.constraintModes.end()) {
|
||||
LOG(RPiAgc, Warning) << "No constraint list " << constraintModeName_
|
||||
<< ", defaulting to " << config_.defaultConstraintMode;
|
||||
constraintModeName_ = config_.defaultConstraintMode;
|
||||
constraintMode_ = &config_.constraintModes[constraintModeName_];
|
||||
} else {
|
||||
constraintMode_ = &it->second;
|
||||
}
|
||||
status_.constraintMode = constraintModeName_;
|
||||
}
|
||||
LOG(RPiAgc, Debug) << "exposureMode "
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue