From 20be38a0db2bfcbd9973ea63ba30e41fca83b200 Mon Sep 17 00:00:00 2001 From: Umang Jain Date: Fri, 21 Aug 2020 14:46:11 +0000 Subject: android: camera_hal_manager: Support camera hotplug Extend the support for camera hotplug from libcamera's CameraManager to CameraHalManager. Use camera module callbacks to let the framework know about the hotplug events and change the status of cameras being hotplugged or unplugged via camera_device_status_change(). Introduce a map cameraIdsMap_ which book-keeps all cameras seen in the past by the CameraHalManager. If the camera is seen for the first time, a new id is assigned to it. If the camera has been seen before by the manager, its old id is reused. IDs for internal cameras start with '0' and for external cameras, they start with '1000'. Accesses to cameraIdsMap_ and cameras_ are protected by a mutex. Signed-off-by: Umang Jain Reviewed-by: Laurent Pinchart Signed-off-by: Laurent Pinchart --- src/android/camera_hal_manager.h | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) (limited to 'src/android/camera_hal_manager.h') diff --git a/src/android/camera_hal_manager.h b/src/android/camera_hal_manager.h index 3e34d63f..a91decc7 100644 --- a/src/android/camera_hal_manager.h +++ b/src/android/camera_hal_manager.h @@ -7,6 +7,8 @@ #ifndef __ANDROID_CAMERA_MANAGER_H__ #define __ANDROID_CAMERA_MANAGER_H__ +#include +#include #include #include @@ -33,10 +35,27 @@ public: void setCallbacks(const camera_module_callbacks_t *callbacks); private: + using Mutex = std::mutex; + using MutexLocker = std::unique_lock; + + static constexpr unsigned int firstExternalCameraId_ = 1000; + + static int32_t cameraLocation(const libcamera::Camera *cam); + + void cameraAdded(std::shared_ptr cam); + void cameraRemoved(std::shared_ptr cam); + + CameraDevice *cameraDeviceFromHalId(unsigned int id); + libcamera::CameraManager *cameraManager_; const camera_module_callbacks_t *callbacks_; std::vector> cameras_; + std::map cameraIdsMap_; + Mutex mutex_; + + unsigned int numInternalCameras_; + unsigned int nextExternalCameraId_; }; #endif /* __ANDROID_CAMERA_MANAGER_H__ */ -- cgit v1.2.1