From b23616c02829dc77684268e864725e0fd7b08e66 Mon Sep 17 00:00:00 2001 From: Michael Olbrich Date: Mon, 6 May 2013 16:54:02 +0200 Subject: v4l2: request 0 buffers when stopping Without this stopping the pool in *_set_caps() is useless. S_FMT will still fail with EBUSY. https://bugzilla.gnome.org/show_bug.cgi?id=699835 --- sys/v4l2/gstv4l2bufferpool.c | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/sys/v4l2/gstv4l2bufferpool.c b/sys/v4l2/gstv4l2bufferpool.c index b4582b625..918fadf9f 100644 --- a/sys/v4l2/gstv4l2bufferpool.c +++ b/sys/v4l2/gstv4l2bufferpool.c @@ -584,6 +584,19 @@ gst_v4l2_buffer_pool_stop (GstBufferPool * bpool) g_free (pool->buffers); pool->buffers = NULL; + if (pool->num_buffers > 0) { + struct v4l2_requestbuffers breq; + memset (&breq, 0, sizeof (struct v4l2_requestbuffers)); + breq.type = obj->type; + breq.count = 0; + breq.memory = V4L2_MEMORY_MMAP; + if (v4l2_ioctl (pool->video_fd, VIDIOC_REQBUFS, &breq) < 0) { + GST_ERROR_OBJECT (pool, "error releasing buffers: %s", + g_strerror (errno)); + } + pool->num_buffers = 0; + } + return ret; /* ERRORS */ -- cgit v1.2.3