mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2024-12-17 13:56:32 +00:00
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/4671>
This commit is contained in:
parent
e8b74ada7c
commit
a7f6b878e0
3 changed files with 5 additions and 5 deletions
|
@ -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",
|
||||
|
|
|
@ -1258,7 +1258,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;
|
||||
|
@ -1408,7 +1408,7 @@ poll_failed:
|
|||
}
|
||||
eos:
|
||||
{
|
||||
return GST_FLOW_EOS;
|
||||
return GST_V4L2_FLOW_LAST_BUFFER;
|
||||
}
|
||||
dqbuf_failed:
|
||||
{
|
||||
|
@ -2165,7 +2165,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;
|
||||
|
|
|
@ -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;
|
||||
|
|
Loading…
Reference in a new issue