[libcamera-devel] [PATCH 4/4] ipa: ipu3: agc: Introduce lineDuration in IPASessionConfiguration
Kieran Bingham
kieran.bingham at ideasonboard.com
Thu Nov 25 13:05:40 CET 2021
Quoting Jean-Michel Hautbois (2021-11-25 10:21:43)
> Instead of having a local cached value for line duration, store it in
> the IPASessionConfiguration::agc structure.
in the ... sensor specific session configuration structure ;-)
--
Kieran
> 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