summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorUmang Jain <umang.jain@ideasonboard.com>2021-05-24 14:50:22 +0530
committerLaurent Pinchart <laurent.pinchart@ideasonboard.com>2021-05-24 14:13:37 +0300
commitc76ca01323d8f7cb26b3a0c1137de92f7538a2c6 (patch)
treef636d016b2c304d4cc260cd3866bc323e5833fd0 /src
parent231d93557d8555d2bd713832203bb17b678d6ed0 (diff)
ipa: ipu3: Introduce IPAConfigInfo in IPC
IPAConfigInfo is a consolidated data structure passed from IPU3 pipeline-handler to IPU3 IPA. The structure can be extended with additional parameters to accommodate the requirements of multiple IPU3 IPA modules. Adapt the in-tree IPU3 IPA to use IPAConfigInfo as well. Signed-off-by: Umang Jain <umang.jain@ideasonboard.com> Reviewed-by: Jacopo Mondi <jacopo@jmondi.org> Reviewed-by: Jean-Michel Hautbois <jeanmichel.hautbois@ideasonboard.com> Reviewed-by: Paul Elder <paul.elder@ideasonboard.com> Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com> Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Diffstat (limited to 'src')
-rw-r--r--src/ipa/ipu3/ipu3.cpp14
-rw-r--r--src/libcamera/pipeline/ipu3/ipu3.cpp10
2 files changed, 13 insertions, 11 deletions
diff --git a/src/ipa/ipu3/ipu3.cpp b/src/ipa/ipu3/ipu3.cpp
index f5343547..769c24d3 100644
--- a/src/ipa/ipu3/ipu3.cpp
+++ b/src/ipa/ipu3/ipu3.cpp
@@ -43,8 +43,7 @@ public:
int start() override;
void stop() override {}
- void configure(const std::map<uint32_t, ControlInfoMap> &entityControls,
- const Size &bdsOutputSize) override;
+ void configure(const IPAConfigInfo &configInfo) override;
void mapBuffers(const std::vector<IPABuffer> &buffers) override;
void unmapBuffers(const std::vector<unsigned int> &ids) override;
@@ -139,13 +138,12 @@ void IPAIPU3::calculateBdsGrid(const Size &bdsOutputSize)
<< (int)bdsGrid_.height << " << " << (int)bdsGrid_.block_height_log2 << ")";
}
-void IPAIPU3::configure(const std::map<uint32_t, ControlInfoMap> &entityControls,
- const Size &bdsOutputSize)
+void IPAIPU3::configure(const IPAConfigInfo &configInfo)
{
- if (entityControls.empty())
+ if (configInfo.entityControls.empty())
return;
- ctrls_ = entityControls.at(0);
+ ctrls_ = configInfo.entityControls.at(0);
const auto itExp = ctrls_.find(V4L2_CID_EXPOSURE);
if (itExp == ctrls_.end()) {
@@ -169,10 +167,10 @@ void IPAIPU3::configure(const std::map<uint32_t, ControlInfoMap> &entityControls
params_ = {};
- calculateBdsGrid(bdsOutputSize);
+ calculateBdsGrid(configInfo.bdsOutputSize);
awbAlgo_ = std::make_unique<IPU3Awb>();
- awbAlgo_->initialise(params_, bdsOutputSize, bdsGrid_);
+ awbAlgo_->initialise(params_, configInfo.bdsOutputSize, bdsGrid_);
agcAlgo_ = std::make_unique<IPU3Agc>();
agcAlgo_->initialise(bdsGrid_);
diff --git a/src/libcamera/pipeline/ipu3/ipu3.cpp b/src/libcamera/pipeline/ipu3/ipu3.cpp
index 1852c492..25203256 100644
--- a/src/libcamera/pipeline/ipu3/ipu3.cpp
+++ b/src/libcamera/pipeline/ipu3/ipu3.cpp
@@ -636,9 +636,13 @@ int PipelineHandlerIPU3::configure(Camera *camera, CameraConfiguration *c)
return ret;
}
- std::map<uint32_t, ControlInfoMap> entityControls;
- entityControls.emplace(0, data->cio2_.sensor()->controls());
- data->ipa_->configure(entityControls, config->imguConfig().bds);
+ ipa::ipu3::IPAConfigInfo configInfo;
+ configInfo.entityControls.emplace(0, data->cio2_.sensor()->controls());
+ configInfo.sensorInfo = sensorInfo;
+ configInfo.bdsOutputSize = config->imguConfig().bds;
+ configInfo.iif = config->imguConfig().iif;
+
+ data->ipa_->configure(configInfo);
return 0;
}