diff --git a/configure b/configure index ea80d480b2652626a34aad57dd7295f8689f45cc..0baa755d77aad1881338c90a3eec726a09a59f7c 100755 --- 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" diff --git a/libavutil/mem.c b/libavutil/mem.c index bf1a542db8fceb223e8fe6ec5ebd8d08fdfd00de..0fe9f5422a56970a723ee1cc7977a567c56e88d1 100644 --- a/libavutil/mem.c +++ b/libavutil/mem.c @@ -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