[libcamera-devel] [PATCH v2 01/11] libcamera: Always check return value of MediaDevice::acquire()
Niklas Söderlund
niklas.soderlund at ragnatech.se
Wed May 8 17:18:21 CEST 2019
In preparation for adding more responsibility to MediaDevice::acquire()
make sure all callers check and act accordingly to its return value.
Signed-off-by: Niklas Söderlund <niklas.soderlund at ragnatech.se>
Reviewed-by: Laurent Pinchart <laurent.pinchart at ideasonboard.com>
Reviewed-by: Kieran Bingham <kieran.bingham at ideasonboard.com>
---
src/libcamera/pipeline/ipu3/ipu3.cpp | 10 ++++------
src/libcamera/pipeline/uvcvideo.cpp | 3 ++-
src/libcamera/pipeline/vimc.cpp | 3 ++-
test/media_device/media_device_link_test.cpp | 6 +++++-
test/v4l2_device/v4l2_device_test.cpp | 3 ++-
test/v4l2_subdevice/v4l2_subdevice_test.cpp | 6 +++++-
6 files changed, 20 insertions(+), 11 deletions(-)
diff --git a/src/libcamera/pipeline/ipu3/ipu3.cpp b/src/libcamera/pipeline/ipu3/ipu3.cpp
index 0041662514e1d7ca..75e878afad4e67a9 100644
--- a/src/libcamera/pipeline/ipu3/ipu3.cpp
+++ b/src/libcamera/pipeline/ipu3/ipu3.cpp
@@ -614,21 +614,19 @@ bool PipelineHandlerIPU3::match(DeviceEnumerator *enumerator)
imgu_dm.add("ipu3-imgu 1 viewfinder");
imgu_dm.add("ipu3-imgu 1 3a stat");
- /*
- * It is safe to acquire both media devices at this point as
- * DeviceEnumerator::search() skips the busy ones for us.
- */
cio2MediaDev_ = enumerator->search(cio2_dm);
if (!cio2MediaDev_)
return false;
- cio2MediaDev_->acquire();
+ if (!cio2MediaDev_->acquire())
+ return false;
imguMediaDev_ = enumerator->search(imgu_dm);
if (!imguMediaDev_)
return false;
- imguMediaDev_->acquire();
+ if (!imguMediaDev_->acquire())
+ return false;
/*
* Disable all links that are enabled by default on CIO2, as camera
diff --git a/src/libcamera/pipeline/uvcvideo.cpp b/src/libcamera/pipeline/uvcvideo.cpp
index 5d2f1c98fa36380c..e40b052f4d877d5d 100644
--- a/src/libcamera/pipeline/uvcvideo.cpp
+++ b/src/libcamera/pipeline/uvcvideo.cpp
@@ -183,7 +183,8 @@ bool PipelineHandlerUVC::match(DeviceEnumerator *enumerator)
if (!media_)
return false;
- media_->acquire();
+ if (!media_->acquire())
+ return false;
std::unique_ptr<UVCCameraData> data = utils::make_unique<UVCCameraData>(this);
diff --git a/src/libcamera/pipeline/vimc.cpp b/src/libcamera/pipeline/vimc.cpp
index cdf43770a9bfc40f..7b6ebd4cc0a27e25 100644
--- a/src/libcamera/pipeline/vimc.cpp
+++ b/src/libcamera/pipeline/vimc.cpp
@@ -193,7 +193,8 @@ bool PipelineHandlerVimc::match(DeviceEnumerator *enumerator)
if (!media_)
return false;
- media_->acquire();
+ if (!media_->acquire())
+ return false;
std::unique_ptr<VimcCameraData> data = utils::make_unique<VimcCameraData>(this);
diff --git a/test/media_device/media_device_link_test.cpp b/test/media_device/media_device_link_test.cpp
index 58a55cdfee634c0b..484d3691310f78a0 100644
--- a/test/media_device/media_device_link_test.cpp
+++ b/test/media_device/media_device_link_test.cpp
@@ -51,7 +51,11 @@ class MediaDeviceLinkTest : public Test
return TestSkip;
}
- dev_->acquire();
+ if (!dev_->acquire()) {
+ cerr << "Unable to acquire media device "
+ << dev_->deviceNode() << endl;
+ return TestSkip;
+ }
if (dev_->open()) {
cerr << "Failed to open media device at "
diff --git a/test/v4l2_device/v4l2_device_test.cpp b/test/v4l2_device/v4l2_device_test.cpp
index 4225291bbb6e23f0..90e5f7a3ee0c0f2f 100644
--- a/test/v4l2_device/v4l2_device_test.cpp
+++ b/test/v4l2_device/v4l2_device_test.cpp
@@ -46,7 +46,8 @@ int V4L2DeviceTest::init()
if (!media_)
return TestSkip;
- media_->acquire();
+ if (!media_->acquire())
+ return TestSkip;
MediaEntity *entity = media_->getEntityByName("vivid-000-vid-cap");
if (!entity)
diff --git a/test/v4l2_subdevice/v4l2_subdevice_test.cpp b/test/v4l2_subdevice/v4l2_subdevice_test.cpp
index 72d5f72543d29378..4e16ab6cf3e5f874 100644
--- a/test/v4l2_subdevice/v4l2_subdevice_test.cpp
+++ b/test/v4l2_subdevice/v4l2_subdevice_test.cpp
@@ -45,7 +45,11 @@ int V4L2SubdeviceTest::init()
return TestSkip;
}
- media_->acquire();
+ if (!media_->acquire()) {
+ cerr << "Unable to acquire media device "
+ << media_->deviceNode() << endl;
+ return TestSkip;
+ }
int ret = media_->open();
if (ret) {
--
2.21.0
More information about the libcamera-devel
mailing list