From: Wim Taymans Date: Thu, 5 Jan 2012 16:28:28 +0000 (+0100) Subject: memory: take offset into account X-Git-Tag: RELEASE-0.11.2~210 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=6e0024e76ea88c1220eb69da8baabb7f3ca35193;p=platform%2Fupstream%2Fgstreamer.git memory: take offset into account Take the offset into account whem mapping and unmapping the buffer. --- diff --git a/docs/design/part-memory.txt b/docs/design/part-memory.txt index c8b69eb..af12090 100644 --- a/docs/design/part-memory.txt +++ b/docs/design/part-memory.txt @@ -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 diff --git a/gst/gstmemory.c b/gst/gstmemory.c index e2f5e48..0791fb8 100644 --- a/gst/gstmemory.c +++ b/gst/gstmemory.c @@ -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; diff --git a/tests/check/gst/gstmemory.c b/tests/check/gst/gstmemory.c index 0191006..b903a51 100644 --- a/tests/check/gst/gstmemory.c +++ b/tests/check/gst/gstmemory.c @@ -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); }