summaryrefslogtreecommitdiff
path: root/src/libcamera/pipeline/ipu3
diff options
context:
space:
mode:
authorHan-Lin Chen <hanlinchen@chromium.org>2021-12-03 17:44:26 +0800
committerKieran Bingham <kieran.bingham@ideasonboard.com>2021-12-03 10:23:26 +0000
commit3f881dbc338e8f24f478567ee890c1f36ccb8996 (patch)
tree91e56ce869990df0719caa748340a5cdb97abc35 /src/libcamera/pipeline/ipu3
parentad2bcbe5b55c8824288cd1752649f39f3a53af38 (diff)
ipu3: ipa: Allow IPA to apply controls to the lens device
Allow IPA to apply controls to the lens device. Signed-off-by: Han-Lin Chen <hanlinchen@chromium.org> Reviewed-by: Kieran Bingham <kieran.bingham@ideasonboard.com> Reviewed-by: Umang Jain <umang.jain@ideasonboard.com> Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com> Signed-off-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
Diffstat (limited to 'src/libcamera/pipeline/ipu3')
-rw-r--r--src/libcamera/pipeline/ipu3/ipu3.cpp13
1 files changed, 11 insertions, 2 deletions
diff --git a/src/libcamera/pipeline/ipu3/ipu3.cpp b/src/libcamera/pipeline/ipu3/ipu3.cpp
index c65afdb2..1215bdb8 100644
--- a/src/libcamera/pipeline/ipu3/ipu3.cpp
+++ b/src/libcamera/pipeline/ipu3/ipu3.cpp
@@ -24,6 +24,7 @@
#include <libcamera/stream.h>
#include "libcamera/internal/camera.h"
+#include "libcamera/internal/camera_lens.h"
#include "libcamera/internal/camera_sensor.h"
#include "libcamera/internal/delayed_controls.h"
#include "libcamera/internal/device_enumerator.h"
@@ -1238,8 +1239,16 @@ void IPU3CameraData::queueFrameAction(unsigned int id,
{
switch (action.op) {
case ipa::ipu3::ActionSetSensorControls: {
- const ControlList &controls = action.sensorControls;
- delayedCtrls_->push(controls);
+ const ControlList &sensorControls = action.sensorControls;
+ delayedCtrls_->push(sensorControls);
+
+ const ControlList lensControls = action.lensControls;
+ const ControlValue &focusValue =
+ lensControls.get(V4L2_CID_FOCUS_ABSOLUTE);
+
+ CameraLens *focusLens = cio2_.sensor()->focusLens();
+ if (focusLens && !focusValue.isNone())
+ focusLens->setFocusPostion(focusValue.get<int32_t>());
break;
}
case ipa::ipu3::ActionParamFilled: {