mem: add support for _aligned_malloc() as found on Windows
authorRonald S. Bultje <rsbultje@gmail.com>
Mon, 18 Jun 2012 13:37:02 +0000 (14:37 +0100)
committerMartin Storsjö <martin@martin.st>
Tue, 19 Jun 2012 07:08:00 +0000 (10:08 +0300)
The check uses check_func_header, since this function is
conditionally available depending on the targeted MSVCRT
version.

Signed-off-by: Martin Storsjö <martin@martin.st>
configure
libavutil/mem.c

index ea80d48..0baa755 100755 (executable)
--- a/configure
+++ b/configure
@@ -1051,6 +1051,7 @@ HAVE_LIST="
     $ARCH_EXT_LIST
     $HAVE_LIST_PUB
     $THREADS_LIST
+    aligned_malloc
     aligned_stack
     alsa_asoundlib_h
     altivec_h
@@ -2838,6 +2839,7 @@ check_func  ${malloc_prefix}memalign            && enable memalign
 check_func  mkstemp
 check_func  mmap
 check_func  ${malloc_prefix}posix_memalign      && enable posix_memalign
+check_func_headers malloc.h _aligned_malloc     && enable aligned_malloc
 check_func  setrlimit
 check_func  strerror_r
 check_func  strptime
@@ -3144,7 +3146,7 @@ check_deps $CONFIG_LIST       \
 
 enabled asm || { arch=c; disable $ARCH_LIST $ARCH_EXT_LIST; }
 
-! enabled_any memalign posix_memalign &&
+! enabled_any memalign posix_memalign aligned_malloc &&
     enabled_any $need_memalign && enable memalign_hack
 
 echo "install prefix            $prefix"
index bf1a542..0fe9f54 100644 (file)
@@ -84,6 +84,8 @@ void *av_malloc(size_t size)
 #elif HAVE_POSIX_MEMALIGN
     if (posix_memalign(&ptr,32,size))
         ptr = NULL;
+#elif HAVE_ALIGNED_MALLOC
+    ptr = _aligned_malloc(size, 32);
 #elif HAVE_MEMALIGN
     ptr = memalign(32,size);
     /* Why 64?
@@ -131,6 +133,8 @@ void *av_realloc(void *ptr, size_t size)
     if(!ptr) return av_malloc(size);
     diff= ((char*)ptr)[-1];
     return (char*)realloc((char*)ptr - diff, size + diff) + diff;
+#elif HAVE_ALIGNED_MALLOC
+    return _aligned_realloc(ptr, size, 32);
 #else
     return realloc(ptr, size);
 #endif
@@ -141,6 +145,8 @@ void av_free(void *ptr)
 #if CONFIG_MEMALIGN_HACK
     if (ptr)
         free((char*)ptr - ((char*)ptr)[-1]);
+#elif HAVE_ALIGNED_MALLOC
+    _aligned_free(ptr);
 #else
     free(ptr);
 #endif