[libcamera-devel] [PATCH v2 13/13] libcamera: ipu3: imgu: Use unique_ptr for video and subdevices
Niklas Söderlund
niklas.soderlund at ragnatech.se
Sun Jun 28 02:15:32 CEST 2020
Instead of manually deleting the video and subdevices in the destructor
use std::unique_ptr.
Suggested-by: Laurent Pinchart <laurent.pinchart at ideasonboard.com>
Signed-off-by: Niklas Söderlund <niklas.soderlund at ragnatech.se>
---
src/libcamera/pipeline/ipu3/imgu.cpp | 24 ++++++++++++++-------
src/libcamera/pipeline/ipu3/imgu.h | 32 ++++++++--------------------
2 files changed, 25 insertions(+), 31 deletions(-)
diff --git a/src/libcamera/pipeline/ipu3/imgu.cpp b/src/libcamera/pipeline/ipu3/imgu.cpp
index 6a721d47cdacf3d6..4f11dc0dbb5fe94a 100644
--- a/src/libcamera/pipeline/ipu3/imgu.cpp
+++ b/src/libcamera/pipeline/ipu3/imgu.cpp
@@ -44,28 +44,36 @@ int ImgUDevice::init(MediaDevice *media, unsigned int index)
* by the match() function: no need to check for newly created
* video devices and subdevice validity here.
*/
- imgu_ = V4L2Subdevice::fromEntityName(media, name_);
+ imgu_ = std::unique_ptr<V4L2Subdevice>(
+ V4L2Subdevice::fromEntityName(media, name_));
ret = imgu_->open();
if (ret)
return ret;
- input_ = V4L2VideoDevice::fromEntityName(media, name_ + " input");
+ input_ = std::unique_ptr<V4L2VideoDevice>(
+ V4L2VideoDevice::fromEntityName(media,
+ name_ + " input"));
ret = input_->open();
if (ret)
return ret;
- output_ = V4L2VideoDevice::fromEntityName(media, name_ + " output");
+ output_ = std::unique_ptr<V4L2VideoDevice>(
+ V4L2VideoDevice::fromEntityName(media,
+ name_ + " output"));
ret = output_->open();
if (ret)
return ret;
- viewfinder_ = V4L2VideoDevice::fromEntityName(media,
- name_ + " viewfinder");
+ viewfinder_ = std::unique_ptr<V4L2VideoDevice>(
+ V4L2VideoDevice::fromEntityName(media,
+ name_ + " viewfinder"));
ret = viewfinder_->open();
if (ret)
return ret;
- stat_ = V4L2VideoDevice::fromEntityName(media, name_ + " 3a stat");
+ stat_ = std::unique_ptr<V4L2VideoDevice>(
+ V4L2VideoDevice::fromEntityName(media,
+ name_ + " 3a stat"));
ret = stat_->open();
if (ret)
return ret;
@@ -150,7 +158,7 @@ int ImgUDevice::configureVideoDevice(V4L2VideoDevice *dev, unsigned int pad,
return ret;
/* No need to apply format to the stat node. */
- if (dev == stat_)
+ if (dev == stat_.get())
return 0;
*outputFormat = {};
@@ -162,7 +170,7 @@ int ImgUDevice::configureVideoDevice(V4L2VideoDevice *dev, unsigned int pad,
if (ret)
return ret;
- const char *name = dev == output_ ? "output" : "viewfinder";
+ const char *name = dev == output_.get() ? "output" : "viewfinder";
LOG(IPU3, Debug) << "ImgU " << name << " format = "
<< outputFormat->toString();
diff --git a/src/libcamera/pipeline/ipu3/imgu.h b/src/libcamera/pipeline/ipu3/imgu.h
index 7be25e40957fcb03..308bf26ee56e4e82 100644
--- a/src/libcamera/pipeline/ipu3/imgu.h
+++ b/src/libcamera/pipeline/ipu3/imgu.h
@@ -24,21 +24,6 @@ struct StreamConfiguration;
class ImgUDevice
{
public:
- ImgUDevice()
- : imgu_(nullptr), input_(nullptr), output_(nullptr),
- viewfinder_(nullptr), stat_(nullptr)
- {
- }
-
- ~ImgUDevice()
- {
- delete imgu_;
- delete input_;
- delete output_;
- delete viewfinder_;
- delete stat_;
- }
-
int init(MediaDevice *media, unsigned int index);
int configureInput(const Size &size, V4L2DeviceFormat *inputFormat);
@@ -46,21 +31,22 @@ public:
int configureOutput(const StreamConfiguration &cfg,
V4L2DeviceFormat *outputFormat)
{
- return configureVideoDevice(output_, PAD_OUTPUT, cfg,
+ return configureVideoDevice(output_.get(), PAD_OUTPUT, cfg,
outputFormat);
}
int configureViewfinder(const StreamConfiguration &cfg,
V4L2DeviceFormat *outputFormat)
{
- return configureVideoDevice(viewfinder_, PAD_VF, cfg,
+ return configureVideoDevice(viewfinder_.get(), PAD_VF, cfg,
outputFormat);
}
int configureStat(const StreamConfiguration &cfg,
V4L2DeviceFormat *outputFormat)
{
- return configureVideoDevice(stat_, PAD_STAT, cfg, outputFormat);
+ return configureVideoDevice(stat_.get(), PAD_STAT, cfg,
+ outputFormat);
}
int allocateBuffers(unsigned int bufferCount);
@@ -71,11 +57,11 @@ public:
int enableLinks(bool enable);
- V4L2Subdevice *imgu_;
- V4L2VideoDevice *input_;
- V4L2VideoDevice *output_;
- V4L2VideoDevice *viewfinder_;
- V4L2VideoDevice *stat_;
+ std::unique_ptr<V4L2Subdevice> imgu_;
+ std::unique_ptr<V4L2VideoDevice> input_;
+ std::unique_ptr<V4L2VideoDevice> output_;
+ std::unique_ptr<V4L2VideoDevice> viewfinder_;
+ std::unique_ptr<V4L2VideoDevice> stat_;
/* \todo Add param video device for 3A tuning */
private:
--
2.27.0
More information about the libcamera-devel
mailing list