summaryrefslogtreecommitdiff
path: root/src/ipa/simple/algorithms/agc.cpp
diff options
context:
space:
mode:
authorStanislaw Gruszka <stanislaw.gruszka@linux.intel.com>2024-10-29 12:25:00 +0100
committerKieran Bingham <kieran.bingham@ideasonboard.com>2024-11-29 22:13:15 +0000
commitbb1aa92eb9ee7e713d997d5786129e88219e166a (patch)
treed32a2f564a74582370dfbb1316a4d4b8c03606b2 /src/ipa/simple/algorithms/agc.cpp
parent8e0e6886f7522e161839c9c9ea42a6552d8c6cdf (diff)
libcamera: software_isp: Initialize exposure+gain before agc calculations
On my setup, since commit fb8ad13d ("libcamera: software_isp: Move exposure+gain to an algorithm module"), at start camera output stays very dark for dozen of seconds, and then later slowly gets to normal. This is because existing sensor exposure+gain settings are not used at start. We save initial values in frameContext but in the agc algorithm we use IPA context. Fix the problem by using in frameContext sensor values, since we already use those in blc algorithm and change exposure type to int32_t to unnecessary castings. Signed-off-by: Stanislaw Gruszka <stanislaw.gruszka@linux.intel.com> Reviewed-by: Milan Zamazal <mzamazal@redhat.com> Tested-by: Robert Mader <robert.mader@collabora.com> Tested-by: Kieran Bingham <kieran.bingham@ideasonboard.com> Reviewed-by: Kieran Bingham <kieran.bingham@ideasonboard.com> Signed-off-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
Diffstat (limited to 'src/ipa/simple/algorithms/agc.cpp')
-rw-r--r--src/ipa/simple/algorithms/agc.cpp8
1 files changed, 4 insertions, 4 deletions
diff --git a/src/ipa/simple/algorithms/agc.cpp b/src/ipa/simple/algorithms/agc.cpp
index df92edd7..72aade14 100644
--- a/src/ipa/simple/algorithms/agc.cpp
+++ b/src/ipa/simple/algorithms/agc.cpp
@@ -39,7 +39,7 @@ Agc::Agc()
{
}
-void Agc::updateExposure(IPAContext &context, double exposureMSV)
+void Agc::updateExposure(IPAContext &context, IPAFrameContext &frameContext, double exposureMSV)
{
/*
* kExpDenominator of 10 gives ~10% increment/decrement;
@@ -50,8 +50,8 @@ void Agc::updateExposure(IPAContext &context, double exposureMSV)
static constexpr uint8_t kExpNumeratorDown = kExpDenominator - 1;
double next;
- int32_t &exposure = context.activeState.agc.exposure;
- double &again = context.activeState.agc.again;
+ int32_t &exposure = frameContext.sensor.exposure;
+ double &again = frameContext.sensor.gain;
if (exposureMSV < kExposureOptimal - kExposureSatisfactory) {
next = exposure * kExpNumeratorUp / kExpDenominator;
@@ -129,7 +129,7 @@ void Agc::process(IPAContext &context,
}
float exposureMSV = (denom == 0 ? 0 : static_cast<float>(num) / denom);
- updateExposure(context, exposureMSV);
+ updateExposure(context, frameContext, exposureMSV);
}
REGISTER_IPA_ALGORITHM(Agc, "Agc")