summaryrefslogtreecommitdiff
path: root/src/android/camera_hal_manager.h
diff options
context:
space:
mode:
authorUmang Jain <email@uajain.com>2020-08-21 14:46:11 +0000
committerLaurent Pinchart <laurent.pinchart@ideasonboard.com>2020-08-23 20:46:12 +0300
commit20be38a0db2bfcbd9973ea63ba30e41fca83b200 (patch)
tree1acc29142aa0df71b193ed10f71cd4b6cb6d7a8e /src/android/camera_hal_manager.h
parent12b939aa5360089eb2299ed861b1ee1c77669d1b (diff)
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 <email@uajain.com> Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com> Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Diffstat (limited to 'src/android/camera_hal_manager.h')
-rw-r--r--src/android/camera_hal_manager.h19
1 files changed, 19 insertions, 0 deletions
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 <map>
+#include <mutex>
#include <stddef.h>
#include <vector>
@@ -33,10 +35,27 @@ public:
void setCallbacks(const camera_module_callbacks_t *callbacks);
private:
+ using Mutex = std::mutex;
+ using MutexLocker = std::unique_lock<std::mutex>;
+
+ static constexpr unsigned int firstExternalCameraId_ = 1000;
+
+ static int32_t cameraLocation(const libcamera::Camera *cam);
+
+ void cameraAdded(std::shared_ptr<libcamera::Camera> cam);
+ void cameraRemoved(std::shared_ptr<libcamera::Camera> cam);
+
+ CameraDevice *cameraDeviceFromHalId(unsigned int id);
+
libcamera::CameraManager *cameraManager_;
const camera_module_callbacks_t *callbacks_;
std::vector<std::shared_ptr<CameraDevice>> cameras_;
+ std::map<std::string, unsigned int> cameraIdsMap_;
+ Mutex mutex_;
+
+ unsigned int numInternalCameras_;
+ unsigned int nextExternalCameraId_;
};
#endif /* __ANDROID_CAMERA_MANAGER_H__ */