summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorNaushir Patuck <naush@raspberrypi.com>2022-03-25 09:09:00 +0000
committerLaurent Pinchart <laurent.pinchart@ideasonboard.com>2022-03-28 02:17:22 +0300
commit988ec3f417886cc8202ccc7932ac2f95e89db061 (patch)
treebe3d8b86fb67ff4436ffab64991b348006391817 /src
parentec173ef5d31b98890bacf3e9f3d912c8a8748ec7 (diff)
libcamera: v4l2_videodevice: Better tracking of the device state
Replace the existing streaming_ state variable with an enum to track the following three state: Streaming, Stopping, and Stopped. The alternate states will be used in a subsequent commit. Signed-off-by: Naushir Patuck <naush@raspberrypi.com> Reviewed-by: Kieran Bingham <kieran.bingham@ideasonboard.com> Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com> Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Diffstat (limited to 'src')
-rw-r--r--src/libcamera/v4l2_videodevice.cpp10
1 files changed, 6 insertions, 4 deletions
diff --git a/src/libcamera/v4l2_videodevice.cpp b/src/libcamera/v4l2_videodevice.cpp
index 95b9c38b..c016e6ad 100644
--- a/src/libcamera/v4l2_videodevice.cpp
+++ b/src/libcamera/v4l2_videodevice.cpp
@@ -507,7 +507,7 @@ const std::string V4L2DeviceFormat::toString() const
*/
V4L2VideoDevice::V4L2VideoDevice(const std::string &deviceNode)
: V4L2Device(deviceNode), formatInfo_(nullptr), cache_(nullptr),
- fdBufferNotifier_(nullptr), streaming_(false)
+ fdBufferNotifier_(nullptr), state_(State::Stopped)
{
/*
* We default to an MMAP based CAPTURE video device, however this will
@@ -1803,7 +1803,7 @@ int V4L2VideoDevice::streamOn()
return ret;
}
- streaming_ = true;
+ state_ = State::Streaming;
return 0;
}
@@ -1825,7 +1825,7 @@ int V4L2VideoDevice::streamOff()
{
int ret;
- if (!streaming_ && queuedBuffers_.empty())
+ if (state_ != State::Streaming && queuedBuffers_.empty())
return 0;
ret = ioctl(VIDIOC_STREAMOFF, &bufferType_);
@@ -1835,6 +1835,8 @@ int V4L2VideoDevice::streamOff()
return ret;
}
+ state_ = State::Stopping;
+
/* Send back all queued buffers. */
for (auto it : queuedBuffers_) {
FrameBuffer *buffer = it.second;
@@ -1845,7 +1847,7 @@ int V4L2VideoDevice::streamOff()
queuedBuffers_.clear();
fdBufferNotifier_->setEnabled(false);
- streaming_ = false;
+ state_ = State::Stopped;
return 0;
}