summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNick Hollinghurst <nick.hollinghurst@raspberrypi.com>2023-01-23 15:49:25 +0000
committerKieran Bingham <kieran.bingham@ideasonboard.com>2023-01-30 16:30:43 +0000
commit6290deea027936f13c4424efb27a8615ac38c97b (patch)
treeaa4a6a851c6c63494b0af372715db2493f603038
parentb9923747ad28bea8b9466c7205a0db4d56545716 (diff)
ipa: mojom: raspberrypi: Add setLensControls() function
Add a setLensControls() function to the IPA/pipeline handler interface. This will be used in a future commit to control the lens actuator position from an autofocus algorithm. Signed-off-by: Nick Hollinghurst <nick.hollinghurst@raspberrypi.com> Signed-off-by: Naushir Patuck <naush@raspberrypi.com> Reviewed-by: Naushir Patuck <naush@raspberrypi.com> Reviewed-by: David Plowman <david.plowman@raspberrypi.com> Signed-off-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
-rw-r--r--include/libcamera/ipa/raspberrypi.mojom1
-rw-r--r--src/libcamera/pipeline/raspberrypi/raspberrypi.cpp12
2 files changed, 13 insertions, 0 deletions
diff --git a/include/libcamera/ipa/raspberrypi.mojom b/include/libcamera/ipa/raspberrypi.mojom
index bfacd127..8e78f167 100644
--- a/include/libcamera/ipa/raspberrypi.mojom
+++ b/include/libcamera/ipa/raspberrypi.mojom
@@ -131,4 +131,5 @@ interface IPARPiEventInterface {
embeddedComplete(uint32 bufferId);
setIspControls(libcamera.ControlList controls);
setDelayedControls(libcamera.ControlList controls, uint32 delayContext);
+ setLensControls(libcamera.ControlList controls);
};
diff --git a/src/libcamera/pipeline/raspberrypi/raspberrypi.cpp b/src/libcamera/pipeline/raspberrypi/raspberrypi.cpp
index 9d1596ab..c912fd16 100644
--- a/src/libcamera/pipeline/raspberrypi/raspberrypi.cpp
+++ b/src/libcamera/pipeline/raspberrypi/raspberrypi.cpp
@@ -208,6 +208,7 @@ public:
void embeddedComplete(uint32_t bufferId);
void setIspControls(const ControlList &controls);
void setDelayedControls(const ControlList &controls, uint32_t delayContext);
+ void setLensControls(const ControlList &controls);
void setSensorControls(ControlList &controls);
void unicamTimeout();
@@ -1496,6 +1497,7 @@ int RPiCameraData::loadIPA(ipa::RPi::IPAInitResult *result)
ipa_->embeddedComplete.connect(this, &RPiCameraData::embeddedComplete);
ipa_->setIspControls.connect(this, &RPiCameraData::setIspControls);
ipa_->setDelayedControls.connect(this, &RPiCameraData::setDelayedControls);
+ ipa_->setLensControls.connect(this, &RPiCameraData::setLensControls);
/*
* The configuration (tuning file) is made from the sensor name unless
@@ -1743,6 +1745,16 @@ void RPiCameraData::setDelayedControls(const ControlList &controls, uint32_t del
handleState();
}
+void RPiCameraData::setLensControls(const ControlList &controls)
+{
+ CameraLens *lens = sensor_->focusLens();
+
+ if (lens && controls.contains(V4L2_CID_FOCUS_ABSOLUTE)) {
+ ControlValue const &focusValue = controls.get(V4L2_CID_FOCUS_ABSOLUTE);
+ lens->setFocusPosition(focusValue.get<int32_t>());
+ }
+}
+
void RPiCameraData::setSensorControls(ControlList &controls)
{
/*