Files
external_libcamera/src/android/camera_hal_manager.h
Umang Jain 20be38a0db 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>
2020-08-23 20:46:12 +03:00

62 lines
1.5 KiB
C++

/* SPDX-License-Identifier: LGPL-2.1-or-later */
/*
* Copyright (C) 2019, Google Inc.
*
* camera_hal_manager.h - libcamera Android Camera Manager
*/
#ifndef __ANDROID_CAMERA_MANAGER_H__
#define __ANDROID_CAMERA_MANAGER_H__
#include <map>
#include <mutex>
#include <stddef.h>
#include <vector>
#include <hardware/camera_common.h>
#include <hardware/hardware.h>
#include <system/camera_metadata.h>
#include <libcamera/camera_manager.h>
class CameraDevice;
class CameraHalManager
{
public:
CameraHalManager();
~CameraHalManager();
int init();
CameraDevice *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:
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__ */