[libcamera-devel] [PATCH v2 10/11] ipa: rkisp1: af: Skip few frames after changing lens position

Daniel Semkowicz dse at thaumatec.com
Wed Jul 13 10:43:16 CEST 2022


With 30fps stream, lens movement takes more time than one frame. Skip
few frames to allow lens to stabilize before calculating next contrast
value.

Signed-off-by: Daniel Semkowicz <dse at thaumatec.com>
---
 src/ipa/rkisp1/algorithms/af.cpp | 5 ++++-
 src/ipa/rkisp1/algorithms/af.h   | 2 ++
 2 files changed, 6 insertions(+), 1 deletion(-)

diff --git a/src/ipa/rkisp1/algorithms/af.cpp b/src/ipa/rkisp1/algorithms/af.cpp
index cd4f0e08..a0d914e0 100644
--- a/src/ipa/rkisp1/algorithms/af.cpp
+++ b/src/ipa/rkisp1/algorithms/af.cpp
@@ -86,7 +86,10 @@ void Af::process(IPAContext &context,
 
 	uint32_t lensPosition = processAutofocus(sharpness);
 
-	context.frameContext.af.focus = lensPosition;
+	if (lensPosition != context.frameContext.af.focus) {
+		context.frameContext.af.focus = lensPosition;
+		setFramesToSkip(kFLensWaitFrames);
+	}
 }
 
 void Af::setMetering(controls::AfMeteringEnum metering)
diff --git a/src/ipa/rkisp1/algorithms/af.h b/src/ipa/rkisp1/algorithms/af.h
index eeb806c0..36d0c9b0 100644
--- a/src/ipa/rkisp1/algorithms/af.h
+++ b/src/ipa/rkisp1/algorithms/af.h
@@ -36,6 +36,8 @@ private:
 	Rectangle defaultWindow_;
 	Rectangle userWindow_;
 	bool updateAfwindow_ = false;
+
+	static constexpr uint32_t kFLensWaitFrames = 2;
 };
 
 } /* namespace libcamera::ipa::rkisp1::algorithms */
-- 
2.34.1



More information about the libcamera-devel mailing list