[Ffmpeg-devel] [RFC] Support building universal binaries of FFmpeg on Darwin

Derk-Jan Hartman d.hartman
Sun Jan 22 23:50:26 CET 2006


I would like to pick up these patches and adapt them for VLC and  
eventually real inclusion into ffmpeg. However before doing any of  
this, I just wanna check no one else is working on this atm. Don't  
wanna double the effort with the same result.
So.

DJ

On 22-jun-2005, at 18:49, Dan Villiom Podlaski Christiansen wrote:

> Hi,
>
> Attached below is an initial patch to allow building a universal,  
> or fat, binary of FFmpeg on Darwin 8.0 and later using GCC 4.0. The  
> generated binary will contain 4 architectures: G3, G4, G5 and x86.  
> Having the three PowerPC architectures allows GCC to tune for the  
> specified CPU, and possibly vectorize code.
>
> The configure script needed a lot of hackery to defer detection of  
> e.g. AltiVec to compile-time. Source code changes mainly involve  
> ensuring that files in libavcodec/ppc and libavcodec/i386 compile  
> with both PPC and x86 compilers. A few cases where CONFIG_DARWIN  
> was incorrectly assumed to mean Motorola AltiVec syntax was also  
> fixed.
>
> However, I ran into a major issue: The Darwin assembler is an old  
> version of GNU as, and it does not support the i386 syntax used in  
> FFmpeg. I believe the issues boil down to:
>
> - The asm macro syntax used in Darwin[1] is different from the  
> currently used syntax. It appears to not support named arguments  
> and use ".endmacro" instead of ".endm". Perhaps using C macros  
> would be better? (In i386/fdct_mmx.c)
> - The .balign pseudo-op doesn't exist. The best substitute I could  
> find was .align[2]. (In i386/dsputil_mmx.c)
> - I get a lot of errors about "Junk character 47 (/)". I don't know  
> what that means :/ (In i386/simple_idct_mmx.c)
>
> I don't know x86 assembly, so I have no idea how to fix this. I was  
> hoping someone else might be able to help. All other files compile  
> fine.
>
> - Dan Christiansen
>
> P.S. Please Cc any replies directly to me, as I'm not subscribed to  
> either of these lists. Alex Beregszaszi said on IRC that this might  
> be of interest to MPlayer developers as well, so this mail is Cc'ed  
> there.
>
> [1] <http://developer.apple.com/documentation/DeveloperTools/ 
> Reference/Assembler/ASMDirectives/chapter_5_section_3.html#// 
> apple_ref/doc/uid/TP30000851-//apple_ref/doc/uid/TP30000823-TPXREF146>
> [2] <http://developer.apple.com/documentation/DeveloperTools/ 
> Reference/Assembler/ASMDirectives/chapter_5_section_7.html#// 
> apple_ref/doc/uid/TP30000851-//apple_ref/doc/uid/TP30000823-TPXREF174>
>
> ? dynamic.diff
> Index: configure
> ===================================================================
> RCS file: /cvsroot/ffmpeg/ffmpeg/configure,v
> retrieving revision 1.185
> diff -a -u -u -r1.185 configure
> --- configure	29 May 2005 22:11:05 -0000	1.185
> +++ configure	22 Jun 2005 16:24:29 -0000
> @@ -449,7 +449,7 @@
>    ;;
>    --enable-pp) pp="yes"
>    ;;
> -  --enable-shared-pp) shared_pp="yes"
> +  --enable-shared-pp) shared_pp="yes"; extralibs="$extralibs -L 
> $source_path/libavcodec/libpostproc -lpostproc"
>    ;;
>    --enable-libgsm) libgsm="yes"
>    ;;
> @@ -593,9 +593,22 @@
>      fi
>  fi
>
> +# check for fat support
> +if test $cpu = fat; then
> +    if test `uname -r | cut -d. -f1` -lt 8 ; then
> +	echo "error, universal binaries only available on Mac OS X 10.4  
> or greater!"
> +	exit 1
> +    elif test "$tune" != "generic" -a "$tune" != "multiple" ; then
> +	echo "error, universal binaries cannot be tuned for one specific  
> processor!"
> +	exit 1
> +    else
> +	tune=multiple
> +    fi
> +fi
> +
>  # compute mmx state
>  if test $mmx = "default"; then
> -    if test $cpu = "x86" -o $cpu = "x86_64"; then
> +    if test $cpu = "x86" -o $cpu = "x86_64" -o $cpu = fat; then
>          mmx="yes"
>      else
>          mmx="no"
> @@ -609,18 +622,24 @@
>  	CFLAGS="$CFLAGS -qpdf2 -qlanglvl=extc99 -qmaxmem=-1 -qarch=auto - 
> qtune=auto"
>      else
>  	gcc_version="`$cc -v 2>&1 | grep version | cut -d ' ' -f3-`"
> +	if test $cpu != fat; then
> +	    CFLAGS="$CFLAGS -pipe"
> +	fi
>  	case "$gcc_version" in
>  	    *2.95*)
> -		CFLAGS="$CFLAGS -no-cpp-precomp -pipe -fomit-frame-pointer"
> +		CFLAGS="$CFLAGS -no-cpp-precomp -fomit-frame-pointer"
>  		;;
>  	    *[34].*)
> -		CFLAGS="$CFLAGS -no-cpp-precomp -pipe -fomit-frame-pointer - 
> force_cpusubtype_ALL -Wno-sign-compare"
> +		CFLAGS="$CFLAGS -no-cpp-precomp -fomit-frame-pointer -Wno-sign- 
> compare"
> +		if test "$cpu" != fat; then
> +		    CFLAGS="$CFLAGS -force_cpusubtype_ALL"
> +		fi
>  		if test "$lshared" = no; then
>  		   needmdynamicnopic="yes"
>  		fi
>  		;;
>  	    *)
> -		CFLAGS="$CFLAGS -no-cpp-precomp -pipe -fomit-frame-pointer"
> +		CFLAGS="$CFLAGS -no-cpp-precomp -fomit-frame-pointer"
>  		if test "$lshared" = no; then
>  		   needmdynamicnopic="yes"
>  		fi
> @@ -631,7 +650,7 @@
>
>  # Can only do AltiVec on PowerPC
>  if test $altivec = "default"; then
> -    if test $cpu = "powerpc"; then
> +    if test $cpu = "powerpc" -o $cpu = "fat"; then
>          altivec="yes"
>      else
>          altivec="no"
> @@ -696,6 +715,23 @@
>  	i[3456]86|pentium|pentiumpro|pentium-mmx|pentium[234]|prescott|k6| 
> k6-[23]|athlon|athlon-tbird|athlon-4|athlon-[mx]p|winchip-c6| 
> winchip2|c3|nocona)
>  	    CFLAGS="$CFLAGS -march=$tune"
>  	;;
> +	multiple)
> +	    cc=gcc-4.0
> +	    sdkpath=/Developer/SDKs/MacOSX10.4u.sdk
> +	    TUNECPU="ppc750, ppc7450, ppc970"
> +	    FAT_ARCHS="-arch ppc750 -arch ppc7450 -arch ppc970"
> +	    if test -d $sdkpath; then
> +		FAT_ARCHS="$FAT_ARCHS -arch i686"
> +		TUNECPU="$TUNECPU, i686"
> +		LDFLAGS="$LDFLAGS -Wl,-syslibroot,$sdkpath"
> +		CFLAGS="$CFLAGS -isysroot $sdkpath"
> +	    fi
> +	    if test "$shared_pp" != "yes" -a "$lshared" != "yes"; then
> +		CFLAGS="$CFLAGS $FAT_ARCHS -fast -ftree-vectorize"
> +	    else
> +		CFLAGS="$CFLAGS $FAT_ARCHS -fastf -fPIC -ftree-vectorize"
> +	    fi
> +	;;
>  	*)
>  	echo "WARNING: unknown CPU \"$tune\", ignored"
>  	;;
> @@ -711,7 +747,6 @@
>              CFLAGS="$CFLAGS -maltivec -mabi=altivec"
>          fi
>      fi
> -fi
>
>  # See if we have <altivec.h>
>  cat > $TMPC << EOF
> @@ -744,7 +779,8 @@
>  }
>  EOF
>  fi
> -$cc $CFLAGS -o $TMPE $TMPC 2> /dev/null || altivec="no"
> +$cc -o $TMPE $TMPC 2> /dev/null || altivec="no"
> +fi
>  fi
>
>  # Can only do mmi on mips
> @@ -788,7 +824,7 @@
>  ranlib="${cross_prefix}${ranlib}"
>  strip="${cross_prefix}${strip}"
>
> -if test -z "$cross_prefix" ; then
> +if test -z "$cross_prefix" -a "$cpu" != "fat"; then
>
>  # ---
>  # big/little endian test
> @@ -864,7 +900,9 @@
>  $cc -o $TMPE $TMPC 2> /dev/null || _memalign=no
>  fi
>
> -if test "$_memalign" = "no" -a "$mmx" = "yes" -a "$memalignhack" ! 
> = "yes"; then
> +# danchr at opendarwin.org: Darwin malloc() returns a value that is
> +# "aligned such that it can be used for any data type"
> +if test "$_memalign" = "no" -a "$mmx" = "yes" -a "$memalignhack" ! 
> = "yes" -a "$targetos" != "Darwin"; then
>      echo "error, no memalign() but sse enabled, either disable it  
> or use --enable-memalign-hack"
>      exit 1
>  fi
> @@ -906,7 +944,7 @@
>  EOF
>
>  have_lrintf="no"
> -if $cc $extralibs -o $TMPE $TMPC 2> /dev/null ; then
> +if $cc $CFLAGS $LDFLAGS $extralibs -o $TMPE $TMPC 2> /dev/null ; then
>    have_lrintf="yes"
>    # allanc at chickenandporn.com: cannot execute cross-compiled
>    # code on the host.  Only execute if not cross-compiling.
> @@ -1217,7 +1255,55 @@
>  echo "SLIBSUF=\${BUILDSUF}$SLIBSUF" >> config.mak
>  echo "EXESUF=\${BUILDSUF}$EXESUF" >> config.mak
>  echo "TARGET_OS=$TARGET_OS" >> config.mak
> -if test "$cpu" = "x86" ; then
> +if test "$cpu" = "fat"; then
> +  echo "TARGET_ARCH_X86=yes" >> config.mak
> +  echo "TARGET_ARCH_POWERPC=yes" >> config.mak
> +  echo "FAT_ARCHS=$FAT_ARCHS" >> config.mak
> +  if test "$altivec" = "yes" ; then
> +    echo "TARGET_ALTIVEC=yes" >> config.mak
> +    echo "#ifdef __ALTIVEC__" >> $TMPH
> +    echo "#  define HAVE_ALTIVEC 1" >> $TMPH
> +    echo "#  define HAVE_ALTIVEC_H 1" >> $TMPH
> +    echo "#endif" >> $TMPH
> +    echo "#ifdef __APPLE_ALTIVEC__" >> $TMPH
> +    echo "#  define HAVE_ALTIVEC 1" >> $TMPH
> +    echo "#endif" >> $TMPH
> +  fi
> +  echo "#ifdef __BIG_ENDIAN__" >> $TMPH
> +  echo "#  define WORDS_BIGENDIAN 1" >> $TMPH
> +  echo "#endif" >> $TMPH
> +  echo "#ifdef __ppc__" >> $TMPH
> +  echo "#  define ARCH_POWERPC 1" >> $TMPH
> +  echo "#  ifdef _ARCH_PPC64" >> $TMPH
> +  echo "#    define POWERPC_MODE_64BITS 1" >> $TMPH
> +  echo "#  else" >> $TMPH
> +  echo "#    define POWERPC_MODE_32BITS 1" >> $TMPH
> +  echo "#    define NO_DCBZL" >> $TMPH
> +  echo "#  endif" >> $TMPH
> +  if test "$powerpc_perf" = "yes"; then
> +    echo "#  define POWERPC_PERFORMANCE_REPORT 1" >> $TMPH
> +  fi
> +  echo "#endif" >> $TMPH
> +  echo "#ifdef __ppc64__" >> $TMPH
> +  echo "#  define ARCH_POWERPC 1" >> $TMPH
> +  echo "#  define POWERPC_MODE_64BITS 1" >> $TMPH
> +  if test "$powerpc_perf" = "yes"; then
> +    echo "#  define POWERPC_PERFORMANCE_REPORT 1" >> $TMPH
> +  fi
> +  echo "#endif" >> $TMPH
> +  echo "#ifdef __i386__" >> $TMPH
> +  echo "#define __CPU__ 586" >> $TMPH
> +  echo "#  define ARCH_X86 1" >> $TMPH
> +  if test "$mmx" = "yes" ; then
> +    echo "TARGET_MMX=yes" >> config.mak
> +    echo "#define HAVE_MMX 1" >> $TMPH
> +  fi
> +  if test "$builtin_vector" = "yes" ; then
> +    echo "TARGET_BUILTIN_VECTOR=yes" >> config.mak
> +    echo "#define HAVE_BUILTIN_VECTOR 1" >> $TMPH
> +  fi
> +  echo "#endif" >> $TMPH
> +elif test "$cpu" = "x86" ; then
>    echo "TARGET_ARCH_X86=yes" >> config.mak
>    echo "#define ARCH_X86 1" >> $TMPH
>  elif test "$cpu" = "x86_64" ; then
> @@ -1264,31 +1350,33 @@
>    echo "#define EMULATE_INTTYPES 1" >> $TMPH
>  fi
>  if test "$emu_fast_int" = "yes" ; then
> -  echo "#define EMULATE_FAST_INT 1" >> $TMPH
> +    echo "#define EMULATE_FAST_INT 1" >> $TMPH
>  fi
> -if test "$mmx" = "yes" ; then
> -  echo "TARGET_MMX=yes" >> config.mak
> -  echo "#define HAVE_MMX 1" >> $TMPH
> -  echo "#define __CPU__ 586" >> $TMPH
> -fi
> -if test "$builtin_vector" = "yes" ; then
> -  echo "TARGET_BUILTIN_VECTOR=yes" >> config.mak
> -  echo "#define HAVE_BUILTIN_VECTOR 1" >> $TMPH
> -fi
> -if test "$mmi" = "yes" ; then
> -  echo "TARGET_MMI=yes" >> config.mak
> -  echo "#define HAVE_MMI 1" >> $TMPH
> -fi
> -if test "$altivec" = "yes" ; then
> -  echo "TARGET_ALTIVEC=yes" >> config.mak
> -  echo "#define HAVE_ALTIVEC 1" >> $TMPH
> -  echo "// Enable the next line to use the reference C code  
> instead of AltiVec" >> $TMPH
> -  echo "// #define ALTIVEC_USE_REFERENCE_C_CODE 1" >> $TMPH
> -  if test "$_altivec_h" = "yes" ; then
> -    echo "#define HAVE_ALTIVEC_H 1" >> $TMPH
> -  else
> -    echo "#undef HAVE_ALTIVEC_H" >> $TMPH
> -  fi
> +if test "$cpu" != "fat"; then
> +    if test "$mmx" = "yes" ; then
> +	echo "TARGET_MMX=yes" >> config.mak
> +	echo "#define HAVE_MMX 1" >> $TMPH
> +	echo "#define __CPU__ 586" >> $TMPH
> +    fi
> +    if test "$builtin_vector" = "yes" ; then
> +	echo "TARGET_BUILTIN_VECTOR=yes" >> config.mak
> +	echo "#define HAVE_BUILTIN_VECTOR 1" >> $TMPH
> +    fi
> +    if test "$mmi" = "yes" ; then
> +	echo "TARGET_MMI=yes" >> config.mak
> +	echo "#define HAVE_MMI 1" >> $TMPH
> +    fi
> +    if test "$altivec" = "yes" ; then
> +	echo "TARGET_ALTIVEC=yes" >> config.mak
> +	echo "#define HAVE_ALTIVEC 1" >> $TMPH
> +	echo "// Enable the next line to use the reference C code instead  
> of AltiVec" >> $TMPH
> +	echo "// #define ALTIVEC_USE_REFERENCE_C_CODE 1" >> $TMPH
> +	if test "$_altivec_h" = "yes" ; then
> +	    echo "#define HAVE_ALTIVEC_H 1" >> $TMPH
> +	else
> +	    echo "#undef HAVE_ALTIVEC_H" >> $TMPH
> +	fi
> +    fi
>  fi
>  if test "$gprof" = "yes" ; then
>    echo "TARGET_GPROF=yes" >> config.mak
> Index: libavcodec/Makefile
> ===================================================================
> RCS file: /cvsroot/ffmpeg/ffmpeg/libavcodec/Makefile,v
> retrieving revision 1.194
> diff -a -u -u -r1.194 Makefile
> --- libavcodec/Makefile	3 Jun 2005 13:59:38 -0000	1.194
> +++ libavcodec/Makefile	22 Jun 2005 16:24:29 -0000
> @@ -238,26 +238,18 @@
>  ifeq ($(CONFIG_DTS),yes)
>  OBJS+= dtsdec.o
>  CFLAGS += $(DTS_INC)
> -EXTRALIBS += -ldts
>  endif
>
>  ifeq ($(CONFIG_FAAD),yes)
>  OBJS+= faad.o
> -ifeq ($(CONFIG_FAADBIN),yes)
> -# no libs needed
> -else
> -EXTRALIBS += -lfaad
> -endif
>  endif
>
>  ifeq ($(CONFIG_FAAC),yes)
>  OBJS+= faac.o
> -EXTRALIBS += -lfaac
>  endif
>
>  ifeq ($(CONFIG_XVID),yes)
>  OBJS+= xvidff.o
> -EXTRALIBS += -lxvidcore
>  endif
>
>  ifeq ($(CONFIG_X264),yes)
> @@ -266,17 +258,13 @@
>  endif
>
>  ifeq ($(CONFIG_PP),yes)
> -ifeq ($(SHARED_PP),yes)
> -EXTRALIBS += -Llibpostproc -lpostproc$(BUILDSUF)
> -else
> -# LIBS += libpostproc/libpostproc.a ... should be fixed
> +ifneq ($(SHARED_PP),yes)
>  OBJS += libpostproc/postprocess.o
>  endif
>  endif
>
>  ifeq ($(CONFIG_MP3LAME),yes)
>  OBJS += mp3lameaudio.o
> -EXTRALIBS += -lmp3lame
>  endif
>
>  ifeq ($(CONFIG_LIBOGG),yes)
> Index: libavcodec/dsputil.h
> ===================================================================
> RCS file: /cvsroot/ffmpeg/ffmpeg/libavcodec/dsputil.h,v
> retrieving revision 1.118
> diff -a -u -u -r1.118 dsputil.h
> --- libavcodec/dsputil.h	17 Jun 2005 08:24:35 -0000	1.118
> +++ libavcodec/dsputil.h	22 Jun 2005 16:24:29 -0000
> @@ -462,7 +462,7 @@
>
>  extern int mm_flags;
>
> -#if defined(HAVE_ALTIVEC) && !defined(CONFIG_DARWIN)
> +#if defined(HAVE_ALTIVEC) && defined(HAVE_ALTIVEC_H)
>  #define pixel altivec_pixel
>  #include <altivec.h>
>  #undef pixel
> Index: libavcodec/i386/cputest.c
> ===================================================================
> RCS file: /cvsroot/ffmpeg/ffmpeg/libavcodec/i386/cputest.c,v
> retrieving revision 1.14
> diff -a -u -u -r1.14 cputest.c
> --- libavcodec/i386/cputest.c	13 Dec 2004 16:11:38 -0000	1.14
> +++ libavcodec/i386/cputest.c	22 Jun 2005 16:24:29 -0000
> @@ -4,6 +4,8 @@
>  #include <stdlib.h>
>  #include "../dsputil.h"
>
> +#ifdef HAVE_MMX
> +
>  #ifdef ARCH_X86_64
>  #  define REG_b "rbx"
>  #  define REG_S "rsi"
> @@ -129,3 +131,5 @@
>    return 0;
>  }
>  #endif
> +
> +#endif /* HAVE_MMX */
> Index: libavcodec/i386/dsputil_mmx.c
> ===================================================================
> RCS file: /cvsroot/ffmpeg/ffmpeg/libavcodec/i386/dsputil_mmx.c,v
> retrieving revision 1.98
> diff -a -u -u -r1.98 dsputil_mmx.c
> --- libavcodec/i386/dsputil_mmx.c	2 Jun 2005 20:45:35 -0000	1.98
> +++ libavcodec/i386/dsputil_mmx.c	22 Jun 2005 16:24:29 -0000
> @@ -28,6 +28,8 @@
>  //#undef NDEBUG
>  //#include <assert.h>
>
> +#ifdef HAVE_MMX
> +
>  extern const uint8_t ff_h263_loop_filter_strength[32];
>
>  int mm_flags; /* multimedia extension flags */
> @@ -2843,3 +2845,5 @@
>      //ff_idct = just_return;
>  #endif
>  }
> +
> +#endif /* HAVE_MMX */
> Index: libavcodec/i386/fdct_mmx.c
> ===================================================================
> RCS file: /cvsroot/ffmpeg/ffmpeg/libavcodec/i386/fdct_mmx.c,v
> retrieving revision 1.16
> diff -a -u -u -r1.16 fdct_mmx.c
> --- libavcodec/i386/fdct_mmx.c	11 Oct 2004 02:19:29 -0000	1.16
> +++ libavcodec/i386/fdct_mmx.c	22 Jun 2005 16:24:29 -0000
> @@ -17,6 +17,8 @@
>  #include "../dsputil.h"
>  #include "mmx.h"
>
> +#ifdef HAVE_MMX
> +
>  #define ATTR_ALIGN(align) __attribute__ ((__aligned__ (align)))
>
>  ///////////////////////////////////////////////////////////////////// 
> /
> @@ -357,14 +359,22 @@
>  	"movdqa    \\t+32(%1), %%xmm3  \n\t"
>  	"movdqa    \\t+48(%1), %%xmm7  \n\t"	
>  	"movdqa    \\t(%1), %%xmm4     \n\t"
> -	"movdqa    \\t+16(%1), %%xmm5  \n\t"	
> +	"movdqa    \\t+16(%1), %%xmm5  \n\t"
> +#ifdef __APPLE_CC__
> +	".endmacro                     \n\t"
> +#else
>  	".endm                         \n\t"
> +#endif
>          ".macro FDCT_ROW_SSE2_H2 i t   \n\t"
>  	"movq      \\i(%0), %%xmm2     \n\t"
>  	"movq      \\i+8(%0), %%xmm0   \n\t"
>  	"movdqa    \\t+32(%1), %%xmm3  \n\t"
>  	"movdqa    \\t+48(%1), %%xmm7  \n\t"	
> +#ifdef __APPLE_CC__
> +	".endmacro                     \n\t"
> +#else
>  	".endm                         \n\t"
> +#endif
>  	".macro FDCT_ROW_SSE2 i        \n\t"	
>  	"movq      %%xmm2, %%xmm1      \n\t"
>  	"pshuflw   $27, %%xmm0, %%xmm0 \n\t"
> @@ -384,7 +394,11 @@
>  	"psrad     %3, %%xmm1          \n\t"
>  	"packssdw  %%xmm3, %%xmm1      \n\t"
>  	"movdqa    %%xmm1, \\i(%4)     \n\t"
> -	".endm                         \n\t"	
> +#ifdef __APPLE_CC__
> +	".endmacro                     \n\t"
> +#else
> +	".endm                         \n\t"
> +#endif
>  	"movdqa    (%2), %%xmm6        \n\t"		
>  	"FDCT_ROW_SSE2_H1 0 0 \n\t"
>  	"FDCT_ROW_SSE2 0 \n\t"
> @@ -560,3 +574,4 @@
>      fdct_row_sse2(block1, block);
>  }
>
> +#endif /* HAVE_MMX */
> Index: libavcodec/i386/h264dsp_mmx.c
> ===================================================================
> RCS file: /cvsroot/ffmpeg/ffmpeg/libavcodec/i386/h264dsp_mmx.c,v
> retrieving revision 1.1
> diff -a -u -u -r1.1 h264dsp_mmx.c
> --- libavcodec/i386/h264dsp_mmx.c	2 Jun 2005 20:45:35 -0000	1.1
> +++ libavcodec/i386/h264dsp_mmx.c	22 Jun 2005 16:24:29 -0000
> @@ -16,6 +16,7 @@
>   * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA   
> 02111-1307  USA
>   */
>
> +#ifdef HAVE_MMX
>
>  /***********************************/
>  /* IDCT */
> @@ -910,3 +911,4 @@
>  #undef H264_CHROMA_OP
>  #undef H264_CHROMA_MC8_TMPL
>
> +#endif /* HAVE_MMX */
> Index: libavcodec/i386/idct_mmx.c
> ===================================================================
> RCS file: /cvsroot/ffmpeg/ffmpeg/libavcodec/i386/idct_mmx.c,v
> retrieving revision 1.12
> diff -a -u -u -r1.12 idct_mmx.c
> --- libavcodec/i386/idct_mmx.c	2 Jun 2005 20:45:35 -0000	1.12
> +++ libavcodec/i386/idct_mmx.c	22 Jun 2005 16:24:29 -0000
> @@ -27,6 +27,8 @@
>
>  #include "mmx.h"
>
> +#ifdef HAVE_MMX
> +
>  #define ATTR_ALIGN(align) __attribute__ ((__aligned__ (align)))
>
>  #define ROW_SHIFT 11
> @@ -598,3 +600,4 @@
>  declare_idct (ff_mmx_idct, mmx_table,
>  	      mmx_row_head, mmx_row, mmx_row_tail, mmx_row_mid)
>
> +#endif /* HAVE_MMX */
> Index: libavcodec/i386/motion_est_mmx.c
> ===================================================================
> RCS file: /cvsroot/ffmpeg/ffmpeg/libavcodec/i386/motion_est_mmx.c,v
> retrieving revision 1.16
> diff -a -u -u -r1.16 motion_est_mmx.c
> --- libavcodec/i386/motion_est_mmx.c	11 Oct 2004 02:19:29 -0000	1.16
> +++ libavcodec/i386/motion_est_mmx.c	22 Jun 2005 16:24:29 -0000
> @@ -22,6 +22,8 @@
>  #include "../dsputil.h"
>  #include "mmx.h"
>
> +#ifdef HAVE_MMX
> +
>  static const __attribute__ ((aligned(8))) uint64_t round_tab[3]={
>  0x0000000000000000ULL,
>  0x0001000100010001ULL,
> @@ -404,3 +406,5 @@
>          }
>      }
>  }
> +
> +#endif /* HAVE_MMX */
> Index: libavcodec/i386/mpegvideo_mmx.c
> ===================================================================
> RCS file: /cvsroot/ffmpeg/ffmpeg/libavcodec/i386/mpegvideo_mmx.c,v
> retrieving revision 1.34
> diff -a -u -u -r1.34 mpegvideo_mmx.c
> --- libavcodec/i386/mpegvideo_mmx.c	11 Oct 2004 02:19:29 -0000	1.34
> +++ libavcodec/i386/mpegvideo_mmx.c	22 Jun 2005 16:24:29 -0000
> @@ -25,6 +25,8 @@
>  #include "../avcodec.h"
>  #include "mmx.h"
>
> +#ifdef HAVE_MMX
> +
>  extern uint8_t zigzag_direct_noperm[64];
>  extern uint16_t inv_zigzag_direct16[64];
>
> @@ -721,3 +723,5 @@
>          }
>      }
>  }
> +
> +#endif /* HAVE_MMX */
> Index: libavcodec/i386/simple_idct_mmx.c
> ===================================================================
> RCS file: /cvsroot/ffmpeg/ffmpeg/libavcodec/i386/simple_idct_mmx.c,v
> retrieving revision 1.13
> diff -a -u -u -r1.13 simple_idct_mmx.c
> --- libavcodec/i386/simple_idct_mmx.c	18 May 2004 17:09:46 -0000	1.13
> +++ libavcodec/i386/simple_idct_mmx.c	22 Jun 2005 16:24:29 -0000
> @@ -20,6 +20,8 @@
>  #include "../dsputil.h"
>  #include "../simple_idct.h"
>
> +#ifdef HAVE_MMX
> +
>  /*
>  23170.475006
>  22725.260826
> @@ -1312,3 +1314,5 @@
>      idct(block);
>      add_pixels_clamped_mmx(block, dest, line_size);
>  }
> +
> +#endif /* HAVE_MMX */
> Index: libavcodec/i386/vp3dsp_mmx.c
> ===================================================================
> RCS file: /cvsroot/ffmpeg/ffmpeg/libavcodec/i386/vp3dsp_mmx.c,v
> retrieving revision 1.5
> diff -a -u -u -r1.5 vp3dsp_mmx.c
> --- libavcodec/i386/vp3dsp_mmx.c	1 Jun 2005 21:19:00 -0000	1.5
> +++ libavcodec/i386/vp3dsp_mmx.c	22 Jun 2005 16:24:29 -0000
> @@ -24,6 +24,8 @@
>  #include "../dsputil.h"
>  #include "mmx.h"
>
> +#ifdef HAVE_MMX
> +
>  #define IdctAdjustBeforeShift 8
>
>  /* (12 * 4) 2-byte memory locations ( = 96 bytes total)
> @@ -320,3 +322,5 @@
>  #undef J
>
>  }
> +
> +#endif /* HAVE_MMX */
> Index: libavcodec/i386/vp3dsp_sse2.c
> ===================================================================
> RCS file: /cvsroot/ffmpeg/ffmpeg/libavcodec/i386/vp3dsp_sse2.c,v
> retrieving revision 1.6
> diff -a -u -u -r1.6 vp3dsp_sse2.c
> --- libavcodec/i386/vp3dsp_sse2.c	1 Jun 2005 21:19:00 -0000	1.6
> +++ libavcodec/i386/vp3dsp_sse2.c	22 Jun 2005 16:24:29 -0000
> @@ -24,6 +24,8 @@
>  #include "../dsputil.h"
>  #include "mmx.h"
>
> +#ifdef HAVE_BUILTIN_VECTOR
> +
>  static const unsigned short __align16 SSE2_dequant_const[] =
>  {
>      0,65535,65535,0,0,0,0,0,    // 0x0000 0000 0000 0000 0000 FFFF  
> FFFF 0000
> @@ -824,3 +826,5 @@
>
>      SSE2_Column_IDCT();
>  }
> +
> +#endif HAVE_BUILTIN_VECTOR
> Index: libavcodec/ppc/dsputil_altivec.c
> ===================================================================
> RCS file: /cvsroot/ffmpeg/ffmpeg/libavcodec/ppc/dsputil_altivec.c,v
> retrieving revision 1.27
> diff -a -u -u -r1.27 dsputil_altivec.c
> --- libavcodec/ppc/dsputil_altivec.c	5 Oct 2004 18:36:15 -0000	1.27
> +++ libavcodec/ppc/dsputil_altivec.c	22 Jun 2005 16:24:29 -0000
> @@ -35,6 +35,8 @@
>  #include <signal.h>
>  #include <setjmp.h>
>
> +#ifdef HAVE_ALTIVEC
> +
>  static sigjmp_buf jmpbuf;
>  static volatile sig_atomic_t canjump = 0;
>
> @@ -1773,3 +1775,5 @@
>  POWERPC_PERF_STOP_COUNT(altivec_avg_pixels8_xy2_num, 1);
>  #endif /* ALTIVEC_USE_REFERENCE_C_CODE */
>  }
> +
> +#endif /* HAVE_ALTIVEC */
> Index: libavcodec/ppc/dsputil_h264_template_altivec.c
> ===================================================================
> RCS file: /cvsroot/ffmpeg/ffmpeg/libavcodec/ppc/ 
> dsputil_h264_template_altivec.c,v
> retrieving revision 1.1
> diff -a -u -u -r1.1 dsputil_h264_template_altivec.c
> --- libavcodec/ppc/dsputil_h264_template_altivec.c	16 Sep 2004  
> 19:05:22 -0000	1.1
> +++ libavcodec/ppc/dsputil_h264_template_altivec.c	22 Jun 2005  
> 16:24:29 -0000
> @@ -16,6 +16,8 @@
>   * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA   
> 02111-1307  USA
>   */
>
> +#ifdef HAVE_ALTIVEC
> +
>  /* this code assume that stride % 16 == 0 */
>  void PREFIX_h264_chroma_mc8_altivec(uint8_t * dst, uint8_t * src,  
> int stride, int h, int x, int y) {
>    POWERPC_PERF_DECLARE(PREFIX_h264_chroma_mc8_num, 1);
> @@ -637,3 +639,5 @@
>    }
>    POWERPC_PERF_STOP_COUNT(PREFIX_h264_qpel16_hv_lowpass_num, 1);
>  }
> +
> +#endif /* HAVE_ALTIVEC */
> Index: libavcodec/ppc/dsputil_ppc.c
> ===================================================================
> RCS file: /cvsroot/ffmpeg/ffmpeg/libavcodec/ppc/dsputil_ppc.c,v
> retrieving revision 1.31
> diff -a -u -u -r1.31 dsputil_ppc.c
> --- libavcodec/ppc/dsputil_ppc.c	11 Oct 2004 22:47:09 -0000	1.31
> +++ libavcodec/ppc/dsputil_ppc.c	22 Jun 2005 16:24:29 -0000
> @@ -26,6 +26,8 @@
>  #include "dsputil_altivec.h"
>  #endif
>
> +#ifdef ARCH_POWERPC
> +
>  extern void fdct_altivec(int16_t *block);
>  extern void idct_put_altivec(uint8_t *dest, int line_size, int16_t  
> *block);
>  extern void idct_add_altivec(uint8_t *dest, int line_size, int16_t  
> *block);
> @@ -340,3 +342,5 @@
>          // ... pending ...
>      }
>  }
> +
> +#endif /* ARCH_POWERPC */
> Index: libavcodec/ppc/fdct_altivec.c
> ===================================================================
> RCS file: /cvsroot/ffmpeg/ffmpeg/libavcodec/ppc/fdct_altivec.c,v
> retrieving revision 1.2
> diff -a -u -u -r1.2 fdct_altivec.c
> --- libavcodec/ppc/fdct_altivec.c	17 Apr 2005 21:41:16 -0000	1.2
> +++ libavcodec/ppc/fdct_altivec.c	22 Jun 2005 16:24:29 -0000
> @@ -23,6 +23,7 @@
>  #include "dsputil_altivec.h"
>  #include "gcc_fixes.h"
>
> +#ifdef HAVE_ALTIVEC
>
>  #define vs16(v) ((vector signed short)(v))
>  #define vs32(v) ((vector signed int)(v))
> @@ -495,4 +496,6 @@
>  #endif /* ALTIVEC_USE_REFERENCE_C_CODE */
>  }
>
> +#endif /* HAVE_ALTIVEC */
> +
>  /* vim:set foldmethod=marker foldlevel=0: */
> Index: libavcodec/ppc/fft_altivec.c
> ===================================================================
> RCS file: /cvsroot/ffmpeg/ffmpeg/libavcodec/ppc/fft_altivec.c,v
> retrieving revision 1.9
> diff -a -u -u -r1.9 fft_altivec.c
> --- libavcodec/ppc/fft_altivec.c	13 Mar 2004 21:43:24 -0000	1.9
> +++ libavcodec/ppc/fft_altivec.c	22 Jun 2005 16:24:29 -0000
> @@ -24,6 +24,8 @@
>
>  #include "dsputil_altivec.h"
>
> +#ifdef HAVE_ALTIVEC
> +
>  /*
>    those three macros are from libavcodec/fft.c
>    and are required for the reference C code
> @@ -245,3 +247,5 @@
>
>  #endif /* ALTIVEC_USE_REFERENCE_C_CODE */
>  }
> +
> +#endif /* HAVE_ALTIVEC */
> Index: libavcodec/ppc/gcc_fixes.h
> ===================================================================
> RCS file: /cvsroot/ffmpeg/ffmpeg/libavcodec/ppc/gcc_fixes.h,v
> retrieving revision 1.5
> diff -a -u -u -r1.5 gcc_fixes.h
> --- libavcodec/ppc/gcc_fixes.h	28 Feb 2004 15:03:53 -0000	1.5
> +++ libavcodec/ppc/gcc_fixes.h	22 Jun 2005 16:24:29 -0000
> @@ -12,7 +12,7 @@
>  #endif
>
>  #ifdef CONFIG_DARWIN
> -# ifndef __MWERKS__
> +# if ! defined __MWERKS__ && defined __APPLE_CC__ && __APPLE_CC__  
> > 4000 && ! defined __APPLE_ALTIVEC__
>  #  define AVV(x...) (x)
>  # else
>  #  define AVV
> Index: libavcodec/ppc/gmc_altivec.c
> ===================================================================
> RCS file: /cvsroot/ffmpeg/ffmpeg/libavcodec/ppc/gmc_altivec.c,v
> retrieving revision 1.10
> diff -a -u -u -r1.10 gmc_altivec.c
> --- libavcodec/ppc/gmc_altivec.c	28 Feb 2004 15:03:53 -0000	1.10
> +++ libavcodec/ppc/gmc_altivec.c	22 Jun 2005 16:24:29 -0000
> @@ -24,6 +24,8 @@
>
>  #include "dsputil_altivec.h"
>
> +#ifdef HAVE_ALTIVEC
> +
>  /*
>    altivec-enhanced gmc1. ATM this code assume stride is a multiple  
> of 8,
>    to preserve proper dst alignement.
> @@ -170,3 +172,5 @@
>
>  #endif /* ALTIVEC_USE_REFERENCE_C_CODE */
>  }
> +
> +#endif /* HAVE_ALTIVEC */
> Index: libavcodec/ppc/idct_altivec.c
> ===================================================================
> RCS file: /cvsroot/ffmpeg/ffmpeg/libavcodec/ppc/idct_altivec.c,v
> retrieving revision 1.8
> diff -a -u -u -r1.8 idct_altivec.c
> --- libavcodec/ppc/idct_altivec.c	28 Feb 2004 15:03:53 -0000	1.8
> +++ libavcodec/ppc/idct_altivec.c	22 Jun 2005 16:24:29 -0000
> @@ -43,6 +43,8 @@
>
>  #include "dsputil_altivec.h"
>
> +#ifdef HAVE_ALTIVEC
> +
>  #define vector_s16_t vector signed short
>  #define const_vector_s16_t const_vector signed short
>  #define vector_u16_t vector unsigned short
> @@ -247,3 +249,4 @@
>  #endif /* ALTIVEC_USE_REFERENCE_C_CODE */
>  }
>
> +#endif /* HAVE_ALTIVEC */
> Index: libavcodec/ppc/mpegvideo_altivec.c
> ===================================================================
> RCS file: /cvsroot/ffmpeg/ffmpeg/libavcodec/ppc/mpegvideo_altivec.c,v
> retrieving revision 1.13
> diff -a -u -u -r1.13 mpegvideo_altivec.c
> --- libavcodec/ppc/mpegvideo_altivec.c	16 Apr 2004 12:47:37 -0000	1.13
> +++ libavcodec/ppc/mpegvideo_altivec.c	22 Jun 2005 16:24:29 -0000
> @@ -28,6 +28,8 @@
>
>  #include "dsputil_altivec.h"
>
> +#ifdef HAVE_ALTIVEC
> +
>  // Swaps two variables (used for altivec registers)
>  #define SWAP(a,b) \
>  do { \
> @@ -647,3 +649,5 @@
>
>  POWERPC_PERF_STOP_COUNT(altivec_dct_unquantize_h263_num, nCoeffs  
> == 63);
>  }
> +
> +#endif /* HAVE_ALTIVEC */
> Index: libavformat/Makefile
> ===================================================================
> RCS file: /cvsroot/ffmpeg/ffmpeg/libavformat/Makefile,v
> retrieving revision 1.91
> diff -a -u -u -r1.91 Makefile
> --- libavformat/Makefile	22 May 2005 23:58:58 -0000	1.91
> +++ libavformat/Makefile	22 Jun 2005 16:24:30 -0000
> @@ -97,7 +97,7 @@
>  	$(CC) $(SHFLAGS) -Wl,--output-def,$(@:.dll=.def) -o $@ $(OBJS) $ 
> (PPOBJS) $(AVCLIBS) $(EXTRALIBS)
>  	-lib /machine:i386 /def:$(@:.dll=.def)
>  else
> -	$(CC) $(SHFLAGS) -o $@ $(OBJS) $(PPOBJS) $(AVCLIBS) $(EXTRALIBS)
> +	$(CC) $(SHFLAGS) -o $@ $(OBJS) $(PPOBJS) $(EXTRALIBS) $(LDFLAGS)
>  endif
>
>  depend: $(SRCS)
> _______________________________________________
> ffmpeg-devel mailing list
> ffmpeg-devel at mplayerhq.hu
> http://mplayerhq.hu/mailman/listinfo/ffmpeg-devel





More information about the ffmpeg-devel mailing list