# 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
+HASH=HEAD
+
+#FFMPEG_SNAPURL := http://git.videolan.org/?p=ffmpeg.git;a=snapshot;h=$(HASH);sf=tgz
+FFMPEG_SNAPURL := http://git.libav.org/?p=libav.git;a=snapshot;h=$(HASH);sf=tgz
FFMPEGCONF = \
--cc="$(CC)" \
--disable-doc \
- --disable-decoder=libvpx \
- --enable-gsm \
+ --disable-decoder=bink \
+ --disable-encoder=vorbis \
+ --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
-DEPS_ffmpeg = zlib gsm
+ --disable-filters \
+ --disable-bsfs \
+ --disable-bzlib
+
+# 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
-#DEPS_ffmpeg += lame $(DEPS_lame)
+FFMPEGCONF += --enable-libmp3lame --enable-libvpx --disable-decoder=libvpx --disable-decoder=libvpx_vp8 --disable-decoder=libvpx_vp9
+DEPS_ffmpeg += lame $(DEPS_lame) vpx $(DEPS_vpx)
else
FFMPEGCONF += --disable-encoders --disable-muxers
-# XXX: REVISIT --enable-small ?
endif
-#FFMPEGCONF += --enable-libvpx
-#DEPS_ffmpeg += vpx $(DEPS_vpx)
-
-# XXX: REVISIT
-#ifndef HAVE_FPU
-#FFMPEGCONF += --disable-mpegaudio-hp
-#endif
+# Small size
+ifdef ENABLE_SMALL
+FFMPEGCONF += --enable-small
+ifeq ($(ARCH),arm)
+ifdef HAVE_ARMV7A
+FFMPEGCONF += --enable-thumb
+endif
+endif
+endif
ifdef HAVE_CROSS_COMPILE
-FFMPEGCONF += --enable-cross-compile --cross-prefix=$(HOST)-
+FFMPEGCONF += --enable-cross-compile
+ifndef HAVE_DARWIN_OS
+FFMPEGCONF += --cross-prefix=$(HOST)-
+endif
endif
# ARM stuff
ifeq ($(ARCH),arm)
-FFMPEGCONF += --disable-runtime-cpudetect
+FFMPEGCONF += --arch=arm
+ifdef HAVE_NEON
+FFMPEGCONF += --enable-neon
+endif
+ifdef HAVE_ARMV7A
+FFMPEGCONF += --cpu=cortex-a8
+endif
+ifdef HAVE_ARMV6
+FFMPEGCONF += --cpu=armv6 --disable-neon
+endif
+endif
+
+# MIPS stuff
+ifeq ($(ARCH),mipsel)
+FFMPEGCONF += --arch=mips
+endif
+
+# x86 stuff
+ifeq ($(ARCH),i386)
+ifndef HAVE_DARWIN_OS
+FFMPEGCONF += --arch=x86
+endif
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
-DEPS_ffmpeg += yasm $(DEPS_yasm)
+endif
+ifdef HAVE_IOS
+ifeq ($(ARCH),arm)
+FFMPEGCONF += --enable-pic --as="$(AS)"
+endif
+endif
+ifdef HAVE_MACOSX
+FFMPEGCONF += --enable-vda
endif
# Linux
ifdef HAVE_LINUX
FFMPEGCONF += --target-os=linux --enable-pic
+
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
+FFMPEGCONF += --enable-w32threads --enable-dxva2 \
+ --disable-decoder=dca
ifdef HAVE_WIN64
-FFMPEGCONF += --disable-dxva2
-
FFMPEGCONF += --cpu=athlon64 --arch=x86_64
else # !WIN64
-FFMPEGCONF += --enable-dxva2
-DEPS_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
+else # !Windows
+FFMPEGCONF += --enable-pthreads
endif
-FFMPEG_CFLAGS += --std=gnu99
-
# Build
-
PKGS += ffmpeg
-ifeq ($(call need_pkg,"libavcodec libavformat libswscale"),)
+ifeq ($(call need_pkg,"libavcodec >= 54.25.0 libavformat >= 53.21.0 libswscale"),)
PKGS_FOUND += ffmpeg
endif
-ffmpeg-$(FFMPEG_VERSION).tar.gz:
- $(error FFmpeg snapshot is too old, VCS must be used!)
- $(call download,$(FFMPEG_URL))
-
-$(TARBALLS)/ffmpeg-svn.tar.gz:
- $(SVN) export $(FFMPEG_SVN) ffmpeg-svn
- tar cvz ffmpeg-svn > $@
+$(TARBALLS)/ffmpeg-$(HASH).tar.gz:
+ $(call download,$(FFMPEG_SNAPURL))
-FFMPEG_VERSION := svn
-
-.sum-ffmpeg: $(TARBALLS)/ffmpeg-$(FFMPEG_VERSION).tar.gz
+.sum-ffmpeg: $(TARBALLS)/ffmpeg-$(HASH).tar.gz
$(warning Not implemented.)
touch $@
-ffmpeg: ffmpeg-$(FFMPEG_VERSION).tar.gz .sum-ffmpeg
- $(UNPACK)
-ifdef HAVE_WIN64
- $(APPLY) $(SRC)/ffmpeg/ffmpeg-win64.patch
-endif
-ifdef HAVE_WIN32
- sed -i "s/std=c99/std=gnu99/" $@-$(FFMPEG_VERSION)/configure
-endif
- $(APPLY) $(SRC)/ffmpeg/libavformat-ape.c.patch
+ffmpeg: ffmpeg-$(HASH).tar.gz .sum-ffmpeg
+ rm -Rf $@ $@-$(HASH)
+ mkdir -p $@-$(HASH)
+ $(ZCAT) "$<" | (cd $@-$(HASH) && tar xv --strip-components=1)
$(MOVE)
.ffmpeg: ffmpeg
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