mirror of
https://git.libcamera.org/libcamera/libcamera.git
synced 2025-07-25 09:35:06 +03:00
android: CameraHalManager: Hold CameraDevice with std::unique_ptr
CameraDevice is owned by CameraHalManager. The ownership of the object is not shared with other classes. So CameraHalManager should manage CameraDevice with std::unique_ptr. Signed-off-by: Hirokazu Honda <hiroh@chromium.org> Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com> Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
This commit is contained in:
parent
1d8cc0a3ec
commit
212f410c7c
4 changed files with 8 additions and 11 deletions
|
@ -350,11 +350,10 @@ CameraDevice::~CameraDevice()
|
||||||
delete it.second;
|
delete it.second;
|
||||||
}
|
}
|
||||||
|
|
||||||
std::shared_ptr<CameraDevice> CameraDevice::create(unsigned int id,
|
std::unique_ptr<CameraDevice> CameraDevice::create(unsigned int id,
|
||||||
const std::shared_ptr<Camera> &cam)
|
const std::shared_ptr<Camera> &cam)
|
||||||
{
|
{
|
||||||
CameraDevice *camera = new CameraDevice(id, cam);
|
return std::unique_ptr<CameraDevice>(new CameraDevice(id, cam));
|
||||||
return std::shared_ptr<CameraDevice>(camera);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|
|
@ -32,7 +32,7 @@
|
||||||
class CameraDevice : protected libcamera::Loggable
|
class CameraDevice : protected libcamera::Loggable
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
static std::shared_ptr<CameraDevice> create(unsigned int id,
|
static std::unique_ptr<CameraDevice> create(unsigned int id,
|
||||||
const std::shared_ptr<libcamera::Camera> &cam);
|
const std::shared_ptr<libcamera::Camera> &cam);
|
||||||
~CameraDevice();
|
~CameraDevice();
|
||||||
|
|
||||||
|
|
|
@ -36,8 +36,6 @@ CameraHalManager::CameraHalManager()
|
||||||
|
|
||||||
CameraHalManager::~CameraHalManager()
|
CameraHalManager::~CameraHalManager()
|
||||||
{
|
{
|
||||||
cameras_.clear();
|
|
||||||
|
|
||||||
if (cameraManager_) {
|
if (cameraManager_) {
|
||||||
cameraManager_->stop();
|
cameraManager_->stop();
|
||||||
delete cameraManager_;
|
delete cameraManager_;
|
||||||
|
@ -125,7 +123,7 @@ void CameraHalManager::cameraAdded(std::shared_ptr<Camera> cam)
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Create a CameraDevice instance to wrap the libcamera Camera. */
|
/* Create a CameraDevice instance to wrap the libcamera Camera. */
|
||||||
std::shared_ptr<CameraDevice> camera = CameraDevice::create(id, std::move(cam));
|
std::unique_ptr<CameraDevice> camera = CameraDevice::create(id, std::move(cam));
|
||||||
int ret = camera->initialize();
|
int ret = camera->initialize();
|
||||||
if (ret) {
|
if (ret) {
|
||||||
LOG(HAL, Error) << "Failed to initialize camera: " << cam->id();
|
LOG(HAL, Error) << "Failed to initialize camera: " << cam->id();
|
||||||
|
@ -155,7 +153,7 @@ void CameraHalManager::cameraRemoved(std::shared_ptr<Camera> cam)
|
||||||
MutexLocker locker(mutex_);
|
MutexLocker locker(mutex_);
|
||||||
|
|
||||||
auto iter = std::find_if(cameras_.begin(), cameras_.end(),
|
auto iter = std::find_if(cameras_.begin(), cameras_.end(),
|
||||||
[&cam](std::shared_ptr<CameraDevice> &camera) {
|
[&cam](const std::unique_ptr<CameraDevice> &camera) {
|
||||||
return cam == camera->camera();
|
return cam == camera->camera();
|
||||||
});
|
});
|
||||||
if (iter == cameras_.end())
|
if (iter == cameras_.end())
|
||||||
|
@ -192,7 +190,7 @@ int32_t CameraHalManager::cameraLocation(const Camera *cam)
|
||||||
CameraDevice *CameraHalManager::cameraDeviceFromHalId(unsigned int id)
|
CameraDevice *CameraHalManager::cameraDeviceFromHalId(unsigned int id)
|
||||||
{
|
{
|
||||||
auto iter = std::find_if(cameras_.begin(), cameras_.end(),
|
auto iter = std::find_if(cameras_.begin(), cameras_.end(),
|
||||||
[id](std::shared_ptr<CameraDevice> &camera) {
|
[id](const std::unique_ptr<CameraDevice> &camera) {
|
||||||
return camera->id() == id;
|
return camera->id() == id;
|
||||||
});
|
});
|
||||||
if (iter == cameras_.end())
|
if (iter == cameras_.end())
|
||||||
|
@ -244,7 +242,7 @@ void CameraHalManager::setCallbacks(const camera_module_callbacks_t *callbacks)
|
||||||
* Internal cameras are already assumed to be present at module load
|
* Internal cameras are already assumed to be present at module load
|
||||||
* time by the Android framework.
|
* time by the Android framework.
|
||||||
*/
|
*/
|
||||||
for (std::shared_ptr<CameraDevice> &camera : cameras_) {
|
for (const std::unique_ptr<CameraDevice> &camera : cameras_) {
|
||||||
unsigned int id = camera->id();
|
unsigned int id = camera->id();
|
||||||
if (id >= firstExternalCameraId_)
|
if (id >= firstExternalCameraId_)
|
||||||
callbacks_->camera_device_status_change(callbacks_, id,
|
callbacks_->camera_device_status_change(callbacks_, id,
|
||||||
|
|
|
@ -52,7 +52,7 @@ private:
|
||||||
libcamera::CameraManager *cameraManager_;
|
libcamera::CameraManager *cameraManager_;
|
||||||
|
|
||||||
const camera_module_callbacks_t *callbacks_;
|
const camera_module_callbacks_t *callbacks_;
|
||||||
std::vector<std::shared_ptr<CameraDevice>> cameras_;
|
std::vector<std::unique_ptr<CameraDevice>> cameras_;
|
||||||
std::map<std::string, unsigned int> cameraIdsMap_;
|
std::map<std::string, unsigned int> cameraIdsMap_;
|
||||||
Mutex mutex_;
|
Mutex mutex_;
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue