diff --git a/include/libcamera/camera_manager.h b/include/libcamera/camera_manager.h index 15e7c1620..6cfcba3c3 100644 --- a/include/libcamera/camera_manager.h +++ b/include/libcamera/camera_manager.h @@ -7,6 +7,7 @@ #ifndef __LIBCAMERA_CAMERA_MANAGER_H__ #define __LIBCAMERA_CAMERA_MANAGER_H__ +#include #include #include @@ -37,7 +38,7 @@ private: void operator=(const CameraManager &) = delete; ~CameraManager(); - DeviceEnumerator *enumerator_; + std::unique_ptr enumerator_; std::vector pipes_; EventDispatcher *dispatcher_; diff --git a/src/libcamera/camera_manager.cpp b/src/libcamera/camera_manager.cpp index 2ee83d4dc..9f554be57 100644 --- a/src/libcamera/camera_manager.cpp +++ b/src/libcamera/camera_manager.cpp @@ -73,7 +73,6 @@ CameraManager::~CameraManager() */ int CameraManager::start() { - if (enumerator_) return -ENODEV; @@ -95,7 +94,7 @@ int CameraManager::start() */ while (1) { PipelineHandler *pipe = factory->create(); - if (!pipe->match(enumerator_)) { + if (!pipe->match(enumerator_.get())) { delete pipe; break; } @@ -130,10 +129,7 @@ void CameraManager::stop() pipes_.clear(); - if (enumerator_) - delete enumerator_; - - enumerator_ = nullptr; + enumerator_.reset(nullptr); } /** diff --git a/src/libcamera/device_enumerator.cpp b/src/libcamera/device_enumerator.cpp index 18d7e8684..55c510e3b 100644 --- a/src/libcamera/device_enumerator.cpp +++ b/src/libcamera/device_enumerator.cpp @@ -14,6 +14,7 @@ #include "device_enumerator.h" #include "log.h" #include "media_device.h" +#include "utils.h" /** * \file device_enumerator.h @@ -128,20 +129,18 @@ bool DeviceMatch::match(const MediaDevice *device) const * \return A pointer to the newly created device enumerator on success, or * nullptr if an error occurs */ -DeviceEnumerator *DeviceEnumerator::create() +std::unique_ptr DeviceEnumerator::create() { - DeviceEnumerator *enumerator; + std::unique_ptr enumerator; /** * \todo Add compile time checks to only try udev enumerator if libudev * is available. */ - enumerator = new DeviceEnumeratorUdev(); + enumerator = utils::make_unique(); if (!enumerator->init()) return enumerator; - delete enumerator; - /* * Either udev is not available or udev initialization failed. Fall back * on the sysfs enumerator. diff --git a/src/libcamera/include/device_enumerator.h b/src/libcamera/include/device_enumerator.h index b68c81582..c5541c5f8 100644 --- a/src/libcamera/include/device_enumerator.h +++ b/src/libcamera/include/device_enumerator.h @@ -8,6 +8,7 @@ #define __LIBCAMERA_DEVICE_ENUMERATOR_H__ #include +#include #include #include @@ -34,7 +35,7 @@ private: class DeviceEnumerator { public: - static DeviceEnumerator *create(); + static std::unique_ptr create(); virtual ~DeviceEnumerator();