summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/libcamera/device_enumerator.cpp23
-rw-r--r--src/libcamera/include/device_enumerator.h4
-rw-r--r--src/libcamera/pipeline/ipu3/ipu3.cpp11
-rw-r--r--src/libcamera/pipeline/uvcvideo.cpp4
-rw-r--r--src/libcamera/pipeline/vimc.cpp4
-rw-r--r--test/media_device/media_device_link_test.cpp2
-rw-r--r--test/pipeline/ipu3/ipu3_pipeline_test.cpp2
7 files changed, 23 insertions, 27 deletions
diff --git a/src/libcamera/device_enumerator.cpp b/src/libcamera/device_enumerator.cpp
index 8100972a..149ffbf9 100644
--- a/src/libcamera/device_enumerator.cpp
+++ b/src/libcamera/device_enumerator.cpp
@@ -166,12 +166,10 @@ std::unique_ptr<DeviceEnumerator> DeviceEnumerator::create()
DeviceEnumerator::~DeviceEnumerator()
{
- for (MediaDevice *dev : devices_) {
- if (dev->busy())
+ for (std::shared_ptr<MediaDevice> media : devices_) {
+ if (media->busy())
LOG(DeviceEnumerator, Error)
<< "Removing media device while still in use";
-
- delete dev;
}
}
@@ -211,7 +209,7 @@ DeviceEnumerator::~DeviceEnumerator()
*/
int DeviceEnumerator::addDevice(const std::string &deviceNode)
{
- MediaDevice *media = new MediaDevice(deviceNode);
+ std::shared_ptr<MediaDevice> media = std::make_shared<MediaDevice>(deviceNode);
int ret = media->open();
if (ret < 0)
@@ -243,9 +241,10 @@ int DeviceEnumerator::addDevice(const std::string &deviceNode)
return ret;
}
- devices_.push_back(media);
media->close();
+ devices_.push_back(std::move(media));
+
return 0;
}
@@ -260,17 +259,17 @@ int DeviceEnumerator::addDevice(const std::string &deviceNode)
*
* \return pointer to the matching MediaDevice, or nullptr if no match is found
*/
-MediaDevice *DeviceEnumerator::search(const DeviceMatch &dm)
+std::shared_ptr<MediaDevice> DeviceEnumerator::search(const DeviceMatch &dm)
{
- for (MediaDevice *dev : devices_) {
- if (dev->busy())
+ for (std::shared_ptr<MediaDevice> media : devices_) {
+ if (media->busy())
continue;
- if (dm.match(dev)) {
+ if (dm.match(media.get())) {
LOG(DeviceEnumerator, Debug)
<< "Successful match for media device \""
- << dev->driver() << "\"";
- return dev;
+ << media->driver() << "\"";
+ return std::move(media);
}
}
diff --git a/src/libcamera/include/device_enumerator.h b/src/libcamera/include/device_enumerator.h
index 40c7750b..3f87a625 100644
--- a/src/libcamera/include/device_enumerator.h
+++ b/src/libcamera/include/device_enumerator.h
@@ -42,13 +42,13 @@ public:
virtual int init() = 0;
virtual int enumerate() = 0;
- MediaDevice *search(const DeviceMatch &dm);
+ std::shared_ptr<MediaDevice> search(const DeviceMatch &dm);
protected:
int addDevice(const std::string &deviceNode);
private:
- std::vector<MediaDevice *> devices_;
+ std::vector<std::shared_ptr<MediaDevice>> devices_;
virtual std::string lookupDeviceNode(int major, int minor) = 0;
};
diff --git a/src/libcamera/pipeline/ipu3/ipu3.cpp b/src/libcamera/pipeline/ipu3/ipu3.cpp
index 13ff7da4..9831f74f 100644
--- a/src/libcamera/pipeline/ipu3/ipu3.cpp
+++ b/src/libcamera/pipeline/ipu3/ipu3.cpp
@@ -29,8 +29,8 @@ public:
bool match(DeviceEnumerator *enumerator);
private:
- MediaDevice *cio2_;
- MediaDevice *imgu_;
+ std::shared_ptr<MediaDevice> cio2_;
+ std::shared_ptr<MediaDevice> imgu_;
void registerCameras();
};
@@ -47,9 +47,6 @@ PipelineHandlerIPU3::~PipelineHandlerIPU3()
if (imgu_)
imgu_->release();
-
- cio2_ = nullptr;
- imgu_ = nullptr;
}
bool PipelineHandlerIPU3::match(DeviceEnumerator *enumerator)
@@ -78,11 +75,11 @@ bool PipelineHandlerIPU3::match(DeviceEnumerator *enumerator)
imgu_dm.add("ipu3-imgu 1 viewfinder");
imgu_dm.add("ipu3-imgu 1 3a stat");
- cio2_ = enumerator->search(cio2_dm);
+ cio2_ = std::move(enumerator->search(cio2_dm));
if (!cio2_)
return false;
- imgu_ = enumerator->search(imgu_dm);
+ imgu_ = std::move(enumerator->search(imgu_dm));
if (!imgu_)
return false;
diff --git a/src/libcamera/pipeline/uvcvideo.cpp b/src/libcamera/pipeline/uvcvideo.cpp
index 3ebc0740..73bad671 100644
--- a/src/libcamera/pipeline/uvcvideo.cpp
+++ b/src/libcamera/pipeline/uvcvideo.cpp
@@ -23,7 +23,7 @@ public:
bool match(DeviceEnumerator *enumerator);
private:
- MediaDevice *dev_;
+ std::shared_ptr<MediaDevice> dev_;
};
PipelineHandlerUVC::PipelineHandlerUVC(CameraManager *manager)
@@ -41,7 +41,7 @@ bool PipelineHandlerUVC::match(DeviceEnumerator *enumerator)
{
DeviceMatch dm("uvcvideo");
- dev_ = enumerator->search(dm);
+ dev_ = std::move(enumerator->search(dm));
if (!dev_)
return false;
diff --git a/src/libcamera/pipeline/vimc.cpp b/src/libcamera/pipeline/vimc.cpp
index 68bfe9b1..521b20d3 100644
--- a/src/libcamera/pipeline/vimc.cpp
+++ b/src/libcamera/pipeline/vimc.cpp
@@ -23,7 +23,7 @@ public:
bool match(DeviceEnumerator *enumerator);
private:
- MediaDevice *dev_;
+ std::shared_ptr<MediaDevice> dev_;
};
PipeHandlerVimc::PipeHandlerVimc(CameraManager *manager)
@@ -51,7 +51,7 @@ bool PipeHandlerVimc::match(DeviceEnumerator *enumerator)
dm.add("RGB/YUV Input");
dm.add("Scaler");
- dev_ = enumerator->search(dm);
+ dev_ = std::move(enumerator->search(dm));
if (!dev_)
return false;
diff --git a/test/media_device/media_device_link_test.cpp b/test/media_device/media_device_link_test.cpp
index ac5b632f..58a55cdf 100644
--- a/test/media_device/media_device_link_test.cpp
+++ b/test/media_device/media_device_link_test.cpp
@@ -240,7 +240,7 @@ class MediaDeviceLinkTest : public Test
private:
unique_ptr<DeviceEnumerator> enumerator;
- MediaDevice *dev_;
+ shared_ptr<MediaDevice> dev_;
};
TEST_REGISTER(MediaDeviceLinkTest);
diff --git a/test/pipeline/ipu3/ipu3_pipeline_test.cpp b/test/pipeline/ipu3/ipu3_pipeline_test.cpp
index 482c1249..953f0233 100644
--- a/test/pipeline/ipu3/ipu3_pipeline_test.cpp
+++ b/test/pipeline/ipu3/ipu3_pipeline_test.cpp
@@ -65,7 +65,7 @@ int IPU3PipelineTest::init()
return TestSkip;
}
- MediaDevice *cio2 = enumerator->search(cio2_dm);
+ std::shared_ptr<MediaDevice> cio2 = enumerator->search(cio2_dm);
if (!cio2) {
cerr << "Failed to find IPU3 CIO2: test skip" << endl;
return TestSkip;