From a7581dc4d6c21f4c677fa594b5abab9de9ead5c1 Mon Sep 17 00:00:00 2001 From: Nicolas Dufresne Date: Fri, 21 Apr 2023 13:30:43 -0400 Subject: 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 814a3a9943..7d49c80b04 100644 --- a/subprojects/gst-plugins-good/sys/v4l2/gstv4l2bufferpool.c +++ b/subprojects/gst-plugins-good/sys/v4l2/gstv4l2bufferpool.c @@ -1919,8 +1919,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; } } @@ -1930,8 +1931,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; } -- cgit v1.2.1