diff options
author | Jean-Michel Hautbois <jeanmichel.hautbois@ideasonboard.com> | 2021-11-08 13:52:50 +0100 |
---|---|---|
committer | Jean-Michel Hautbois <jeanmichel.hautbois@ideasonboard.com> | 2021-11-15 10:49:13 +0100 |
commit | 5233581e5194a87cada7b851921e655f769a8624 (patch) | |
tree | 9083881924931b2b97da0693d3348e7fb395d5cb /src/ipa/ipu3/algorithms/agc.cpp | |
parent | 726d6087c00c1e29b014b04d6044b303d30e4111 (diff) |
ipa: ipu3: Use sensor controls to update frameContext
The pipeline handler populates the new sensorControls ControlList, to
have the effective exposure and gain values for the current frame. This
is done when a statistics buffer is received.
Make those values the frameContext::sensor values for the frame when the
EventStatReady event is received.
AGC also needs to use frameContext.sensor as its input values and
frameContext.agc as its output values. Modify computeExposure by passing
it the frameContext instead of individual exposure and gain values.
Signed-off-by: Jean-Michel Hautbois <jeanmichel.hautbois@ideasonboard.com>
Reviewed-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
Reviewed-by: Umang Jain <umang.jain@ideasonboard.com>
Reviewed-by: Paul Elder <paul.elder@ideasonboard.com>
Diffstat (limited to 'src/ipa/ipu3/algorithms/agc.cpp')
-rw-r--r-- | src/ipa/ipu3/algorithms/agc.cpp | 19 |
1 files changed, 10 insertions, 9 deletions
diff --git a/src/ipa/ipu3/algorithms/agc.cpp b/src/ipa/ipu3/algorithms/agc.cpp index b5d736c1..5723f6f3 100644 --- a/src/ipa/ipu3/algorithms/agc.cpp +++ b/src/ipa/ipu3/algorithms/agc.cpp @@ -169,10 +169,9 @@ void Agc::filterExposure() /** * \brief Estimate the new exposure and gain values - * \param[inout] exposure The exposure value reference as a number of lines - * \param[inout] gain The gain reference to be updated + * \param[inout] frameContext The shared IPA frame Context */ -void Agc::computeExposure(uint32_t &exposure, double &analogueGain) +void Agc::computeExposure(IPAFrameContext &frameContext) { /* Algorithm initialization should wait for first valid frames */ /* \todo - have a number of frames given by DelayedControls ? @@ -189,6 +188,10 @@ void Agc::computeExposure(uint32_t &exposure, double &analogueGain) return; } + /* Get the effective exposure and gain applied on the sensor. */ + uint32_t exposure = frameContext.sensor.exposure; + double analogueGain = frameContext.sensor.gain; + /* Estimate the gain needed to have the proportion wanted */ double evGain = kEvGainTarget * knumHistogramBins / iqMean_; @@ -233,8 +236,9 @@ void Agc::computeExposure(uint32_t &exposure, double &analogueGain) << shutterTime << " and " << stepGain; - exposure = shutterTime / lineDuration_; - analogueGain = stepGain; + /* Update the estimated exposure and gain. */ + frameContext.agc.exposure = shutterTime / lineDuration_; + frameContext.agc.gain = stepGain; /* * Update the exposure value for the next process call. @@ -257,11 +261,8 @@ void Agc::computeExposure(uint32_t &exposure, double &analogueGain) */ void Agc::process(IPAContext &context, const ipu3_uapi_stats_3a *stats) { - /* Get the latest exposure and gain applied */ - uint32_t &exposure = context.frameContext.agc.exposure; - double &analogueGain = context.frameContext.agc.gain; measureBrightness(stats, context.configuration.grid.bdsGrid); - computeExposure(exposure, analogueGain); + computeExposure(context.frameContext); frameCount_++; } |