summaryrefslogtreecommitdiff
path: root/src/ipa
diff options
context:
space:
mode:
authorJean-Michel Hautbois <jeanmichel.hautbois@ideasonboard.com>2021-11-19 10:52:27 +0100
committerJean-Michel Hautbois <jeanmichel.hautbois@ideasonboard.com>2021-11-29 20:41:38 +0100
commitf47c9c36ed161c9afefe7d4910840fd41f38ae3d (patch)
tree2610624a0f5e93f12e11bec9f2e675b9330fb559 /src/ipa
parentfea85f84c2ac940f1e149d1382216ab3da0b7703 (diff)
ipa: rkisp1: agc: Introduce prepare call
When a new parameter buffer needs to be queued, we need to specify which algorithm is activated or not in the ISP. Add a simple prepare function in AGC for that, which may later evolve to take the exposure locking into account. For that function to be called, we also need to add the loop on the algorithms in IPARkISP1::queueRequest. We no longer disable the AE algorithm based on the controls::AeEnable, which will be handled in a different manner later. Signed-off-by: Jean-Michel Hautbois <jeanmichel.hautbois@ideasonboard.com> Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com> Reviewed-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
Diffstat (limited to 'src/ipa')
-rw-r--r--src/ipa/rkisp1/algorithms/agc.cpp7
-rw-r--r--src/ipa/rkisp1/algorithms/agc.h1
-rw-r--r--src/ipa/rkisp1/rkisp1.cpp12
3 files changed, 11 insertions, 9 deletions
diff --git a/src/ipa/rkisp1/algorithms/agc.cpp b/src/ipa/rkisp1/algorithms/agc.cpp
index 2c222a4e..650fe2da 100644
--- a/src/ipa/rkisp1/algorithms/agc.cpp
+++ b/src/ipa/rkisp1/algorithms/agc.cpp
@@ -280,6 +280,13 @@ void Agc::process(IPAContext &context, const rkisp1_stat_buffer *stats)
frameCount_++;
}
+void Agc::prepare([[maybe_unused]] IPAContext &context,
+ rkisp1_params_cfg *params)
+{
+ params->module_ens |= RKISP1_CIF_ISP_MODULE_AEC;
+ params->module_en_update |= RKISP1_CIF_ISP_MODULE_AEC;
+}
+
} /* namespace ipa::rkisp1::algorithms */
} /* namespace libcamera */
diff --git a/src/ipa/rkisp1/algorithms/agc.h b/src/ipa/rkisp1/algorithms/agc.h
index 07b9ea37..942c9d7a 100644
--- a/src/ipa/rkisp1/algorithms/agc.h
+++ b/src/ipa/rkisp1/algorithms/agc.h
@@ -28,6 +28,7 @@ public:
~Agc() = default;
int configure(IPAContext &context, const IPACameraSensorInfo &configInfo) override;
+ void prepare(IPAContext &context, rkisp1_params_cfg *params) override;
void process(IPAContext &context, const rkisp1_stat_buffer *stats) override;
private:
diff --git a/src/ipa/rkisp1/rkisp1.cpp b/src/ipa/rkisp1/rkisp1.cpp
index 38917fb7..2d79f15f 100644
--- a/src/ipa/rkisp1/rkisp1.cpp
+++ b/src/ipa/rkisp1/rkisp1.cpp
@@ -272,19 +272,13 @@ void IPARkISP1::processEvent(const RkISP1Event &event)
}
void IPARkISP1::queueRequest(unsigned int frame, rkisp1_params_cfg *params,
- const ControlList &controls)
+ [[maybe_unused]] const ControlList &controls)
{
/* Prepare parameters buffer. */
memset(params, 0, sizeof(*params));
- /* Auto Exposure on/off. */
- if (controls.contains(controls::AeEnable)) {
- autoExposure_ = controls.get(controls::AeEnable);
- if (autoExposure_)
- params->module_ens = RKISP1_CIF_ISP_MODULE_AEC;
-
- params->module_en_update = RKISP1_CIF_ISP_MODULE_AEC;
- }
+ for (auto const &algo : algorithms_)
+ algo->prepare(context_, params);
RkISP1Action op;
op.op = ActionParamFilled;