summaryrefslogtreecommitdiff
path: root/src/libcamera/v4l2_videodevice.cpp
diff options
context:
space:
mode:
authorNiklas Söderlund <niklas.soderlund@ragnatech.se>2020-10-18 03:47:23 +0200
committerNiklas Söderlund <niklas.soderlund@ragnatech.se>2020-11-10 01:20:30 +0100
commit3d624b745b31383dbcd94d96246fab865820085f (patch)
tree60b0bdcec8479f1322e6cd914b019a757bf2f033 /src/libcamera/v4l2_videodevice.cpp
parent68d2c41835a871ecd7b441cd650cab3fefa88cf5 (diff)
libcamera: v4l2_device: Move start of frame detection to V4L2Device
The V4L2_EVENT_FRAME_SYNC event may occur on both V4L2 video-devices (V4L2VideoDevice) and sub-devices (V4L2Subdevice). Move the start of frame detection to the common base class of the two, V4L2Device. There is no functional change. Signed-off-by: Niklas Söderlund <niklas.soderlund@ragnatech.se> Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com> Reviewed-by: Jacopo Mondi <jacopo@jmondi.org>
Diffstat (limited to 'src/libcamera/v4l2_videodevice.cpp')
-rw-r--r--src/libcamera/v4l2_videodevice.cpp75
1 files changed, 1 insertions, 74 deletions
diff --git a/src/libcamera/v4l2_videodevice.cpp b/src/libcamera/v4l2_videodevice.cpp
index ac3c8c7d..5ee1b479 100644
--- a/src/libcamera/v4l2_videodevice.cpp
+++ b/src/libcamera/v4l2_videodevice.cpp
@@ -481,8 +481,7 @@ const std::string V4L2DeviceFormat::toString() const
* \param[in] deviceNode The file-system path to the video device node
*/
V4L2VideoDevice::V4L2VideoDevice(const std::string &deviceNode)
- : V4L2Device(deviceNode), cache_(nullptr), fdBufferNotifier_(nullptr),
- fdEventNotifier_(nullptr), frameStartEnabled_(false)
+ : V4L2Device(deviceNode), cache_(nullptr), fdBufferNotifier_(nullptr)
{
/*
* We default to an MMAP based CAPTURE video device, however this will
@@ -575,10 +574,6 @@ int V4L2VideoDevice::open()
fdBufferNotifier_->activated.connect(this, &V4L2VideoDevice::bufferAvailable);
fdBufferNotifier_->setEnabled(false);
- fdEventNotifier_ = new EventNotifier(fd(), EventNotifier::Exception);
- fdEventNotifier_->activated.connect(this, &V4L2VideoDevice::eventAvailable);
- fdEventNotifier_->setEnabled(false);
-
LOG(V4L2, Debug)
<< "Opened device " << caps_.bus_info() << ": "
<< caps_.driver() << ": " << caps_.card();
@@ -668,10 +663,6 @@ int V4L2VideoDevice::open(int handle, enum v4l2_buf_type type)
fdBufferNotifier_->activated.connect(this, &V4L2VideoDevice::bufferAvailable);
fdBufferNotifier_->setEnabled(false);
- fdEventNotifier_ = new EventNotifier(fd(), EventNotifier::Exception);
- fdEventNotifier_->activated.connect(this, &V4L2VideoDevice::eventAvailable);
- fdEventNotifier_->setEnabled(false);
-
LOG(V4L2, Debug)
<< "Opened device " << caps_.bus_info() << ": "
<< caps_.driver() << ": " << caps_.card();
@@ -689,7 +680,6 @@ void V4L2VideoDevice::close()
releaseBuffers();
delete fdBufferNotifier_;
- delete fdEventNotifier_;
V4L2Device::close();
}
@@ -1545,74 +1535,11 @@ FrameBuffer *V4L2VideoDevice::dequeueBuffer()
}
/**
- * \brief Slot to handle V4L2 events from the V4L2 video device
- * \param[in] notifier The event notifier
- *
- * When this slot is called, a V4L2 event is available to be dequeued from the
- * device.
- */
-void V4L2VideoDevice::eventAvailable([[maybe_unused]] EventNotifier *notifier)
-{
- struct v4l2_event event{};
- int ret = ioctl(VIDIOC_DQEVENT, &event);
- if (ret < 0) {
- LOG(V4L2, Error)
- << "Failed to dequeue event, disabling event notifier";
- fdEventNotifier_->setEnabled(false);
- return;
- }
-
- if (event.type != V4L2_EVENT_FRAME_SYNC) {
- LOG(V4L2, Error)
- << "Spurious event (" << event.type
- << "), disabling event notifier";
- fdEventNotifier_->setEnabled(false);
- return;
- }
-
- frameStart.emit(event.u.frame_sync.frame_sequence);
-}
-
-/**
* \var V4L2VideoDevice::bufferReady
* \brief A Signal emitted when a framebuffer completes
*/
/**
- * \brief Enable or disable frame start event notification
- * \param[in] enable True to enable frame start events, false to disable them
- *
- * This function enables or disables generation of frame start events. Once
- * enabled, the events are signalled through the frameStart signal.
- *
- * \return 0 on success, a negative error code otherwise
- */
-int V4L2VideoDevice::setFrameStartEnabled(bool enable)
-{
- if (frameStartEnabled_ == enable)
- return 0;
-
- struct v4l2_event_subscription event{};
- event.type = V4L2_EVENT_FRAME_SYNC;
-
- unsigned long request = enable ? VIDIOC_SUBSCRIBE_EVENT
- : VIDIOC_UNSUBSCRIBE_EVENT;
- int ret = ioctl(request, &event);
- if (enable && ret)
- return ret;
-
- fdEventNotifier_->setEnabled(enable);
- frameStartEnabled_ = enable;
-
- return ret;
-}
-
-/**
- * \var V4L2VideoDevice::frameStart
- * \brief A Signal emitted when capture of a frame has started
- */
-
-/**
* \brief Start the video stream
* \return 0 on success or a negative error code otherwise
*/