mirror of
https://git.libcamera.org/libcamera/libcamera.git
synced 2025-07-16 17:05:08 +03:00
libcamera: camera: Use invokeMethod() for pipe_->acquire() and pipe_->release()
The uvcvideo driver needs to open / close its /dev/video# node from pipe_->acquireDevices() / pipe_->releaseDevices(). V4L2VideoDevice::open() creates an EventNotifier and this notifier needs to be created from the CameraManager thread. Use invokeMethod() for pipe_->acquire() and pipe_->release() so that the EventNotifiers are created from the CameraManager thread context. Running pipe_->acquire() and pipe_->release() from the CameraManager thread context serializes all calls to them. Drop PipelineHandler::lock_ this now is no longer necessary and update the "\context" part of the documentation for acquire[Device]() and release[Device]() to match. Note the delayed opening of /dev/video# is a special case because the kernel uvcvideo driver powers on the USB device as soon as /dev/video# is opened. This behavior should *not* be copied by other pipeline handlers. Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com> Signed-off-by: Hans de Goede <hdegoede@redhat.com> Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
This commit is contained in:
parent
c05e45ac77
commit
11e396bf9f
3 changed files with 11 additions and 12 deletions
|
@ -14,7 +14,6 @@
|
|||
#include <sys/types.h>
|
||||
#include <vector>
|
||||
|
||||
#include <libcamera/base/mutex.h>
|
||||
#include <libcamera/base/object.h>
|
||||
|
||||
#include <libcamera/controls.h>
|
||||
|
@ -99,9 +98,7 @@ private:
|
|||
std::queue<Request *> waitingRequests_;
|
||||
|
||||
const char *name_;
|
||||
|
||||
Mutex lock_;
|
||||
unsigned int useCount_ LIBCAMERA_TSA_GUARDED_BY(lock_);
|
||||
unsigned int useCount_;
|
||||
|
||||
friend class PipelineHandlerFactoryBase;
|
||||
};
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue