memory: take offset into account
authorWim Taymans <wim.taymans@collabora.co.uk>
Thu, 5 Jan 2012 16:28:28 +0000 (17:28 +0100)
committerWim Taymans <wim.taymans@collabora.co.uk>
Thu, 5 Jan 2012 16:28:28 +0000 (17:28 +0100)
Take the offset into account whem mapping and unmapping the buffer.

docs/design/part-memory.txt
gst/gstmemory.c
tests/check/gst/gstmemory.c

index c8b69eb..af12090 100644 (file)
@@ -127,7 +127,7 @@ Data Access
  When the final reference on a memory object is dropped, all outstanding
  mappings are automatically unmapped.
 
- Resizing a GstMemory does not influence any current mappings.
+ Resizing a GstMemory does not influence any current mappings an any way.
 
 
 Copy
index e2f5e48..0791fb8 100644 (file)
@@ -206,7 +206,7 @@ _default_mem_map (GstMemoryDefault * mem, gsize * size, gsize * maxsize,
   if (size)
     *size = mem->size;
   if (maxsize)
-    *maxsize = mem->maxsize;
+    *maxsize = mem->maxsize - mem->offset;
 
   return mem->data + mem->offset;
 }
@@ -215,7 +215,7 @@ static gboolean
 _default_mem_unmap (GstMemoryDefault * mem, gpointer data, gsize size)
 {
   if (size != -1) {
-    g_return_val_if_fail (size <= mem->maxsize, FALSE);
+    g_return_val_if_fail (mem->offset + size <= mem->maxsize, FALSE);
     mem->size = size;
   }
   return TRUE;
index 0191006..b903a51 100644 (file)
@@ -421,6 +421,16 @@ GST_START_TEST (test_map)
   ASSERT_CRITICAL (gst_memory_unmap (mem, data, maxsize + 1));
   gst_memory_unmap (mem, data, maxsize);
 
+  /* add offset, maxsize should be smaller now */
+  gst_memory_resize (mem, 1, 99);
+
+  data = gst_memory_map (mem, &size, &maxsize, GST_MAP_READ);
+  fail_unless (data != NULL);
+  fail_unless (size == 99);
+  fail_unless (maxsize == maxalloc - 1);
+  ASSERT_CRITICAL (gst_memory_unmap (mem, data, maxsize + 1));
+  gst_memory_unmap (mem, data, maxsize);
+
   gst_memory_unref (mem);
 }