release buffers when capture is stopped

pull/33/head
MPR 10 years ago
parent 87fbcff400
commit 2d582d5e7c

@ -157,12 +157,14 @@ size_t V4l2MmapCapture::read(char* buffer, size_t bufferSize)
bool V4l2MmapCapture::captureStop() bool V4l2MmapCapture::captureStop()
{ {
bool success = true; bool success = true;
int type = V4L2_BUF_TYPE_VIDEO_CAPTURE; int type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
if (-1 == xioctl(m_fd, VIDIOC_STREAMOFF, &type)) if (-1 == xioctl(m_fd, VIDIOC_STREAMOFF, &type))
{ {
perror("VIDIOC_STREAMOFF"); perror("VIDIOC_STREAMOFF");
success = false; success = false;
} }
for (unsigned int i = 0; i < n_buffers; ++i) for (unsigned int i = 0; i < n_buffers; ++i)
{ {
if (-1 == munmap (m_buffer[i].start, m_buffer[i].length)) if (-1 == munmap (m_buffer[i].start, m_buffer[i].length))
@ -171,6 +173,19 @@ bool V4l2MmapCapture::captureStop()
success = false; success = false;
} }
} }
// free buffers
struct v4l2_requestbuffers req;
memset (&req, 0, sizeof(req));
req.count = 0;
req.type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
req.memory = V4L2_MEMORY_MMAP;
if (-1 == xioctl(m_fd, VIDIOC_REQBUFS, &req))
{
perror("VIDIOC_REQBUFS");
success = false;
}
n_buffers = 0; n_buffers = 0;
return success; return success;
} }

Loading…
Cancel
Save