summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJacopo Mondi <jacopo@jmondi.org>2019-11-20 16:35:29 +0100
committerJacopo Mondi <jacopo@jmondi.org>2020-02-14 16:27:42 +0100
commit025149b050a4814d0600c0da88fbcc2181a5f226 (patch)
tree4b06f376f72a0b14ca504361c156385eb5a6666c
parent2523771d7917a442cd53980b9ae88d25ae53fb38 (diff)
libcamera: pipeline_handler: Add Camera properties
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@ideasonboard.com> Reviewed-by: Niklas Söderlund <niklas.soderlund@ragnatech.se> Signed-off-by: Jacopo Mondi <jacopo@jmondi.org>
-rw-r--r--src/libcamera/include/pipeline_handler.h2
-rw-r--r--src/libcamera/pipeline/ipu3/ipu3.cpp3
-rw-r--r--src/libcamera/pipeline/rkisp1/rkisp1.cpp3
-rw-r--r--src/libcamera/pipeline/vimc.cpp4
-rw-r--r--src/libcamera/pipeline_handler.cpp19
5 files changed, 31 insertions, 0 deletions
diff --git a/src/libcamera/include/pipeline_handler.h b/src/libcamera/include/pipeline_handler.h
index 4ed34511..db6c3104 100644
--- a/src/libcamera/include/pipeline_handler.h
+++ b/src/libcamera/include/pipeline_handler.h
@@ -45,6 +45,7 @@ public:
PipelineHandler *pipe_;
std::list<Request *> queuedRequests_;
ControlInfoMap controlInfo_;
+ ControlList properties_;
std::unique_ptr<IPAInterface> ipa_;
private:
@@ -67,6 +68,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 8e8e3709..387bb070 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 403c85e6..13433b21 100644
--- a/src/libcamera/pipeline/rkisp1/rkisp1.cpp
+++ b/src/libcamera/pipeline/rkisp1/rkisp1.cpp
@@ -912,6 +912,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 b1054d30..5d3d12fe 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 22889be4..8d623f54 100644
--- a/src/libcamera/pipeline_handler.cpp
+++ b/src/libcamera/pipeline_handler.cpp
@@ -99,6 +99,14 @@ LOG_DEFINE_CATEGORY(Pipeline)
*/
/**
+ * \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
*
@@ -256,6 +264,17 @@ const ControlInfoMap &PipelineHandler::controls(Camera *camera)
}
/**
+ * \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
* \param[in] camera The camera to generate a default configuration for