From c9841a5383d4fc80b5bd3f1bcfb47d116e69f981 Mon Sep 17 00:00:00 2001 From: Nicolas Dufresne Date: Fri, 21 Apr 2023 13:30:43 -0400 Subject: [PATCH] v4l2: bufferpool: Don't copy buffer when flushing Threshold handling can race with flushing operation. This can lead to avoidable buffer copies. Simply check and return the flushing status. Part-of: --- subprojects/gst-plugins-good/sys/v4l2/gstv4l2bufferpool.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/subprojects/gst-plugins-good/sys/v4l2/gstv4l2bufferpool.c b/subprojects/gst-plugins-good/sys/v4l2/gstv4l2bufferpool.c index bdfd442cfa..8c43a488b1 100644 --- a/subprojects/gst-plugins-good/sys/v4l2/gstv4l2bufferpool.c +++ b/subprojects/gst-plugins-good/sys/v4l2/gstv4l2bufferpool.c @@ -1922,8 +1922,9 @@ gst_v4l2_buffer_pool_process (GstV4l2BufferPool * pool, GstBuffer ** buf, /* If we have no more buffer, and can allocate it time to do so */ if (num_queued == 0) { if (GST_V4L2_ALLOCATOR_CAN_ALLOCATE (pool->vallocator, MMAP)) { + GST_DEBUG_OBJECT (pool, "Resurrect for empty queue"); ret = gst_v4l2_buffer_pool_resurrect_buffer (pool); - if (ret == GST_FLOW_OK) + if (ret == GST_FLOW_OK || ret == GST_FLOW_FLUSHING) goto done; } } @@ -1933,8 +1934,9 @@ gst_v4l2_buffer_pool_process (GstV4l2BufferPool * pool, GstBuffer ** buf, GstBuffer *copy; if (GST_V4L2_ALLOCATOR_CAN_ALLOCATE (pool->vallocator, MMAP)) { + GST_DEBUG_OBJECT (pool, "Resurrect for threshold"); ret = gst_v4l2_buffer_pool_resurrect_buffer (pool); - if (ret == GST_FLOW_OK) + if (ret == GST_FLOW_OK || ret == GST_FLOW_FLUSHING) goto done; }