v4l2: videodec: Fix stalls on empty buffer

Drivers may signal end of sequence using an empty buffer and LAST buffer
set, or just an empty buffer on certain legacy implementation. When this
occured, we'd send GST_V4L2_FLOW_LAST_BUFFER were the code expected
GST_FLOW_EOS. Stop abusing GST_FLOW_EOS and port all the code to the new
GST_V4L2_FLOW_LAST_BUFFER.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/4669>
This commit is contained in:
Nicolas Dufresne 2023-05-18 11:58:51 -04:00 committed by GStreamer Marge Bot
parent 6dff93acf6
commit 0c9ab49579
3 changed files with 5 additions and 5 deletions

View file

@ -1399,7 +1399,7 @@ gst_v4l2_allocator_dqbuf (GstV4l2Allocator * allocator,
error:
if (errno == EPIPE) {
GST_DEBUG_OBJECT (allocator, "broken pipe signals last buffer");
return GST_FLOW_EOS;
return GST_V4L2_FLOW_LAST_BUFFER;
}
GST_ERROR_OBJECT (allocator, "failed dequeuing a %s buffer: %s",

View file

@ -1261,7 +1261,7 @@ gst_v4l2_buffer_pool_dqbuf (GstV4l2BufferPool * pool, GstBuffer ** buffer,
GST_LOG_OBJECT (pool, "dequeueing a buffer");
res = gst_v4l2_allocator_dqbuf (pool->vallocator, &group);
if (res == GST_FLOW_EOS)
if (res == GST_V4L2_FLOW_LAST_BUFFER)
goto eos;
if (res != GST_FLOW_OK)
goto dqbuf_failed;
@ -1411,7 +1411,7 @@ poll_failed:
}
eos:
{
return GST_FLOW_EOS;
return GST_V4L2_FLOW_LAST_BUFFER;
}
dqbuf_failed:
{
@ -2168,7 +2168,7 @@ buffer_truncated:
}
eos:
{
GST_DEBUG_OBJECT (pool, "end of stream reached");
GST_DEBUG_OBJECT (pool, "end of sequence reached");
gst_buffer_unref (*buf);
*buf = NULL;
return GST_V4L2_FLOW_LAST_BUFFER;

View file

@ -884,7 +884,7 @@ beach:
return;
}
if (ret == GST_FLOW_EOS) {
if (ret == GST_V4L2_FLOW_LAST_BUFFER) {
GST_VIDEO_DECODER_STREAM_LOCK (decoder);
if (self->draining) {
self->draining = FALSE;