diff options
author | Daniel Semkowicz via libcamera-devel <libcamera-devel@lists.libcamera.org> | 2022-07-13 10:43:16 +0200 |
---|---|---|
committer | Jacopo Mondi <jacopo@jmondi.org> | 2022-07-14 20:12:17 +0200 |
commit | 287726495e68adaebe85a2daf52cae9dddbd3b6d (patch) | |
tree | f3e8a354c17f426496801efcc91faf836a522f14 /src/ipa | |
parent | 5e8c41ce4ed8c013234e03a067bc7dcac6cb287e (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')
-rw-r--r-- | src/ipa/rkisp1/algorithms/af.cpp | 5 | ||||
-rw-r--r-- | src/ipa/rkisp1/algorithms/af.h | 2 |
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 */ |