[libcamera-devel,v2,10/18] libcamera: camera_manager: Bind CameraManager to threads

Message ID 20190817152104.10834-11-laurent.pinchart@ideasonboard.com
State Accepted
Headers show
Series
  • Object & Thread enhancements
Related show

Commit Message

Laurent Pinchart Aug. 17, 2019, 3:20 p.m. UTC
The CameraManager class uses the event dispatcher of the current thread.
This makes the CameraManager::eventDispatcher() and
CameraManager::setEventDispatcher() methods inconsistent, as they access
different event dispatcher instances depending on the calling thread.

Fix this by inheriting from the Object class, which binds the
CameraManager to a thread, and use the event dispatcher of the bound
thread.

Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Reviewed-by: Jacopo Mondi <jacopo@jmondi.org>
Reviewed-by: Niklas Söderlund <niklas.soderlund@ragnatech.se>
---
 include/libcamera/camera_manager.h | 4 +++-
 src/libcamera/camera_manager.cpp   | 4 ++--
 2 files changed, 5 insertions(+), 3 deletions(-)

Patch

diff --git a/include/libcamera/camera_manager.h b/include/libcamera/camera_manager.h
index 0e8881baba40..ff7d4c7c6745 100644
--- a/include/libcamera/camera_manager.h
+++ b/include/libcamera/camera_manager.h
@@ -11,6 +11,8 @@ 
 #include <string>
 #include <vector>
 
+#include <libcamera/object.h>
+
 namespace libcamera {
 
 class Camera;
@@ -18,7 +20,7 @@  class DeviceEnumerator;
 class EventDispatcher;
 class PipelineHandler;
 
-class CameraManager
+class CameraManager : public Object
 {
 public:
 	int start();
diff --git a/src/libcamera/camera_manager.cpp b/src/libcamera/camera_manager.cpp
index 2cf014233b05..4a880684c5cb 100644
--- a/src/libcamera/camera_manager.cpp
+++ b/src/libcamera/camera_manager.cpp
@@ -248,7 +248,7 @@  CameraManager *CameraManager::instance()
  */
 void CameraManager::setEventDispatcher(std::unique_ptr<EventDispatcher> dispatcher)
 {
-	Thread::current()->setEventDispatcher(std::move(dispatcher));
+	thread()->setEventDispatcher(std::move(dispatcher));
 }
 
 /**
@@ -264,7 +264,7 @@  void CameraManager::setEventDispatcher(std::unique_ptr<EventDispatcher> dispatch
  */
 EventDispatcher *CameraManager::eventDispatcher()
 {
-	return Thread::current()->eventDispatcher();
+	return thread()->eventDispatcher();
 }
 
 } /* namespace libcamera */