Message ID | 20210707021941.20804-17-laurent.pinchart@ideasonboard.com |
---|---|
State | Superseded |
Headers | show |
Series |
|
Related | show |
On 07/07/2021 03:19, Laurent Pinchart wrote: > Store the BufferWriter and FrameBufferAllocator pointers in > std::unique_ptr<> instances to simplify memory management and avoid > leaks. > > Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com> Reviewed-by: Kieran Bingham <kieran.bingham@ideasonboard.com> > --- > src/cam/camera_session.cpp | 16 +++++++--------- > src/cam/camera_session.h | 4 ++-- > 2 files changed, 9 insertions(+), 11 deletions(-) > > diff --git a/src/cam/camera_session.cpp b/src/cam/camera_session.cpp > index b1200e60329c..1fb7c1b6ad5d 100644 > --- a/src/cam/camera_session.cpp > +++ b/src/cam/camera_session.cpp > @@ -20,9 +20,8 @@ using namespace libcamera; > > CameraSession::CameraSession(std::shared_ptr<Camera> camera, > CameraConfiguration *config) > - : camera_(camera), config_(config), writer_(nullptr), last_(0), > - queueCount_(0), captureCount_(0), captureLimit_(0), > - printMetadata_(false), allocator_(nullptr) > + : camera_(camera), config_(config), last_(0), queueCount_(0), > + captureCount_(0), captureLimit_(0), printMetadata_(false) > { > } > > @@ -56,12 +55,12 @@ int CameraSession::start(const OptionsParser::Options &options) > > if (options.isSet(OptFile)) { > if (!options[OptFile].toString().empty()) > - writer_ = new BufferWriter(options[OptFile]); > + writer_ = std::make_unique<BufferWriter>(options[OptFile]); > else > - writer_ = new BufferWriter(); > + writer_ = std::make_unique<BufferWriter>(); > } > > - allocator_ = new FrameBufferAllocator(camera_); > + allocator_ = std::make_unique<FrameBufferAllocator>(camera_); > > return startCapture(); > } > @@ -72,12 +71,11 @@ void CameraSession::stop() > if (ret) > std::cout << "Failed to stop capture" << std::endl; > > - delete writer_; > - writer_ = nullptr; > + writer_.reset(); > > requests_.clear(); > > - delete allocator_; > + allocator_.reset(); > } > > int CameraSession::startCapture() > diff --git a/src/cam/camera_session.h b/src/cam/camera_session.h > index 5131cfd48b4e..31e8d6db01d9 100644 > --- a/src/cam/camera_session.h > +++ b/src/cam/camera_session.h > @@ -44,7 +44,7 @@ private: > libcamera::CameraConfiguration *config_; > > std::map<const libcamera::Stream *, std::string> streamName_; > - BufferWriter *writer_; > + std::unique_ptr<BufferWriter> writer_; > uint64_t last_; > > unsigned int queueCount_; > @@ -52,7 +52,7 @@ private: > unsigned int captureLimit_; > bool printMetadata_; > > - libcamera::FrameBufferAllocator *allocator_; > + std::unique_ptr<libcamera::FrameBufferAllocator> allocator_; > std::vector<std::unique_ptr<libcamera::Request>> requests_; > }; > >
diff --git a/src/cam/camera_session.cpp b/src/cam/camera_session.cpp index b1200e60329c..1fb7c1b6ad5d 100644 --- a/src/cam/camera_session.cpp +++ b/src/cam/camera_session.cpp @@ -20,9 +20,8 @@ using namespace libcamera; CameraSession::CameraSession(std::shared_ptr<Camera> camera, CameraConfiguration *config) - : camera_(camera), config_(config), writer_(nullptr), last_(0), - queueCount_(0), captureCount_(0), captureLimit_(0), - printMetadata_(false), allocator_(nullptr) + : camera_(camera), config_(config), last_(0), queueCount_(0), + captureCount_(0), captureLimit_(0), printMetadata_(false) { } @@ -56,12 +55,12 @@ int CameraSession::start(const OptionsParser::Options &options) if (options.isSet(OptFile)) { if (!options[OptFile].toString().empty()) - writer_ = new BufferWriter(options[OptFile]); + writer_ = std::make_unique<BufferWriter>(options[OptFile]); else - writer_ = new BufferWriter(); + writer_ = std::make_unique<BufferWriter>(); } - allocator_ = new FrameBufferAllocator(camera_); + allocator_ = std::make_unique<FrameBufferAllocator>(camera_); return startCapture(); } @@ -72,12 +71,11 @@ void CameraSession::stop() if (ret) std::cout << "Failed to stop capture" << std::endl; - delete writer_; - writer_ = nullptr; + writer_.reset(); requests_.clear(); - delete allocator_; + allocator_.reset(); } int CameraSession::startCapture() diff --git a/src/cam/camera_session.h b/src/cam/camera_session.h index 5131cfd48b4e..31e8d6db01d9 100644 --- a/src/cam/camera_session.h +++ b/src/cam/camera_session.h @@ -44,7 +44,7 @@ private: libcamera::CameraConfiguration *config_; std::map<const libcamera::Stream *, std::string> streamName_; - BufferWriter *writer_; + std::unique_ptr<BufferWriter> writer_; uint64_t last_; unsigned int queueCount_; @@ -52,7 +52,7 @@ private: unsigned int captureLimit_; bool printMetadata_; - libcamera::FrameBufferAllocator *allocator_; + std::unique_ptr<libcamera::FrameBufferAllocator> allocator_; std::vector<std::unique_ptr<libcamera::Request>> requests_; };
Store the BufferWriter and FrameBufferAllocator pointers in std::unique_ptr<> instances to simplify memory management and avoid leaks. Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com> --- src/cam/camera_session.cpp | 16 +++++++--------- src/cam/camera_session.h | 4 ++-- 2 files changed, 9 insertions(+), 11 deletions(-)