From 5a72b568b9249f9a0a4d5fdb0c5eee290ef2804b Mon Sep 17 00:00:00 2001 From: josh Date: Fri, 7 Aug 2009 23:43:22 +0000 Subject: [PATCH] checking if buffer filled and dequeuing, blocking forever with only 1 queued git-svn-id: svn://anubis/misc/WebcamTracker@123 bd8a9e45-a331-0410-811e-c64571078777 --- WebcamTracker.cc | 36 ++++++++++++++++++++++++++++++++++++ 1 file changed, 36 insertions(+) diff --git a/WebcamTracker.cc b/WebcamTracker.cc index 9890e5e..0206d30 100644 --- a/WebcamTracker.cc +++ b/WebcamTracker.cc @@ -110,6 +110,42 @@ WebcamTracker::WebcamTracker(const char * device) cerr << " (EINVAL)"; cerr << endl; } + + struct v4l2_buffer querybuf; + querybuf.type = V4L2_BUF_TYPE_VIDEO_CAPTURE; + querybuf.index = 0; + ret = ioctl(m_fd, VIDIOC_QUERYBUF, &querybuf); + if (ret != 0) + { + cerr << "VIDIOC_QUERYBUF ioctl failed: returned " << ret + << ", errno: " << errno; + if (errno == EINVAL) + cerr << " (EINVAL)"; + cerr << endl; + } + if (querybuf.flags & V4L2_BUF_FLAG_DONE) + { + cout << "buf done" << endl; + } + + v4l2_buffer dqbuf; + dqbuf.type = V4L2_BUF_TYPE_VIDEO_CAPTURE; + dqbuf.memory = V4L2_MEMORY_MMAP; + ret = ioctl(m_fd, VIDIOC_DQBUF, &dqbuf); + if (ret != 0) + { + cerr << "VIDIOC_DQBUF failed! errno = " << errno; + if (errno == EAGAIN) + cerr << " (EAGAIN)"; + if (errno == EINVAL) + cerr << " (EINVAL)"; + if (errno == ENOMEM) + cerr << " (ENOMEM)"; + if (errno == EIO) + cerr << " (EIO)"; + cerr << endl; + } + } else {