summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/libcamera/include/pipeline_handler.h10
-rw-r--r--src/libcamera/pipeline_handler.cpp101
2 files changed, 55 insertions, 56 deletions
diff --git a/src/libcamera/include/pipeline_handler.h b/src/libcamera/include/pipeline_handler.h
index 7f2ec297..4363dcd8 100644
--- a/src/libcamera/include/pipeline_handler.h
+++ b/src/libcamera/include/pipeline_handler.h
@@ -42,6 +42,8 @@ public:
PipelineHandler(CameraManager *manager);
virtual ~PipelineHandler();
+ virtual bool match(DeviceEnumerator *enumerator) = 0;
+
virtual std::map<Stream *, StreamConfiguration>
streamConfiguration(Camera *camera, std::vector<Stream *> &streams) = 0;
virtual int configureStreams(Camera *camera,
@@ -55,20 +57,18 @@ public:
virtual int queueRequest(const Camera *camera, Request *request) = 0;
- virtual bool match(DeviceEnumerator *enumerator) = 0;
-
protected:
- CameraManager *manager_;
-
void registerCamera(std::shared_ptr<Camera> camera);
void hotplugMediaDevice(MediaDevice *media);
CameraData *cameraData(const Camera *camera);
void setCameraData(const Camera *camera, std::unique_ptr<CameraData> data);
+ CameraManager *manager_;
+
private:
- virtual void disconnect();
void mediaDeviceDisconnected(MediaDevice *media);
+ virtual void disconnect();
std::vector<std::weak_ptr<Camera>> cameras_;
std::map<const Camera *, std::unique_ptr<CameraData>> cameraData_;
diff --git a/src/libcamera/pipeline_handler.cpp b/src/libcamera/pipeline_handler.cpp
index cc2d4643..4e111d6d 100644
--- a/src/libcamera/pipeline_handler.cpp
+++ b/src/libcamera/pipeline_handler.cpp
@@ -75,6 +75,36 @@ PipelineHandler::~PipelineHandler()
{
};
+/**
+ * \fn PipelineHandler::match(DeviceEnumerator *enumerator)
+ * \brief Match media devices and create camera instances
+ * \param enumerator The enumerator providing all media devices found in the
+ * system
+ *
+ * This function is the main entry point of the pipeline handler. It is called
+ * by the camera manager with the \a enumerator passed as an argument. It shall
+ * acquire from the \a enumerator all the media devices it needs for a single
+ * pipeline, create one or multiple Camera instances and register them with the
+ * camera manager.
+ *
+ * If all media devices needed by the pipeline handler are found, they must all
+ * be acquired by a call to MediaDevice::acquire(). This function shall then
+ * create the corresponding Camera instances, store them internally, and return
+ * true. Otherwise it shall not acquire any media device (or shall release all
+ * the media devices is has acquired by calling MediaDevice::release()) and
+ * return false.
+ *
+ * If multiple instances of a pipeline are available in the system, the
+ * PipelineHandler class will be instanciated once per instance, and its match()
+ * function called for every instance. Each call shall acquire media devices for
+ * one pipeline instance, until all compatible media devices are exhausted.
+ *
+ * If this function returns true, a new instance of the pipeline handler will
+ * be created and its match() function called.
+ *
+ * \return true if media devices have been acquired and camera instances
+ * created, or false otherwise
+ */
/**
* \fn PipelineHandler::streamConfiguration()
@@ -177,46 +207,6 @@ PipelineHandler::~PipelineHandler()
*/
/**
- * \fn PipelineHandler::match(DeviceEnumerator *enumerator)
- * \brief Match media devices and create camera instances
- * \param enumerator The enumerator providing all media devices found in the
- * system
- *
- * This function is the main entry point of the pipeline handler. It is called
- * by the camera manager with the \a enumerator passed as an argument. It shall
- * acquire from the \a enumerator all the media devices it needs for a single
- * pipeline, create one or multiple Camera instances and register them with the
- * camera manager.
- *
- * If all media devices needed by the pipeline handler are found, they must all
- * be acquired by a call to MediaDevice::acquire(). This function shall then
- * create the corresponding Camera instances, store them internally, and return
- * true. Otherwise it shall not acquire any media device (or shall release all
- * the media devices is has acquired by calling MediaDevice::release()) and
- * return false.
- *
- * If multiple instances of a pipeline are available in the system, the
- * PipelineHandler class will be instanciated once per instance, and its match()
- * function called for every instance. Each call shall acquire media devices for
- * one pipeline instance, until all compatible media devices are exhausted.
- *
- * If this function returns true, a new instance of the pipeline handler will
- * be created and its match() function called.
- *
- * \return true if media devices have been acquired and camera instances
- * created, or false otherwise
- */
-
-/**
- * \var PipelineHandler::manager_
- * \brief The Camera manager associated with the pipeline handler
- *
- * The camera manager pointer is stored in the pipeline handler for the
- * convenience of pipeline handler implementations. It remains valid and
- * constant for the whole lifetime of the pipeline handler.
- */
-
-/**
* \brief Register a camera to the camera manager and pipeline handler
* \param[in] camera The camera to be added
*
@@ -247,6 +237,17 @@ void PipelineHandler::hotplugMediaDevice(MediaDevice *media)
}
/**
+ * \brief Slot for the MediaDevice disconnected signal
+ */
+void PipelineHandler::mediaDeviceDisconnected(MediaDevice *media)
+{
+ if (cameras_.empty())
+ return;
+
+ disconnect();
+}
+
+/**
* \brief Device disconnection handler
*
* This virtual function is called to notify the pipeline handler that the
@@ -273,17 +274,6 @@ void PipelineHandler::disconnect()
}
/**
- * \brief Slot for the MediaDevice disconnected signal
- */
-void PipelineHandler::mediaDeviceDisconnected(MediaDevice *media)
-{
- if (cameras_.empty())
- return;
-
- disconnect();
-}
-
-/**
* \brief Retrieve the pipeline-specific data associated with a Camera
* \param camera The camera whose data to retrieve
*
@@ -332,6 +322,15 @@ void PipelineHandler::setCameraData(const Camera *camera,
}
/**
+ * \var PipelineHandler::manager_
+ * \brief The Camera manager associated with the pipeline handler
+ *
+ * The camera manager pointer is stored in the pipeline handler for the
+ * convenience of pipeline handler implementations. It remains valid and
+ * constant for the whole lifetime of the pipeline handler.
+ */
+
+/**
* \class PipelineHandlerFactory
* \brief Registration of PipelineHandler classes and creation of instances
*