From edb48a1337114e0b92caa54598397ce69c63a528 Mon Sep 17 00:00:00 2001 From: David Plowman Date: Thu, 12 Oct 2023 14:59:31 +0100 Subject: 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 Signed-off-by: Naushir Patuck Reviewed-by: Naushir Patuck Signed-off-by: Kieran Bingham --- src/ipa/rpi/controller/rpi/agc_channel.cpp | 8 ++++++-- src/ipa/rpi/controller/rpi/agc_channel.h | 1 + 2 files changed, 7 insertions(+), 2 deletions(-) (limited to 'src') 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(0.02); + desaturate = params["desaturate"].get(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 -- cgit v1.2.1