mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2025-02-23 14:36:24 +00:00
collectpads: avoid doing subbuffers when we can
In some cases we can avoid allocating a subbuffer and instead simply ref the buffer. Callers should perform _make_metadata_writable() in all cases now.
This commit is contained in:
parent
4718b7ef09
commit
633e8f4d9f
1 changed files with 12 additions and 7 deletions
|
@ -929,13 +929,13 @@ gst_collect_pads_read (GstCollectPads * pads, GstCollectData * data,
|
||||||
* @data: the data to use
|
* @data: the data to use
|
||||||
* @size: the number of bytes to read
|
* @size: the number of bytes to read
|
||||||
*
|
*
|
||||||
* Get a subbuffer of @size bytes from the given pad @data.
|
* Get a buffer of @size bytes from the given pad @data.
|
||||||
*
|
*
|
||||||
* This function should be called with @pads LOCK held, such as in the callback.
|
* This function should be called with @pads LOCK held, such as in the callback.
|
||||||
*
|
*
|
||||||
* Since: 0.10.18
|
* Since: 0.10.18
|
||||||
*
|
*
|
||||||
* Returns: A sub buffer. The size of the buffer can be less that requested.
|
* Returns: A #GstBuffer. The size of the buffer can be less that requested.
|
||||||
* A return of NULL signals that the pad is end-of-stream.
|
* A return of NULL signals that the pad is end-of-stream.
|
||||||
* Unref the buffer after use.
|
* Unref the buffer after use.
|
||||||
*
|
*
|
||||||
|
@ -945,7 +945,7 @@ GstBuffer *
|
||||||
gst_collect_pads_read_buffer (GstCollectPads * pads, GstCollectData * data,
|
gst_collect_pads_read_buffer (GstCollectPads * pads, GstCollectData * data,
|
||||||
guint size)
|
guint size)
|
||||||
{
|
{
|
||||||
guint readsize;
|
guint readsize, bufsize;
|
||||||
GstBuffer *buffer;
|
GstBuffer *buffer;
|
||||||
|
|
||||||
g_return_val_if_fail (pads != NULL, NULL);
|
g_return_val_if_fail (pads != NULL, NULL);
|
||||||
|
@ -956,9 +956,14 @@ gst_collect_pads_read_buffer (GstCollectPads * pads, GstCollectData * data,
|
||||||
if ((buffer = data->buffer) == NULL)
|
if ((buffer = data->buffer) == NULL)
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
||||||
readsize = MIN (size, GST_BUFFER_SIZE (buffer) - data->pos);
|
bufsize = GST_BUFFER_SIZE (buffer);
|
||||||
|
|
||||||
return gst_buffer_create_sub (buffer, data->pos, readsize);
|
readsize = MIN (size, bufsize - data->pos);
|
||||||
|
|
||||||
|
if (data->pos == 0 && readsize == bufsize)
|
||||||
|
return gst_buffer_ref (buffer);
|
||||||
|
else
|
||||||
|
return gst_buffer_create_sub (buffer, data->pos, readsize);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -967,14 +972,14 @@ gst_collect_pads_read_buffer (GstCollectPads * pads, GstCollectData * data,
|
||||||
* @data: the data to use
|
* @data: the data to use
|
||||||
* @size: the number of bytes to read
|
* @size: the number of bytes to read
|
||||||
*
|
*
|
||||||
* Get a subbuffer of @size bytes from the given pad @data. Flushes the amount
|
* Get a buffer of @size bytes from the given pad @data. Flushes the amount
|
||||||
* of read bytes.
|
* of read bytes.
|
||||||
*
|
*
|
||||||
* This function should be called with @pads LOCK held, such as in the callback.
|
* This function should be called with @pads LOCK held, such as in the callback.
|
||||||
*
|
*
|
||||||
* Since: 0.10.18
|
* Since: 0.10.18
|
||||||
*
|
*
|
||||||
* Returns: A sub buffer. The size of the buffer can be less that requested.
|
* Returns: A #GstBuffer. The size of the buffer can be less that requested.
|
||||||
* A return of NULL signals that the pad is end-of-stream.
|
* A return of NULL signals that the pad is end-of-stream.
|
||||||
* Unref the buffer after use.
|
* Unref the buffer after use.
|
||||||
*
|
*
|
||||||
|
|
Loading…
Reference in a new issue