From 294663eece8c067d268442724b969c9dfa081b0a Mon Sep 17 00:00:00 2001 From: Kieran Bingham Date: Fri, 3 Dec 2021 12:53:59 +0000 Subject: libcamera: ipu3: Only process focus if we have a lens If there is no lens detected by the system, then we will not be able to set the control, so we can skip processing of the list. Furthermore, if the IPA has not set a V4L2_CID_FOCUS_ABSOLUTE control, then a warning will be printed as the lensControls.get() will not succeed. Break out of the control parsing when there is no CameraLens device, or if there is no absolute focus control set by the IPA. Reviewed-by: Laurent Pinchart Reviewed-by: Jacopo Mondi Signed-off-by: Kieran Bingham --- src/libcamera/pipeline/ipu3/ipu3.cpp | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) (limited to 'src') diff --git a/src/libcamera/pipeline/ipu3/ipu3.cpp b/src/libcamera/pipeline/ipu3/ipu3.cpp index 1215bdb8..16380d20 100644 --- a/src/libcamera/pipeline/ipu3/ipu3.cpp +++ b/src/libcamera/pipeline/ipu3/ipu3.cpp @@ -1242,13 +1242,19 @@ void IPU3CameraData::queueFrameAction(unsigned int id, const ControlList &sensorControls = action.sensorControls; delayedCtrls_->push(sensorControls); + CameraLens *focusLens = cio2_.sensor()->focusLens(); + if (!focusLens) + break; + const ControlList lensControls = action.lensControls; + if (!lensControls.contains(V4L2_CID_FOCUS_ABSOLUTE)) + break; + const ControlValue &focusValue = lensControls.get(V4L2_CID_FOCUS_ABSOLUTE); - CameraLens *focusLens = cio2_.sensor()->focusLens(); - if (focusLens && !focusValue.isNone()) - focusLens->setFocusPostion(focusValue.get()); + focusLens->setFocusPostion(focusValue.get()); + break; } case ipa::ipu3::ActionParamFilled: { -- cgit v1.2.1