[libcamera-devel] [PATCH v5 08/33] ipa: libipa: algorithm: queueRequest(): Pass frame context
Laurent Pinchart
laurent.pinchart at ideasonboard.com
Tue Sep 27 04:36:17 CEST 2022
From: Kieran Bingham <kieran.bingham at ideasonboard.com>
IPA modules have access to incoming Request's controls list and need to
store them in the frame context at queueRequest() time. Pass the frame
context to the Algorithm::queueRequest() function.
Signed-off-by: Kieran Bingham <kieran.bingham at ideasonboard.com>
Signed-off-by: Jacopo Mondi <jacopo at jmondi.org>
Reviewed-by: Umang Jain <umang.jain at ideasonboard.com>
Reviewed-by: Kieran Bingham <kieran.bingham at ideasonboard.com>
---
Changes since v4:
- Rewrite commit message
---
src/ipa/libipa/algorithm.cpp | 1 +
src/ipa/libipa/algorithm.h | 1 +
src/ipa/rkisp1/algorithms/awb.cpp | 1 +
src/ipa/rkisp1/algorithms/awb.h | 1 +
src/ipa/rkisp1/algorithms/cproc.cpp | 1 +
src/ipa/rkisp1/algorithms/cproc.h | 1 +
src/ipa/rkisp1/algorithms/dpf.cpp | 1 +
src/ipa/rkisp1/algorithms/dpf.h | 1 +
src/ipa/rkisp1/algorithms/filter.cpp | 1 +
src/ipa/rkisp1/algorithms/filter.h | 1 +
src/ipa/rkisp1/rkisp1.cpp | 5 ++++-
11 files changed, 14 insertions(+), 1 deletion(-)
diff --git a/src/ipa/libipa/algorithm.cpp b/src/ipa/libipa/algorithm.cpp
index 30eab67f71fc..c152b885aee1 100644
--- a/src/ipa/libipa/algorithm.cpp
+++ b/src/ipa/libipa/algorithm.cpp
@@ -88,6 +88,7 @@ namespace ipa {
* \brief Provide control values to the algorithm
* \param[in] context The shared IPA context
* \param[in] frame The frame number to apply the control values
+ * \param[in] frameContext The current frame's context
* \param[in] controls The list of user controls
*
* This function is called for each request queued to the camera. It provides
diff --git a/src/ipa/libipa/algorithm.h b/src/ipa/libipa/algorithm.h
index ee93d260ca3f..d8601f9ccaff 100644
--- a/src/ipa/libipa/algorithm.h
+++ b/src/ipa/libipa/algorithm.h
@@ -47,6 +47,7 @@ public:
virtual void queueRequest([[maybe_unused]] typename Module::Context &context,
[[maybe_unused]] const uint32_t frame,
+ [[maybe_unused]] typename Module::FrameContext &frameContext,
[[maybe_unused]] const ControlList &controls)
{
}
diff --git a/src/ipa/rkisp1/algorithms/awb.cpp b/src/ipa/rkisp1/algorithms/awb.cpp
index aefba6382807..a23c32015454 100644
--- a/src/ipa/rkisp1/algorithms/awb.cpp
+++ b/src/ipa/rkisp1/algorithms/awb.cpp
@@ -128,6 +128,7 @@ void Awb::prepare(IPAContext &context,
*/
void Awb::queueRequest(IPAContext &context,
[[maybe_unused]] const uint32_t frame,
+ [[maybe_unused]] IPAFrameContext &frameContext,
const ControlList &controls)
{
auto &awb = context.frameContext.awb;
diff --git a/src/ipa/rkisp1/algorithms/awb.h b/src/ipa/rkisp1/algorithms/awb.h
index 806e11a2ec93..6d4a39467038 100644
--- a/src/ipa/rkisp1/algorithms/awb.h
+++ b/src/ipa/rkisp1/algorithms/awb.h
@@ -24,6 +24,7 @@ public:
IPAFrameContext &frameContext,
rkisp1_params_cfg *params) override;
void queueRequest(IPAContext &context, const uint32_t frame,
+ IPAFrameContext &frameContext,
const ControlList &controls) override;
void process(IPAContext &context, const uint32_t frame,
IPAFrameContext &frameCtx,
diff --git a/src/ipa/rkisp1/algorithms/cproc.cpp b/src/ipa/rkisp1/algorithms/cproc.cpp
index c0505c68765b..bc4a07073706 100644
--- a/src/ipa/rkisp1/algorithms/cproc.cpp
+++ b/src/ipa/rkisp1/algorithms/cproc.cpp
@@ -38,6 +38,7 @@ LOG_DEFINE_CATEGORY(RkISP1CProc)
*/
void ColorProcessing::queueRequest(IPAContext &context,
[[maybe_unused]] const uint32_t frame,
+ [[maybe_unused]] IPAFrameContext &frameContext,
const ControlList &controls)
{
auto &cproc = context.frameContext.cproc;
diff --git a/src/ipa/rkisp1/algorithms/cproc.h b/src/ipa/rkisp1/algorithms/cproc.h
index 02c3d9c95488..ba6e901ae110 100644
--- a/src/ipa/rkisp1/algorithms/cproc.h
+++ b/src/ipa/rkisp1/algorithms/cproc.h
@@ -22,6 +22,7 @@ public:
~ColorProcessing() = default;
void queueRequest(IPAContext &context, const uint32_t frame,
+ IPAFrameContext &frameContext,
const ControlList &controls) override;
void prepare(IPAContext &context, const uint32_t frame,
IPAFrameContext &frameContext,
diff --git a/src/ipa/rkisp1/algorithms/dpf.cpp b/src/ipa/rkisp1/algorithms/dpf.cpp
index 8286f83facc1..be024fc5fe90 100644
--- a/src/ipa/rkisp1/algorithms/dpf.cpp
+++ b/src/ipa/rkisp1/algorithms/dpf.cpp
@@ -176,6 +176,7 @@ int Dpf::init([[maybe_unused]] IPAContext &context,
*/
void Dpf::queueRequest(IPAContext &context,
[[maybe_unused]] const uint32_t frame,
+ [[maybe_unused]] IPAFrameContext &frameContext,
const ControlList &controls)
{
auto &dpf = context.frameContext.dpf;
diff --git a/src/ipa/rkisp1/algorithms/dpf.h b/src/ipa/rkisp1/algorithms/dpf.h
index 656d78dee67c..e232cad4ee87 100644
--- a/src/ipa/rkisp1/algorithms/dpf.h
+++ b/src/ipa/rkisp1/algorithms/dpf.h
@@ -23,6 +23,7 @@ public:
int init(IPAContext &context, const YamlObject &tuningData) override;
void queueRequest(IPAContext &context, const uint32_t frame,
+ IPAFrameContext &frameContext,
const ControlList &controls) override;
void prepare(IPAContext &context, const uint32_t frame,
IPAFrameContext &frameContext,
diff --git a/src/ipa/rkisp1/algorithms/filter.cpp b/src/ipa/rkisp1/algorithms/filter.cpp
index 02562339d008..6aa5476aa25e 100644
--- a/src/ipa/rkisp1/algorithms/filter.cpp
+++ b/src/ipa/rkisp1/algorithms/filter.cpp
@@ -44,6 +44,7 @@ static constexpr uint32_t kFiltModeDefault = 0x000004f2;
*/
void Filter::queueRequest(IPAContext &context,
[[maybe_unused]] const uint32_t frame,
+ [[maybe_unused]] IPAFrameContext &frameContext,
const ControlList &controls)
{
auto &filter = context.frameContext.filter;
diff --git a/src/ipa/rkisp1/algorithms/filter.h b/src/ipa/rkisp1/algorithms/filter.h
index ac69657e2f0f..3fd882ea41dc 100644
--- a/src/ipa/rkisp1/algorithms/filter.h
+++ b/src/ipa/rkisp1/algorithms/filter.h
@@ -22,6 +22,7 @@ public:
~Filter() = default;
void queueRequest(IPAContext &context, const uint32_t frame,
+ IPAFrameContext &frameContext,
const ControlList &controls) override;
void prepare(IPAContext &context, const uint32_t frame,
IPAFrameContext &frameContext,
diff --git a/src/ipa/rkisp1/rkisp1.cpp b/src/ipa/rkisp1/rkisp1.cpp
index b2593a584a1a..07210d16b5b5 100644
--- a/src/ipa/rkisp1/rkisp1.cpp
+++ b/src/ipa/rkisp1/rkisp1.cpp
@@ -292,8 +292,11 @@ void IPARkISP1::unmapBuffers(const std::vector<unsigned int> &ids)
void IPARkISP1::queueRequest(const uint32_t frame, const ControlList &controls)
{
+ /* \todo Obtain the frame context to pass to process from the FCQueue */
+ IPAFrameContext frameContext;
+
for (auto const &algo : algorithms())
- algo->queueRequest(context_, frame, controls);
+ algo->queueRequest(context_, frame, frameContext, controls);
}
void IPARkISP1::fillParamsBuffer(const uint32_t frame, const uint32_t bufferId)
--
Regards,
Laurent Pinchart
More information about the libcamera-devel
mailing list