ximage: do not allocate extra alignment slack for shared memory
authorVincent Penquerc'h <vincent.penquerch@collabora.co.uk>
Fri, 4 Apr 2014 11:40:14 +0000 (12:40 +0100)
committerVincent Penquerc'h <vincent.penquerch@collabora.co.uk>
Fri, 3 Apr 2015 10:15:55 +0000 (11:15 +0100)
A previous patch increased allocations by 15 bytes in order to ensure
16 byte alignment for g_malloc blocks. However, shared memory is
already block aligned, and this extra 15 bytes is not needed. Since
shared memory limits are low compared to RAM, we remove this waste.

https://bugzilla.gnome.org/show_bug.cgi?id=727236

sys/ximage/ximagepool.c

index 6a0d123..64d4687 100644 (file)
@@ -213,7 +213,7 @@ ximage_memory_alloc (GstXImageBufferPool * xpool)
   int (*handler) (Display *, XErrorEvent *);
   gboolean success = FALSE;
   GstXContext *xcontext;
-  gint width, height, align = 15, offset;
+  gint width, height, align, offset;
   GstXImageMemory *mem;
 
   ximagesink = xpool->sink;
@@ -276,6 +276,7 @@ ximage_memory_alloc (GstXImageBufferPool * xpool)
         mem->size, width, mem->ximage->bytes_per_line);
 
     /* get shared memory */
+    align = 0;
     mem->SHMInfo.shmid =
         shmget (IPC_PRIVATE, mem->size + align, IPC_CREAT | 0777);
     if (mem->SHMInfo.shmid == -1)
@@ -330,6 +331,8 @@ ximage_memory_alloc (GstXImageBufferPool * xpool)
     allocsize =
         GST_ROUND_UP_4 (mem->ximage->bytes_per_line) * mem->ximage->height;
 
+    /* we want 16 byte aligned memory, g_malloc may only give 8 */
+    align = 15;
     mem->ximage->data = g_malloc (allocsize + align);
     GST_LOG_OBJECT (ximagesink,
         "non-XShm image size is %" G_GSIZE_FORMAT " (alloced: %u), width %d, "