memory: fix alignment calculations
authorWim Taymans <wim.taymans@collabora.co.uk>
Thu, 2 Jun 2011 16:13:33 +0000 (18:13 +0200)
committerWim Taymans <wim.taymans@collabora.co.uk>
Thu, 2 Jun 2011 16:13:33 +0000 (18:13 +0200)
Fix the alignment calculation.
Improve documentation.

gst/gstmemory.c

index bdbd5e4..09215cf 100644 (file)
@@ -131,7 +131,7 @@ _default_mem_new_block (gsize maxsize, gsize align, gsize offset, gsize size)
   data = (guint8 *) mem + sizeof (GstMemoryDefault);
 
   if ((aoffset = ((guintptr) data & align)))
-    aoffset = align - aoffset;
+    aoffset = (align + 1) - aoffset;
 
   _default_mem_init (mem, 0, NULL, slice_size, data, NULL, maxsize + align,
       aoffset + offset, size);
@@ -405,9 +405,12 @@ gst_memory_new_wrapped (GstMemoryFlags flags, gpointer data,
  * @maxsize: allocated size of @data
  * @align: alignment for the data
  *
- * Allocate a new memory block with memory that is at least @maxsize big and las
+ * Allocate a new memory block with memory that is at least @maxsize big and has
  * the given alignment.
  *
+ * @align is given as a bitmask so that @align + 1 equals the amount of bytes to
+ * align to. For example, to align to 8 bytes, use an alignment of 7.
+ *
  * Returns: a new #GstMemory.
  */
 GstMemory *
@@ -415,6 +418,8 @@ gst_memory_new_alloc (gsize maxsize, gsize align)
 {
   GstMemoryDefault *mem;
 
+  g_return_val_if_fail (((align + 1) & align) == 0, NULL);
+
   mem = _default_mem_new_block (maxsize, align, 0, maxsize);
 
   return (GstMemory *) mem;