ipa: rpi: agc: Do not switch to a default if a mode is unavailable

In commit 0ee9339331, a default metering/exposure/constraint mode is
used if a control sets a mode that is not listed in the camera tuning
file.

Setting a default mode may be undesirable in these cases, so instead
keep the agc mode unchanged. This also matches the behaviour for other
IPA controls where no changes are made in error conditions.

Fixes: 0ee9339331 ("ipa: rpi: agc: Gracefully handle missing agc modes")
Signed-off-by: Naushir Patuck <naush@raspberrypi.com>
Reviewed-by: David Plowman <david.plowman@raspberrypi.com>
This commit is contained in:
Naushir Patuck 2023-06-12 14:06:08 +01:00
parent 9c666075f3
commit 618b9aaa17

View file

@ -541,40 +541,33 @@ void Agc::housekeepConfig()
if (meteringModeName_ != status_.meteringMode) { if (meteringModeName_ != status_.meteringMode) {
auto it = config_.meteringModes.find(meteringModeName_); auto it = config_.meteringModes.find(meteringModeName_);
if (it == config_.meteringModes.end()) { if (it == config_.meteringModes.end()) {
LOG(RPiAgc, Warning) << "No metering mode " << meteringModeName_ LOG(RPiAgc, Warning) << "No metering mode " << meteringModeName_;
<< ", defaulting to " << config_.defaultMeteringMode; meteringModeName_ = status_.meteringMode;
meteringModeName_ = config_.defaultMeteringMode;
meteringMode_ = &config_.meteringModes[meteringModeName_];
} else { } else {
meteringMode_ = &it->second; meteringMode_ = &it->second;
}
status_.meteringMode = meteringModeName_; status_.meteringMode = meteringModeName_;
} }
}
if (exposureModeName_ != status_.exposureMode) { if (exposureModeName_ != status_.exposureMode) {
auto it = config_.exposureModes.find(exposureModeName_); auto it = config_.exposureModes.find(exposureModeName_);
if (it == config_.exposureModes.end()) { if (it == config_.exposureModes.end()) {
LOG(RPiAgc, Warning) << "No exposure profile " << exposureModeName_ LOG(RPiAgc, Warning) << "No exposure profile " << exposureModeName_;
<< ", defaulting to " << config_.defaultExposureMode; exposureModeName_ = status_.exposureMode;
exposureModeName_ = config_.defaultExposureMode;
exposureMode_ = &config_.exposureModes[exposureModeName_];
} else { } else {
exposureMode_ = &it->second; exposureMode_ = &it->second;
}
status_.exposureMode = exposureModeName_; status_.exposureMode = exposureModeName_;
} }
}
if (constraintModeName_ != status_.constraintMode) { if (constraintModeName_ != status_.constraintMode) {
auto it = auto it = config_.constraintModes.find(constraintModeName_);
config_.constraintModes.find(constraintModeName_);
if (it == config_.constraintModes.end()) { if (it == config_.constraintModes.end()) {
LOG(RPiAgc, Warning) << "No constraint list " << constraintModeName_ LOG(RPiAgc, Warning) << "No constraint list " << constraintModeName_;
<< ", defaulting to " << config_.defaultConstraintMode; constraintModeName_ = status_.constraintMode;
constraintModeName_ = config_.defaultConstraintMode;
constraintMode_ = &config_.constraintModes[constraintModeName_];
} else { } else {
constraintMode_ = &it->second; constraintMode_ = &it->second;
}
status_.constraintMode = constraintModeName_; status_.constraintMode = constraintModeName_;
} }
}
LOG(RPiAgc, Debug) << "exposureMode " LOG(RPiAgc, Debug) << "exposureMode "
<< exposureModeName_ << " constraintMode " << exposureModeName_ << " constraintMode "
<< constraintModeName_ << " meteringMode " << constraintModeName_ << " meteringMode "