diff --git a/sys/v4l2/gstv4l2bufferpool.c b/sys/v4l2/gstv4l2bufferpool.c index c3a243b811..a57229368c 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");