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:
@@ -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: {
|
||||
|
||||
Reference in New Issue
Block a user