[vlc-commits] vlc_memalign: use memalign() if posix_memalign() isn't here
Rafaël Carré
git at videolan.org
Thu Sep 22 04:31:57 CEST 2011
vlc | branch: master | Rafaël Carré <funman at videolan.org> | Wed Sep 21 21:25:17 2011 -0400| [0ad141d394dd86e930d1f27be2ea6ea7e698fddf] | committer: Rafaël Carré
vlc_memalign: use memalign() if posix_memalign() isn't here
Also rename confusing vlc_free()
> http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=0ad141d394dd86e930d1f27be2ea6ea7e698fddf
---
configure.ac | 2 +-
include/vlc_common.h | 14 +++-----------
modules/codec/avcodec/copy.c | 2 +-
src/extras/libc.c | 22 ++++++++++++++++++++++
src/libvlccore.sym | 1 +
src/misc/picture.c | 2 +-
6 files changed, 29 insertions(+), 14 deletions(-)
diff --git a/configure.ac b/configure.ac
index daa9fa7..f2ce200 100644
--- a/configure.ac
+++ b/configure.ac
@@ -562,7 +562,7 @@ need_libc=false
dnl Check for usual libc functions
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_CHECK_FUNCS(fdatasync,,
[AC_DEFINE(fdatasync, fsync, [Alias fdatasync() to fsync() if missing.])
diff --git a/include/vlc_common.h b/include/vlc_common.h
index a127bfd..c7e06d9 100644
--- a/include/vlc_common.h
+++ b/include/vlc_common.h
@@ -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 );
/* Aligned memory allocator */
+VLC_API void *vlc_memalign(size_t align, size_t size);
#ifdef WIN32
-# include <malloc.h>
-# define vlc_memalign(align, size) (__mingw_aligned_malloc(size, align))
-# define vlc_free(base) (__mingw_aligned_free(base))
+# define vlc_aligned_free(base) (__mingw_aligned_free(base))
#else
-static inline void *vlc_memalign(size_t align, size_t size)
-{
- void *base;
- if (unlikely(posix_memalign(&base, align, size)))
- base = NULL;
- return base;
-}
-# define vlc_free(base) free(base)
+# define vlc_aligned_free(base) free(base)
#endif
VLC_API void vlc_tdestroy( void *, void (*)(void *) );
diff --git a/modules/codec/avcodec/copy.c b/modules/codec/avcodec/copy.c
index 3c27069..2a1955a 100644
--- a/modules/codec/avcodec/copy.c
+++ b/modules/codec/avcodec/copy.c
@@ -300,7 +300,7 @@ int CopyInitCache(copy_cache_t *cache, unsigned width)
}
void CopyCleanCache(copy_cache_t *cache)
{
- vlc_free(cache->buffer);
+ vlc_aligned_free(cache->buffer);
cache->buffer = NULL;
cache->size = 0;
}
diff --git a/src/extras/libc.c b/src/extras/libc.c
index 5004480..db08691 100644
--- a/src/extras/libc.c
+++ b/src/extras/libc.c
@@ -32,6 +32,12 @@
#include <vlc_common.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>
#undef iconv_t
@@ -419,3 +425,19 @@ bool vlc_ureduce( unsigned *pi_dst_nom, unsigned *pi_dst_den,
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;
+}
diff --git a/src/libvlccore.sym b/src/libvlccore.sym
index 672bb53..dc066db 100644
--- a/src/libvlccore.sym
+++ b/src/libvlccore.sym
@@ -675,4 +675,5 @@ xml_ReaderCreate
xml_ReaderDelete
xml_ReaderReset
vlc_keycode2str
+vlc_memalign
vlc_str2keycode
diff --git a/src/misc/picture.c b/src/misc/picture.c
index 2c47255..3a09685 100644
--- a/src/misc/picture.c
+++ b/src/misc/picture.c
@@ -268,7 +268,7 @@ void picture_Delete( picture_t *p_picture )
assert( p_picture->p_release_sys == NULL );
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 );
}
More information about the vlc-commits
mailing list