summaryrefslogtreecommitdiff
path: root/src/ipa/rpi
diff options
context:
space:
mode:
authorDavid Plowman <david.plowman@raspberrypi.com>2023-10-12 14:59:31 +0100
committerKieran Bingham <kieran.bingham@ideasonboard.com>2023-10-24 14:11:16 +0100
commitedb48a1337114e0b92caa54598397ce69c63a528 (patch)
treefbfbb0f7f945781ea8a6802c9236fc757023a426 /src/ipa/rpi
parent0923d50b15c6e5125a4b37f399a7a040062b058d (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.cpp8
-rw-r--r--src/ipa/rpi/controller/rpi/agc_channel.h1
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 &params)
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