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 <laurent.pinchart@ideasonboard.com>
Reviewed-by: Jacopo Mondi <jacopo@jmondi.org>
Signed-off-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
This commit is contained in:
Kieran Bingham
2021-12-06 13:21:31 +00:00
parent f8d2f17a3d
commit 294663eece
+9 -3
View File
@@ -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<int32_t>());
focusLens->setFocusPostion(focusValue.get<int32_t>());
break;
}
case ipa::ipu3::ActionParamFilled: {