Remove skipped part of buffer when mapping the adapter
authorMatej Knopp <matej.knopp@gmail.com>
Sat, 14 Apr 2012 01:27:29 +0000 (03:27 +0200)
committerWim Taymans <wim.taymans@collabora.co.uk>
Sat, 14 Apr 2012 08:25:12 +0000 (10:25 +0200)
Fixes https://bugzilla.gnome.org/show_bug.cgi?id=674085

libs/gst/base/gstadapter.c

index 3342536..ff81080 100644 (file)
@@ -361,11 +361,13 @@ gst_adapter_try_to_merge_up (GstAdapter * adapter, gsize size)
   head = g->data;
   g = g_slist_next (g);
 
-  /* How large do we want our head buffer? The requested size, plus whatever's
-   * been skipped already */
-  size += adapter->skip;
   hsize = gst_buffer_get_size (head);
 
+  /* Remove skipped part from the buffer (otherwise the buffer might grow indefinitely) */
+  gst_buffer_resize (head, adapter->skip, hsize - adapter->skip);
+  hsize -= adapter->skip;
+  adapter->skip = 0;
+
   while (g != NULL && hsize < size) {
     cur = g->data;
     /* Merge the head buffer and the next in line */