From 90eade28f25b73fae62e48f9bf49897d40c6cee4 Mon Sep 17 00:00:00 2001 From: Nicolas Dufresne Date: Mon, 28 May 2018 15:19:52 -0400 Subject: [PATCH] v4l2bufferpool: Drop truncated frames Drop truncated frames regardless if they have the ERROR flag or not. Truncated frame causes video frame map failure in many elements including cluttersink, glupload etc. --- sys/v4l2/gstv4l2bufferpool.c | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/sys/v4l2/gstv4l2bufferpool.c b/sys/v4l2/gstv4l2bufferpool.c index c3a243b..a572293 100644 --- a/sys/v4l2/gstv4l2bufferpool.c +++ b/sys/v4l2/gstv4l2bufferpool.c @@ -1747,6 +1747,10 @@ gst_v4l2_buffer_pool_process (GstV4l2BufferPool * pool, GstBuffer ** buf) goto eos; } + if (GST_VIDEO_INFO_FORMAT (&pool->caps_info) != + GST_VIDEO_FORMAT_ENCODED && size < pool->size) + goto buffer_truncated; + num_queued = g_atomic_int_get (&pool->num_queued); GST_TRACE_OBJECT (pool, "Only %i buffer left in the capture queue.", num_queued); @@ -1984,6 +1988,14 @@ buffer_corrupted: *buf = NULL; return GST_V4L2_FLOW_CORRUPTED_BUFFER; } +buffer_truncated: + { + GST_WARNING_OBJECT (pool, + "Dropping truncated buffer, this is likely a driver bug."); + gst_buffer_unref (*buf); + *buf = NULL; + return GST_V4L2_FLOW_CORRUPTED_BUFFER; + } eos: { GST_DEBUG_OBJECT (pool, "end of stream reached"); -- 2.7.4