memalign autodetection
Originally committed as revision 115 to svn://svn.ffmpeg.org/ffmpeg/trunk
This commit is contained in:
parent
544286b3d3
commit
3d2043852d
60
configure
vendored
60
configure
vendored
@ -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
|
||||
|
@ -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:
|
||||
|
Loading…
Reference in New Issue
Block a user