diff options
author | David Plowman <david.plowman@raspberrypi.com> | 2023-10-12 14:59:31 +0100 |
---|---|---|
committer | Kieran Bingham <kieran.bingham@ideasonboard.com> | 2023-10-24 14:11:16 +0100 |
commit | edb48a1337114e0b92caa54598397ce69c63a528 (patch) | |
tree | fbfbb0f7f945781ea8a6802c9236fc757023a426 /src/ipa/rpi | |
parent | 0923d50b15c6e5125a4b37f399a7a040062b058d (diff) |
ipa: rpi: agc: Allow AGC channels to avoid using "fast desaturation"
"Fast desaturation" is a technique that can help the AGC algorithm to
desaturate images more quickly when they are very
over-exposed. However, it uses digital gain to do this which can
confuse our HDR techniques. Therefore make it optional.
Signed-off-by: David Plowman <david.plowman@raspberrypi.com>
Signed-off-by: Naushir Patuck <naush@raspberrypi.com>
Reviewed-by: Naushir Patuck <naush@raspberrypi.com>
Signed-off-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
Diffstat (limited to 'src/ipa/rpi')
-rw-r--r-- | src/ipa/rpi/controller/rpi/agc_channel.cpp | 8 | ||||
-rw-r--r-- | src/ipa/rpi/controller/rpi/agc_channel.h | 1 |
2 files changed, 7 insertions, 2 deletions
diff --git a/src/ipa/rpi/controller/rpi/agc_channel.cpp b/src/ipa/rpi/controller/rpi/agc_channel.cpp index 1e7eae06..3efb6482 100644 --- a/src/ipa/rpi/controller/rpi/agc_channel.cpp +++ b/src/ipa/rpi/controller/rpi/agc_channel.cpp @@ -253,6 +253,8 @@ int AgcConfig::read(const libcamera::YamlObject ¶ms) stableRegion = params["stable_region"].get<double>(0.02); + desaturate = params["desaturate"].get<int>(1); + return 0; } @@ -860,8 +862,10 @@ bool AgcChannel::applyDigitalGain(double gain, double targetY, bool channelBound * quickly (and we then approach the correct value more quickly from * below). */ - bool desaturate = !channelBound && - targetY > config_.fastReduceThreshold && gain < sqrt(targetY); + bool desaturate = false; + if (config_.desaturate) + desaturate = !channelBound && + targetY > config_.fastReduceThreshold && gain < sqrt(targetY); if (desaturate) dg /= config_.fastReduceThreshold; LOG(RPiAgc, Debug) << "Digital gain " << dg << " desaturate? " << desaturate; diff --git a/src/ipa/rpi/controller/rpi/agc_channel.h b/src/ipa/rpi/controller/rpi/agc_channel.h index c1808422..4cf7233e 100644 --- a/src/ipa/rpi/controller/rpi/agc_channel.h +++ b/src/ipa/rpi/controller/rpi/agc_channel.h @@ -76,6 +76,7 @@ struct AgcConfig { libcamera::utils::Duration defaultExposureTime; double defaultAnalogueGain; double stableRegion; + bool desaturate; }; class AgcChannel |