aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorNick Kurshev <nickols_k@mail.ru>2001-09-13 07:16:59 +0000
committerNick Kurshev <nickols_k@mail.ru>2001-09-13 07:16:59 +0000
commit3d2043852d1533c79154c21c7a5f8bb453fa6e63 (patch)
treee049d288b3dd0d6c59c063dd8f81e0aa1d6066dc
parent544286b3d39365b30298ae07e66a755200b0895c (diff)
downloadffmpeg-3d2043852d1533c79154c21c7a5f8bb453fa6e63.tar.gz
memalign autodetection
Originally committed as revision 115 to svn://svn.ffmpeg.org/ffmpeg/trunk
-rwxr-xr-xconfigure60
-rw-r--r--libavcodec/utils.c24
2 files changed, 65 insertions, 19 deletions
diff --git a/configure b/configure
index 468774d0b0..29628b0a23 100755
--- a/configure
+++ b/configure
@@ -1,5 +1,26 @@
#!/bin/sh
+TMPC="ffmpeg-conf-${RANDOM}-$$-${RANDOM}.c"
+TMPO="ffmpeg-conf-${RANDOM}-$$-${RANDOM}.o"
+TMPS="ffmpeg-conf-${RANDOM}-$$-${RANDOM}.S"
+
+if [ ! -z "$TMPDIR" ]; then
+ TMPC="${TMPDIR}/${TMPC}"
+ TMPCPP="${TMPDIR}/${TMPCPP}"
+ TMPO="${TMPDIR}/${TMPO}"
+ TMPS="${TMPDIR}/${TMPS}"
+elif [ ! -z "$TEMPDIR" ]; then
+ TMPC="${TEMPDIR}/${TMPC}"
+ TMPCPP="${TEMPDIR}/${TMPCPP}"
+ TMPO="${TEMPDIR}/${TMPO}"
+ TMPS="${TEMPDIR}/${TMPS}"
+else
+ TMPC="/tmp/${TMPC}"
+ TMPCPP="/tmp/${TMPCPP}"
+ TMPO="/tmp/${TMPO}"
+ TMPS="/tmp/${TMPS}"
+fi
+
# default parameters
prefix="/usr/local"
cc="gcc"
@@ -75,6 +96,31 @@ if [ "$win32" = "yes" ] ; then
grab="no"
fi
+# ---
+# check availability of some header files
+
+cat > $TMPC << EOF
+#include <malloc.h>
+int main( void ) { return 0; }
+EOF
+
+_memalign=no
+_malloc_h=no
+if $cc -o $TMPO $TMPC 2> /dev/null ; then
+_malloc_h=yes
+_memalign=yes
+# check for memalign - atmos
+cat > $TMPC << EOF
+#include <malloc.h>
+int main ( void ) {
+char *string = NULL;
+string = memalign(64, sizeof(char));
+return 0;
+}
+EOF
+$cc -o $TMPO $TMPC 2> /dev/null || _memalign=no
+fi
+
echo "Install prefix $prefix"
echo "C compiler $cc"
echo "CPU $cpu"
@@ -136,3 +182,17 @@ if [ "$win32" = "yes" ] ; then
echo "#define CONFIG_WIN32 1" >> config.h
echo "CONFIG_WIN32=yes" >> config.mak
fi
+
+if [ "$_malloc_h" = "yes" ]; then
+ echo "#define HAVE_MALLOC_H 1" >> config.h
+else
+ echo "#undef HAVE_MALLOC_H" >> config.h
+fi
+
+if [ "$_memalign" = "yes" ]; then
+ echo "#define HAVE_MEMALIGN 1" >> config.h
+else
+ echo "#undef HAVE_MEMALIGN" >> config.h
+fi
+
+rm -f $TMPO $TMPC $TMPS
diff --git a/libavcodec/utils.c b/libavcodec/utils.c
index f1253abfd9..78e12469e6 100644
--- a/libavcodec/utils.c
+++ b/libavcodec/utils.c
@@ -16,37 +16,23 @@
* along with this program; if not, write to the Free Software
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/
-#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <errno.h>
-#include <limits.h> /* __GLIBC__ and __GLIBC_MINOR__ are defined here */
-#if __GLIBC__ >=2 && __GLIBC_MINOR__ >= 1 /* Fixme about glibc-2.0 */
-#define HAVE_MEMALIGN 1
-#include <malloc.h>
-#endif
#include "common.h"
#include "dsputil.h"
#include "avcodec.h"
+#ifdef HAVE_MALLOC_H
+#include <malloc.h>
+#else
+#include <stdlib.h>
+#endif
/* memory alloc */
void *av_mallocz(int size)
{
void *ptr;
#if defined ( ARCH_X86 ) && defined ( HAVE_MEMALIGN )
-/*
- From glibc-2.1.x manuals:
- -------------------------
- The address of a block returned by `malloc' or `realloc' in the GNU
-system is always a multiple of eight (or sixteen on 64-bit systems).
-If you need a block whose address is a multiple of a higher power of
-two than that, use `memalign' or `valloc'. These functions are
-declared in `stdlib.h'.
-
- With the GNU library, you can use `free' to free the blocks that
-`memalign' and `valloc' return. That does not work in BSD,
-however--BSD does not provide any way to free such blocks.
-*/
ptr = memalign(64,size);
/* Why 64?
Indeed, we should align it: