summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-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