diff options
Diffstat (limited to 'src/android/camera_hal_manager.h')
-rw-r--r-- | src/android/camera_hal_manager.h | 47 |
1 files changed, 37 insertions, 10 deletions
diff --git a/src/android/camera_hal_manager.h b/src/android/camera_hal_manager.h index 94d8f005..836a8daf 100644 --- a/src/android/camera_hal_manager.h +++ b/src/android/camera_hal_manager.h @@ -2,40 +2,67 @@ /* * Copyright (C) 2019, Google Inc. * - * camera_hal_manager.h - libcamera Android Camera Manager + * libcamera Android Camera Manager */ -#ifndef __ANDROID_CAMERA_MANAGER_H__ -#define __ANDROID_CAMERA_MANAGER_H__ +#pragma once + +#include <map> #include <stddef.h> +#include <tuple> #include <vector> +#include <hardware/camera_common.h> #include <hardware/hardware.h> #include <system/camera_metadata.h> +#include <libcamera/base/class.h> +#include <libcamera/base/mutex.h> + #include <libcamera/camera_manager.h> +#include "camera_hal_config.h" + class CameraDevice; class CameraHalManager { public: - CameraHalManager(); ~CameraHalManager(); + static CameraHalManager *instance(); + int init(); - CameraDevice *open(unsigned int id, const hw_module_t *module); + std::tuple<CameraDevice *, int> + open(unsigned int id, const hw_module_t *module); unsigned int numCameras() const; int getCameraInfo(unsigned int id, struct camera_info *info); + void setCallbacks(const camera_module_callbacks_t *callbacks); private: - camera_metadata_t *getStaticMetadata(unsigned int id); + LIBCAMERA_DISABLE_COPY_AND_MOVE(CameraHalManager) - libcamera::CameraManager *cameraManager_; + static constexpr unsigned int firstExternalCameraId_ = 1000; - std::vector<std::unique_ptr<CameraDevice>> cameras_; -}; + CameraHalManager(); -#endif /* __ANDROID_CAMERA_MANAGER_H__ */ + 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_TSA_REQUIRES(mutex_); + + std::unique_ptr<libcamera::CameraManager> cameraManager_; + CameraHalConfig halConfig_; + + const camera_module_callbacks_t *callbacks_; + std::vector<std::unique_ptr<CameraDevice>> cameras_ LIBCAMERA_TSA_GUARDED_BY(mutex_); + std::map<std::string, unsigned int> cameraIdsMap_ LIBCAMERA_TSA_GUARDED_BY(mutex_); + libcamera::Mutex mutex_; + + unsigned int numInternalCameras_; + unsigned int nextExternalCameraId_; +}; |