[libcamera-devel] [PATCH 4/5] src: ipa: raspberrypi: Move initial frame drop decision to AGC
David Plowman
david.plowman at raspberrypi.com
Wed Dec 2 12:52:52 CET 2020
Previously the CamHelper was returning the number of frames to drop
(on account of AGC converging). This wasn't really appropriate, it's
better for the AGC to do it, which now also knows when exposure and
gain have been explicitly set and therefore fewer (or no) frame drops
are necessary at all.
The CamHelper::HideFramesStartup method should now just be returning
the number of frames to hide because they're bad/invalid in some way,
not worrying about the AGC. For many sensors, the correct value for
this is zero.
Signed-off-by: David Plowman <david.plowman at raspberrypi.com>
---
src/ipa/raspberrypi/cam_helper.cpp | 6 +++---
src/ipa/raspberrypi/raspberrypi.cpp | 8 ++++++++
2 files changed, 11 insertions(+), 3 deletions(-)
diff --git a/src/ipa/raspberrypi/cam_helper.cpp b/src/ipa/raspberrypi/cam_helper.cpp
index c8ac3232..6efa0d7f 100644
--- a/src/ipa/raspberrypi/cam_helper.cpp
+++ b/src/ipa/raspberrypi/cam_helper.cpp
@@ -82,10 +82,10 @@ bool CamHelper::SensorEmbeddedDataPresent() const
unsigned int CamHelper::HideFramesStartup() const
{
/*
- * By default, hide 6 frames completely at start-up while AGC etc. sort
- * themselves out (converge).
+ * The number of frames when a camera first starts that shouldn't be
+ * displayed as they are invalid in some way.
*/
- return 6;
+ return 0;
}
unsigned int CamHelper::HideFramesModeSwitch() const
diff --git a/src/ipa/raspberrypi/raspberrypi.cpp b/src/ipa/raspberrypi/raspberrypi.cpp
index 0300b8d9..ddabdb31 100644
--- a/src/ipa/raspberrypi/raspberrypi.cpp
+++ b/src/ipa/raspberrypi/raspberrypi.cpp
@@ -192,6 +192,14 @@ int IPARPi::start(const IPAOperationData &ipaConfig, IPAOperationData *result)
unsigned int dropFrame = 0;
if (firstStart_) {
dropFrame = helper_->HideFramesStartup();
+
+ /* The AGC algorithm may want us to drop more frames. */
+ RPiController::AgcAlgorithm *agc = dynamic_cast<RPiController::AgcAlgorithm *>(
+ controller_.GetAlgorithm("agc"));
+ if (agc)
+ dropFrame = std::max(dropFrame, agc->GetDropFrames());
+ LOG(IPARPI, Debug) << "Drop " << dropFrame << " frames on startup";
+
mistrustCount_ = helper_->MistrustFramesStartup();
} else {
dropFrame = helper_->HideFramesModeSwitch();
--
2.20.1
More information about the libcamera-devel
mailing list