xvimagsink: fix failure to allocate large shared memory blocks

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 caused allocation
to fail when we were already allocating to the shared memory limit,
which is a lot smaller than typical available RAM.

Fix this by removing the alignment slack when allocating shared
memory.

https://bugzilla.gnome.org/show_bug.cgi?id=706066
This commit is contained in:
Vincent Penquerc'h 2014-04-04 12:32:14 +01:00
parent 3fd184da78
commit 964ea678da

View file

@ -346,7 +346,7 @@ gst_xvimage_allocator_alloc (GstXvImageAllocator * allocator, gint im_format,
int (*handler) (Display *, XErrorEvent *);
gboolean success = FALSE;
GstXvContext *context;
gint align = 15, offset;
gint align, offset;
GstXvImageMemory *mem;
context = allocator->context;
@ -453,8 +453,9 @@ gst_xvimage_allocator_alloc (GstXvImageAllocator * allocator, gint im_format,
}
/* get shared memory */
align = 0;
mem->SHMInfo.shmid =
shmget (IPC_PRIVATE, mem->xvimage->data_size + align, IPC_CREAT | 0777);
shmget (IPC_PRIVATE, mem->xvimage->data_size, IPC_CREAT | 0777);
if (mem->SHMInfo.shmid == -1)
goto shmget_failed;
@ -489,6 +490,7 @@ gst_xvimage_allocator_alloc (GstXvImageAllocator * allocator, gint im_format,
goto create_failed;
/* we have to use the returned data_size for our image size */
align = 15; /* g_malloc aligns to 8, we need 16 */
mem->xvimage->data = g_malloc (mem->xvimage->data_size + align);
XSync (context->disp, FALSE);