[libcamera-devel] [PATCH 2/4] libcamera: camera_manager: Use std::unique_ptr to store event dispatcher
Laurent Pinchart
laurent.pinchart at ideasonboard.com
Fri Jan 18 00:59:14 CET 2019
The CameraManager takes ownership of the dispatcher passed to the
setEventDispatcher() function. Enforces this by using std::unique_ptr<>.
Signed-off-by: Laurent Pinchart <laurent.pinchart at ideasonboard.com>
---
include/libcamera/camera_manager.h | 4 ++--
src/libcamera/camera_manager.cpp | 11 ++++++-----
2 files changed, 8 insertions(+), 7 deletions(-)
diff --git a/include/libcamera/camera_manager.h b/include/libcamera/camera_manager.h
index 6cfcba3c3933..b82a8ce95b9f 100644
--- a/include/libcamera/camera_manager.h
+++ b/include/libcamera/camera_manager.h
@@ -29,7 +29,7 @@ public:
static CameraManager *instance();
- void setEventDispatcher(EventDispatcher *dispatcher);
+ void setEventDispatcher(std::unique_ptr<EventDispatcher> dispatcher);
EventDispatcher *eventDispatcher();
private:
@@ -41,7 +41,7 @@ private:
std::unique_ptr<DeviceEnumerator> enumerator_;
std::vector<PipelineHandler *> pipes_;
- EventDispatcher *dispatcher_;
+ std::unique_ptr<EventDispatcher> dispatcher_;
};
} /* namespace libcamera */
diff --git a/src/libcamera/camera_manager.cpp b/src/libcamera/camera_manager.cpp
index 9f554be57e33..9806e399f92b 100644
--- a/src/libcamera/camera_manager.cpp
+++ b/src/libcamera/camera_manager.cpp
@@ -58,7 +58,6 @@ CameraManager::CameraManager()
CameraManager::~CameraManager()
{
- delete dispatcher_;
}
/**
@@ -209,14 +208,14 @@ CameraManager *CameraManager::instance()
* The CameraManager takes ownership of the event dispatcher and will delete it
* when the application terminates.
*/
-void CameraManager::setEventDispatcher(EventDispatcher *dispatcher)
+void CameraManager::setEventDispatcher(std::unique_ptr<EventDispatcher> dispatcher)
{
if (dispatcher_) {
LOG(Warning) << "Event dispatcher is already set";
return;
}
- dispatcher_ = dispatcher;
+ dispatcher_ = std::move(dispatcher);
}
/**
@@ -226,14 +225,16 @@ void CameraManager::setEventDispatcher(EventDispatcher *dispatcher)
* If no dispatcher has been set, a default poll-based implementation is created
* and returned, and no custom event dispatcher may be installed anymore.
*
+ * The returned event dispatcher is valid until the camera manager is destroyed.
+ *
* \return Pointer to the event dispatcher
*/
EventDispatcher *CameraManager::eventDispatcher()
{
if (!dispatcher_)
- dispatcher_ = new EventDispatcherPoll();
+ dispatcher_.reset(new EventDispatcherPoll());
- return dispatcher_;
+ return dispatcher_.get();
}
} /* namespace libcamera */
--
Regards,
Laurent Pinchart
More information about the libcamera-devel
mailing list