summaryrefslogtreecommitdiff
path: root/src/ipa/rkisp1
diff options
context:
space:
mode:
authorDaniel Semkowicz via libcamera-devel <libcamera-devel@lists.libcamera.org>2022-07-13 10:43:16 +0200
committerJacopo Mondi <jacopo@jmondi.org>2022-07-14 20:12:17 +0200
commit287726495e68adaebe85a2daf52cae9dddbd3b6d (patch)
treef3e8a354c17f426496801efcc91faf836a522f14 /src/ipa/rkisp1
parent5e8c41ce4ed8c013234e03a067bc7dcac6cb287e (diff)
ipa: rkisp1: af: Skip few frames after changing lens position
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@thaumatec.com>
Diffstat (limited to 'src/ipa/rkisp1')
-rw-r--r--src/ipa/rkisp1/algorithms/af.cpp5
-rw-r--r--src/ipa/rkisp1/algorithms/af.h2
2 files changed, 6 insertions, 1 deletions
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 */