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:
parent
b9a47058eb
commit
12053cf8e6
6 changed files with 13 additions and 20 deletions
|
@ -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
|
||||||
|
|
|
@ -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);
|
||||||
|
|
||||||
|
|
|
@ -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);
|
||||||
|
|
||||||
|
|
|
@ -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 "
|
||||||
|
|
|
@ -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();
|
||||||
|
|
|
@ -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_;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue