diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/libcamera/camera.cpp | 6 | ||||
-rw-r--r-- | src/libcamera/pipeline_handler.cpp | 12 |
2 files changed, 10 insertions, 8 deletions
diff --git a/src/libcamera/camera.cpp b/src/libcamera/camera.cpp index 4e393f89..61925e83 100644 --- a/src/libcamera/camera.cpp +++ b/src/libcamera/camera.cpp @@ -995,7 +995,8 @@ int Camera::acquire() if (ret < 0) return ret == -EACCES ? -EBUSY : ret; - if (!d->pipe_->acquire(this)) { + if (!d->pipe_->invokeMethod(&PipelineHandler::acquire, + ConnectionTypeBlocking, this)) { LOG(Camera, Info) << "Pipeline handler in use by another process"; return -EBUSY; @@ -1030,7 +1031,8 @@ int Camera::release() return ret == -EACCES ? -EBUSY : ret; if (d->isAcquired()) - d->pipe_->release(this); + d->pipe_->invokeMethod(&PipelineHandler::release, + ConnectionTypeBlocking, this); d->setState(Private::CameraAvailable); diff --git a/src/libcamera/pipeline_handler.cpp b/src/libcamera/pipeline_handler.cpp index 861815cb..b18b6d0b 100644 --- a/src/libcamera/pipeline_handler.cpp +++ b/src/libcamera/pipeline_handler.cpp @@ -157,7 +157,7 @@ MediaDevice *PipelineHandler::acquireMediaDevice(DeviceEnumerator *enumerator, * Pipeline handlers shall not call this function directly as the Camera class * handles access internally. * - * \context This function is \threadsafe. + * \context This function is called from the CameraManager thread. * * \return True if the pipeline handler was acquired, false if another process * has already acquired it @@ -165,8 +165,6 @@ MediaDevice *PipelineHandler::acquireMediaDevice(DeviceEnumerator *enumerator, */ bool PipelineHandler::acquire(Camera *camera) { - MutexLocker locker(lock_); - if (useCount_ == 0) { for (std::shared_ptr<MediaDevice> &media : mediaDevices_) { if (!media->lock()) { @@ -199,14 +197,12 @@ bool PipelineHandler::acquire(Camera *camera) * Pipeline handlers shall not call this function directly as the Camera class * handles access internally. * - * \context This function is \threadsafe. + * \context This function is called from the CameraManager thread. * * \sa acquire() */ void PipelineHandler::release(Camera *camera) { - MutexLocker locker(lock_); - ASSERT(useCount_); releaseDevice(camera); @@ -230,6 +226,8 @@ void PipelineHandler::release(Camera *camera) * powers on the USB device as soon as /dev/video# is opened. This behavior * should *not* be copied by other pipeline handlers. * + * \context This function is called from the CameraManager thread. + * * \return True on success, false on failure * \sa releaseDevice() */ @@ -250,6 +248,8 @@ bool PipelineHandler::acquireDevice([[maybe_unused]] Camera *camera) * release them until releaseDevice() has been called for all previously * acquired cameras. * + * \context This function is called from the CameraManager thread. + * * \sa acquireDevice() */ void PipelineHandler::releaseDevice([[maybe_unused]] Camera *camera) |