diff options
author | Michael Olbrich <m.olbrich@pengutronix.de> | 2013-05-06 16:54:02 +0200 |
---|---|---|
committer | Michael Olbrich <m.olbrich@pengutronix.de> | 2013-09-13 16:29:47 +0200 |
commit | b23616c02829dc77684268e864725e0fd7b08e66 (patch) | |
tree | 489de532be10d961f8f1b78e2f415561caf7486a | |
parent | c7e3d28fcdeb2f7a669f1cc07adf4028babb4426 (diff) | |
download | gst-plugins-good-b23616c02829dc77684268e864725e0fd7b08e66.tar.gz gst-plugins-good-b23616c02829dc77684268e864725e0fd7b08e66.tar.xz |
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
-rw-r--r-- | sys/v4l2/gstv4l2bufferpool.c | 13 |
1 files changed, 13 insertions, 0 deletions
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 */ |