mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2024-11-23 18:21:04 +00:00
v4l2: Move capture eos handling in _process()
Now that we might be copying out buffer (e.g. downstream don't support video meta bug we need it) we need to move the EOS handling inside the process method.
This commit is contained in:
parent
49065b1693
commit
8d6e72a299
2 changed files with 18 additions and 7 deletions
|
@ -1441,14 +1441,24 @@ gst_v4l2_buffer_pool_process (GstV4l2BufferPool * pool, GstBuffer * buf)
|
||||||
{
|
{
|
||||||
GstBuffer *tmp;
|
GstBuffer *tmp;
|
||||||
|
|
||||||
if (buf->pool == bpool)
|
if (buf->pool == bpool) {
|
||||||
/* nothing, data was inside the buffer when we did _acquire() */
|
if (gst_buffer_get_size (buf) == 0)
|
||||||
goto done;
|
goto eos;
|
||||||
|
else
|
||||||
|
/* nothing, data was inside the buffer when we did _acquire() */
|
||||||
|
goto done;
|
||||||
|
}
|
||||||
|
|
||||||
/* buffer not from our pool, grab a frame and copy it into the target */
|
/* buffer not from our pool, grab a frame and copy it into the target */
|
||||||
if ((ret = gst_v4l2_buffer_pool_dqbuf (pool, &tmp)) != GST_FLOW_OK)
|
if ((ret = gst_v4l2_buffer_pool_dqbuf (pool, &tmp)) != GST_FLOW_OK)
|
||||||
goto done;
|
goto done;
|
||||||
|
|
||||||
|
/* An empty buffer on capture indicates the end of stream */
|
||||||
|
if (gst_buffer_get_size (tmp) == 0) {
|
||||||
|
gst_buffer_unref (tmp);
|
||||||
|
goto eos;
|
||||||
|
}
|
||||||
|
|
||||||
if (!gst_v4l2_object_copy (obj, buf, tmp))
|
if (!gst_v4l2_object_copy (obj, buf, tmp))
|
||||||
goto copy_failed;
|
goto copy_failed;
|
||||||
|
|
||||||
|
@ -1556,6 +1566,11 @@ start_failed:
|
||||||
GST_ERROR_OBJECT (obj->element, "failed to start streaming");
|
GST_ERROR_OBJECT (obj->element, "failed to start streaming");
|
||||||
return GST_FLOW_ERROR;
|
return GST_FLOW_ERROR;
|
||||||
}
|
}
|
||||||
|
eos:
|
||||||
|
{
|
||||||
|
GST_DEBUG_OBJECT (obj->element, "end of stream reached");
|
||||||
|
return GST_FLOW_EOS;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -393,10 +393,6 @@ gst_v4l2_video_dec_loop (GstVideoDecoder * decoder)
|
||||||
if (ret != GST_FLOW_OK)
|
if (ret != GST_FLOW_OK)
|
||||||
goto beach;
|
goto beach;
|
||||||
|
|
||||||
/* Check if buffer isn't the last one */
|
|
||||||
if (gst_buffer_get_size (buffer) == 0)
|
|
||||||
goto beach;
|
|
||||||
|
|
||||||
GST_LOG_OBJECT (decoder, "Process output buffer");
|
GST_LOG_OBJECT (decoder, "Process output buffer");
|
||||||
ret =
|
ret =
|
||||||
gst_v4l2_buffer_pool_process (GST_V4L2_BUFFER_POOL (self->
|
gst_v4l2_buffer_pool_process (GST_V4L2_BUFFER_POOL (self->
|
||||||
|
|
Loading…
Reference in a new issue