[libcamera-devel] [PATCH v5 7/9] libcamera: pipeline_handler: Add Camera properties

Jacopo Mondi jacopo at jmondi.org
Thu Feb 6 02:25:59 CET 2020


Associate to each Camera a ControlList which contains the Camera
properties as created by pipeline handlers in the pipeline handler's
CameraData and provide an operation to retrieve them.

Collect properties from the camera sensor in all pipeline handlers that
support one (IPU3, RKISP1 and VIMC).

Reviewed-by: Laurent Pinchart <laurent.pinchart at ideasonboard.com>
Reviewed-by: Niklas Söderlund <niklas.soderlund at ragnatech.se>
Signed-off-by: Jacopo Mondi <jacopo at jmondi.org>
---
 src/libcamera/include/pipeline_handler.h |  2 ++
 src/libcamera/pipeline/ipu3/ipu3.cpp     |  3 +++
 src/libcamera/pipeline/rkisp1/rkisp1.cpp |  3 +++
 src/libcamera/pipeline/vimc.cpp          |  4 ++++
 src/libcamera/pipeline_handler.cpp       | 19 +++++++++++++++++++
 5 files changed, 31 insertions(+)

diff --git a/src/libcamera/include/pipeline_handler.h b/src/libcamera/include/pipeline_handler.h
index 97157dd75c8a..923bd393d1a2 100644
--- a/src/libcamera/include/pipeline_handler.h
+++ b/src/libcamera/include/pipeline_handler.h
@@ -44,6 +44,7 @@ public:
 	PipelineHandler *pipe_;
 	std::list<Request *> queuedRequests_;
 	ControlInfoMap controlInfo_;
+	ControlList properties_;
 	std::unique_ptr<IPAInterface> ipa_;
 
 private:
@@ -65,6 +66,7 @@ public:
 	void unlock();
 
 	const ControlInfoMap &controls(Camera *camera);
+	const ControlList &properties(Camera *camera);
 
 	virtual CameraConfiguration *generateConfiguration(Camera *camera,
 		const StreamRoles &roles) = 0;
diff --git a/src/libcamera/pipeline/ipu3/ipu3.cpp b/src/libcamera/pipeline/ipu3/ipu3.cpp
index 8e8e370922ad..387bb070b505 100644
--- a/src/libcamera/pipeline/ipu3/ipu3.cpp
+++ b/src/libcamera/pipeline/ipu3/ipu3.cpp
@@ -887,6 +887,9 @@ int PipelineHandlerIPU3::registerCameras()
 		if (ret)
 			continue;
 
+		/* Initialize the camera properties. */
+		data->properties_ = cio2->sensor_->properties();
+
 		/**
 		 * \todo Dynamically assign ImgU and output devices to each
 		 * stream and camera; as of now, limit support to two cameras
diff --git a/src/libcamera/pipeline/rkisp1/rkisp1.cpp b/src/libcamera/pipeline/rkisp1/rkisp1.cpp
index 0b3dd9759387..68f16f03a81e 100644
--- a/src/libcamera/pipeline/rkisp1/rkisp1.cpp
+++ b/src/libcamera/pipeline/rkisp1/rkisp1.cpp
@@ -906,6 +906,9 @@ int PipelineHandlerRkISP1::createCamera(MediaEntity *sensor)
 	if (ret)
 		return ret;
 
+	/* Initialize the camera properties. */
+	data->properties_ = data->sensor_->properties();
+
 	ret = data->loadIPA();
 	if (ret)
 		return ret;
diff --git a/src/libcamera/pipeline/vimc.cpp b/src/libcamera/pipeline/vimc.cpp
index b1054d307ea2..5d3d12fef30b 100644
--- a/src/libcamera/pipeline/vimc.cpp
+++ b/src/libcamera/pipeline/vimc.cpp
@@ -452,6 +452,10 @@ int VimcCameraData::init(MediaDevice *media)
 	}
 
 	controlInfo_ = std::move(ctrls);
+
+	/* Initialize the camera properties. */
+	properties_ = sensor_->properties();
+
 	return 0;
 }
 
diff --git a/src/libcamera/pipeline_handler.cpp b/src/libcamera/pipeline_handler.cpp
index 5476dbab74d5..e976393db3e0 100644
--- a/src/libcamera/pipeline_handler.cpp
+++ b/src/libcamera/pipeline_handler.cpp
@@ -98,6 +98,14 @@ LOG_DEFINE_CATEGORY(Pipeline)
  * creating the camera, and shall not be modified afterwards.
  */
 
+/**
+ * \var CameraData::properties_
+ * \brief The list of properties supported by the camera
+ *
+ * The list of camera properties shall be initialised by the pipeline handler
+ * when creating the camera, and shall not be modified afterwards.
+ */
+
 /**
  * \var CameraData::ipa_
  * \brief The IPA module used by the camera
@@ -246,6 +254,17 @@ const ControlInfoMap &PipelineHandler::controls(Camera *camera)
 	return data->controlInfo_;
 }
 
+/**
+ * \brief Retrieve the list of properties for a camera
+ * \param[in] camera The camera
+ * \return A ControlList of properties supported by \a camera
+ */
+const ControlList &PipelineHandler::properties(Camera *camera)
+{
+	CameraData *data = cameraData(camera);
+	return data->properties_;
+}
+
 /**
  * \fn PipelineHandler::generateConfiguration()
  * \brief Generate a camera configuration for a specified camera
-- 
2.24.1



More information about the libcamera-devel mailing list