mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2024-11-27 20:21:24 +00:00
adapter: potentially save a memcpy in _take
Directly use the assembled_data in _take() functions when we can instead of copying it out.
This commit is contained in:
parent
f3ff7ad055
commit
fd76e4fc93
1 changed files with 17 additions and 8 deletions
|
@ -113,7 +113,7 @@
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
|
|
||||||
/* default size for the assembled data buffer */
|
/* default size for the assembled data buffer */
|
||||||
#define DEFAULT_SIZE 16
|
#define DEFAULT_SIZE 4096
|
||||||
|
|
||||||
GST_DEBUG_CATEGORY_STATIC (gst_adapter_debug);
|
GST_DEBUG_CATEGORY_STATIC (gst_adapter_debug);
|
||||||
#define GST_CAT_DEFAULT gst_adapter_debug
|
#define GST_CAT_DEFAULT gst_adapter_debug
|
||||||
|
@ -528,14 +528,17 @@ gst_adapter_take (GstAdapter * adapter, guint nbytes)
|
||||||
if (G_UNLIKELY (nbytes > adapter->size))
|
if (G_UNLIKELY (nbytes > adapter->size))
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
||||||
data = g_malloc (nbytes);
|
/* we have enough assembled data, take from there */
|
||||||
|
|
||||||
/* we have enough assembled data, copy from there */
|
|
||||||
if (adapter->assembled_len >= nbytes) {
|
if (adapter->assembled_len >= nbytes) {
|
||||||
GST_LOG_OBJECT (adapter, "taking %u bytes already assembled", nbytes);
|
GST_LOG_OBJECT (adapter, "taking %u bytes already assembled", nbytes);
|
||||||
memcpy (data, adapter->assembled_data, nbytes);
|
data = adapter->assembled_data;
|
||||||
|
/* allocate new data, assembled_len will be set to 0 in the flush below */
|
||||||
|
adapter->assembled_data = g_malloc (adapter->assembled_size);
|
||||||
} else {
|
} else {
|
||||||
|
/* we need to allocate and copy. We could potentially copy bytes from the
|
||||||
|
* assembled data before doing the copy_into */
|
||||||
GST_LOG_OBJECT (adapter, "taking %u bytes by collection", nbytes);
|
GST_LOG_OBJECT (adapter, "taking %u bytes by collection", nbytes);
|
||||||
|
data = g_malloc (nbytes);
|
||||||
copy_into_unchecked (adapter, data, adapter->skip, nbytes);
|
copy_into_unchecked (adapter, data, adapter->skip, nbytes);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -608,13 +611,19 @@ gst_adapter_take_buffer (GstAdapter * adapter, guint nbytes)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
buffer = gst_buffer_new_and_alloc (nbytes);
|
|
||||||
|
|
||||||
/* we have enough assembled data, copy from there */
|
/* we have enough assembled data, copy from there */
|
||||||
if (adapter->assembled_len >= nbytes) {
|
if (adapter->assembled_len >= nbytes) {
|
||||||
GST_LOG_OBJECT (adapter, "taking %u bytes already assembled", nbytes);
|
GST_LOG_OBJECT (adapter, "taking %u bytes already assembled", nbytes);
|
||||||
memcpy (GST_BUFFER_DATA (buffer), adapter->assembled_data, nbytes);
|
buffer = gst_buffer_new ();
|
||||||
|
GST_BUFFER_SIZE (buffer) = nbytes;
|
||||||
|
GST_BUFFER_DATA (buffer) = adapter->assembled_data;
|
||||||
|
GST_BUFFER_MALLOCDATA (buffer) = adapter->assembled_data;
|
||||||
|
/* flush will set the assembled_len to 0 */
|
||||||
|
adapter->assembled_data = g_malloc (adapter->assembled_size);
|
||||||
} else {
|
} else {
|
||||||
|
/* we need to allocate and copy. We could potentially copy bytes from the
|
||||||
|
* assembled data before doing the copy_into */
|
||||||
|
buffer = gst_buffer_new_and_alloc (nbytes);
|
||||||
GST_LOG_OBJECT (adapter, "taking %u bytes by collection", nbytes);
|
GST_LOG_OBJECT (adapter, "taking %u bytes by collection", nbytes);
|
||||||
copy_into_unchecked (adapter, GST_BUFFER_DATA (buffer), skip, nbytes);
|
copy_into_unchecked (adapter, GST_BUFFER_DATA (buffer), skip, nbytes);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue