mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2024-12-23 00:36:51 +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/4669>
This commit is contained in:
parent
6dff93acf6
commit
0c9ab49579
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",
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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