v4l2: bufferpool: Avoid warnings on empty last buffer
authorNicolas Dufresne <nicolas.dufresne@collabora.com>
Tue, 5 Sep 2023 20:51:24 +0000 (16:51 -0400)
committerTim-Philipp Müller <tim@centricular.com>
Tue, 12 Sep 2023 16:42:16 +0000 (17:42 +0100)
Some drivers will push an buffer flagged LAST but empty. In decoder
case, this results in an "producing too many buffer" warning, even
though the result is entirely correct. Detect this case in order to
signal EOS earlier and avoid this warning.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/5319>

subprojects/gst-plugins-good/sys/v4l2/gstv4l2bufferpool.c

index 68bab75..8c6eba1 100644 (file)
@@ -1275,6 +1275,12 @@ gst_v4l2_buffer_pool_dqbuf (GstV4l2BufferPool * pool, GstBuffer ** buffer,
         group->buffer.index);
   }
 
+  if (group->buffer.flags & V4L2_BUF_FLAG_LAST &&
+      group->planes[0].bytesused == 0) {
+    GST_DEBUG_OBJECT (pool, "Empty last buffer, signalling eos.");
+    goto eos;
+  }
+
   outbuf = pool->buffers[group->buffer.index];
   if (outbuf == NULL)
     goto no_buffer;