mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2024-12-28 11:10:37 +00:00
v4l2bufferpool: Queue number of allocated buffers to capture
Before we do streamon, we queue all capture buffers by calling resurrect. When the driver supports CREATE_BUFS, this would lead to buffers being allocated till the maximum of 32 is reached. Instead, we now save the number of allocated buffers and queue this amount.
This commit is contained in:
parent
1e7d2e2bbd
commit
3bd544418c
2 changed files with 6 additions and 2 deletions
|
@ -650,12 +650,14 @@ gst_v4l2_buffer_pool_streamon (GstV4l2BufferPool * pool)
|
|||
case GST_V4L2_IO_DMABUF:
|
||||
case GST_V4L2_IO_DMABUF_IMPORT:
|
||||
if (!V4L2_TYPE_IS_OUTPUT (pool->obj->type)) {
|
||||
guint i;
|
||||
|
||||
/* For captures, we need to enqueue buffers before we start streaming,
|
||||
* so the driver don't underflow immediately. As we have put then back
|
||||
* into the base class queue, resurrect them, then releasing will queue
|
||||
* them back. */
|
||||
while (gst_v4l2_buffer_pool_resurrect_buffer (pool) == GST_FLOW_OK)
|
||||
continue;
|
||||
for (i = 0; i < pool->num_allocated; i++)
|
||||
gst_v4l2_buffer_pool_resurrect_buffer (pool);
|
||||
}
|
||||
|
||||
if (obj->ioctl (pool->video_fd, VIDIOC_STREAMON, &obj->type) < 0)
|
||||
|
@ -791,6 +793,7 @@ gst_v4l2_buffer_pool_start (GstBufferPool * bpool)
|
|||
|
||||
count = gst_v4l2_allocator_start (pool->vallocator, min_buffers,
|
||||
V4L2_MEMORY_MMAP);
|
||||
pool->num_allocated = count;
|
||||
|
||||
if (count < GST_V4L2_MIN_BUFFERS) {
|
||||
min_buffers = count;
|
||||
|
|
|
@ -79,6 +79,7 @@ struct _GstV4l2BufferPool
|
|||
guint min_latency; /* number of buffers we will hold */
|
||||
guint max_latency; /* number of buffers we can hold */
|
||||
guint num_queued; /* number of buffers queued in the driver */
|
||||
guint num_allocated; /* number of buffers allocated */
|
||||
guint copy_threshold; /* when our pool runs lower, start handing out copies */
|
||||
|
||||
gboolean streaming;
|
||||
|
|
Loading…
Reference in a new issue