[libcamera-devel] [RFC 10/11] libcamera: pipeline_handler: Add functions to lock a whole pipeline
Niklas Söderlund
niklas.soderlund at ragnatech.se
Sun Apr 14 03:35:05 CEST 2019
Add lock() and unlock() which backed by the MediaDevice implementation
can will lock all media devices claimed by a pipeline handler instance.
Signed-off-by: Niklas Söderlund <niklas.soderlund at ragnatech.se>
---
src/libcamera/include/pipeline_handler.h | 3 +++
src/libcamera/pipeline_handler.cpp | 18 ++++++++++++++++++
2 files changed, 21 insertions(+)
diff --git a/src/libcamera/include/pipeline_handler.h b/src/libcamera/include/pipeline_handler.h
index d995a7e56d90f706..0e79b05035cc2abb 100644
--- a/src/libcamera/include/pipeline_handler.h
+++ b/src/libcamera/include/pipeline_handler.h
@@ -56,6 +56,9 @@ public:
std::shared_ptr<MediaDevice> tryAcquire(DeviceEnumerator *enumerator,
const DeviceMatch &dm);
+ bool lock();
+ void unlock();
+
virtual CameraConfiguration
streamConfiguration(Camera *camera, const std::vector<StreamUsage> &usages) = 0;
virtual int configureStreams(Camera *camera, const CameraConfiguration &config) = 0;
diff --git a/src/libcamera/pipeline_handler.cpp b/src/libcamera/pipeline_handler.cpp
index 7f4035c008f95f91..317b680214d91071 100644
--- a/src/libcamera/pipeline_handler.cpp
+++ b/src/libcamera/pipeline_handler.cpp
@@ -170,6 +170,24 @@ out:
return media;
}
+bool PipelineHandler::lock()
+{
+ for (std::shared_ptr<MediaDevice> media : mediaDevices_) {
+ if (!media->lock()) {
+ unlock();
+ return false;
+ }
+ }
+
+ return true;
+}
+
+void PipelineHandler::unlock()
+{
+ for (std::shared_ptr<MediaDevice> media : mediaDevices_)
+ media->unlock();
+}
+
/**
* \fn PipelineHandler::streamConfiguration()
* \brief Retrieve a group of stream configurations for a specified camera
--
2.21.0
More information about the libcamera-devel
mailing list