mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2024-11-25 11:11:08 +00:00
buffer: implemet trim and set_size
This commit is contained in:
parent
826a7d83d4
commit
9ff103b3a5
1 changed files with 59 additions and 2 deletions
|
@ -577,6 +577,62 @@ gst_buffer_get_size (GstBuffer * buffer)
|
|||
return size;
|
||||
}
|
||||
|
||||
/**
|
||||
* gst_buffer_trim:
|
||||
* @buffer: a #GstBuffer.
|
||||
* @offset: the new offset
|
||||
* @size: the new size
|
||||
*
|
||||
* Set the total size of the buffer
|
||||
*/
|
||||
void
|
||||
gst_buffer_trim (GstBuffer * buffer, gsize offset, gsize size)
|
||||
{
|
||||
GPtrArray *arr;
|
||||
guint len;
|
||||
guint si, di;
|
||||
gsize bsize;
|
||||
GstMemory *mem;
|
||||
|
||||
g_return_if_fail (gst_buffer_is_writable (buffer));
|
||||
|
||||
arr = (GPtrArray *) buffer->memory;
|
||||
len = arr->len;
|
||||
si = di = 0;
|
||||
|
||||
/* copy and trim */
|
||||
while (size > 0) {
|
||||
mem = g_ptr_array_index (arr, si);
|
||||
bsize = gst_memory_get_sizes (mem, NULL);
|
||||
|
||||
if (bsize <= offset) {
|
||||
/* remove buffer */
|
||||
gst_memory_unref (mem);
|
||||
offset -= bsize;
|
||||
} else {
|
||||
gsize tocopy;
|
||||
|
||||
tocopy = MIN (bsize - offset, size);
|
||||
if (tocopy < bsize) {
|
||||
/* we need to clip something */
|
||||
if (GST_MEMORY_IS_WRITABLE (mem)) {
|
||||
gst_memory_trim (mem, offset, tocopy);
|
||||
} else {
|
||||
GstMemory *tmp;
|
||||
tmp = gst_memory_sub (mem, offset, tocopy);
|
||||
gst_memory_unref (mem);
|
||||
mem = tmp;
|
||||
}
|
||||
}
|
||||
g_ptr_array_index (arr, di) = mem;
|
||||
size -= tocopy;
|
||||
di++;
|
||||
}
|
||||
si++;
|
||||
}
|
||||
g_ptr_array_set_size (arr, di);
|
||||
}
|
||||
|
||||
/**
|
||||
* gst_buffer_set_size:
|
||||
* @buffer: a #GstBuffer.
|
||||
|
@ -587,8 +643,7 @@ gst_buffer_get_size (GstBuffer * buffer)
|
|||
void
|
||||
gst_buffer_set_size (GstBuffer * buffer, gsize size)
|
||||
{
|
||||
/* FIXME */
|
||||
g_warning ("gst_buffer_set_size not imlpemented");
|
||||
gst_buffer_trim (buffer, 0, size);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -651,6 +706,8 @@ gst_buffer_map (GstBuffer * buffer, gsize * size, gsize * maxsize,
|
|||
data = gst_memory_map (mem, size, maxsize, flags);
|
||||
} else {
|
||||
data = NULL;
|
||||
if (size)
|
||||
*size = 0;
|
||||
}
|
||||
return data;
|
||||
|
||||
|
|
Loading…
Reference in a new issue