# # Copyright (C) 2006-2016 OpenWrt.org # # This is free software, licensed under the GNU General Public License v2. # See /LICENSE for more information. # include $(TOPDIR)/rules.mk PKG_NAME:=ffmpeg PKG_VERSION:=2.8.7 PKG_RELEASE:=2 PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.xz PKG_SOURCE_URL:=http://ffmpeg.org/releases/ PKG_MD5SUM:=7e5b1c98eedfc3a364fa8c4095deeae5 PKG_MAINTAINER:=Ted Hess PKG_LICENSE:=LGPL-2.1+ GPL-2+ LGPL-3 PKG_LICENSE_FILES:=COPYING.GPLv2 COPYING.GPLv3 COPYING.LGPLv2.1 COPYING.LGPLv3 FFMPEG_CUSTOM_ENCODERS:= \ ac3 \ jpegls \ mpeg1video \ mpeg2video \ mpeg4 \ pcm_s16be \ pcm_s16le \ png \ vorbis \ zlib \ FFMPEG_CUSTOM_DECODERS:= \ aac \ ac3 \ alac \ amrnb \ amrwb \ ape \ atrac3 \ flac \ gif \ h264 \ jpegls \ mp2 \ mp3 \ mpeg1video \ mpeg2video \ mpeg4 \ mpegvideo \ mpc7 \ mpc8 \ pcm_s16be \ pcm_s16le \ png \ vorbis \ wavpack \ wmav1 \ wmav2 \ zlib \ FFMPEG_CUSTOM_MUXERS:= \ ac3 \ ffm \ h264 \ mp3 \ mp4 \ mpeg1video \ mpeg2video \ mpegts \ ogg \ rtp \ FFMPEG_CUSTOM_DEMUXERS:= \ aac \ ac3 \ amr \ ape \ avi \ flac \ ffm \ h264 \ matroska \ mov \ mp3 \ mpegps \ mpegts \ mpegvideo \ mpc \ mpc8 \ ogg \ rm \ rtsp \ rtp \ sdp \ v4l2 \ wav \ wv \ FFMPEG_CUSTOM_PARSERS:= \ aac \ flac \ ac3 \ h264 \ mpegaudio \ mpeg4video \ mpegvideo \ FFMPEG_CUSTOM_PROTOCOLS:= \ file http icecast pipe rtp tcp udp FFMPEG_MINI_DECODERS:= \ aac \ ac3 \ flac \ h264 \ jpegls \ mp3 \ mpeg1video \ mpeg2video \ mpeg4 \ mpegvideo \ png \ wmav1 \ wmav2 \ FFMPEG_MINI_DEMUXERS:= \ aac \ ac3 \ avi \ flac \ h264 \ matroska \ mov \ mp3 \ mpegts \ mpegvideo \ FFMPEG_MINI_PARSERS:= \ ac3 \ flac \ h264 \ mpeg4video \ mpegaudio \ FFMPEG_MINI_PROTOCOLS:= \ file \ FFMPEG_AUDIO_DECODERS:= \ aac \ aac_latm \ ac3 \ adpcm_* \ alac \ amrnb \ amrwb \ ape \ atrac3 \ flac \ mp2 \ mp3* \ mpc7 \ mpc8 \ opus \ pcm_* \ vorbis \ wavpack \ wmav1 \ wmav2 \ wmalossless \ wmapro \ zlib \ FFMPEG_AUDIO_DEMUXERS:= \ aac \ ac3 \ aiff \ amr \ ape \ avi \ flac \ ffm \ matroska \ mp3 \ mov \ mpc \ mpc8 \ mpegts \ ogg \ rm \ rtsp \ rtp \ sdp \ wav \ wv \ FFMPEG_AUDIO_PARSERS:= \ aac \ aac_latm \ ac3 \ flac \ mpegaudio \ opus \ FFMPEG_AUDIO_PROTOCOLS:= \ file http icecast rtp tcp udp PKG_BUILD_DIR:=$(BUILD_DIR)/$(PKG_NAME)-$(BUILD_VARIANT)/$(PKG_NAME)-$(PKG_VERSION) PKG_CONFIG_DEPENDS:= \ $(patsubst %,CONFIG_FFMPEG_CUSTOM_ENCODER_%,$(FFMPEG_CUSTOM_ENCODERS)) \ $(patsubst %,CONFIG_FFMPEG_CUSTOM_DECODER_%,$(FFMPEG_CUSTOM_DECODERS)) \ $(patsubst %,CONFIG_FFMPEG_CUSTOM_MUXER_%,$(FFMPEG_CUSTOM_DEMUXERS)) \ $(patsubst %,CONFIG_FFMPEG_CUSTOM_DEMUXER_%,$(FFMPEG_CUSTOM_DEMUXERS)) \ $(patsubst %,CONFIG_FFMPEG_CUSTOM_PARSER_%,$(FFMPEG_CUSTOM_PARSERS)) \ $(patsubst %,CONFIG_FFMPEG_CUSTOM_PROTOCOL_%,$(FFMPEG_CUSTOM_PROTOCOLS)) include $(INCLUDE_DIR)/package.mk define Package/ffmpeg/Default TITLE:=FFmpeg URL:=http://ffmpeg.mplayerhq.hu/ endef define Package/ffmpeg/Default/description FFmpeg is a a software package that can record, convert and stream digital audio and video in numerous formats. endef define Package/ffmpeg $(call Package/ffmpeg/Default) SECTION:=multimedia CATEGORY:=Multimedia TITLE+= program DEPENDS+= +libpthread +libffmpeg-full VARIANT:=full endef define Package/ffmpeg/description $(call Package/ffmpeg/Default/description) . This package contains the FFmpeg command line tool. endef define Package/ffprobe $(call Package/ffmpeg/Default) SECTION:=multimedia CATEGORY:=Multimedia TITLE+= CLI media identifier DEPENDS+= +libffmpeg-full VARIANT:=full endef define Package/ffprobe/description $(call Package/ffmpeg/Default/description) . This package contains the FFprobe command line tool. endef define Package/ffserver $(call Package/ffserver/Default) SECTION:=multimedia CATEGORY:=Multimedia TITLE+= streaming server DEPENDS+= +libpthread +libffmpeg-full VARIANT:=full endef define Package/ffserver/description $(call Package/ffmpeg/Default/description) . This package contains the FFmpeg streaming server. endef define Package/libffmpeg/Default $(call Package/ffmpeg/Default) SECTION:=libs CATEGORY:=Libraries TITLE+= libraries DEPENDS+= @BUILD_PATENTED +libpthread +zlib +libbz2 PROVIDES:= libffmpeg endef define Package/libffmpeg-custom $(call Package/libffmpeg/Default) TITLE+= (custom) DEPENDS+= +FFMPEG_CUSTOM_SELECT_libopus:libopus +FFMPEG_CUSTOM_SELECT_speex:libspeex \ +PACKAGE_libx264:libx264 +PACKAGE_lame-lib:lame-lib VARIANT:=custom MENU:=1 endef define Package/libffmpeg-custom/config source "$(SOURCE)/Config.in" endef define Package/libffmpeg-custom/description $(call Package/ffmpeg/Default/description) . This package contains customized FFmpeg shared libraries. endef define Package/libffmpeg-audio-dec $(call Package/libffmpeg/Default) TITLE+= (audio) DEPENDS+= +libspeex +libopus VARIANT:=audio-dec endef define Package/libffmpeg-audio-dec/description $(call Package/ffmpeg/Default/description) . This package contains FFmpeg shared libraries for audio decoding endef define Package/libffmpeg-full $(call Package/libffmpeg/Default) TITLE+= (full) DEPENDS+= +alsa-lib +PACKAGE_libx264:libx264 +PACKAGE_lame-lib:lame-lib +libopus +libspeex VARIANT:=full endef define Package/libffmpeg-full/description $(call Package/ffmpeg/Default/description) . This package contains full-featured FFmpeg shared libraries. endef define Package/libffmpeg-mini $(call Package/libffmpeg/Default) TITLE+= (mini) VARIANT:=mini endef define Package/libffmpeg-mini/description $(call Package/ffmpeg/Default/description) . This package contains minimal-featured FFmpeg shared libraries. endef FFMPEG_CONFIGURE:= \ CFLAGS="$(TARGET_CFLAGS) $(TARGET_CPPFLAGS) $(FPIC)" \ LDFLAGS="$(TARGET_LDFLAGS)" \ ./configure \ --enable-cross-compile \ --cross-prefix="$(TARGET_CROSS)" \ --arch="$(ARCH)" \ --target-os=linux \ --prefix="/usr" \ --pkg-config="pkg-config" \ --enable-shared \ --enable-static \ --enable-small \ --enable-pthreads \ --enable-zlib \ --disable-runtime-cpudetect \ --disable-doc \ --disable-debug \ \ --enable-gpl \ --enable-version3 \ \ --disable-altivec \ --disable-amd3dnow \ --disable-amd3dnowext \ --disable-mmx \ --disable-mmxext \ --disable-sse \ --disable-sse2 \ --disable-sse3 \ --disable-ssse3 \ --disable-sse4 \ --disable-sse42 \ --disable-avx \ --disable-xop \ --disable-fma3 \ --disable-fma4 \ --disable-avx2 \ --disable-yasm \ --disable-inline-asm \ --disable-mips32r2 \ --disable-mipsdspr1 \ --disable-mipsdspr2 \ --disable-mipsfpu \ \ --disable-dxva2 \ --disable-lzma \ --disable-vaapi \ --disable-vda \ --disable-vdpau \ --disable-outdevs #selectibly disable optimizations according to arch/cpu type ifneq ($(findstring arm,$(CONFIG_ARCH)),) ifeq (,$(findstring vfp,$(CONFIG_TARGET_OPTIMIZATION))) FFMPEG_CONFIGURE+= \ --disable-vfp endif ifeq (,$(findstring neon,$(CONFIG_TARGET_OPTIMIZATION))) FFMPEG_CONFIGURE+= \ --disable-neon endif else ifneq ($(ARCH),aarch64) FFMPEG_CONFIGURE+= \ --disable-vfp \ --disable-neon endif ifeq ($(BUILD_VARIANT),full) FFMPEG_CONFIGURE+= \ --enable-libopus --enable-decoder=libopus \ --enable-libspeex --enable-decoder=libspeex \ $(if $(CONFIG_PACKAGE_libx264),--enable-libx264) \ $(if $(CONFIG_PACKAGE_lame-lib),--enable-libmp3lame) endif ifeq ($(BUILD_VARIANT),custom) FFMPEG_ENABLE= \ $(foreach c, $(2), \ $(if $($(3)_$(c)),--enable-$(1)="$(c)") \ ) FFMPEG_CONFIGURE+= \ --disable-programs \ --disable-avfilter \ --disable-postproc \ --disable-swresample \ --disable-swscale \ --disable-everything \ $(call FFMPEG_ENABLE,encoder,$(FFMPEG_CUSTOM_ENCODERS),CONFIG_FFMPEG_CUSTOM_ENCODER) \ $(call FFMPEG_ENABLE,decoder,$(FFMPEG_CUSTOM_DECODERS),CONFIG_FFMPEG_CUSTOM_DECODER) \ $(call FFMPEG_ENABLE,muxer,$(FFMPEG_CUSTOM_MUXERS),CONFIG_FFMPEG_CUSTOM_MUXER) \ $(call FFMPEG_ENABLE,demuxer,$(FFMPEG_CUSTOM_DEMUXERS),CONFIG_FFMPEG_CUSTOM_DEMUXER) \ $(call FFMPEG_ENABLE,parser,$(FFMPEG_CUSTOM_PARSERS),CONFIG_FFMPEG_CUSTOM_PARSER) \ $(call FFMPEG_ENABLE,protocol,$(FFMPEG_CUSTOM_PROTOCOLS),CONFIG_FFMPEG_CUSTOM_PROTOCOL) \ ifeq ($(CONFIG_FFMPEG_CUSTOM_SELECT_adpcm),y) FFMPEG_CONFIGURE+= \ --enable-decoder=adpcm_ima_wav \ --enable-decoder=adpcm_ima_qt \ --enable-decoder=adpcm_ms \ endif ifeq ($(CONFIG_FFMPEG_CUSTOM_SELECT_libopus),y) FFMPEG_CONFIGURE+= \ --enable-libopus --enable-decoder=libopus endif ifeq ($(CONFIG_FFMPEG_CUSTOM_SELECT_speex),y) FFMPEG_CONFIGURE+= \ --enable-libspeex --enable-decoder=libspeex endif ifeq ($(CONFIG_FFMPEG_CUSTOM_SELECT_x264),y) FFMPEG_CONFIGURE+= \ --enable-libx264 endif ifeq ($(CONFIG_FFMPEG_CUSTOM_SELECT_mp3lame),y) FFMPEG_CONFIGURE+= \ --enable-libmp3lame endif endif ifeq ($(BUILD_VARIANT),audio-dec) FFMPEG_ENABLE= \ $(foreach c, $(2), \ --enable-$(1)="$(c)" \ ) FFMPEG_CONFIGURE+= \ --disable-programs \ --disable-avfilter \ --disable-postproc \ --disable-swresample \ --disable-swscale \ --disable-everything \ $(call FFMPEG_ENABLE,decoder,$(FFMPEG_AUDIO_DECODERS)) \ $(call FFMPEG_ENABLE,demuxer,$(FFMPEG_AUDIO_DEMUXERS)) \ $(call FFMPEG_ENABLE,parser,$(FFMPEG_AUDIO_PARSERS)) \ $(call FFMPEG_ENABLE,protocol,$(FFMPEG_AUDIO_PROTOCOLS)) \ --enable-libspeex --enable-decoder=libspeex \ --disable-decoder=pcm_bluray,pcm_dvd \ endif ifeq ($(BUILD_VARIANT),mini) FFMPEG_ENABLE= \ $(foreach c, $(2), \ --enable-$(1)="$(c)" \ ) FFMPEG_CONFIGURE+= \ --disable-programs \ --disable-avdevice \ --disable-avfilter \ --disable-postproc \ --disable-swresample \ --disable-swscale \ --disable-everything \ $(call FFMPEG_ENABLE,decoder,$(FFMPEG_MINI_DECODERS)) \ $(call FFMPEG_ENABLE,demuxer,$(FFMPEG_MINI_DEMUXERS)) \ $(call FFMPEG_ENABLE,parser,$(FFMPEG_MINI_PARSERS)) \ $(call FFMPEG_ENABLE,protocol,$(FFMPEG_MINI_PROTOCOLS)) \ endif ifneq ($(CONFIG_TARGET_x86),) TARGET_CFLAGS += -fomit-frame-pointer endif define Build/Configure ( cd $(PKG_BUILD_DIR); $(FFMPEG_CONFIGURE) ) endef define Build/Compile $(MAKE) -C $(PKG_BUILD_DIR) \ DESTDIR="$(PKG_INSTALL_DIR)" \ all install endef define Build/InstallDev/custom $(INSTALL_DIR) $(1)/usr/include $(CP) $(PKG_INSTALL_DIR)/usr/include/lib{avcodec,avdevice,avformat,avutil} $(1)/usr/include/ $(INSTALL_DIR) $(1)/usr/lib $(CP) $(PKG_INSTALL_DIR)/usr/lib/lib{avcodec,avdevice,avformat,avutil}.{a,so*} $(1)/usr/lib/ $(INSTALL_DIR) $(1)/usr/lib/pkgconfig $(CP) $(PKG_INSTALL_DIR)/usr/lib/pkgconfig/lib{avcodec,avdevice,avformat,avutil}.pc $(1)/usr/lib/pkgconfig/ endef define Build/InstallDev/full $(INSTALL_DIR) $(1)/usr/include $(CP) $(PKG_INSTALL_DIR)/usr/include/lib{avcodec,avdevice,avfilter,avformat,avutil,postproc,swresample,swscale} $(1)/usr/include/ $(INSTALL_DIR) $(1)/usr/lib $(CP) $(PKG_INSTALL_DIR)/usr/lib/lib{avcodec,avdevice,avfilter,avformat,avutil,postproc,swresample,swscale}.{a,so*} $(1)/usr/lib/ $(INSTALL_DIR) $(1)/usr/lib/pkgconfig $(CP) $(PKG_INSTALL_DIR)/usr/lib/pkgconfig/lib{avcodec,avdevice,avfilter,avformat,avutil,postproc,swresample,swscale}.pc $(1)/usr/lib/pkgconfig/ endef define Build/InstallDev/mini $(INSTALL_DIR) $(1)/usr/include $(CP) $(PKG_INSTALL_DIR)/usr/include/lib{avcodec,avformat,avutil} $(1)/usr/include/ $(INSTALL_DIR) $(1)/usr/lib $(CP) $(PKG_INSTALL_DIR)/usr/lib/lib{avcodec,avformat,avutil}.{a,so*} $(1)/usr/lib/ $(INSTALL_DIR) $(1)/usr/lib/pkgconfig $(CP) $(PKG_INSTALL_DIR)/usr/lib/pkgconfig/lib{avcodec,avformat,avutil}.pc $(1)/usr/lib/pkgconfig/ endef Build/InstallDev/audio-dec = $(Build/InstallDev/custom) # XXX: attempt at installing "best" dev files available ifeq ($(BUILD_VARIANT),custom) # XXX: only install "custom" dev files if -full & -mini are not selected ifeq ($(CONFIG_PACKAGE_libffmpeg-full)$(CONFIG_PACKAGE_libffmpeg-mini),) Build/InstallDev = $(Build/InstallDev/custom) endif endif ifeq ($(BUILD_VARIANT),audio-dec) # XXX: only install "audio-dec" dev files if -full & -mini are not selected ifeq ($(CONFIG_PACKAGE_libffmpeg-full)$(CONFIG_PACKAGE_libffmpeg-mini),) Build/InstallDev = $(Build/InstallDev/audio-dec) endif endif ifeq ($(BUILD_VARIANT),full) # XXX: always install "full" dev files if -full is selected Build/InstallDev = $(Build/InstallDev/full) endif ifeq ($(BUILD_VARIANT),mini) # XXX: only install "mini" dev files if -full is not selected ifeq ($(CONFIG_PACKAGE_libffmpeg-full),) Build/InstallDev = $(Build/InstallDev/mini) endif endif define Package/ffmpeg/install $(INSTALL_DIR) $(1)/usr/bin $(CP) $(PKG_INSTALL_DIR)/usr/bin/ffmpeg $(1)/usr/bin/ endef define Package/ffprobe/install $(INSTALL_DIR) $(1)/usr/bin $(CP) $(PKG_INSTALL_DIR)/usr/bin/ffprobe $(1)/usr/bin/ endef define Package/ffserver/install $(INSTALL_DIR) $(1)/usr/bin $(CP) $(PKG_INSTALL_DIR)/usr/bin/ffserver $(1)/usr/bin/ endef define Package/libffmpeg-custom/install $(INSTALL_DIR) $(1)/usr/lib $(CP) $(PKG_INSTALL_DIR)/usr/lib/lib{avcodec,avdevice,avformat,avutil}.so.* $(1)/usr/lib/ endef define Package/libffmpeg-full/install $(INSTALL_DIR) $(1)/usr/lib $(CP) $(PKG_INSTALL_DIR)/usr/lib/lib{avcodec,avdevice,avfilter,avformat,avutil,postproc,swresample,swscale}.so.* $(1)/usr/lib/ endef define Package/libffmpeg-mini/install $(INSTALL_DIR) $(1)/usr/lib $(CP) $(PKG_INSTALL_DIR)/usr/lib/lib{avcodec,avformat,avutil}.so.* $(1)/usr/lib/ endef Package/libffmpeg-audio-dec/install = $(Package/libffmpeg-custom/install) $(eval $(call BuildPackage,ffmpeg)) $(eval $(call BuildPackage,ffprobe)) $(eval $(call BuildPackage,ffserver)) $(eval $(call BuildPackage,libffmpeg-audio-dec)) $(eval $(call BuildPackage,libffmpeg-full)) $(eval $(call BuildPackage,libffmpeg-mini)) ifneq ($(CONFIG_ALL),y) $(eval $(call BuildPackage,libffmpeg-custom)) endif