]> git.sesse.net Git - vlc/blobdiff - contrib/src/ffmpeg/rules.mak
Contribs: simplify libav/FFmpeg rules as suggested by DonDiego
[vlc] / contrib / src / ffmpeg / rules.mak
index d7c15ac5134fa770a49a13b5171020130295e347..6e1002848aa6992c9c48c09b79589ae540fcd95c 100644 (file)
 # FFmpeg
 
-FFMPEG_VERSION=0.4.8
-FFMPEG_URL=$(SF)/ffmpeg/ffmpeg-$(FFMPEG_VERSION).tar.gz
-FFMPEG_SVN=svn://svn.ffmpeg.org/ffmpeg/trunk
-FFMPEG_SVN_REV=26400
+#FFMPEG_SNAPURL := http://git.videolan.org/?p=ffmpeg.git;a=snapshot;h=HEAD;sf=tgz
+FFMPEG_SNAPURL := http://git.libav.org/?p=libav.git;a=snapshot;h=HEAD;sf=tgz
 
-
-FFMPEGCONF = --cc="$(CC)" \
+FFMPEGCONF = \
+       --cc="$(CC)" \
        --disable-doc \
-       --disable-decoder=libvpx \
+       --disable-decoder=bink \
+       --enable-libgsm \
+       --enable-libopenjpeg \
        --disable-debug \
-       --enable-gpl \
-       --enable-postproc \
-       --disable-ffprobe \
-       --disable-ffserver \
-       --disable-ffmpeg \
-       --disable-ffplay \
+       --disable-avdevice \
        --disable-devices \
-       --disable-protocols \
        --disable-avfilter \
-       --disable-network
+       --disable-filters
+
+# Those tools are named differently in FFmpeg and Libav
+#      --disable-ffserver \
+#      --disable-ffplay \
+#      --disable-ffprobe
+DEPS_ffmpeg = zlib gsm openjpeg
 
 # Optional dependencies
 ifdef BUILD_ENCODERS
-# TODO:
-#FFMPEGCONF+= --enable-libmp3lame
-#.ffmpeg: .lame
+FFMPEGCONF += --enable-libmp3lame --enable-libvpx --disable-decoder=libvpx
+DEPS_ffmpeg += lame $(DEPS_lame) vpx $(DEPS_vpx)
 else
 FFMPEGCONF += --disable-encoders --disable-muxers
-# XXX: REVISIT --enable-small ?
 endif
 
-ifdef HAVE_CROSS_COMPILE
-FFMPEGCONF += --enable-cross-compile --cross-prefix=$(HOST)-
+ifdef ENABLE_SMALL
+FFMPEGCONF += --enable-small --optflags=-O2
+ifeq ($(ARCH),arm)
+ifdef HAVE_ARMV7A
+# XXX: assumes > ARMv7-A, and thus thumb2-able
+FFMPEGCONF += --enable-thumb
 endif
-# XXX: REVISIT: gsm and vpx not used by VLC so should in PKGS?
-ifneq ($(filter gsm,$(PKGS)),)
-#FFMPEGCONF+= --enable-libgsm
-#.ffmpeg: .gsm
 endif
-ifneq ($(filter vpx,$(PKGS)),)
-#FFMPEGCONF += --enable-libvpx
-#.ffmpeg: .vpx
 endif
 
-# XXX: REVISIT
-#ifndef HAVE_FPU
-#FFMPEGCONF+= --disable-mpegaudio-hp
-#endif
+ifdef HAVE_CROSS_COMPILE
+FFMPEGCONF += --enable-cross-compile
+ifndef HAVE_IOS
+FFMPEGCONF += --cross-prefix=$(HOST)-
+endif
+endif
 
 # ARM stuff
 ifeq ($(ARCH),arm)
-FFMPEGCONF += --disable-runtime-cpudetect
-# TODO: define HAVE_ARM_NEON or something
-ifdef HAVE_ARM_NEON
-# XXX: REVISIT choice of CPU?
+FFMPEGCONF += --arch=arm
+ifdef HAVE_NEON
 FFMPEGCONF += --cpu=cortex-a8 --enable-neon
+FFMPEG_CFLAGS += -mfpu=neon
 endif
-# TODO: --enable-iwmmxt if anyone still cares
+endif
+
+# x86 stuff
+ifeq ($(ARCH),i386)
+FFMPEGCONF += --arch=x86
 endif
 
 # Darwin
 ifdef HAVE_DARWIN_OS
 FFMPEGCONF += --arch=$(ARCH) --target-os=darwin
 FFMPEG_CFLAGS += -DHAVE_LRINTF
