gsize bsize, bufsize, bufoffs, bufmax;
GstMemory *mem;
- GST_CAT_LOG (GST_CAT_BUFFER, "trim %p %" G_GSSIZE_FORMAT "-%" G_GSIZE_FORMAT,
- buffer, offset, size);
-
g_return_if_fail (gst_buffer_is_writable (buffer));
bufsize = gst_buffer_get_sizes (buffer, &bufoffs, &bufmax);
+ GST_CAT_LOG (GST_CAT_BUFFER, "trim %p %" G_GSSIZE_FORMAT "-%" G_GSIZE_FORMAT
+ " size:%" G_GSIZE_FORMAT " offs:%" G_GSIZE_FORMAT " max:%" G_GSIZE_FORMAT,
+ buffer, offset, size, bufsize, bufoffs, bufmax);
+
/* we can't go back further than the current offset or past the end of the
* buffer */
g_return_if_fail ((offset < 0 && bufoffs >= -offset) || (offset >= 0
len = GST_BUFFER_MEM_LEN (buffer);
/* copy and trim */
- for (di = si = 0; si < len && size > 0; si++) {
+ for (di = si = 0; si < len; si++) {
mem = GST_BUFFER_MEM_PTR (buffer, si);
bsize = gst_memory_get_sizes (mem, NULL, NULL);
if ((gssize) bsize <= offset) {
/* remove buffer */
+ GST_CAT_LOG (GST_CAT_BUFFER, "remove memory %p", mem);
gst_memory_unref (mem);
offset -= bsize;
} else {
else
left = MIN (bsize - offset, size);
- if (left) {
+ if (offset != 0 || left != bsize) {
/* we need to clip something */
if (GST_MEMORY_IS_WRITABLE (mem)) {
gst_memory_resize (mem, offset, left);
fail_unless (offset == 0);
fail_unless (maxsize == maxalloc);
+ gst_buffer_resize (buf, 0, 0);
+ size = gst_buffer_get_sizes (buf, &offset, &maxsize);
+ fail_unless (size == 0);
+ fail_unless (offset == 0);
+ fail_unless (maxsize == maxalloc);
+
+ gst_buffer_resize (buf, 0, 100);
+ size = gst_buffer_get_sizes (buf, &offset, &maxsize);
+ fail_unless (size == 100);
+ fail_unless (offset == 0);
+ fail_unless (maxsize == maxalloc);
+
+ gst_buffer_resize (buf, 0, 100);
+ size = gst_buffer_get_sizes (buf, &offset, &maxsize);
+ fail_unless (size == 100);
+ fail_unless (offset == 0);
+ fail_unless (maxsize == maxalloc);
+
gst_buffer_unref (buf);
}