[libcamera-devel] [RFC PATCH v2 3/4] libcamera: pipeline: ipu3: Get and set VCM information

Kate Hsuan hpa at redhat.com
Thu Apr 21 09:28:47 CEST 2022


It is an interface of CameraData to get the VCM steps. Also, the VCM step
value is stored in ConfigInfo.

Signed-off-by: Kate Hsuan<hpa at redhat.com>
---
 src/libcamera/pipeline/ipu3/ipu3.cpp | 15 +++++++++++++++
 1 file changed, 15 insertions(+)

diff --git a/src/libcamera/pipeline/ipu3/ipu3.cpp b/src/libcamera/pipeline/ipu3/ipu3.cpp
index fd989e61..d1a1d21c 100644
--- a/src/libcamera/pipeline/ipu3/ipu3.cpp
+++ b/src/libcamera/pipeline/ipu3/ipu3.cpp
@@ -86,6 +86,8 @@ public:
 
 	ControlInfoMap ipaControls_;
 
+	int getMaxLensSteps();
+
 private:
 	void metadataReady(unsigned int id, const ControlList &metadata);
 	void paramsBufferReady(unsigned int id);
@@ -667,6 +669,7 @@ int PipelineHandlerIPU3::configure(Camera *camera, CameraConfiguration *c)
 	CameraLens *lens = data->cio2_.sensor()->focusLens();
 	if (lens)
 		configInfo.lensControls = lens->controls();
+	sensorInfo.maxVcmSteps = data->getMaxLensSteps();
 
 	configInfo.sensorInfo = sensorInfo;
 	configInfo.bdsOutputSize = config->imguConfig().bds;
@@ -1272,6 +1275,18 @@ void IPU3CameraData::setSensorControls([[maybe_unused]] unsigned int id,
 	focusLens->setFocusPosition(focusValue.get<int32_t>());
 }
 
+int IPU3CameraData::getMaxLensSteps()
+{
+	int ret = 0;
+
+	CameraLens *focusLens = cio2_.sensor()->focusLens();
+	if (!focusLens)
+		return 0;
+
+	ret = focusLens->getMaxFocusStep();
+	return ret;
+}
+
 void IPU3CameraData::paramsBufferReady(unsigned int id)
 {
 	IPU3Frames::Info *info = frameInfos_.find(id);
-- 
2.35.1



More information about the libcamera-devel mailing list