mirror of
https://git.libcamera.org/libcamera/libcamera.git
synced 2025-07-24 17:15:07 +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;
|
||||
}
|
||||
|
||||
std::shared_ptr<CameraDevice> CameraDevice::create(unsigned int id,
|
||||
std::unique_ptr<CameraDevice> CameraDevice::create(unsigned int id,
|
||||
const std::shared_ptr<Camera> &cam)
|
||||
{
|
||||
CameraDevice *camera = new CameraDevice(id, cam);
|
||||
return std::shared_ptr<CameraDevice>(camera);
|
||||
return std::unique_ptr<CameraDevice>(new CameraDevice(id, cam));
|
||||
}
|
||||
|
||||
/*
|
||||
|
|
|
@ -32,7 +32,7 @@
|
|||
class CameraDevice : protected libcamera::Loggable
|
||||
{
|
||||
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);
|
||||
~CameraDevice();
|
||||
|
||||
|
|
|
@ -36,8 +36,6 @@ CameraHalManager::CameraHalManager()
|
|||
|
||||
CameraHalManager::~CameraHalManager()
|
||||
{
|
||||
cameras_.clear();
|
||||
|
||||
if (cameraManager_) {
|
||||
cameraManager_->stop();
|
||||
delete cameraManager_;
|
||||
|
@ -125,7 +123,7 @@ void CameraHalManager::cameraAdded(std::shared_ptr<Camera> cam)
|
|||
}
|
||||
|
||||
/* 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();
|
||||
if (ret) {
|
||||
LOG(HAL, Error) << "Failed to initialize camera: " << cam->id();
|
||||
|
@ -155,7 +153,7 @@ void CameraHalManager::cameraRemoved(std::shared_ptr<Camera> cam)
|
|||
MutexLocker locker(mutex_);
|
||||
|
||||
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();
|
||||
});
|
||||
if (iter == cameras_.end())
|
||||
|
@ -192,7 +190,7 @@ int32_t CameraHalManager::cameraLocation(const Camera *cam)
|
|||
CameraDevice *CameraHalManager::cameraDeviceFromHalId(unsigned int id)
|
||||
{
|
||||
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;
|
||||
});
|
||||
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
|
||||
* 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();
|
||||
if (id >= firstExternalCameraId_)
|
||||
callbacks_->camera_device_status_change(callbacks_, id,
|
||||
|
|
|
@ -52,7 +52,7 @@ private:
|
|||
libcamera::CameraManager *cameraManager_;
|
||||
|
||||
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_;
|
||||
Mutex mutex_;
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue