summaryrefslogtreecommitdiff
path: root/src/ipa/ipu3/ipu3.cpp
diff options
context:
space:
mode:
authorJean-Michel Hautbois <jeanmichel.hautbois@ideasonboard.com>2021-08-20 08:34:25 +0200
committerJean-Michel Hautbois <jeanmichel.hautbois@ideasonboard.com>2021-08-20 12:11:29 +0200
commit4eb4073ec708ba1e4b4ef0375496dedc1308b3dc (patch)
treecc1dd6e9340a2fd21bd5bf716d8d0b8677836cc9 /src/ipa/ipu3/ipu3.cpp
parentfcf56b9716ad5722e21d2d345a8708c21c88ae03 (diff)
ipa: ipu3: convert AWB to the new algorithm interface
When the stats are received, pass them with the context to the existing AWB algorithm. IPAFrameContext now has a new structure to store the gains calculated by the AWB algorithm. When an EventFillParams event is received, call prepare() and set the new gains accordingly in the params structure. There is no more a need for the IPU3Awb::initialise() function, as the params are always set in prepare(). Signed-off-by: Jean-Michel Hautbois <jeanmichel.hautbois@ideasonboard.com> Reviewed-by: Kieran Bingham <kieran.bingham@ideasonboard.com> Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Diffstat (limited to 'src/ipa/ipu3/ipu3.cpp')
-rw-r--r--src/ipa/ipu3/ipu3.cpp23
1 files changed, 19 insertions, 4 deletions
diff --git a/src/ipa/ipu3/ipu3.cpp b/src/ipa/ipu3/ipu3.cpp
index 3713b07b..823df34b 100644
--- a/src/ipa/ipu3/ipu3.cpp
+++ b/src/ipa/ipu3/ipu3.cpp
@@ -93,6 +93,23 @@
*/
/**
+ * \struct IPAFrameContext::awb
+ * \brief Context for the Automatic White Balance algorithm
+ *
+ * \struct IPAFrameContext::awb::gains
+ * \brief White balance gains
+ *
+ * \var IPAFrameContext::awb::gains::red
+ * \brief White balance gain for R channel
+ *
+ * \var IPAFrameContext::awb::gains::green
+ * \brief White balance gain for G channel
+ *
+ * \var IPAFrameContext::awb::gains::blue
+ * \brief White balance gain for B channel
+ */
+
+/**
* \struct IPAFrameContext::toneMapping
* \brief Context for ToneMapping and Gamma control
*
@@ -357,8 +374,6 @@ int IPAIPU3::configure(const IPAConfigInfo &configInfo)
}
awbAlgo_ = std::make_unique<IPU3Awb>();
- awbAlgo_->initialise(params_, context_.configuration.grid.bdsOutputSize,
- context_.configuration.grid.bdsGrid);
agcAlgo_ = std::make_unique<IPU3Agc>();
agcAlgo_->initialise(context_.configuration.grid.bdsGrid, sensorInfo_);
@@ -438,7 +453,7 @@ void IPAIPU3::fillParams(unsigned int frame, ipu3_uapi_params *params)
algo->prepare(context_, &params_);
if (agcAlgo_->updateControls())
- awbAlgo_->updateWbParameters(params_);
+ awbAlgo_->prepare(context_, &params_);
*params = params_;
@@ -461,7 +476,7 @@ void IPAIPU3::parseStatistics(unsigned int frame,
agcAlgo_->process(stats, exposure_, gain);
gain_ = camHelper_->gainCode(gain);
- awbAlgo_->calculateWBGains(stats);
+ awbAlgo_->process(context_, stats);
if (agcAlgo_->updateControls())
setControls(frame);