Disable use of assembly on MIPS to allow it to build. MIPS is not expected to be high performance in OpenWrt, and this allows it to still be used for media identification as updated versions of ffmpeg are brought in. The error is in libavcodec/mips/aacdec_mips.c: In function 'imdct_and_windowing_mips' regarding: 'asm' has impossible constraints in multiple locations. Signed-off-by: Ian Leonard <antonlacon@gmail.com>
796 lines
19 KiB
Makefile
796 lines
19 KiB
Makefile
#
|
|
# Copyright (C) 2017-2019 Ian Leonard <antonlacon@gmail.com>
|
|
# Copyright (C) 2018 Ted Hess <thess@kitschensync.net>
|
|
#
|
|
# 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:=3.4.5
|
|
PKG_RELEASE:=1
|
|
|
|
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.xz
|
|
PKG_SOURCE_URL:=https://ffmpeg.org/releases/
|
|
PKG_HASH:=741cbd6394eaed370774ca4cc089eaafbc54d0824b9aa360d4b3b0cbcbc4a92c
|
|
PKG_MAINTAINER:=Ted Hess <thess@kitschensync.net>, \
|
|
Ian Leonard <antonlacon@gmail.com>
|
|
|
|
PKG_LICENSE:=LGPL-2.1+ GPL-2+ LGPL-3
|
|
PKG_LICENSE_FILES:=COPYING.GPLv2 COPYING.GPLv3 COPYING.LGPLv2.1 COPYING.LGPLv3
|
|
PKG_CPE_ID:=cpe:/a:ffmpeg:ffmpeg
|
|
|
|
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 \
|
|
hevc \
|
|
jpegls \
|
|
mp2 \
|
|
mp3 \
|
|
mpeg1video \
|
|
mpeg2video \
|
|
mpeg4 \
|
|
mpegvideo \
|
|
mpc7 \
|
|
mpc8 \
|
|
pcm_s16be \
|
|
pcm_s16le \
|
|
png \
|
|
vc1 \
|
|
vorbis \
|
|
wavpack \
|
|
wmav1 \
|
|
wmav2 \
|
|
zlib \
|
|
|
|
FFMPEG_CUSTOM_MUXERS:= \
|
|
ac3 \
|
|
ffm \
|
|
h264 \
|
|
hevc \
|
|
mp3 \
|
|
mp4 \
|
|
mpeg1video \
|
|
mpeg2video \
|
|
mpegts \
|
|
ogg \
|
|
rtp \
|
|
|
|
FFMPEG_CUSTOM_DEMUXERS:= \
|
|
aac \
|
|
ac3 \
|
|
amr \
|
|
ape \
|
|
avi \
|
|
flac \
|
|
ffm \
|
|
h264 \
|
|
hevc \
|
|
matroska \
|
|
mov \
|
|
mp3 \
|
|
mpegps \
|
|
mpegts \
|
|
mpegvideo \
|
|
mpc \
|
|
mpc8 \
|
|
ogg \
|
|
rm \
|
|
rtsp \
|
|
rtp \
|
|
sdp \
|
|
v4l2 \
|
|
vc1 \
|
|
wav \
|
|
wv \
|
|
|
|
FFMPEG_CUSTOM_PARSERS:= \
|
|
aac \
|
|
flac \
|
|
ac3 \
|
|
h264 \
|
|
hevc \
|
|
mpegaudio \
|
|
mpeg4video \
|
|
mpegvideo \
|
|
vc1 \
|
|
|
|
FFMPEG_CUSTOM_PROTOCOLS:= \
|
|
file http icecast pipe rtp tcp udp
|
|
|
|
FFMPEG_MINI_DECODERS:= \
|
|
ac3 \
|
|
flac \
|
|
jpegls \
|
|
mp2 \
|
|
mp3 \
|
|
mpeg1video \
|
|
mpeg2video \
|
|
mpeg4 \
|
|
mpegvideo \
|
|
opus \
|
|
png \
|
|
vorbis \
|
|
|
|
FFMPEG_PATENTED_MINI_DECODERS:= \
|
|
h264 \
|
|
hevc \
|
|
vc1 \
|
|
|
|
FFMPEG_MINI_DEMUXERS:= \
|
|
avi \
|
|
flac \
|
|
matroska \
|
|
mov \
|
|
mp3 \
|
|
mpegps \
|
|
mpegts \
|
|
mpegvideo \
|
|
ogg \
|
|
|
|
FFMPEG_MINI_PROTOCOLS:= \
|
|
file
|
|
|
|
FFMPEG_AUDIO_DECODERS:= \
|
|
ac3 \
|
|
adpcm_* \
|
|
alac \
|
|
amrnb \
|
|
amrwb \
|
|
ape \
|
|
atrac3 \
|
|
flac \
|
|
mp2 \
|
|
mp3* \
|
|
mpc7 \
|
|
mpc8 \
|
|
opus \
|
|
pcm_* \
|
|
vorbis \
|
|
wavpack \
|
|
zlib \
|
|
|
|
FFMPEG_AUDIO_DEMUXERS:= \
|
|
ac3 \
|
|
aiff \
|
|
amr \
|
|
ape \
|
|
avi \
|
|
flac \
|
|
ffm \
|
|
matroska \
|
|
mp3 \
|
|
mov \
|
|
mpc \
|
|
mpc8 \
|
|
mpegts \
|
|
ogg \
|
|
rm \
|
|
rtsp \
|
|
rtp \
|
|
sdp \
|
|
wav \
|
|
wv \
|
|
|
|
FFMPEG_AUDIO_PROTOCOLS:= \
|
|
file http icecast rtp tcp udp
|
|
|
|
FFMPEG_PATENTED_DECODERS:= \
|
|
atrac3 \
|
|
h264 \
|
|
hevc \
|
|
vc1 \
|
|
|
|
FFMPEG_PATENTED_ENCODERS:=$(FFMPEG_PATENDED_DECODERS)
|
|
|
|
FFMPEG_PATENTED_MUXERS:= \
|
|
h264 \
|
|
hevc \
|
|
vc1 \
|
|
|
|
FFMPEG_PATENTED_DEMUXERS:=$(FFMPEG_PATENTED_MUXERS)
|
|
|
|
FFMPEG_PATENTED_PARSERS:= \
|
|
h264 \
|
|
hevc \
|
|
vc1 \
|
|
|
|
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_MUXERS)) \
|
|
$(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:=https://ffmpeg.org/
|
|
DEPENDS+= +libpthread
|
|
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.
|
|
|
|
FFmpeg licensing / patent issues are complex. It is the reponsibility of the
|
|
user to understand any requirements in this regard with its usage. See:
|
|
https://ffmpeg.org/legal.html for further information.
|
|
endef
|
|
|
|
|
|
define Package/ffmpeg
|
|
$(call Package/ffmpeg/Default)
|
|
SECTION:=multimedia
|
|
CATEGORY:=Multimedia
|
|
TITLE+= program
|
|
DEPENDS+= +libffmpeg-full
|
|
VARIANT:=full
|
|
endef
|
|
|
|
define Package/ffmpeg-custom
|
|
$(call Package/ffmpeg/Default)
|
|
SECTION:=multimedia
|
|
CATEGORY:=Multimedia
|
|
TITLE+= program (custom)
|
|
DEPENDS+= @!ALL libffmpeg-custom
|
|
VARIANT:=custom
|
|
endef
|
|
|
|
define Package/ffmpeg/description
|
|
$(call Package/ffmpeg/Default/description)
|
|
.
|
|
This package contains the FFmpeg command line tool.
|
|
endef
|
|
|
|
Package/ffmpeg-custom/description = $(Package/ffmpeg/description)
|
|
|
|
define Package/ffprobe
|
|
$(call Package/ffmpeg/Default)
|
|
SECTION:=multimedia
|
|
CATEGORY:=Multimedia
|
|
TITLE+= CLI media identifier
|
|
DEPENDS+= +libffmpeg-full
|
|
VARIANT:=full
|
|
endef
|
|
|
|
define Package/ffprobe-custom
|
|
$(call Package/ffmpeg/Default)
|
|
SECTION:=multimedia
|
|
CATEGORY:=Multimedia
|
|
TITLE+= CLI media identifier (custom)
|
|
DEPENDS+= @!ALL libffmpeg-custom
|
|
VARIANT:=custom
|
|
endef
|
|
|
|
define Package/ffprobe/description
|
|
$(call Package/ffmpeg/Default/description)
|
|
.
|
|
This package contains the FFprobe command line tool.
|
|
endef
|
|
|
|
Package/ffprobe-custom/description = $(Package/ffprobe/description)
|
|
|
|
define Package/ffserver
|
|
$(call Package/ffmpeg/Default)
|
|
SECTION:=multimedia
|
|
CATEGORY:=Multimedia
|
|
TITLE+= streaming server
|
|
DEPENDS+= +libffmpeg-full
|
|
VARIANT:=full
|
|
endef
|
|
|
|
define Package/ffserver-custom
|
|
$(call Package/ffmpeg/Default)
|
|
SECTION:=multimedia
|
|
CATEGORY:=Multimedia
|
|
TITLE+= streaming server (custom)
|
|
DEPENDS+= @!ALL libffmpeg-custom
|
|
VARIANT:=custom
|
|
endef
|
|
|
|
define Package/ffserver/description
|
|
$(call Package/ffmpeg/Default/description)
|
|
.
|
|
This package contains the FFmpeg streaming server.
|
|
endef
|
|
|
|
Package/ffserver-custom/description = $(Package/ffserver/description)
|
|
|
|
define Package/libffmpeg/Default
|
|
$(call Package/ffmpeg/Default)
|
|
SECTION:=libs
|
|
CATEGORY:=Libraries
|
|
TITLE+= libraries
|
|
DEPENDS+= +libpthread +zlib +libbz2
|
|
PROVIDES:= libffmpeg
|
|
endef
|
|
|
|
|
|
# Package build suppressed when CONFIG_ALL=y
|
|
define Package/libffmpeg-custom
|
|
$(call Package/libffmpeg/Default)
|
|
TITLE+= (custom)
|
|
DEPENDS+= @!ALL \
|
|
+FFMPEG_CUSTOM_SELECT_libopus:libopus \
|
|
+PACKAGE_libx264:libx264 +PACKAGE_lame-lib:lame-lib \
|
|
+FFMPEG_CUSTOM_SELECT_libshine:shine \
|
|
+PACKAGE_fdk-aac:fdk-aac
|
|
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)
|
|
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_libopus:libopus \
|
|
+SOFT_FLOAT:shine \
|
|
+!SOFT_FLOAT:lame-lib \
|
|
+PACKAGE_libx264:libx264
|
|
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
|
|
|
|
|
|
# Strip off FPU notation
|
|
REAL_CPU_TYPE:=$(firstword $(subst +, ,$(CONFIG_CPU_TYPE)))
|
|
# Fixup cpu types recogized by ffmpeg configure
|
|
REAL_CPU_TYPE:=$(subst octeonplus,octeon+,$(REAL_CPU_TYPE))
|
|
|
|
FFMPEG_CONFIGURE:= \
|
|
CFLAGS="$(TARGET_CFLAGS) $(TARGET_CPPFLAGS) $(FPIC)" \
|
|
LDFLAGS="$(TARGET_LDFLAGS)" \
|
|
./configure \
|
|
--enable-cross-compile \
|
|
--cross-prefix="$(TARGET_CROSS)" \
|
|
--arch="$(ARCH)" \
|
|
$(if $(REAL_CPU_TYPE),--cpu=$(call qstrip,$(REAL_CPU_TYPE)),) \
|
|
--target-os=linux \
|
|
--prefix="/usr" \
|
|
--pkg-config="pkg-config" \
|
|
--enable-shared \
|
|
--enable-static \
|
|
--enable-pthreads \
|
|
--enable-zlib \
|
|
--disable-doc \
|
|
--disable-debug \
|
|
\
|
|
--disable-lzma \
|
|
--disable-vaapi \
|
|
--disable-vdpau \
|
|
--disable-outdevs
|
|
|
|
ifeq ($(CONFIG_SOFT_FLOAT),y)
|
|
FFMPEG_CONFIGURE+= \
|
|
--disable-altivec \
|
|
--disable-vsx \
|
|
--disable-power8 \
|
|
--disable-armv5te \
|
|
--disable-armv6 \
|
|
--disable-armv6t2 \
|
|
--disable-inline-asm \
|
|
--disable-mipsdsp \
|
|
--disable-mipsdspr2 \
|
|
--disable-mipsfpu \
|
|
--disable-msa \
|
|
--disable-mmi \
|
|
--disable-fast-unaligned \
|
|
--disable-runtime-cpudetect
|
|
|
|
else ifneq ($(findstring arm,$(CONFIG_ARCH)),)
|
|
FFMPEG_CONFIGURE+= \
|
|
--disable-runtime-cpudetect
|
|
# XXX: GitHub issue 3320 ppc cpu with fpu but no altivec (WNDR4700)
|
|
else ifneq ($(findstring powerpc,$(CONFIG_ARCH)),)
|
|
FFMPEG_CONFIGURE+= \
|
|
--disable-altivec
|
|
endif
|
|
|
|
# libavcodec/mips/aacdec_mips.c build problem
|
|
# XXX: disable use of assembly on MIPS. Patches welcome.
|
|
ifneq ($(findstring mips,$(CONFIG_ARCH)),)
|
|
FFMPEG_CONFIGURE+= \
|
|
--disable-asm --disable-inline-asm
|
|
endif
|
|
|
|
# selectively disable optimizations according to arch/cpu type
|
|
ifneq ($(findstring arm,$(CONFIG_ARCH)),)
|
|
FFMPEG_CONFIGURE+= --enable-lto
|
|
|
|
ifneq ($(findstring vfp,$(CONFIG_TARGET_OPTIMIZATION)),)
|
|
FFMPEG_CONFIGURE+= --enable-vfp
|
|
else
|
|
FFMPEG_CONFIGURE+= --disable-vfp
|
|
endif
|
|
ifneq ($(findstring neon,$(CONFIG_TARGET_OPTIMIZATION)),)
|
|
FFMPEG_CONFIGURE+= \
|
|
--enable-neon \
|
|
--enable-vfp
|
|
else
|
|
FFMPEG_CONFIGURE+= --disable-neon
|
|
endif
|
|
endif
|
|
|
|
ifeq ($(ARCH),x86_64)
|
|
FFMPEG_CONFIGURE+= --enable-lto
|
|
endif
|
|
|
|
ifneq ($(CONFIG_TARGET_x86),)
|
|
ifeq ($(CONFIG_NASM),y)
|
|
FFMPEG_CONFIGURE += --enable-x86asm
|
|
else
|
|
FFMPEG_CONFIGURE += --disable-x86asm
|
|
endif
|
|
endif
|
|
|
|
ifeq ($(BUILD_VARIANT),full)
|
|
|
|
FFMPEG_DISABLE= \
|
|
$(foreach c, $(2), \
|
|
--disable-$(1)="$(c)" \
|
|
)
|
|
|
|
FFMPEG_CONFIGURE+= \
|
|
--enable-avresample \
|
|
$(if $(CONFIG_BUILD_PATENTED),, \
|
|
$(call FFMPEG_DISABLE,decoder,$(FFMPEG_PATENTED_DECODERS)) \
|
|
$(call FFMPEG_DISABLE,encoder,$(FFMPEG_PATENTED_ENCODERS)) \
|
|
$(call FFMPEG_DISABLE,muxer,$(FFMPEG_PATENTED_MUXERS)) \
|
|
$(call FFMPEG_DISABLE,demuxer,$(FFMPEG_PATENTED_DEMUXERS)) \
|
|
$(call FFMPEG_DISABLE,parser,$(FFMPEG_PATENTED_PARSERS))) \
|
|
$(if $(CONFIG_PACKAGE_libopus),--enable-libopus)
|
|
ifeq ($(CONFIG_SOFT_FLOAT),y)
|
|
FFMPEG_CONFIGURE+= \
|
|
--enable-small \
|
|
\
|
|
$(if $(CONFIG_PACKAGE_shine),--enable-libshine)
|
|
else
|
|
ifeq ($(ARCH),x86_64)
|
|
FFMPEG_CONFIGURE+= --enable-hardcoded-tables
|
|
else
|
|
FFMPEG_CONFIGURE+= --enable-small
|
|
endif
|
|
FFMPEG_CONFIGURE+= $(if $(CONFIG_PACKAGE_lame-lib),--enable-libmp3lame)
|
|
endif
|
|
# x264 support and fdk-aac support can't coexist and be distributed.
|
|
# Prioritize x264 over fdk-aac in default builds (maintain status-quo).
|
|
ifneq ($(CONFIG_PACKAGE_libx264),)
|
|
FFMPEG_CONFIGURE+= \
|
|
--enable-gpl \
|
|
--enable-libx264
|
|
else
|
|
FFMPEG_CONFIGURE+= $(if $(CONFIG_PACKAGE_fdk-aac),--enable-libfdk-aac)
|
|
endif
|
|
endif
|
|
|
|
ifeq ($(BUILD_VARIANT),custom)
|
|
|
|
FFMPEG_ENABLE= \
|
|
$(foreach c, $(2), \
|
|
$(if $($(3)_$(c)),--enable-$(1)="$(c)") \
|
|
)
|
|
|
|
ifeq ($(CONFIG_FFMPEG_CUSTOM_LARGE),y)
|
|
FFMPEG_CONFIGURE+= \
|
|
--enable-hardcoded-tables
|
|
else
|
|
FFMPEG_CONFIGURE+= \
|
|
--enable-small
|
|
endif
|
|
|
|
ifeq ($(CONFIG_FFMPEG_CUSTOM_GPL),y)
|
|
FFMPEG_CONFIGURE+= --enable-gpl
|
|
endif
|
|
|
|
ifeq ($(CONFIG_FFMPEG_CUSTOM_GPLV3),y)
|
|
FFMPEG_CONFIGURE+= --enable-version3
|
|
endif
|
|
|
|
ifeq ($(CONFIG_FFMPEG_CUSTOM_NONFREE),y)
|
|
FFMPEG_CONFIGURE+= --enable-nonfree
|
|
endif
|
|
|
|
ifneq ($(CONFIG_FFMPEG_CUSTOM_PROGRAMS),y)
|
|
FFMPEG_CONFIGURE+= \
|
|
--disable-programs \
|
|
--disable-avfilter \
|
|
--disable-swresample
|
|
endif
|
|
|
|
FFMPEG_CONFIGURE+= \
|
|
--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_libfdk-aac),y)
|
|
FFMPEG_CONFIGURE+= \
|
|
--enable-libfdk-aac --enable-encoder=libfdk_aac
|
|
endif
|
|
|
|
ifeq ($(CONFIG_FFMPEG_CUSTOM_SELECT_libmp3lame),y)
|
|
FFMPEG_CONFIGURE+= \
|
|
--enable-libmp3lame --enable-encoder=libmp3lame
|
|
endif
|
|
|
|
ifeq ($(CONFIG_FFMPEG_CUSTOM_SELECT_libopus),y)
|
|
FFMPEG_CONFIGURE+= \
|
|
--enable-libopus --enable-decoder=libopus --enable-encoder=libopus
|
|
endif
|
|
|
|
ifeq ($(CONFIG_FFMPEG_CUSTOM_SELECT_libshine),y)
|
|
FFMPEG_CONFIGURE+= \
|
|
--enable-libshine --enable-encoder=libshine
|
|
endif
|
|
|
|
ifeq ($(CONFIG_FFMPEG_CUSTOM_SELECT_libx264),y)
|
|
FFMPEG_CONFIGURE+= \
|
|
--enable-libx264 --enable-encoder=libx264
|
|
else
|
|
FFMPEG_CONFIGURE+= --disable-postproc
|
|
endif
|
|
|
|
endif
|
|
|
|
ifeq ($(BUILD_VARIANT),audio-dec)
|
|
|
|
FFMPEG_ENABLE= \
|
|
$(foreach c, $(2), \
|
|
--enable-$(1)="$(c)" \
|
|
)
|
|
|
|
FFMPEG_CONFIGURE+= \
|
|
--enable-small \
|
|
--enable-gpl \
|
|
\
|
|
--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,protocol,$(FFMPEG_AUDIO_PROTOCOLS)) \
|
|
--disable-decoder=pcm_bluray,pcm_dvd
|
|
endif
|
|
|
|
ifeq ($(BUILD_VARIANT),mini)
|
|
|
|
FFMPEG_ENABLE= \
|
|
$(foreach c, $(2), \
|
|
--enable-$(1)="$(c)" \
|
|
)
|
|
|
|
FFMPEG_CONFIGURE+= \
|
|
--enable-small \
|
|
\
|
|
--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,protocol,$(FFMPEG_MINI_PROTOCOLS)) \
|
|
$(if $(CONFIG_BUILD_PATENTED), \
|
|
$(call FFMPEG_ENABLE,decoder,$(FFMPEG_PATENTED_MINI_DECODERS)))
|
|
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/
|
|
ifeq ($(CONFIG_FFMPEG_CUSTOM_PROGRAMS),y)
|
|
$(CP) $(PKG_INSTALL_DIR)/usr/lib/lib{avfilter,swresample}.{a,so*} $(1)/usr/lib/
|
|
endif
|
|
$(INSTALL_DIR) $(1)/usr/lib/pkgconfig
|
|
$(CP) $(PKG_INSTALL_DIR)/usr/lib/pkgconfig/lib{avcodec,avdevice,avformat,avutil}.pc $(1)/usr/lib/pkgconfig/
|
|
ifeq ($(CONFIG_FFMPEG_CUSTOM_SELECT_libx264),y)
|
|
$(CP) $(PKG_INSTALL_DIR)/usr/include/libpostproc $(1)/usr/include/
|
|
$(CP) $(PKG_INSTALL_DIR)/usr/lib/libpostproc.{a,so*} $(1)/usr/lib/
|
|
$(CP) $(PKG_INSTALL_DIR)/usr/lib/pkgconfig/libpostproc.pc $(1)/usr/lib/pkgconfig/
|
|
endif
|
|
endef
|
|
|
|
# Only ffmpeg with libx264 is GPL (yes libpostproc); all other builds are lgpl (no libpostproc)
|
|
define Build/InstallDev/full
|
|
$(INSTALL_DIR) $(1)/usr/include
|
|
$(INSTALL_DIR) $(1)/usr/lib
|
|
$(INSTALL_DIR) $(1)/usr/lib/pkgconfig
|
|
$(CP) $(PKG_INSTALL_DIR)/usr/include/lib{avcodec,avdevice,avfilter,avformat,avresample,avutil,swresample,swscale} $(1)/usr/include/
|
|
$(CP) $(PKG_INSTALL_DIR)/usr/lib/lib{avcodec,avdevice,avfilter,avformat,avresample,avutil,swresample,swscale}.{a,so*} $(1)/usr/lib/
|
|
$(CP) $(PKG_INSTALL_DIR)/usr/lib/pkgconfig/lib{avcodec,avdevice,avfilter,avformat,avresample,avutil,swresample,swscale}.pc $(1)/usr/lib/pkgconfig/
|
|
ifneq ($(CONFIG_PACKAGE_libx264),)
|
|
$(CP) $(PKG_INSTALL_DIR)/usr/include/libpostproc $(1)/usr/include/
|
|
$(CP) $(PKG_INSTALL_DIR)/usr/lib/libpostproc.{a,so*} $(1)/usr/lib/
|
|
$(CP) $(PKG_INSTALL_DIR)/usr/lib/pkgconfig/libpostproc.pc $(1)/usr/lib/pkgconfig/
|
|
endif
|
|
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
|
|
|
|
Package/ffmpeg-custom/install = $(Package/ffmpeg/install)
|
|
|
|
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/
|
|
ifeq ($(CONFIG_FFMPEG_CUSTOM_SELECT_libx264),y)
|
|
$(CP) $(PKG_INSTALL_DIR)/usr/lib/libpostproc.so.* $(1)/usr/lib/
|
|
endif
|
|
ifeq ($(CONFIG_FFMPEG_CUSTOM_PROGRAMS),y)
|
|
$(CP) $(PKG_INSTALL_DIR)/usr/lib/lib{avfilter,swresample}.so.* $(1)/usr/lib/
|
|
endif
|
|
endef
|
|
|
|
# Only ffmpeg with libx264 is GPL (yes libpostproc); all other builds are lgpl (no libpostproc)
|
|
define Package/libffmpeg-full/install
|
|
$(INSTALL_DIR) $(1)/usr/lib
|
|
$(CP) $(PKG_INSTALL_DIR)/usr/lib/lib{avcodec,avdevice,avfilter,avformat,avresample,avutil,swresample,swscale}.so.* $(1)/usr/lib/
|
|
ifneq ($(CONFIG_PACKAGE_libx264),)
|
|
$(CP) $(PKG_INSTALL_DIR)/usr/lib/libpostproc.so.* $(1)/usr/lib/
|
|
endif
|
|
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,ffmpeg-custom))
|
|
$(eval $(call BuildPackage,ffprobe-custom))
|
|
$(eval $(call BuildPackage,ffserver-custom))
|
|
$(eval $(call BuildPackage,libffmpeg-audio-dec))
|
|
$(eval $(call BuildPackage,libffmpeg-full))
|
|
$(eval $(call BuildPackage,libffmpeg-mini))
|
|
$(eval $(call BuildPackage,libffmpeg-custom))
|