Commit 0ad141d3 authored by Rafaël Carré's avatar Rafaël Carré
Browse files

vlc_memalign: use memalign() if posix_memalign() isn't here

Also rename confusing vlc_free()
parent 69d23756
...@@ -562,7 +562,7 @@ need_libc=false ...@@ -562,7 +562,7 @@ need_libc=false
dnl Check for usual libc functions dnl Check for usual libc functions
AC_CHECK_DECLS([nanosleep],,,[#include <time.h>]) AC_CHECK_DECLS([nanosleep],,,[#include <time.h>])
AC_CHECK_FUNCS([daemon fcntl fstatvfs fork getenv getpwuid_r if_nameindex if_nametoindex isatty lstat memalign mmap openat pread posix_fadvise posix_madvise setlocale stricmp strnicmp uselocale]) AC_CHECK_FUNCS([daemon fcntl fstatvfs fork getenv getpwuid_r if_nameindex if_nametoindex isatty lstat memalign mmap openat pread posix_fadvise posix_madvise posix_memalign setlocale stricmp strnicmp uselocale])
AC_REPLACE_FUNCS([asprintf atof atoll dirfd fdopendir flockfile fsync getdelim getpid gmtime_r lldiv localtime_r nrand48 rewind setenv strcasecmp strcasestr strdup strlcpy strncasecmp strndup strnlen strsep strtof strtok_r strtoll swab tdestroy vasprintf]) AC_REPLACE_FUNCS([asprintf atof atoll dirfd fdopendir flockfile fsync getdelim getpid gmtime_r lldiv localtime_r nrand48 rewind setenv strcasecmp strcasestr strdup strlcpy strncasecmp strndup strnlen strsep strtof strtok_r strtoll swab tdestroy vasprintf])
AC_CHECK_FUNCS(fdatasync,, AC_CHECK_FUNCS(fdatasync,,
[AC_DEFINE(fdatasync, fsync, [Alias fdatasync() to fsync() if missing.]) [AC_DEFINE(fdatasync, fsync, [Alias fdatasync() to fsync() if missing.])
......
...@@ -886,19 +886,11 @@ static inline void SetQWLE (void *p, uint64_t qw) ...@@ -886,19 +886,11 @@ static inline void SetQWLE (void *p, uint64_t qw)
VLC_API bool vlc_ureduce( unsigned *, unsigned *, uint64_t, uint64_t, uint64_t ); VLC_API bool vlc_ureduce( unsigned *, unsigned *, uint64_t, uint64_t, uint64_t );
/* Aligned memory allocator */ /* Aligned memory allocator */
VLC_API void *vlc_memalign(size_t align, size_t size);
#ifdef WIN32 #ifdef WIN32
# include <malloc.h> # define vlc_aligned_free(base) (__mingw_aligned_free(base))
# define vlc_memalign(align, size) (__mingw_aligned_malloc(size, align))
# define vlc_free(base) (__mingw_aligned_free(base))
#else #else
static inline void *vlc_memalign(size_t align, size_t size) # define vlc_aligned_free(base) free(base)
{
void *base;
if (unlikely(posix_memalign(&base, align, size)))
base = NULL;
return base;
}
# define vlc_free(base) free(base)
#endif #endif
VLC_API void vlc_tdestroy( void *, void (*)(void *) ); VLC_API void vlc_tdestroy( void *, void (*)(void *) );
......
...@@ -300,7 +300,7 @@ int CopyInitCache(copy_cache_t *cache, unsigned width) ...@@ -300,7 +300,7 @@ int CopyInitCache(copy_cache_t *cache, unsigned width)
} }
void CopyCleanCache(copy_cache_t *cache) void CopyCleanCache(copy_cache_t *cache)
{ {
vlc_free(cache->buffer); vlc_aligned_free(cache->buffer);
cache->buffer = NULL; cache->buffer = NULL;
cache->size = 0; cache->size = 0;
} }
......
...@@ -32,6 +32,12 @@ ...@@ -32,6 +32,12 @@
#include <vlc_common.h> #include <vlc_common.h>
#include <vlc_charset.h> #include <vlc_charset.h>
#if defined(HAVE_POSIX_MEMALIGN)
# include <stdlib.h>
#elif defined(HAVE_MEMALIGN) || defined(HAVE_WIN32)
# include <malloc.h>
#endif
#include <errno.h> #include <errno.h>
#undef iconv_t #undef iconv_t
...@@ -419,3 +425,19 @@ bool vlc_ureduce( unsigned *pi_dst_nom, unsigned *pi_dst_den, ...@@ -419,3 +425,19 @@ bool vlc_ureduce( unsigned *pi_dst_nom, unsigned *pi_dst_den,
return b_exact; return b_exact;
} }
void *vlc_memalign(size_t align, size_t size)
{
void *base;
#if defined(HAVE_POSIX_MEMALIGN)
if (unlikely(posix_memalign(&base, align, size)))
base = NULL;
#elif defined(HAVE_MEMALIGN)
base = memalign(align, size);
#elif defined(HAVE_WIN32)
base = __mingw_aligned_malloc(size, align);
#else
# error Unimplemented!
#endif
return base;
}
...@@ -675,4 +675,5 @@ xml_ReaderCreate ...@@ -675,4 +675,5 @@ xml_ReaderCreate
xml_ReaderDelete xml_ReaderDelete
xml_ReaderReset xml_ReaderReset
vlc_keycode2str vlc_keycode2str
vlc_memalign
vlc_str2keycode vlc_str2keycode
...@@ -268,7 +268,7 @@ void picture_Delete( picture_t *p_picture ) ...@@ -268,7 +268,7 @@ void picture_Delete( picture_t *p_picture )
assert( p_picture->p_release_sys == NULL ); assert( p_picture->p_release_sys == NULL );
free( p_picture->p_q ); free( p_picture->p_q );
vlc_free( p_picture->p_data_orig ); vlc_aligned_free( p_picture->p_data_orig );
free( p_picture->p_sys ); free( p_picture->p_sys );
free( p_picture ); free( p_picture );
} }
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment