[libcamera-devel] [PATCH 10/18] libcamera: camera_manager: Bind CameraManager to threads
Niklas Söderlund
niklas.soderlund at ragnatech.se
Sat Aug 17 16:57:10 CEST 2019
Hi Laurent,
Thanks for your work.
On 2019-08-12 15:46:34 +0300, Laurent Pinchart wrote:
> 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 at ideasonboard.com>
Reviewed-by: Niklas Söderlund <niklas.soderlund at ragnatech.se>
> ---
> include/libcamera/camera_manager.h | 4 +++-
> src/libcamera/camera_manager.cpp | 4 ++--
> 2 files changed, 5 insertions(+), 3 deletions(-)
>
> 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 */
> --
> Regards,
>
> Laurent Pinchart
>
> _______________________________________________
> libcamera-devel mailing list
> libcamera-devel at lists.libcamera.org
> https://lists.libcamera.org/listinfo/libcamera-devel
--
Regards,
Niklas Söderlund
More information about the libcamera-devel
mailing list