libcamera: Replace plain pointers with std::unique<>

libcamera uses std::unique_ptr<> to simplify life time management of
objects and avoid leaks. For historical reasons there are a fair number
of plain pointers with manual memory management. Replace them with
std::unique_ptr<> when the conversion is simple.

Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Reviewed-by: Milan Zamazal <mzamazal@redhat.com>
Reviewed-by: Isaac Scott <isaac.scott@ideasonboard.com>
Reviewed-by: Barnabás Pőcze <barnabas.pocze@ideasonboard.com>
This commit is contained in:
Laurent Pinchart
2026-04-24 01:17:37 +03:00
parent 0f9b73bae2
commit 1e4e158d98
16 changed files with 48 additions and 62 deletions
+2 -4
View File
@@ -28,14 +28,12 @@ namespace libcamera {
LOG_DECLARE_CATEGORY(DeviceEnumerator)
DeviceEnumeratorUdev::DeviceEnumeratorUdev()
: udev_(nullptr), monitor_(nullptr), notifier_(nullptr)
: udev_(nullptr), monitor_(nullptr)
{
}
DeviceEnumeratorUdev::~DeviceEnumeratorUdev()
{
delete notifier_;
if (monitor_)
udev_monitor_unref(monitor_);
if (udev_)
@@ -212,7 +210,7 @@ done:
return ret;
int fd = udev_monitor_get_fd(monitor_);
notifier_ = new EventNotifier(fd, EventNotifier::Read);
notifier_ = std::make_unique<EventNotifier>(fd, EventNotifier::Read);
notifier_->activated.connect(this, &DeviceEnumeratorUdev::udevNotify);
return 0;
+3 -4
View File
@@ -70,7 +70,7 @@ LOG_DEFINE_CATEGORY(IPCUnixSocket)
*/
IPCUnixSocket::IPCUnixSocket()
: headerReceived_(false), notifier_(nullptr)
: headerReceived_(false)
{
}
@@ -130,7 +130,7 @@ int IPCUnixSocket::bind(UniqueFD fd)
return -EINVAL;
fd_ = std::move(fd);
notifier_ = new EventNotifier(fd_.get(), EventNotifier::Read);
notifier_ = std::make_unique<EventNotifier>(fd_.get(), EventNotifier::Read);
notifier_->activated.connect(this, &IPCUnixSocket::dataNotifier);
return 0;
@@ -146,8 +146,7 @@ void IPCUnixSocket::close()
if (!isBound())
return;
delete notifier_;
notifier_ = nullptr;
notifier_.reset();
fd_.reset();
headerReceived_ = false;
+3 -2
View File
@@ -123,7 +123,8 @@ int V4L2Device::setFd(UniqueFD fd)
fd_ = std::move(fd);
fdEventNotifier_ = new EventNotifier(fd_.get(), EventNotifier::Exception);
fdEventNotifier_ = std::make_unique<EventNotifier>(fd_.get(),
EventNotifier::Exception);
fdEventNotifier_->activated.connect(this, &V4L2Device::eventAvailable);
fdEventNotifier_->setEnabled(false);
@@ -142,7 +143,7 @@ void V4L2Device::close()
if (!isOpen())
return;
delete fdEventNotifier_;
fdEventNotifier_.reset();
fd_.reset();
}
+9 -13
View File
@@ -535,8 +535,7 @@ std::ostream &operator<<(std::ostream &out, const V4L2DeviceFormat &f)
*/
V4L2VideoDevice::V4L2VideoDevice(const std::string &deviceNode)
: V4L2Device(deviceNode), formatInfo_(nullptr), cache_(nullptr),
fdBufferNotifier_(nullptr), state_(State::Stopped),
watchdogDuration_(0.0)
state_(State::Stopped), watchdogDuration_(0.0)
{
/*
* We default to an MMAP based CAPTURE video device, however this will
@@ -626,7 +625,7 @@ int V4L2VideoDevice::open()
return -EINVAL;
}
fdBufferNotifier_ = new EventNotifier(fd(), notifierType);
fdBufferNotifier_ = std::make_unique<EventNotifier>(fd(), notifierType);
fdBufferNotifier_->activated.connect(this, &V4L2VideoDevice::bufferAvailable);
fdBufferNotifier_->setEnabled(false);
@@ -715,7 +714,7 @@ int V4L2VideoDevice::open(SharedFD handle, enum v4l2_buf_type type)
return -EINVAL;
}
fdBufferNotifier_ = new EventNotifier(fd(), notifierType);
fdBufferNotifier_ = std::make_unique<EventNotifier>(fd(), notifierType);
fdBufferNotifier_->activated.connect(this, &V4L2VideoDevice::bufferAvailable);
fdBufferNotifier_->setEnabled(false);
@@ -760,7 +759,7 @@ void V4L2VideoDevice::close()
return;
releaseBuffers();
delete fdBufferNotifier_;
fdBufferNotifier_.reset();
formatInfo_ = nullptr;
@@ -1374,7 +1373,7 @@ int V4L2VideoDevice::allocateBuffers(unsigned int count,
if (ret < 0)
return ret;
cache_ = new V4L2BufferCache(*buffers);
cache_ = std::make_unique<V4L2BufferCache>(*buffers);
memoryType_ = V4L2_MEMORY_MMAP;
return ret;
@@ -1599,7 +1598,7 @@ int V4L2VideoDevice::importBuffers(unsigned int count)
if (ret)
return ret;
cache_ = new V4L2BufferCache(count);
cache_ = std::make_unique<V4L2BufferCache>(count);
LOG(V4L2, Debug) << "Prepared to import " << count << " buffers";
@@ -1621,8 +1620,7 @@ int V4L2VideoDevice::releaseBuffers()
LOG(V4L2, Debug) << "Releasing buffers";
delete cache_;
cache_ = nullptr;
cache_.reset();
return requestBuffers(0, memoryType_);
}
@@ -2197,14 +2195,12 @@ V4L2PixelFormat V4L2VideoDevice::toV4L2PixelFormat(const PixelFormat &pixelForma
V4L2M2MDevice::V4L2M2MDevice(const std::string &deviceNode)
: deviceNode_(deviceNode)
{
output_ = new V4L2VideoDevice(deviceNode);
capture_ = new V4L2VideoDevice(deviceNode);
output_ = std::make_unique<V4L2VideoDevice>(deviceNode);
capture_ = std::make_unique<V4L2VideoDevice>(deviceNode);
}
V4L2M2MDevice::~V4L2M2MDevice()
{
delete capture_;
delete output_;
}
/**