################################################################################ # # ffmpeg # ################################################################################ FFMPEG_VERSION = 4.2 FFMPEG_SOURCE = ffmpeg-$(FFMPEG_VERSION).tar.xz FFMPEG_SITE = http://ffmpeg.org/releases FFMPEG_INSTALL_STAGING = YES FFMPEG_LICENSE = LGPL-2.1+, libjpeg license FFMPEG_LICENSE_FILES = LICENSE.md COPYING.LGPLv2.1 ifeq ($(BR2_PACKAGE_FFMPEG_GPL),y) FFMPEG_LICENSE += and GPL-2.0+ FFMPEG_LICENSE_FILES += COPYING.GPLv2 endif FFMPEG_CONF_OPTS = \ --prefix=/usr \ --enable-avfilter \ --disable-version3 \ --enable-logging \ --enable-optimizations \ --disable-extra-warnings \ --enable-avdevice \ --enable-avcodec \ --enable-avformat \ --enable-network \ --disable-gray \ --enable-swscale-alpha \ --disable-small \ --enable-dct \ --enable-fft \ --enable-mdct \ --enable-rdft \ --disable-crystalhd \ --disable-dxva2 \ --enable-runtime-cpudetect \ --disable-hardcoded-tables \ --disable-mipsdsp \ --disable-mipsdspr2 \ --disable-msa \ --enable-hwaccels \ --disable-cuda \ --disable-cuvid \ --disable-nvenc \ --disable-avisynth \ --disable-frei0r \ --disable-libopencore-amrnb \ --disable-libopencore-amrwb \ --disable-libdc1394 \ --disable-libgsm \ --disable-libilbc \ --disable-libvo-amrwbenc \ --disable-symver \ --disable-doc FFMPEG_DEPENDENCIES += host-pkgconf ifeq ($(BR2_PACKAGE_FFMPEG_GPL),y) FFMPEG_CONF_OPTS += --enable-gpl else FFMPEG_CONF_OPTS += --disable-gpl endif ifeq ($(BR2_PACKAGE_FFMPEG_NONFREE),y) FFMPEG_CONF_OPTS += --enable-nonfree else FFMPEG_CONF_OPTS += --disable-nonfree endif ifeq ($(BR2_PACKAGE_FFMPEG_FFMPEG),y) FFMPEG_CONF_OPTS += --enable-ffmpeg else FFMPEG_CONF_OPTS += --disable-ffmpeg endif ifeq ($(BR2_PACKAGE_FFMPEG_FFPLAY),y) FFMPEG_DEPENDENCIES += sdl2 FFMPEG_CONF_OPTS += --enable-ffplay FFMPEG_CONF_ENV += SDL_CONFIG=$(STAGING_DIR)/usr/bin/sdl2-config else FFMPEG_CONF_OPTS += --disable-ffplay endif ifeq ($(BR2_PACKAGE_FFMPEG_AVRESAMPLE),y) FFMPEG_CONF_OPTS += --enable-avresample else FFMPEG_CONF_OPTS += --disable-avresample endif ifeq ($(BR2_PACKAGE_FFMPEG_FFPROBE),y) FFMPEG_CONF_OPTS += --enable-ffprobe else FFMPEG_CONF_OPTS += --disable-ffprobe endif ifeq ($(BR2_PACKAGE_FFMPEG_POSTPROC),y) FFMPEG_CONF_OPTS += --enable-postproc else FFMPEG_CONF_OPTS += --disable-postproc endif ifeq ($(BR2_PACKAGE_FFMPEG_SWSCALE),y) FFMPEG_CONF_OPTS += --enable-swscale else FFMPEG_CONF_OPTS += --disable-swscale endif ifneq ($(call qstrip,$(BR2_PACKAGE_FFMPEG_ENCODERS)),all) FFMPEG_CONF_OPTS += --disable-encoders \ $(foreach x,$(call qstrip,$(BR2_PACKAGE_FFMPEG_ENCODERS)),--enable-encoder=$(x)) endif ifneq ($(call qstrip,$(BR2_PACKAGE_FFMPEG_DECODERS)),all) FFMPEG_CONF_OPTS += --disable-decoders \ $(foreach x,$(call qstrip,$(BR2_PACKAGE_FFMPEG_DECODERS)),--enable-decoder=$(x)) endif ifneq ($(call qstrip,$(BR2_PACKAGE_FFMPEG_MUXERS)),all) FFMPEG_CONF_OPTS += --disable-muxers \ $(foreach x,$(call qstrip,$(BR2_PACKAGE_FFMPEG_MUXERS)),--enable-muxer=$(x)) endif ifneq ($(call qstrip,$(BR2_PACKAGE_FFMPEG_DEMUXERS)),all) FFMPEG_CONF_OPTS += --disable-demuxers \ $(foreach x,$(call qstrip,$(BR2_PACKAGE_FFMPEG_DEMUXERS)),--enable-demuxer=$(x)) endif ifneq ($(call qstrip,$(BR2_PACKAGE_FFMPEG_PARSERS)),all) FFMPEG_CONF_OPTS += --disable-parsers \ $(foreach x,$(call qstrip,$(BR2_PACKAGE_FFMPEG_PARSERS)),--enable-parser=$(x)) endif ifneq ($(call qstrip,$(BR2_PACKAGE_FFMPEG_BSFS)),all) FFMPEG_CONF_OPTS += --disable-bsfs \ $(foreach x,$(call qstrip,$(BR2_PACKAGE_FFMPEG_BSFS)),--enable-bsfs=$(x)) endif ifneq ($(call qstrip,$(BR2_PACKAGE_FFMPEG_PROTOCOLS)),all) FFMPEG_CONF_OPTS += --disable-protocols \ $(foreach x,$(call qstrip,$(BR2_PACKAGE_FFMPEG_PROTOCOLS)),--enable-protocol=$(x)) endif ifneq ($(call qstrip,$(BR2_PACKAGE_FFMPEG_FILTERS)),all) FFMPEG_CONF_OPTS += --disable-filters \ $(foreach x,$(call qstrip,$(BR2_PACKAGE_FFMPEG_FILTERS)),--enable-filter=$(x)) endif ifeq ($(BR2_PACKAGE_FFMPEG_INDEVS),y) FFMPEG_CONF_OPTS += --enable-indevs ifeq ($(BR2_PACKAGE_ALSA_LIB),y) FFMPEG_CONF_OPTS += --enable-alsa FFMPEG_DEPENDENCIES += alsa-lib else FFMPEG_CONF_OPTS += --disable-alsa endif else FFMPEG_CONF_OPTS += --disable-indevs endif ifeq ($(BR2_PACKAGE_FFMPEG_OUTDEVS),y) FFMPEG_CONF_OPTS += --enable-outdevs ifeq ($(BR2_PACKAGE_ALSA_LIB),y) FFMPEG_DEPENDENCIES += alsa-lib endif else FFMPEG_CONF_OPTS += --disable-outdevs endif ifeq ($(BR2_TOOLCHAIN_HAS_THREADS),y) FFMPEG_CONF_OPTS += --enable-pthreads else FFMPEG_CONF_OPTS += --disable-pthreads endif ifeq ($(BR2_PACKAGE_ZLIB),y) FFMPEG_CONF_OPTS += --enable-zlib FFMPEG_DEPENDENCIES += zlib else FFMPEG_CONF_OPTS += --disable-zlib endif ifeq ($(BR2_PACKAGE_BZIP2),y) FFMPEG_CONF_OPTS += --enable-bzlib FFMPEG_DEPENDENCIES += bzip2 else FFMPEG_CONF_OPTS += --disable-bzlib endif ifeq ($(BR2_PACKAGE_FDK_AAC)$(BR2_PACKAGE_FFMPEG_NONFREE),yy) FFMPEG_CONF_OPTS += --enable-libfdk-aac FFMPEG_DEPENDENCIES += fdk-aac else FFMPEG_CONF_OPTS += --disable-libfdk-aac endif ifeq ($(BR2_PACKAGE_FFMPEG_GPL)$(BR2_PACKAGE_LIBCDIO_PARANOIA),yy) FFMPEG_CONF_OPTS += --enable-libcdio FFMPEG_DEPENDENCIES += libcdio-paranoia else FFMPEG_CONF_OPTS += --disable-libcdio endif ifeq ($(BR2_PACKAGE_GNUTLS),y) FFMPEG_CONF_OPTS += --enable-gnutls --disable-openssl FFMPEG_DEPENDENCIES += gnutls else FFMPEG_CONF_OPTS += --disable-gnutls ifeq ($(BR2_PACKAGE_OPENSSL),y) # openssl isn't license compatible with GPL ifeq ($(BR2_PACKAGE_FFMPEG_GPL)x$(BR2_PACKAGE_FFMPEG_NONFREE),yx) FFMPEG_CONF_OPTS += --disable-openssl else FFMPEG_CONF_OPTS += --enable-openssl FFMPEG_DEPENDENCIES += openssl endif else FFMPEG_CONF_OPTS += --disable-openssl endif endif ifeq ($(BR2_PACKAGE_FFMPEG_GPL)$(BR2_PACKAGE_LIBEBUR128),yy) FFMPEG_DEPENDENCIES += libebur128 endif ifeq ($(BR2_PACKAGE_LIBDRM),y) FFMPEG_CONF_OPTS += --enable-libdrm FFMPEG_DEPENDENCIES += libdrm else FFMPEG_CONF_OPTS += --disable-libdrm endif ifeq ($(BR2_PACKAGE_LIBOPENH264),y) FFMPEG_CONF_OPTS += --enable-libopenh264 FFMPEG_DEPENDENCIES += libopenh264 else FFMPEG_CONF_OPTS += --disable-libopenh264 endif ifeq ($(BR2_PACKAGE_LIBVORBIS),y) FFMPEG_DEPENDENCIES += libvorbis FFMPEG_CONF_OPTS += \ --enable-libvorbis \ --enable-muxer=ogg \ --enable-encoder=libvorbis endif ifeq ($(BR2_PACKAGE_LIBVA),y) FFMPEG_CONF_OPTS += --enable-vaapi FFMPEG_DEPENDENCIES += libva else FFMPEG_CONF_OPTS += --disable-vaapi endif ifeq ($(BR2_PACKAGE_LIBVDPAU),y) FFMPEG_CONF_OPTS += --enable-vdpau FFMPEG_DEPENDENCIES += libvdpau else FFMPEG_CONF_OPTS += --disable-vdpau endif ifeq ($(BR2_PACKAGE_RPI_USERLAND),y) FFMPEG_CONF_OPTS += --enable-mmal --enable-omx --enable-omx-rpi \ --extra-cflags=-I$(STAGING_DIR)/usr/include/IL FFMPEG_DEPENDENCIES += rpi-userland else FFMPEG_CONF_OPTS += --disable-mmal --disable-omx --disable-omx-rpi endif # To avoid a circular dependency only use opencv if opencv itself does # not depend on ffmpeg. ifeq ($(BR2_PACKAGE_OPENCV_LIB_IMGPROC)x$(BR2_PACKAGE_OPENCV_WITH_FFMPEG),yx) FFMPEG_CONF_OPTS += --enable-libopencv FFMPEG_DEPENDENCIES += opencv else ifeq ($(BR2_PACKAGE_OPENCV3_LIB_IMGPROC)x$(BR2_PACKAGE_OPENCV3_WITH_FFMPEG),yx) FFMPEG_CONF_OPTS += --enable-libopencv FFMPEG_DEPENDENCIES += opencv3 else FFMPEG_CONF_OPTS += --disable-libopencv endif ifeq ($(BR2_PACKAGE_OPUS),y) FFMPEG_CONF_OPTS += --enable-libopus FFMPEG_DEPENDENCIES += opus else FFMPEG_CONF_OPTS += --disable-libopus endif ifeq ($(BR2_PACKAGE_LIBVPX),y) FFMPEG_CONF_OPTS += --enable-libvpx FFMPEG_DEPENDENCIES += libvpx else FFMPEG_CONF_OPTS += --disable-libvpx endif ifeq ($(BR2_PACKAGE_LIBASS),y) FFMPEG_CONF_OPTS += --enable-libass FFMPEG_DEPENDENCIES += libass else FFMPEG_CONF_OPTS += --disable-libass endif ifeq ($(BR2_PACKAGE_LIBBLURAY),y) FFMPEG_CONF_OPTS += --enable-libbluray FFMPEG_DEPENDENCIES += libbluray else FFMPEG_CONF_OPTS += --disable-libbluray endif ifeq ($(BR2_PACKAGE_INTEL_MEDIASDK),y) FFMPEG_CONF_OPTS += --enable-libmfx FFMPEG_DEPENDENCIES += intel-mediasdk else FFMPEG_CONF_OPTS += --disable-libmfx endif ifeq ($(BR2_PACKAGE_RTMPDUMP),y) FFMPEG_CONF_OPTS += --enable-librtmp FFMPEG_DEPENDENCIES += rtmpdump else FFMPEG_CONF_OPTS += --disable-librtmp endif ifeq ($(BR2_PACKAGE_LAME),y) FFMPEG_CONF_OPTS += --enable-libmp3lame FFMPEG_DEPENDENCIES += lame else FFMPEG_CONF_OPTS += --disable-libmp3lame endif ifeq ($(BR2_PACKAGE_LIBMODPLUG),y) FFMPEG_CONF_OPTS += --enable-libmodplug FFMPEG_DEPENDENCIES += libmodplug else FFMPEG_CONF_OPTS += --disable-libmodplug endif ifeq ($(BR2_PACKAGE_SPEEX),y) FFMPEG_CONF_OPTS += --enable-libspeex FFMPEG_DEPENDENCIES += speex else FFMPEG_CONF_OPTS += --disable-libspeex endif ifeq ($(BR2_PACKAGE_LIBTHEORA),y) FFMPEG_CONF_OPTS += --enable-libtheora FFMPEG_DEPENDENCIES += libtheora else FFMPEG_CONF_OPTS += --disable-libtheora endif ifeq ($(BR2_PACKAGE_WAVPACK),y) FFMPEG_CONF_OPTS += --enable-libwavpack FFMPEG_DEPENDENCIES += wavpack else FFMPEG_CONF_OPTS += --disable-libwavpack endif ifeq ($(BR2_PACKAGE_LIBICONV),y) FFMPEG_CONF_OPTS += --enable-iconv FFMPEG_DEPENDENCIES += libiconv else FFMPEG_CONF_OPTS += --disable-iconv endif # ffmpeg freetype support require fenv.h which is only # available/working on glibc. # The microblaze variant doesn't provide the needed exceptions ifeq ($(BR2_PACKAGE_FREETYPE)$(BR2_TOOLCHAIN_USES_GLIBC)x$(BR2_microblaze),yyx) FFMPEG_CONF_OPTS += --enable-libfreetype FFMPEG_DEPENDENCIES += freetype else FFMPEG_CONF_OPTS += --disable-libfreetype endif ifeq ($(BR2_PACKAGE_FONTCONFIG),y) FFMPEG_CONF_OPTS += --enable-fontconfig FFMPEG_DEPENDENCIES += fontconfig else FFMPEG_CONF_OPTS += --disable-fontconfig endif ifeq ($(BR2_PACKAGE_OPENJPEG),y) FFMPEG_CONF_OPTS += --enable-libopenjpeg FFMPEG_DEPENDENCIES += openjpeg else FFMPEG_CONF_OPTS += --disable-libopenjpeg endif ifeq ($(BR2_PACKAGE_X264)$(BR2_PACKAGE_FFMPEG_GPL),yy) FFMPEG_CONF_OPTS += --enable-libx264 FFMPEG_DEPENDENCIES += x264 else FFMPEG_CONF_OPTS += --disable-libx264 endif ifeq ($(BR2_PACKAGE_X265)$(BR2_PACKAGE_FFMPEG_GPL),yy) FFMPEG_CONF_OPTS += --enable-libx265 FFMPEG_DEPENDENCIES += x265 else FFMPEG_CONF_OPTS += --disable-libx265 endif ifeq ($(BR2_X86_CPU_HAS_MMX),y) FFMPEG_CONF_OPTS += --enable-x86asm FFMPEG_DEPENDENCIES += host-nasm else FFMPEG_CONF_OPTS += --disable-x86asm FFMPEG_CONF_OPTS += --disable-mmx endif ifeq ($(BR2_X86_CPU_HAS_SSE),y) FFMPEG_CONF_OPTS += --enable-sse else FFMPEG_CONF_OPTS += --disable-sse endif ifeq ($(BR2_X86_CPU_HAS_SSE2),y) FFMPEG_CONF_OPTS += --enable-sse2 else FFMPEG_CONF_OPTS += --disable-sse2 endif ifeq ($(BR2_X86_CPU_HAS_SSE3),y) FFMPEG_CONF_OPTS += --enable-sse3 else FFMPEG_CONF_OPTS += --disable-sse3 endif ifeq ($(BR2_X86_CPU_HAS_SSSE3),y) FFMPEG_CONF_OPTS += --enable-ssse3 else FFMPEG_CONF_OPTS += --disable-ssse3 endif ifeq ($(BR2_X86_CPU_HAS_SSE4),y) FFMPEG_CONF_OPTS += --enable-sse4 else FFMPEG_CONF_OPTS += --disable-sse4 endif ifeq ($(BR2_X86_CPU_HAS_SSE42),y) FFMPEG_CONF_OPTS += --enable-sse42 else FFMPEG_CONF_OPTS += --disable-sse42 endif ifeq ($(BR2_X86_CPU_HAS_AVX),y) FFMPEG_CONF_OPTS += --enable-avx else FFMPEG_CONF_OPTS += --disable-avx endif ifeq ($(BR2_X86_CPU_HAS_AVX2),y) FFMPEG_CONF_OPTS += --enable-avx2 else FFMPEG_CONF_OPTS += --disable-avx2 endif # Explicitly disable everything that doesn't match for ARM # FFMPEG "autodetects" by compiling an extended instruction via AS # This works on compilers that aren't built for generic by default ifeq ($(BR2_ARM_CPU_ARMV4),y) FFMPEG_CONF_OPTS += --disable-armv5te endif ifeq ($(BR2_ARM_CPU_ARMV6)$(BR2_ARM_CPU_ARMV7A),y) FFMPEG_CONF_OPTS += --enable-armv6 else FFMPEG_CONF_OPTS += --disable-armv6 --disable-armv6t2 endif ifeq ($(BR2_ARM_CPU_HAS_VFPV2),y) FFMPEG_CONF_OPTS += --enable-vfp else FFMPEG_CONF_OPTS += --disable-vfp endif ifeq ($(BR2_ARM_CPU_HAS_NEON),y) FFMPEG_CONF_OPTS += --enable-neon else ifeq ($(BR2_aarch64),y) FFMPEG_CONF_OPTS += --enable-neon else FFMPEG_CONF_OPTS += --disable-neon endif ifeq ($(BR2_mips)$(BR2_mipsel)$(BR2_mips64)$(BR2_mips64el),y) ifeq ($(BR2_MIPS_SOFT_FLOAT),y) FFMPEG_CONF_OPTS += --disable-mipsfpu else FFMPEG_CONF_OPTS += --enable-mipsfpu endif # Fix build failure on "addi opcode not supported" ifeq ($(BR2_mips_32r6)$(BR2_mips_64r6),y) FFMPEG_CONF_OPTS += --disable-asm endif endif # MIPS ifeq ($(BR2_POWERPC_CPU_HAS_ALTIVEC),y) FFMPEG_CONF_OPTS += --enable-altivec else FFMPEG_CONF_OPTS += --disable-altivec endif # Uses __atomic_fetch_add_4 ifeq ($(BR2_TOOLCHAIN_HAS_LIBATOMIC),y) FFMPEG_CONF_OPTS += --extra-libs=-latomic endif ifeq ($(BR2_STATIC_LIBS),) FFMPEG_CONF_OPTS += --enable-pic else FFMPEG_CONF_OPTS += --disable-pic endif # Default to --cpu=generic for MIPS architecture, in order to avoid a # warning from ffmpeg's configure script. ifeq ($(BR2_mips)$(BR2_mipsel)$(BR2_mips64)$(BR2_mips64el),y) FFMPEG_CONF_OPTS += --cpu=generic else ifneq ($(GCC_TARGET_CPU),) FFMPEG_CONF_OPTS += --cpu="$(GCC_TARGET_CPU)" else ifneq ($(GCC_TARGET_ARCH),) FFMPEG_CONF_OPTS += --cpu="$(GCC_TARGET_ARCH)" endif FFMPEG_CFLAGS = $(TARGET_CFLAGS) ifeq ($(BR2_TOOLCHAIN_HAS_GCC_BUG_85180),y) FFMPEG_CONF_OPTS += --disable-optimizations FFMPEG_CFLAGS += -O0 endif FFMPEG_CONF_ENV += CFLAGS="$(FFMPEG_CFLAGS)" FFMPEG_CONF_OPTS += $(call qstrip,$(BR2_PACKAGE_FFMPEG_EXTRACONF)) # Override FFMPEG_CONFIGURE_CMDS: FFmpeg does not support --target and others define FFMPEG_CONFIGURE_CMDS (cd $(FFMPEG_SRCDIR) && rm -rf config.cache && \ $(TARGET_CONFIGURE_OPTS) \ $(TARGET_CONFIGURE_ARGS) \ $(FFMPEG_CONF_ENV) \ ./configure \ --enable-cross-compile \ --cross-prefix=$(TARGET_CROSS) \ --sysroot=$(STAGING_DIR) \ --host-cc="$(HOSTCC)" \ --arch=$(BR2_ARCH) \ --target-os="linux" \ --disable-stripping \ --pkg-config="$(PKG_CONFIG_HOST_BINARY)" \ $(SHARED_STATIC_LIBS_OPTS) \ $(FFMPEG_CONF_OPTS) \ ) endef define FFMPEG_REMOVE_EXAMPLE_SRC_FILES rm -rf $(TARGET_DIR)/usr/share/ffmpeg/examples endef FFMPEG_POST_INSTALL_TARGET_HOOKS += FFMPEG_REMOVE_EXAMPLE_SRC_FILES $(eval $(autotools-package))