| /* SPDX-License-Identifier: LGPL-2.1-or-later */ |
| /* |
| * Copyright (C) 2019, Google Inc. |
| * |
| * camera_hal_manager.h - libcamera Android Camera Manager |
| */ |
| |
| #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(); |
| |
| static CameraHalManager *instance(); |
| |
| int init(); |
| |
| 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: |
| LIBCAMERA_DISABLE_COPY_AND_MOVE(CameraHalManager) |
| |
| static constexpr unsigned int firstExternalCameraId_ = 1000; |
| |
| CameraHalManager(); |
| |
| 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_; |
| }; |