libcamera: Always check return value of MediaDevice::acquire()

In preparation for adding more responsibility to MediaDevice::acquire()
remove unneeded calls to acquire() and release(), and make sure all
needed calls to acquire() are checked and acted on.

Signed-off-by: Niklas Söderlund <niklas.soderlund@ragnatech.se>
Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
This commit is contained in:
Niklas Söderlund 2019-04-14 00:28:53 +02:00
parent b9a47058eb
commit 12053cf8e6
6 changed files with 13 additions and 20 deletions

View file

@ -614,21 +614,19 @@ bool PipelineHandlerIPU3::match(DeviceEnumerator *enumerator)
imgu_dm.add("ipu3-imgu 1 viewfinder"); imgu_dm.add("ipu3-imgu 1 viewfinder");
imgu_dm.add("ipu3-imgu 1 3a stat"); 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); cio2MediaDev_ = enumerator->search(cio2_dm);
if (!cio2MediaDev_) if (!cio2MediaDev_)
return false; return false;
cio2MediaDev_->acquire(); if (!cio2MediaDev_->acquire())
return false;
imguMediaDev_ = enumerator->search(imgu_dm); imguMediaDev_ = enumerator->search(imgu_dm);
if (!imguMediaDev_) if (!imguMediaDev_)
return false; return false;
imguMediaDev_->acquire(); if (!imguMediaDev_->acquire())
return false;
/* /*
* Disable all links that are enabled by default on CIO2, as camera * Disable all links that are enabled by default on CIO2, as camera

View file

@ -183,7 +183,8 @@ bool PipelineHandlerUVC::match(DeviceEnumerator *enumerator)
if (!media_) if (!media_)
return false; return false;
media_->acquire(); if (!media_->acquire())
return false;
std::unique_ptr<UVCCameraData> data = utils::make_unique<UVCCameraData>(this); std::unique_ptr<UVCCameraData> data = utils::make_unique<UVCCameraData>(this);

View file

@ -193,7 +193,8 @@ bool PipelineHandlerVimc::match(DeviceEnumerator *enumerator)
if (!media_) if (!media_)
return false; return false;
media_->acquire(); if (!media_->acquire())
return false;
std::unique_ptr<VimcCameraData> data = utils::make_unique<VimcCameraData>(this); std::unique_ptr<VimcCameraData> data = utils::make_unique<VimcCameraData>(this);

View file

@ -51,7 +51,11 @@ class MediaDeviceLinkTest : public Test
return TestSkip; return TestSkip;
} }
dev_->acquire(); if (!dev_->acquire()) {
cerr << "Unable to acquire media device "
<< dev_->deviceNode() << endl;
return TestSkip;
}
if (dev_->open()) { if (dev_->open()) {
cerr << "Failed to open media device at " cerr << "Failed to open media device at "

View file

@ -46,8 +46,6 @@ int V4L2DeviceTest::init()
if (!media_) if (!media_)
return TestSkip; return TestSkip;
media_->acquire();
MediaEntity *entity = media_->getEntityByName("vivid-000-vid-cap"); MediaEntity *entity = media_->getEntityByName("vivid-000-vid-cap");
if (!entity) if (!entity)
return TestSkip; return TestSkip;
@ -61,8 +59,6 @@ int V4L2DeviceTest::init()
void V4L2DeviceTest::cleanup() void V4L2DeviceTest::cleanup()
{ {
media_->release();
capture_->streamOff(); capture_->streamOff();
capture_->releaseBuffers(); capture_->releaseBuffers();
capture_->close(); capture_->close();

View file

@ -45,20 +45,16 @@ int V4L2SubdeviceTest::init()
return TestSkip; return TestSkip;
} }
media_->acquire();
int ret = media_->open(); int ret = media_->open();
if (ret) { if (ret) {
cerr << "Unable to open media device: " << media_->deviceNode() cerr << "Unable to open media device: " << media_->deviceNode()
<< ": " << strerror(ret) << endl; << ": " << strerror(ret) << endl;
media_->release();
return TestSkip; return TestSkip;
} }
MediaEntity *videoEntity = media_->getEntityByName("Scaler"); MediaEntity *videoEntity = media_->getEntityByName("Scaler");
if (!videoEntity) { if (!videoEntity) {
cerr << "Unable to find media entity 'Scaler'" << endl; cerr << "Unable to find media entity 'Scaler'" << endl;
media_->release();
return TestFail; return TestFail;
} }
@ -67,7 +63,6 @@ int V4L2SubdeviceTest::init()
if (ret) { if (ret) {
cerr << "Unable to open video subdevice " cerr << "Unable to open video subdevice "
<< scaler_->entity()->deviceNode() << endl; << scaler_->entity()->deviceNode() << endl;
media_->release();
return TestSkip; return TestSkip;
} }
@ -76,7 +71,5 @@ int V4L2SubdeviceTest::init()
void V4L2SubdeviceTest::cleanup() void V4L2SubdeviceTest::cleanup()
{ {
media_->release();
delete scaler_; delete scaler_;
} }