summaryrefslogtreecommitdiff
path: root/src/ipa
diff options
context:
space:
mode:
authorMilan Zamazal <mzamazal@redhat.com>2024-09-27 15:46:22 +0200
committerKieran Bingham <kieran.bingham@ideasonboard.com>2024-09-27 15:01:57 +0100
commit54fb3bba81e6ac79e5ac5881e33be4baf96cf6f3 (patch)
treebde3f559682253942f3cfcbed7299ebb6ae885a5 /src/ipa
parent8c84efa486270e1bd5566baa1a3fb152bfa14604 (diff)
libcamera: software_isp: Use DelayedControls
Use the standard libcamera mechanism to report the "current" controls rather than delaying updates by counting from the last update. A problem is that with software ISP we cannot be sure about the sensor delay. The original implementation simply skips exposure updates for 2 frames, which should be enough in most cases. After this change, we assume the delay being exactly 2 frames, which may or may not be correct and may work with outdated values if the delay is shorter. According to Kieran, the wrong parts are also wrong on the IPU3/RKISP1/Mali pipelines and only RPi have this correct. We need to fix this, by correctly specifying the gains in the libipa camera sensor helpers. The sooner the better because this change could introduce a risk of increasing oscillations. This patch also prepares moving exposure+gain to an algorithm module where the original delay mechanism would be a (possibly unnecessary) complication. Resolves software ISP TODO #11 + #12. Signed-off-by: Milan Zamazal <mzamazal@redhat.com> Reviewed-by: Kieran Bingham <kieran.bingham@ideasonboard.com> Reviewed-by: Umang Jain <umang.jain@ideasonboard.com> Signed-off-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
Diffstat (limited to 'src/ipa')
-rw-r--r--src/ipa/simple/soft_simple.cpp16
1 files changed, 1 insertions, 15 deletions
diff --git a/src/ipa/simple/soft_simple.cpp b/src/ipa/simple/soft_simple.cpp
index f8d923c5..60310a8e 100644
--- a/src/ipa/simple/soft_simple.cpp
+++ b/src/ipa/simple/soft_simple.cpp
@@ -59,8 +59,7 @@ class IPASoftSimple : public ipa::soft::IPASoftInterface, public Module
public:
IPASoftSimple()
: params_(nullptr), stats_(nullptr),
- context_({ {}, {}, { kMaxFrameContexts } }),
- ignoreUpdates_(0)
+ context_({ {}, {}, { kMaxFrameContexts } })
{
}
@@ -98,7 +97,6 @@ private:
int32_t exposure_;
double againMin_, againMax_, againMinStep_;
double again_;
- unsigned int ignoreUpdates_;
};
IPASoftSimple::~IPASoftSimple()
@@ -299,16 +297,6 @@ void IPASoftSimple::processStats(const uint32_t frame,
/* \todo Switch to the libipa/algorithm.h API someday. */
/*
- * AE / AGC, use 2 frames delay to make sure that the exposure and
- * the gain set have applied to the camera sensor.
- * \todo This could be handled better with DelayedControls.
- */
- if (ignoreUpdates_ > 0) {
- --ignoreUpdates_;
- return;
- }
-
- /*
* Calculate Mean Sample Value (MSV) according to formula from:
* https://www.araa.asn.au/acra/acra2007/papers/paper84final.pdf
*/
@@ -356,8 +344,6 @@ void IPASoftSimple::processStats(const uint32_t frame,
ctrls.set(V4L2_CID_ANALOGUE_GAIN,
static_cast<int32_t>(camHelper_ ? camHelper_->gainCode(again_) : again_));
- ignoreUpdates_ = 2;
-
setSensorControls.emit(ctrls);
LOG(IPASoft, Debug) << "exposureMSV " << exposureMSV