[libcamera-devel] [PATCH 4/4] ipa: ipu3: agc: Introduce lineDuration in IPASessionConfiguration
Jean-Michel Hautbois
jeanmichel.hautbois at ideasonboard.com
Thu Nov 25 11:21:43 CET 2021
Instead of having a local cached value for line duration, store it in
the IPASessionConfiguration::agc structure.
Signed-off-by: Jean-Michel Hautbois <jeanmichel.hautbois at ideasonboard.com>
---
src/ipa/ipu3/algorithms/agc.cpp | 20 +++++++++++---------
src/ipa/ipu3/algorithms/agc.h | 2 --
src/ipa/ipu3/ipa_context.cpp | 3 +++
src/ipa/ipu3/ipa_context.h | 1 +
4 files changed, 15 insertions(+), 11 deletions(-)
diff --git a/src/ipa/ipu3/algorithms/agc.cpp b/src/ipa/ipu3/algorithms/agc.cpp
index b822c79b..c463e688 100644
--- a/src/ipa/ipu3/algorithms/agc.cpp
+++ b/src/ipa/ipu3/algorithms/agc.cpp
@@ -70,7 +70,7 @@ static constexpr uint32_t kNumStartupFrames = 10;
static constexpr double kRelativeLuminanceTarget = 0.16;
Agc::Agc()
- : frameCount_(0), lineDuration_(0s), filteredExposure_(0s)
+ : frameCount_(0), filteredExposure_(0s)
{
}
@@ -83,16 +83,18 @@ Agc::Agc()
*/
int Agc::configure(IPAContext &context, const IPAConfigInfo &configInfo)
{
- stride_ = context.configuration.grid.stride;
+ IPASessionConfiguration &configuration = context.configuration;
+ IPAFrameContext &frameContext = context.frameContext;
+
+ stride_ = configuration.grid.stride;
/* \todo use the IPAContext to provide the limits */
- lineDuration_ = configInfo.sensorInfo.lineLength * 1.0s
- / configInfo.sensorInfo.pixelRate;
+ configuration.agc.lineDuration = configInfo.sensorInfo.lineLength * 1.0s
+ / configInfo.sensorInfo.pixelRate;
/* Configure the default exposure and gain. */
- context.frameContext.agc.gain =
- std::max(context.configuration.agc.minAnalogueGain, kMinAnalogueGain);
- context.frameContext.agc.exposure = 10ms / lineDuration_;
+ frameContext.agc.gain = std::max(configuration.agc.minAnalogueGain, kMinAnalogueGain);
+ frameContext.agc.exposure = 10ms / configuration.agc.lineDuration;
return 0;
}
@@ -200,7 +202,7 @@ void Agc::computeExposure(IPAContext &context, double yGain, double iqMeanGain)
/* extracted from Rpi::Agc::computeTargetExposure */
/* Calculate the shutter time in seconds */
- utils::Duration currentShutter = exposure * lineDuration_;
+ utils::Duration currentShutter = exposure * configuration.agc.lineDuration;
/*
* Update the exposure value for the next computation using the values
@@ -245,7 +247,7 @@ void Agc::computeExposure(IPAContext &context, double yGain, double iqMeanGain)
<< stepGain;
/* Update the estimated exposure and gain. */
- frameContext.agc.exposure = shutterTime / lineDuration_;
+ frameContext.agc.exposure = shutterTime / configuration.agc.lineDuration;
frameContext.agc.gain = stepGain;
}
diff --git a/src/ipa/ipu3/algorithms/agc.h b/src/ipa/ipu3/algorithms/agc.h
index d9f17e6f..ed997e67 100644
--- a/src/ipa/ipu3/algorithms/agc.h
+++ b/src/ipa/ipu3/algorithms/agc.h
@@ -42,8 +42,6 @@ private:
uint64_t frameCount_;
- utils::Duration lineDuration_;
-
utils::Duration filteredExposure_;
uint32_t stride_;
diff --git a/src/ipa/ipu3/ipa_context.cpp b/src/ipa/ipu3/ipa_context.cpp
index 86794ac1..ace9c66f 100644
--- a/src/ipa/ipu3/ipa_context.cpp
+++ b/src/ipa/ipu3/ipa_context.cpp
@@ -84,6 +84,9 @@ namespace libcamera::ipa::ipu3 {
*
* \var IPASessionConfiguration::agc.maxAnalogueGain
* \brief Maximum analogue gain supported with the configured sensor
+ *
+ * \var IPASessionConfiguration::agc.lineDuration
+ * \brief Line duration in microseconds
*/
/**
diff --git a/src/ipa/ipu3/ipa_context.h b/src/ipa/ipu3/ipa_context.h
index c6dc0814..7696fd14 100644
--- a/src/ipa/ipu3/ipa_context.h
+++ b/src/ipa/ipu3/ipa_context.h
@@ -30,6 +30,7 @@ struct IPASessionConfiguration {
utils::Duration maxShutterSpeed;
double minAnalogueGain;
double maxAnalogueGain;
+ utils::Duration lineDuration;
} agc;
};
--
2.32.0
More information about the libcamera-devel
mailing list