-endif
-ifdef HAVE_MACOSX
 ifneq ($(findstring $(ARCH),i386 x86_64),)
 FFMPEGCONF += --enable-memalign-hack
 endif
 ifeq ($(ARCH),x86_64)
 FFMPEGCONF += --cpu=core2
 endif
-.ffmpeg: .yasm
+endif
+ifdef HAVE_IOS
+FFMPEGCONF += --enable-pic --as="$(AS)" --disable-decoder=snow
 endif
 
 # Linux
 ifdef HAVE_LINUX
 FFMPEGCONF += --target-os=linux --enable-pic
+
+ifeq ($(ANDROID_ABI), x86)
+ifdef HAVE_ANDROID
+# Android-x86 gcc doesn't guarantee an aligned stack, but this is
+# handled by __attribute__((force_align_arg_pointer)) in libavcodec
+# already, so we tell gcc to assume this alignment, so we don't need
+# to waste a precious register in assembly functions to realign it.
+FFMPEG_CFLAGS += -mincoming-stack-boundary=4
+endif # HAVE_ANDROID
+endif # x86
+
 endif
 
 # Windows
 ifdef HAVE_WIN32
+ifndef HAVE_MINGW_W64
+DEPS_ffmpeg += directx
+endif
 FFMPEGCONF += --target-os=mingw32 --enable-memalign-hack
 FFMPEGCONF += --enable-w32threads \
        --disable-bzlib --disable-bsfs \
-       --disable-decoder=dca --disable-encoder=vorbis
+       --disable-decoder=dca --disable-encoder=vorbis \
+       --enable-dxva2
+
 ifdef HAVE_WIN64
-FFMPEGCONF += --disable-dxva2
 FFMPEGCONF += --cpu=athlon64 --arch=x86_64
 else # !WIN64
-FFMPEGCONF += --enable-dxva2
-.ffmpeg: .directx
 FFMPEGCONF+= --cpu=i686 --arch=x86
 endif
 else
 FFMPEGCONF += --enable-pthreads
 endif
 
-ifdef HAVE_WINCE
-FFMPEGCONF += --target-os=mingw32ce --arch=armv4l --cpu=armv4t \
-       --disable-decoder=snow --disable-decoder=vc9 \
-       --disable-decoder=wmv3 --disable-decoder=vorbis \
-       --disable-decoder=dvdsub --disable-decoder=dvbsub
-endif
-
-FFMPEG_CFLAGS += --std=gnu99
-
 # Build
 
-PKGS += libav
-
-ffmpeg-$(FFMPEG_VERSION).tar.gz:
-       $(error FFmpeg snapshot is too old, VCS must be used!)
-       $(call download,$(FFMPEG_URL))
+PKGS += ffmpeg
+ifeq ($(call need_pkg,"libavcodec >= 52.25.0 libavformat >= 52.30.0 libswscale"),)
+PKGS_FOUND += ffmpeg
+endif
 
-$(TARBALLS)/ffmpeg-svn.tar.gz:
-       $(SVN) export $(FFMPEG_SVN) ffmpeg-svn
-       tar cv ffmpeg-svn | gzip > $@
+$(TARBALLS)/ffmpeg-git.tar.gz:
+       $(call download,$(FFMPEG_SNAPURL))
 
-FFMPEG_VERSION := svn
+FFMPEG_VERSION := git
 
 .sum-ffmpeg: $(TARBALLS)/ffmpeg-$(FFMPEG_VERSION).tar.gz
        $(warning Not implemented.)
        touch $@
 
 ffmpeg: ffmpeg-$(FFMPEG_VERSION).tar.gz .sum-ffmpeg
-       $(UNPACK)
-ifdef HAVE_WIN64
-       (cd $@-$(FFMPEG_VERSION)/libswscale && patch -p0) < $(SRC)/ffmpeg/ffmpeg-win64.patch
-endif
-ifdef HAVE_WIN32
-       sed -i "s/std=c99/std=gnu99/" $@-$(FFMPEG_VERSION)/configure
-endif
-       (cd $@-$(FFMPEG_VERSION) && patch -p1) < $(SRC)/ffmpeg/libavformat-ape.c.patch
-       mv $@-$(FFMPEG_VERSION) $@
-       touch $@
+       rm -Rf $@ $@-git
+       mkdir -p $@-git
+       $(ZCAT) "$<" | (cd $@-git && tar xv --strip-components=1)
+       $(MOVE)
 
 .ffmpeg: ffmpeg
-       # TODO: .zlib
        cd $< && $(HOSTVARS) ./configure \
-               --extra-cflags="$(FFMPEG_CFLAGS) -DHAVE_STDINT_H"  \
                --extra-ldflags="$(LDFLAGS)" $(FFMPEGCONF) \
                --prefix="$(PREFIX)" --enable-static --disable-shared
        cd $< && $(MAKE) install-libs install-headers