mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2025-01-19 05:45:58 +00:00
GstAdapter: Discard empty buffers in _push(). Fixes #574024
This commit is contained in:
parent
2323d50faa
commit
f0481cb717
1 changed files with 19 additions and 11 deletions
|
@ -193,6 +193,8 @@ gst_adapter_clear (GstAdapter * adapter)
|
||||||
*
|
*
|
||||||
* Adds the data from @buf to the data stored inside @adapter and takes
|
* Adds the data from @buf to the data stored inside @adapter and takes
|
||||||
* ownership of the buffer.
|
* ownership of the buffer.
|
||||||
|
* Empty buffers will be automatically dereferenced and not stored in the
|
||||||
|
* @adapter.
|
||||||
*/
|
*/
|
||||||
void
|
void
|
||||||
gst_adapter_push (GstAdapter * adapter, GstBuffer * buf)
|
gst_adapter_push (GstAdapter * adapter, GstBuffer * buf)
|
||||||
|
@ -204,18 +206,24 @@ gst_adapter_push (GstAdapter * adapter, GstBuffer * buf)
|
||||||
|
|
||||||
size = GST_BUFFER_SIZE (buf);
|
size = GST_BUFFER_SIZE (buf);
|
||||||
|
|
||||||
adapter->size += size;
|
if (G_UNLIKELY (size == 0)) {
|
||||||
|
GST_LOG_OBJECT (adapter, "discarding empty buffer");
|
||||||
/* Note: merging buffers at this point is premature. */
|
gst_buffer_unref (buf);
|
||||||
if (G_UNLIKELY (adapter->buflist == NULL)) {
|
|
||||||
GST_LOG_OBJECT (adapter, "pushing first %u bytes", size);
|
|
||||||
adapter->buflist = adapter->buflist_end = g_slist_append (NULL, buf);
|
|
||||||
} else {
|
} else {
|
||||||
/* Otherwise append to the end, and advance our end pointer */
|
|
||||||
GST_LOG_OBJECT (adapter, "pushing %u bytes at end, size now %u", size,
|
adapter->size += size;
|
||||||
adapter->size);
|
|
||||||
adapter->buflist_end = g_slist_append (adapter->buflist_end, buf);
|
/* Note: merging buffers at this point is premature. */
|
||||||
adapter->buflist_end = g_slist_next (adapter->buflist_end);
|
if (G_UNLIKELY (adapter->buflist == NULL)) {
|
||||||
|
GST_LOG_OBJECT (adapter, "pushing first %u bytes", size);
|
||||||
|
adapter->buflist = adapter->buflist_end = g_slist_append (NULL, buf);
|
||||||
|
} else {
|
||||||
|
/* Otherwise append to the end, and advance our end pointer */
|
||||||
|
GST_LOG_OBJECT (adapter, "pushing %u bytes at end, size now %u", size,
|
||||||
|
adapter->size);
|
||||||
|
adapter->buflist_end = g_slist_append (adapter->buflist_end, buf);
|
||||||
|
adapter->buflist_end = g_slist_next (adapter->buflist_end);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue