unexport CFLAGS
unexport LDFLAGS
-# ###########################################################################
+
+# ##############################################################################
# Upstream Packages
-# ###########################################################################
-
-FFMPEG = ffmpeg-2.8.5
-FFMPEG_TB = $(FFMPEG).tar.bz2
-FFMPEG_URL = http://ffmpeg.org/releases/$(FFMPEG_TB)
-FFMPEG_SHA1 = 74f82c0bdaada050ada9010ecb574fb02d434c00
-FFMPEG_DIFFS =
-
-EXTLIBS = libx264 libvorbis libvpx
-COMPONENTS = avutil avformat avcodec swresample swscale avfilter avresample
-PROTOCOLS = file
-DECODERS = mpeg2video mp2 ac3 eac3 h264 h264_vdpau hevc aac aac_latm vorbis libvorbis
-ENCODERS = mpeg2video mp2 libx264 libvpx_vp8 libvpx_vp9 aac libaacplus vorbis libvorbis
-MUXERS = mpegts mpeg2dvd matroska webm mp4
-BSFS = h264_mp4toannexb hevc_mp4toannexb
-FILTERS = yadif scale
-
-LIBOGG = libogg-1.3.2
-LIBOGG_TB = $(LIBOGG).tar.gz
-LIBOGG_URL = http://downloads.xiph.org/releases/ogg/$(LIBOGG_TB)
-LIBOGG_SHA1 = df7f3977bbeda67306bc2a427257dd7375319d7d
-
-LIBVORBIS = libvorbis-1.3.5
-LIBVORBIS_TB = $(LIBVORBIS).tar.gz
-LIBVORBIS_URL = http://downloads.xiph.org/releases/vorbis/$(LIBVORBIS_TB)
-LIBVORBIS_SHA1 = 10c7fee173178d72855aa7593dfe49d9b3d6c804
-
-LIBX264 = x264-snapshot-20160217-2245
-LIBX264_TB = $(LIBX264).tar.bz2
-LIBX264_URL = http://ftp.via.ecp.fr/pub/videolan/x264/snapshots/$(LIBX264_TB)
-LIBX264_SHA1 = e3b9d6f3372c9052fac3bffe7175518bb269a359
-
-LIBX265 = x265_1.9
-LIBX265_TB = $(LIBX265).tar.gz
-LIBX265_URL = http://ftp.videolan.org/pub/videolan/x265/$(LIBX265_TB)
-LIBX265_SHA1 = 8c9aa3b87b0f0a418bbb9782e9354d112d75e003
-
-LIBVPX = libvpx-1.5.0
-LIBVPX_TB = $(LIBVPX).tar.bz2
-LIBVPX_URL = http://storage.googleapis.com/downloads.webmproject.org/releases/webm/$(LIBVPX_TB)
-LIBVPX_SHA1 = 0baf76627eb08450eaf307347d1721f56a880c64
-
-YASM = yasm-1.3.0
-YASM_TB = $(YASM).tar.gz
-YASM_URL = http://www.tortall.net/projects/yasm/releases/$(YASM_TB)
-YASM_SHA1 = b7574e9f0826bedef975d64d3825f75fbaeef55e
-
-LIBMFX_HASH = 8220f463a97b098d9e37bbfa2110b117700d1205
-LIBMFX = mfx_dispatch-$(LIBMFX_HASH)
-LIBMFX_TB = $(LIBMFX_HASH).tar.gz
-LIBMFX_URL = https://github.com/lu-zero/mfx_dispatch/archive/$(LIBMFX_TB)
-LIBMFX_SHA1 = e7905a4e18f8d3933f23ed5cf5a96a40a31c76a8
-
-# ###########################################################################
+# ##############################################################################
+
+EXTLIBS =
+COMPONENTS = avutil avcodec avformat swscale avresample swresample avfilter
+PROTOCOLS = file
+DECODERS = mpeg2video mp2 aac vorbis ac3 eac3 aac_latm h264 hevc
+ENCODERS = mpeg2video mp2 aac vorbis
+MUXERS = mpegts mpeg2dvd matroska webm mp4
+BSFS = h264_mp4toannexb hevc_mp4toannexb
+FILTERS = yadif scale null aresample anull
+
+YASM = yasm-1.3.0
+YASM_TB = $(YASM).tar.gz
+YASM_URL = http://www.tortall.net/projects/yasm/releases/$(YASM_TB)
+YASM_SHA1 = b7574e9f0826bedef975d64d3825f75fbaeef55e
+
+LIBX264 = x264-snapshot-20160217-2245
+LIBX264_TB = $(LIBX264).tar.bz2
+LIBX264_URL = http://ftp.via.ecp.fr/pub/videolan/x264/snapshots/$(LIBX264_TB)
+LIBX264_SHA1 = e3b9d6f3372c9052fac3bffe7175518bb269a359
+LIBX264_DIFFS = libx264.configure.diff
+
+LIBX265 = x265_1.9
+LIBX265_TB = $(LIBX265).tar.gz
+LIBX265_URL = http://ftp.videolan.org/pub/videolan/x265/$(LIBX265_TB)
+LIBX265_SHA1 = 8c9aa3b87b0f0a418bbb9782e9354d112d75e003
+
+LIBVPX = libvpx-1.5.0
+LIBVPX_TB = $(LIBVPX).tar.bz2
+LIBVPX_URL = http://storage.googleapis.com/downloads.webmproject.org/releases/webm/$(LIBVPX_TB)
+LIBVPX_SHA1 = 0baf76627eb08450eaf307347d1721f56a880c64
+
+LIBOGG = libogg-1.3.2
+LIBOGG_TB = $(LIBOGG).tar.gz
+LIBOGG_URL = http://downloads.xiph.org/releases/ogg/$(LIBOGG_TB)
+LIBOGG_SHA1 = df7f3977bbeda67306bc2a427257dd7375319d7d
+
+LIBTHEORA = libtheora-1.1.1
+LIBTHEORA_TB = $(LIBTHEORA).tar.gz
+LIBTHEORA_URL = http://downloads.xiph.org/releases/theora/$(LIBTHEORA_TB)
+LIBTHEORA_SHA1 = 0b91be522746a29351a5ee592fd8160940059303
+
+LIBVORBIS = libvorbis-1.3.5
+LIBVORBIS_TB = $(LIBVORBIS).tar.gz
+LIBVORBIS_URL = http://downloads.xiph.org/releases/vorbis/$(LIBVORBIS_TB)
+LIBVORBIS_SHA1 = 10c7fee173178d72855aa7593dfe49d9b3d6c804
+
+LIBFDKAAC = fdk-aac-0.1.4
+LIBFDKAAC_TB = $(LIBFDKAAC).tar.gz
+LIBFDKAAC_URL = http://sourceforge.net/projects/opencore-amr/files/fdk-aac/$(LIBFDKAAC_TB)
+LIBFDKAAC_SHA1 = 9215d19bdd911954fd5bc879c707ab571716ba0d
+
+LIBMFX_HASH = 9f4a84d73fb73d430f07a80cea3688c424439f6a
+LIBMFX = mfx_dispatch-$(LIBMFX_HASH)
+LIBMFX_TB = $(LIBMFX_HASH).tar.gz
+LIBMFX_URL = https://github.com/lu-zero/mfx_dispatch/archive/$(LIBMFX_TB)
+LIBMFX_SHA1 = 84dbdf4a6b409067e863eb9564bb2efdec6d39ce
+LIBMFX_DIFFS = libmfx.linux.path.diff
+
+FFMPEG = ffmpeg-3.0
+FFMPEG_TB = $(FFMPEG).tar.bz2
+FFMPEG_URL = http://ffmpeg.org/releases/$(FFMPEG_TB)
+FFMPEG_SHA1 = daa827a8d1b7d5be418087165a55bdad5197f9d5
+
+
+# ##############################################################################
# Library Config
-# ###########################################################################
+# ##############################################################################
LIB_NAME := ffmpeg
LIB_ROOT := $(BUILDDIR)/$(LIB_NAME)
-LIB_FILES :=\
- $(LIB_ROOT)/$(FFMPEG)/.tvh_download \
- $(LIB_ROOT)/$(FFMPEG)/.tvh_build \
- $(LIB_ROOT)/$(LIBOGG)/.tvh_download \
- $(LIB_ROOT)/$(LIBOGG)/.tvh_build \
- $(LIB_ROOT)/$(LIBVORBIS)/.tvh_download \
- $(LIB_ROOT)/$(LIBVORBIS)/.tvh_build \
+LIB_FILES := \
+ $(LIB_ROOT)/$(YASM)/.tvh_download \
+ $(LIB_ROOT)/$(YASM)/.tvh_build \
$(LIB_ROOT)/$(LIBX264)/.tvh_download \
$(LIB_ROOT)/$(LIBX264)/.tvh_build \
$(LIB_ROOT)/$(LIBX265)/.tvh_download \
$(LIB_ROOT)/$(LIBX265)/.tvh_build \
$(LIB_ROOT)/$(LIBVPX)/.tvh_download \
$(LIB_ROOT)/$(LIBVPX)/.tvh_build \
- $(LIB_ROOT)/$(YASM)/.tvh_download \
- $(LIB_ROOT)/$(YASM)/.tvh_build \
+ $(LIB_ROOT)/$(LIBOGG)/.tvh_download \
+ $(LIB_ROOT)/$(LIBOGG)/.tvh_build \
+ $(LIB_ROOT)/$(LIBTHEORA)/.tvh_download \
+ $(LIB_ROOT)/$(LIBTHEORA)/.tvh_build \
+ $(LIB_ROOT)/$(LIBVORBIS)/.tvh_download \
+ $(LIB_ROOT)/$(LIBVORBIS)/.tvh_build \
+ $(LIB_ROOT)/$(LIBFDKAAC)/.tvh_download \
+ $(LIB_ROOT)/$(LIBFDKAAC)/.tvh_build \
$(LIB_ROOT)/$(LIBMFX)/.tvh_download \
$(LIB_ROOT)/$(LIBMFX)/.tvh_build \
+ $(LIB_ROOT)/$(FFMPEG)/.tvh_download \
+ $(LIB_ROOT)/$(FFMPEG)/.tvh_build \
$(LIB_ROOT)/build/ffmpeg/lib/*.a \
$(LIB_ROOT)/build/ffmpeg/include/*
.PHONY: build $(PHONY)
build: $(LIB_ROOT)/$(FFMPEG)/.tvh_build
-# ###########################################################################
+
+# ##############################################################################
# Build Rules
-# ###########################################################################
+# ##############################################################################
export PATH := $(LIB_ROOT)/build/ffmpeg/bin:$(PATH)
-ECFLAGS = -I$(LIB_ROOT)/build/ffmpeg/include
-ELIBS = -L$(LIB_ROOT)/build/ffmpeg/lib -ldl
+EBUILDIR := $(LIB_ROOT)/build
+EPREFIX := $(EBUILDIR)/ffmpeg
+ECFLAGS := -I$(EPREFIX)/include
+ELIBS := -L$(EPREFIX)/lib -ldl
-EXTRAENV =
-CONFIGURE = TVHEADEND_LIBAV_BUILD=$(LIB_ROOT)/build/ffmpeg \
- PKG_CONFIG=$(ROOTDIR)/support/pkg-config.ffmpeg ./configure
+CONFIGURE := FFMPEG_PREFIX=$(EPREFIX) \
+ PKG_CONFIG=$(ROOTDIR)/support/pkg-config.ffmpeg \
+ ./configure --prefix=/ffmpeg --enable-static --disable-shared
-#
+
+# ##############################################################################
# YASM
#
@touch $@
$(LIB_ROOT)/$(YASM)/.tvh_build: \
- $(LIB_ROOT)/$(YASM)/.tvh_download
- cd $(LIB_ROOT)/$(YASM) && $(CONFIGURE) \
- --prefix=/ffmpeg
- DESTDIR=$(LIB_ROOT)/build \
+ $(LIB_ROOT)/$(YASM)/.tvh_download
+ cd $(LIB_ROOT)/$(YASM) && $(CONFIGURE)
+ DESTDIR=$(EBUILDIR) \
$(MAKE) -C $(LIB_ROOT)/$(YASM) install
@touch $@
+
+# ##############################################################################
+# LIBX264
#
-# VDPAU library
-#
-ifeq (yes,$(CONFIG_VDPAU))
+ifeq (yes,$(CONFIG_LIBX264))
+
+EXTLIBS += libx264
+ENCODERS += libx264
+
+endif
-EXTRAARG += --enable-vdpau
-DECODERS += h264_vdpau
+ifeq (yes,$(CONFIG_LIBX264_STATIC))
+ifneq (,$(DEB_BUILD_GNU_TYPE))
+LIBX264_HOST := --host=$(DEB_BUILD_GNU_TYPE)
endif
-#
-# NVENC
-#
+$(LIB_ROOT)/$(LIBX264)/.tvh_download:
+ $(call DOWNLOAD,$(LIBX264_URL),$(LIB_ROOT)/$(LIBX264_TB),$(LIBX264_SHA1))
+ $(call UNTAR,$(LIBX264_TB),j)
+ $(call PATCH,$(LIBX264),$(LIBX264_DIFFS))
+ @touch $@
-ifeq (yes,$(CONFIG_NVENC))
+$(LIB_ROOT)/$(LIBX264)/.tvh_build: \
+ $(LIB_ROOT)/$(YASM)/.tvh_build \
+ $(LIB_ROOT)/$(FFMPEG)/.tvh_tmp \
+ $(LIB_ROOT)/$(LIBX264)/.tvh_download
+ cd $(LIB_ROOT)/$(LIBX264) && $(CONFIGURE) \
+ --disable-avs \
+ --disable-ffms \
+ --disable-gpac \
+ --disable-lsmash \
+ $(LIBX264_HOST)
+ DESTDIR=$(EBUILDIR) \
+ $(MAKE) -C $(LIB_ROOT)/$(LIBX264) install
+ @touch $@
-EXTRAARG += --enable-nvenc --enable-nonfree
+else
-ENCODERS += nvenc_h264 nvenc_hevc
+$(LIB_ROOT)/$(LIBX264)/.tvh_download:
+ @mkdir -p $(LIB_ROOT)/$(LIBX264)
+ @touch $@
+
+$(LIB_ROOT)/$(LIBX264)/.tvh_build: \
+ $(LIB_ROOT)/$(LIBX264)/.tvh_download
+ @touch $@
endif
-#
-# MFX Dispatcher (libmfx)
-#
-ifeq (yes,$(CONFIG_LIBMFX))
+# ##############################################################################
+# LIBX265
+#
-EXTLIBS += libmfx
+ifeq (yes,$(CONFIG_LIBX265))
-DECODERS += mpeg2_qsv h264_qsv hevc_qsv
-ENCODERS += mpeg2_qsv h264_qsv hevc_qsv
+EXTLIBS += libx265
+ENCODERS += libx265
-ELIBS += -lva
-ifeq ($(CONFIG_VA_DRM),yes)
-ELIBS += -lva-drm
-endif
-ifeq ($(CONFIG_VA_X11),yes)
-ELIBS += -lva-x11
endif
-endif
-ifeq (yes,$(CONFIG_LIBMFX_STATIC))
+ifeq (yes,$(CONFIG_LIBX265_STATIC))
-$(LIB_ROOT)/$(LIBMFX)/.tvh_download:
- $(call DOWNLOAD,$(LIBMFX_URL),$(LIB_ROOT)/$(LIBMFX_TB),$(LIBMFX_SHA1))
- $(call UNTAR,$(LIBMFX_TB),z)
+$(LIB_ROOT)/$(LIBX265)/.tvh_download:
+ $(call DOWNLOAD,$(LIBX265_URL),$(LIB_ROOT)/$(LIBX265_TB),$(LIBX265_SHA1))
+ $(call UNTAR,$(LIBX265_TB),z)
@touch $@
-$(LIB_ROOT)/$(LIBMFX)/.tvh_build: \
- $(LIB_ROOT)/$(LIBMFX)/.tvh_download
- cd $(LIB_ROOT)/$(LIBMFX) && autoreconf -i
- cd $(LIB_ROOT)/$(LIBMFX) && ./configure \
- --prefix=/ffmpeg \
- --enable-static \
- --disable-shared
- DESTDIR=$(LIB_ROOT)/build \
- $(MAKE) -C $(LIB_ROOT)/$(LIBMFX) install
+$(LIB_ROOT)/$(LIBX265)/.tvh_build: \
+ $(LIB_ROOT)/$(YASM)/.tvh_build \
+ $(LIB_ROOT)/$(LIBX265)/.tvh_download
+ cd $(LIB_ROOT)/$(LIBX265)/build/linux && cmake -G "Unix Makefiles" \
+ -DCMAKE_INSTALL_PREFIX="/ffmpeg" \
+ -DENABLE_SHARED:BOOL=OFF \
+ ../../source
+ DESTDIR=$(EBUILDIR) \
+ $(MAKE) -C $(LIB_ROOT)/$(LIBX265)/build/linux install
@touch $@
else
-LIBMFX_CFLAGS = $(shell $(PKG_CONFIG) --cflags libmfx)
-LIBMFX_LIBS = $(shell $(PKG_CONFIG) --libs libmfx)
+$(LIB_ROOT)/$(LIBX265)/.tvh_download:
+ @mkdir -p $(LIB_ROOT)/$(LIBX265)
+ @touch $@
+
+$(LIB_ROOT)/$(LIBX265)/.tvh_build: \
+ $(LIB_ROOT)/$(LIBX265)/.tvh_download
+ @touch $@
-EXTRAENV += TVHEADEND_LIBMFX_CFLAGS="$(LIBMFX_CFLAGS)" TVHEADEND_LIBMFX_LIBS="$(LIBMFX_LIBS)"
+endif
-$(LIB_ROOT)/$(LIBMFX)/.tvh_download:
- @mkdir -p $(LIB_ROOT)/$(LIBMFX)
+
+# ##############################################################################
+# LIBVPX
+#
+
+ifeq (yes,$(CONFIG_LIBVPX))
+
+EXTLIBS += libvpx
+ENCODERS += libvpx_vp8 libvpx_vp9
+
+endif
+
+
+ifeq (yes,$(CONFIG_LIBVPX_STATIC))
+
+$(LIB_ROOT)/$(LIBVPX)/.tvh_download:
+ $(call DOWNLOAD,$(LIBVPX_URL),$(LIB_ROOT)/$(LIBVPX_TB),$(LIBVPX_SHA1))
+ $(call UNTAR,$(LIBVPX_TB),j)
@touch $@
-$(LIB_ROOT)/$(LIBMFX)/.tvh_build: \
- $(LIB_ROOT)/$(LIBMFX)/.tvh_download
+$(LIB_ROOT)/$(LIBVPX)/.tvh_build: \
+ $(LIB_ROOT)/$(YASM)/.tvh_build \
+ $(LIB_ROOT)/$(LIBVPX)/.tvh_download
+ cd $(LIB_ROOT)/$(LIBVPX) && $(CONFIGURE) \
+ --disable-examples \
+ --disable-docs \
+ --disable-unit-tests
+ DIST_DIR=$(EPREFIX) \
+ $(MAKE) -C $(LIB_ROOT)/$(LIBVPX) install
+ @touch $@
+
+else
+
+$(LIB_ROOT)/$(LIBVPX)/.tvh_download:
+ @mkdir -p $(LIB_ROOT)/$(LIBVPX)
+ @touch $@
+
+$(LIB_ROOT)/$(LIBVPX)/.tvh_build: \
+ $(LIB_ROOT)/$(LIBVPX)/.tvh_download
@touch $@
endif
+
+# ##############################################################################
+# LIBOGG
#
-# libogg & libvorbis
-#
+
+ifeq (yes,$(CONFIG_LIBOGG_STATIC))
$(LIB_ROOT)/$(LIBOGG)/.tvh_download:
$(call DOWNLOAD,$(LIBOGG_URL),$(LIB_ROOT)/$(LIBOGG_TB),$(LIBOGG_SHA1))
@touch $@
$(LIB_ROOT)/$(LIBOGG)/.tvh_build: \
- $(LIB_ROOT)/$(YASM)/.tvh_build \
- $(LIB_ROOT)/$(LIBOGG)/.tvh_download
- cd $(LIB_ROOT)/$(LIBOGG) && $(CONFIGURE) \
- --prefix=/ffmpeg \
- --enable-static \
- --disable-shared
- DESTDIR=$(LIB_ROOT)/build \
+ $(LIB_ROOT)/$(YASM)/.tvh_build \
+ $(LIB_ROOT)/$(LIBOGG)/.tvh_download
+ cd $(LIB_ROOT)/$(LIBOGG) && $(CONFIGURE)
+ DESTDIR=$(EBUILDIR) \
$(MAKE) -C $(LIB_ROOT)/$(LIBOGG) install
@touch $@
-$(LIB_ROOT)/$(LIBVORBIS)/.tvh_download: \
- $(LIB_ROOT)/$(LIBOGG)/.tvh_download
+endif
+
+
+# ##############################################################################
+# LIBTHEORA
+#
+
+ifeq (yes,$(CONFIG_LIBTHEORA))
+
+EXTLIBS += libtheora
+ENCODERS += libtheora
+
+endif
+
+
+ifeq (yes,$(CONFIG_LIBTHEORA_STATIC))
+
+$(LIB_ROOT)/$(LIBTHEORA)/.tvh_download:
+ $(call DOWNLOAD,$(LIBTHEORA_URL),$(LIB_ROOT)/$(LIBTHEORA_TB),$(LIBTHEORA_SHA1))
+ $(call UNTAR,$(LIBTHEORA_TB),z)
+ @touch $@
+
+$(LIB_ROOT)/$(LIBTHEORA)/.tvh_build: \
+ $(LIB_ROOT)/$(YASM)/.tvh_build \
+ $(LIB_ROOT)/$(LIBOGG)/.tvh_build \
+ $(LIB_ROOT)/$(LIBTHEORA)/.tvh_download
+ cd $(LIB_ROOT)/$(LIBTHEORA) && $(CONFIGURE) \
+ --with-ogg=$(EPREFIX) \
+ --disable-examples
+ DESTDIR=$(EBUILDIR) \
+ $(MAKE) -C $(LIB_ROOT)/$(LIBTHEORA) install
+ @touch $@
+
+else
+
+$(LIB_ROOT)/$(LIBTHEORA)/.tvh_download:
+ @mkdir -p $(LIB_ROOT)/$(LIBTHEORA)
+ @touch $@
+
+$(LIB_ROOT)/$(LIBTHEORA)/.tvh_build: \
+ $(LIB_ROOT)/$(LIBTHEORA)/.tvh_download
+ @touch $@
+
+endif
+
+
+# ##############################################################################
+# LIBVORBIS
+#
+
+ifeq (yes,$(CONFIG_LIBVORBIS))
+
+EXTLIBS += libvorbis
+DECODERS += libvorbis
+ENCODERS += libvorbis
+
+endif
+
+
+ifeq (yes,$(CONFIG_LIBVORBIS_STATIC))
+
+$(LIB_ROOT)/$(LIBVORBIS)/.tvh_download:
$(call DOWNLOAD,$(LIBVORBIS_URL),$(LIB_ROOT)/$(LIBVORBIS_TB),$(LIBVORBIS_SHA1))
$(call UNTAR,$(LIBVORBIS_TB),z)
@touch $@
$(LIB_ROOT)/$(LIBVORBIS)/.tvh_build: \
- $(LIB_ROOT)/$(LIBVORBIS)/.tvh_download \
- $(LIB_ROOT)/$(YASM)/.tvh_build \
- $(LIB_ROOT)/$(LIBOGG)/.tvh_build
+ $(LIB_ROOT)/$(YASM)/.tvh_build \
+ $(LIB_ROOT)/$(LIBOGG)/.tvh_build \
+ $(LIB_ROOT)/$(LIBVORBIS)/.tvh_download
cd $(LIB_ROOT)/$(LIBVORBIS) && $(CONFIGURE) \
- --prefix=/ffmpeg \
- --enable-static \
- --disable-shared \
- --with-ogg=$(LIB_ROOT)/build/ffmpeg
- DESTDIR=$(LIB_ROOT)/build \
+ --with-ogg=$(EPREFIX)
+ DESTDIR=$(EBUILDIR) \
$(MAKE) -C $(LIB_ROOT)/$(LIBVORBIS) install
@touch $@
-#
-# libx264
+else
+
+$(LIB_ROOT)/$(LIBVORBIS)/.tvh_download:
+ @mkdir -p $(LIB_ROOT)/$(LIBVORBIS)
+ @touch $@
+
+$(LIB_ROOT)/$(LIBVORBIS)/.tvh_build: \
+ $(LIB_ROOT)/$(LIBVORBIS)/.tvh_download
+ @touch $@
+
+endif
+
+
+# ##############################################################################
+# LIBFDKAAC
#
-ifneq (yes,$(CONFIG_LIBX264_STATIC))
+ifeq (yes,$(CONFIG_LIBFDKAAC))
-$(LIB_ROOT)/$(LIBX264)/.tvh_download:
- @echo "***** LIBX264 STATIC BUILD IS DISABLED, USING INSTALLED PACKAGE *****"
- @mkdir -p $(LIB_ROOT)/$(LIBX264)
+EXTLIBS += libfdk-aac
+ENCODERS += libfdk_aac
+
+endif
+
+
+ifeq (yes,$(CONFIG_LIBFDKAAC_STATIC))
+
+$(LIB_ROOT)/$(LIBFDKAAC)/.tvh_download:
+ $(call DOWNLOAD,$(LIBFDKAAC_URL),$(LIB_ROOT)/$(LIBFDKAAC_TB),$(LIBFDKAAC_SHA1))
+ $(call UNTAR,$(LIBFDKAAC_TB),z)
@touch $@
-$(LIB_ROOT)/$(LIBX264)/.tvh_build: $(LIB_ROOT)/$(LIBX264)/.tvh_download
+$(LIB_ROOT)/$(LIBFDKAAC)/.tvh_build: \
+ $(LIB_ROOT)/$(LIBFDKAAC)/.tvh_download
+ cd $(LIB_ROOT)/$(LIBFDKAAC) && $(CONFIGURE)
+ DESTDIR=$(EBUILDIR) \
+ $(MAKE) -C $(LIB_ROOT)/$(LIBFDKAAC) install
@touch $@
else
-ifneq (,$(DEB_BUILD_GNU_TYPE))
-LIBX264_HOST := --host=$(DEB_BUILD_GNU_TYPE)
-endif
-
-$(LIB_ROOT)/$(LIBX264)/.tvh_download:
- $(call DOWNLOAD,$(LIBX264_URL),$(LIB_ROOT)/$(LIBX264_TB),$(LIBX264_SHA1))
- #rm -rf $(LIB_ROOT)/x264-snapshot-*
- $(call UNTAR,$(LIBX264_TB),j)
- #{ ln -sf $$(basename $(LIB_ROOT)/x264-snapshot-*) $(LIB_ROOT)/$(LIBX264); }
+$(LIB_ROOT)/$(LIBFDKAAC)/.tvh_download:
+ @mkdir -p $(LIB_ROOT)/$(LIBFDKAAC)
@touch $@
-$(LIB_ROOT)/$(LIBX264)/.tvh_build: \
- $(LIB_ROOT)/$(LIBX264)/.tvh_download \
- $(LIB_ROOT)/$(YASM)/.tvh_build
- cd $(LIB_ROOT)/$(LIBX264) && $(CONFIGURE) \
- --prefix=/ffmpeg \
- --enable-static \
- --disable-shared \
- --disable-avs \
- --disable-swscale \
- --disable-lavf \
- --disable-ffms \
- --disable-gpac \
- --disable-lsmash \
- $(LIBX264_HOST)
- DESTDIR=$(LIB_ROOT)/build \
- $(MAKE) -C $(LIB_ROOT)/$(LIBX264) install
+$(LIB_ROOT)/$(LIBFDKAAC)/.tvh_build: \
+ $(LIB_ROOT)/$(LIBFDKAAC)/.tvh_download
@touch $@
endif
+
+# ##############################################################################
+# NVENC
#
-# libx265
+
+ifeq (yes,$(CONFIG_NVENC))
+
+EXTLIBS += nvenc
+ENCODERS += nvenc_h264 nvenc_hevc
+
+endif
+
+
+# ##############################################################################
+# LIBMFX
#
-ifeq (yes,$(CONFIG_LIBX265))
+ifeq (yes,$(CONFIG_QSV))
-EXTLIBS += libx265
-ENCODERS += libx265
+EXTLIBS += libmfx
+DECODERS += mpeg2_qsv h264_qsv hevc_qsv
+ENCODERS += mpeg2_qsv h264_qsv hevc_qsv
endif
-ifeq (yes,$(CONFIG_LIBX265_STATIC))
+ifeq (yes,$(CONFIG_LIBMFX_STATIC))
-$(LIB_ROOT)/$(LIBX265)/.tvh_download:
- $(call DOWNLOAD,$(LIBX265_URL),$(LIB_ROOT)/$(LIBX265_TB),$(LIBX265_SHA1))
- $(call UNTAR,$(LIBX265_TB),z)
+$(LIB_ROOT)/$(LIBMFX)/.tvh_download:
+ $(call DOWNLOAD,$(LIBMFX_URL),$(LIB_ROOT)/$(LIBMFX_TB),$(LIBMFX_SHA1))
+ $(call UNTAR,$(LIBMFX_TB),z)
+ $(call PATCH,$(LIBMFX),$(LIBMFX_DIFFS))
@touch $@
-$(LIB_ROOT)/$(LIBX265)/.tvh_build: \
- $(LIB_ROOT)/$(LIBX265)/.tvh_download \
- $(LIB_ROOT)/$(YASM)/.tvh_build
- cd $(LIB_ROOT)/$(LIBX265)/build/linux && cmake \
- -G "Unix Makefiles" \
- -DCMAKE_INSTALL_PREFIX="/ffmpeg" \
- -DENABLE_SHARED:bool=off \
- ../../source
- DESTDIR=$(LIB_ROOT)/build \
- $(MAKE) -C $(LIB_ROOT)/$(LIBX265)/build/linux install
+$(LIB_ROOT)/$(LIBMFX)/.tvh_build: \
+ $(LIB_ROOT)/$(LIBMFX)/.tvh_download
+ cd $(LIB_ROOT)/$(LIBMFX) && autoreconf -i && $(CONFIGURE) \
+ --with-libva_x11 \
+ --with-libva_drm
+ DESTDIR=$(EBUILDIR) \
+ $(MAKE) -C $(LIB_ROOT)/$(LIBMFX) install
@touch $@
else
-$(LIB_ROOT)/$(LIBX265)/.tvh_download:
- @mkdir -p $(LIB_ROOT)/$(LIBX265)
+$(LIB_ROOT)/$(LIBMFX)/.tvh_download:
+ @mkdir -p $(LIB_ROOT)/$(LIBMFX)
@touch $@
-$(LIB_ROOT)/$(LIBX265)/.tvh_build: $(LIB_ROOT)/$(LIBX265)/.tvh_download
+$(LIB_ROOT)/$(LIBMFX)/.tvh_build: \
+ $(LIB_ROOT)/$(LIBMFX)/.tvh_download
@touch $@
endif
-#
-# libvpx (VP8)
+
+# ##############################################################################
+# Misc.
#
-$(LIB_ROOT)/$(LIBVPX)/.tvh_download:
- @mkdir -p $(LIB_ROOT)
- $(call DOWNLOAD,$(LIBVPX_URL),$(LIB_ROOT)/$(LIBVPX_TB),$(LIBVPX_SHA1))
- $(call UNTAR,$(LIBVPX_TB),j)
- @touch $@
+ifneq (,$(filter yes,$(CONFIG_LIBVORBIS) $(CONFIG_LIBTHEORA)))
-$(LIB_ROOT)/$(LIBVPX)/.tvh_build: \
- $(LIB_ROOT)/$(LIBVPX)/.tvh_download \
- $(LIB_ROOT)/$(YASM)/.tvh_build
- cd $(LIB_ROOT)/$(LIBVPX) && $(CONFIGURE) \
- --prefix=/ffmpeg \
- --enable-static \
- --disable-shared
- DIST_DIR=$(LIB_ROOT)/build/ffmpeg \
- $(MAKE) -C $(LIB_ROOT)/$(LIBVPX) install
- @touch $@
+MUXERS += ogg
-#
+endif
+
+
+ifneq (,$(filter yes,$(CONFIG_NVENC) $(CONFIG_LIBFDKAAC)))
+
+EXTLIBS += nonfree
+
+endif
+
+
+# ##############################################################################
# FFMPEG
#
$(LIB_ROOT)/$(FFMPEG)/.tvh_download:
- @mkdir -p $(LIB_ROOT)/build
+ @mkdir -p $(EBUILDIR)
$(call DOWNLOAD,$(FFMPEG_URL),$(LIB_ROOT)/$(FFMPEG_TB),$(FFMPEG_SHA1))
$(call UNTAR,$(FFMPEG_TB),j)
- $(call PATCH,$(FFMPEG),$(FFMPEG_DIFFS))
+ @touch $@
+
+$(LIB_ROOT)/$(FFMPEG)/.tvh_tmp: \
+ $(LIB_ROOT)/$(YASM)/.tvh_build \
+ $(LIB_ROOT)/$(FFMPEG)/.tvh_download
+ cd $(LIB_ROOT)/$(FFMPEG) && $(CONFIGURE) \
+ --disable-all \
+ --enable-gpl \
+ --extra-cflags="$(ECFLAGS)" \
+ --extra-libs="$(ELIBS)" \
+ --pkg-config="$(ROOTDIR)/support/pkg-config.ffmpeg" \
+ $(foreach component,$(COMPONENTS),--enable-$(component))
+ DESTDIR=$(EBUILDIR) \
+ $(MAKE) -C $(LIB_ROOT)/$(FFMPEG) install clean distclean
@touch $@
$(LIB_ROOT)/$(FFMPEG)/.tvh_build: \
- $(LIB_ROOT)/$(YASM)/.tvh_build \
- $(LIB_ROOT)/$(LIBVORBIS)/.tvh_build \
- $(LIB_ROOT)/$(LIBX264)/.tvh_build \
- $(LIB_ROOT)/$(LIBX265)/.tvh_build \
- $(LIB_ROOT)/$(LIBVPX)/.tvh_build \
- $(LIB_ROOT)/$(LIBMFX)/.tvh_build \
- $(LIB_ROOT)/$(FFMPEG)/.tvh_download
- cd $(LIB_ROOT)/$(FFMPEG) && $(EXTRAENV) $(CONFIGURE) \
- --prefix=/ffmpeg \
+ $(LIB_ROOT)/$(YASM)/.tvh_build \
+ $(LIB_ROOT)/$(LIBX264)/.tvh_build \
+ $(LIB_ROOT)/$(LIBX265)/.tvh_build \
+ $(LIB_ROOT)/$(LIBVPX)/.tvh_build \
+ $(LIB_ROOT)/$(LIBTHEORA)/.tvh_build \
+ $(LIB_ROOT)/$(LIBVORBIS)/.tvh_build \
+ $(LIB_ROOT)/$(LIBFDKAAC)/.tvh_build \
+ $(LIB_ROOT)/$(LIBMFX)/.tvh_build \
+ $(LIB_ROOT)/$(FFMPEG)/.tvh_download
+ cd $(LIB_ROOT)/$(FFMPEG) && $(CONFIGURE) \
--disable-all \
- --enable-static \
- --disable-shared \
--enable-gpl \
--extra-cflags="$(ECFLAGS)" \
--extra-libs="$(ELIBS)" \
- --pkg-config="$(ROOTDIR)/support/pkg-config.ffmpeg" \
- $(EXTRAARG) \
- $(foreach extlib,$(EXTLIBS),--enable-$(extlib)) \
+ --pkg-config="$(ROOTDIR)/support/pkg-config.ffmpeg" \
$(foreach component,$(COMPONENTS),--enable-$(component)) \
+ $(foreach extlib,$(EXTLIBS),--enable-$(extlib)) \
$(foreach protocol,$(PROTOCOLS),--enable-protocol=$(protocol)) \
$(foreach decoder,$(DECODERS),--enable-decoder=$(decoder)) \
$(foreach encoder,$(ENCODERS),--enable-encoder=$(encoder)) \
$(foreach muxer,$(MUXERS),--enable-muxer=$(muxer)) \
$(foreach bsf,$(BSFS),--enable-bsf=$(bsf)) \
$(foreach filter,$(FILTERS),--enable-filter=$(filter))
- DESTDIR=$(LIB_ROOT)/build \
+ DESTDIR=$(EBUILDIR) \
$(MAKE) -C $(LIB_ROOT)/$(FFMPEG) install
@touch $@
"avahi:auto"
"zlib:auto"
"libav:auto"
- "libffmpeg_static:yes"
+ "ffmpeg_static:yes"
+ "libx264:yes"
"libx264_static:yes"
- "libx265:no"
+ "libx265:yes"
"libx265_static:yes"
- "vdpau:auto"
+ "libvpx:yes"
+ "libvpx_static:yes"
+ "libtheora:yes"
+ "libtheora_static:yes"
+ "libvorbis:yes"
+ "libvorbis_static:yes"
+ "libfdkaac:yes"
+ "libfdkaac_static:yes"
"nvenc:auto"
- "libmfx:no"
+ "qsv:no"
"libmfx_static:yes"
"inotify:auto"
"epoll:auto"
COMPILER=gcc
fi
-check_cc_snippet getloadavg '#include <stdlib.h>
+check_cc_snippet getloadavg '#include <stdlib.h>
void test() { getloadavg(NULL,0); }'
check_cc_snippet atomic64 '#include <stdint.h>
fi
#
-# libav
+# ffmpeg
#
-if enabled libffmpeg_static; then
+if enabled ffmpeg_static; then
enable libav
has_libav=true
# libx264
- if disabled libx264_static; then
- check_cc_lib x264 || die "libx264 not found"
+ if enabled libx264; then
+ if disabled libx264_static; then
+ check_pkg x264 ">=0.142" || die "x264 package not found"
+ fi
+ else
+ disable libx264_static
fi
# libx265
if enabled libx265; then
- if enabled libx265_static; then
- check_bin cmake || die "cmake not found (needed for building libx265)"
- check_cc_lib stdc++ stdcpp ||\
- die "libstdc++ not found (needed for building libx265)"
+ if disabled libx265_static; then
+ check_pkg x265 ">=1.5" || die "x265 package not found"
else
- check_cc_lib x265 || die "libx265 not found"
+ check_bin cmake || die "cmake not found"
+ check_cc_lib stdc++ stdcpp || die "libstdc++ not found"
fi
else
disable libx265_static
fi
- # vdpau
- if enabled_or_auto vdpau; then
- if check_pkg vdpau; then
- enable vdpau
- elif enabled vdpau; then
- die "vdpau (Video API library) not found"
+ # libvpx
+ if enabled libvpx; then
+ if disabled libvpx_static; then
+ check_pkg vpx ">=1.3.0" || die "vpx package not found"
+ fi
+ else
+ disable libvpx_static
+ fi
+
+ # libtheora
+ if enabled libtheora; then
+ if disabled libtheora_static; then
+ check_pkg theoraenc ">=1.1.1" || die "theoraenc package not found"
+ check_pkg theoradec ">=1.1.1" || die "theoradec package not found"
+ check_pkg theora ">=1.1.1" || die "theora package not found"
+ else
+ enable libogg_static
fi
+ else
+ disable libtheora_static
+ fi
+
+ # libvorbis
+ if enabled libvorbis; then
+ if disabled libvorbis_static; then
+ check_pkg vorbisfile ">=1.3.4" || die "vorbisfile package not found"
+ check_pkg vorbisenc ">=1.3.4" || die "vorbisenc package not found"
+ check_pkg vorbis ">=1.3.4" || die "vorbis package not found"
+ else
+ enable libogg_static
+ fi
+ else
+ disable libvorbis_static
+ fi
+
+ # libfdk-aac
+ if enabled libfdkaac; then
+ if disabled libfdkaac_static; then
+ check_pkg fdk-aac ">=0.1.3" || die "fdk-aac package not found"
+ fi
+ else
+ disable libfdkaac_static
fi
# nvenc
fi
fi
- # libmfx
- if enabled libmfx; then
- check_cc_lib va || die "libva not found"
- check_cc_lib va-drm va_drm || disable va_drm
- check_cc_lib va-x11 va_x11 || disable va_x11
- if disabled va_drm && disabled va_x11; then
- die "neither libva-drm nor libva-x11 was found"
- fi
- if enabled libmfx_static; then
- check_bin autoreconf ||\
- die "autoreconf not found (needed for building libmfx)"
- check_bin libtool ||\
- die "libtool not found (needed for building libmfx)"
- check_bin libtoolize ||\
- die "libtoolize not found (needed for building libmfx)"
- check_cc_lib stdc++ stdcpp ||\
- die "libstdc++ not found (needed for building libmfx)"
+ # qsv
+ if enabled qsv; then
+ if disabled libmfx_static; then
+ check_pkg libmfx ">=1.16" || die "libmfx package not found"
else
- check_cc_lib mfx || die "libmfx not found"
+ check_bin autoreconf || die "autoreconf not found"
+ check_bin libtool || die "libtool not found"
+ check_bin libtoolize || die "libtoolize not found"
+ check_cc_lib stdc++ stdcpp || die "libstdc++ not found"
fi
+ enable vaapi
else
disable libmfx_static
fi
+ # vaapi
+ if enabled vaapi; then
+ check_pkg libva ">=0.38.0" || \
+ die "vaapi (Video Acceleration (VA) API for Linux) not found"
+ check_pkg libva-x11 ">=0.38.0" || die "libva-x11 not found"
+ check_pkg libva-drm ">=0.38.0" || die "libva-drm not found"
+ fi
+
else
if enabled_or_auto libav; then
has_libav=true
- ffmpeg=$(${PKG_CONFIG} --modversion libavcodec | cut -d '.' -f 3)
- test -z "$ffmpeg" && ffmpeg=0
- printf "$TAB" "checking for ffmpeg libraries ..."
- if test $ffmpeg -lt 100; then
- ffmpeg=
- echo "fail"
- else
- ffmpeg=yes
- echo "ok"
- fi
-
- if test "$ffmpeg" == "yes"; then
-
- #
- # check for version n1.2+
- #
- if $has_libav && ! check_pkg libavcodec ">=55.18.102"; then
- has_libav=false
- fi
-
- if $has_libav && ! check_pkg libavutil ">=52.38.100"; then
- has_libav=false
- fi
-
- if $has_libav && ! check_pkg libavformat ">=55.12.100"; then
- has_libav=false
- fi
-
- if $has_libav && ! check_pkg libavfilter ">=4.0.0"; then
- has_libav=false
- fi
-
- if $has_libav && ! check_pkg libavresample ">=1.1.0"; then
- has_libav=false
- fi
-
- else
-
- #
- # check for version v10+
- #
-
- if $has_libav && ! check_pkg libavcodec ">=55.34.1"; then
- has_libav=false
- fi
-
- if $has_libav && ! check_pkg libavutil ">=53.3.0"; then
- has_libav=false
- fi
-
- if $has_libav && ! check_pkg libavformat ">=55.12.0"; then
- has_libav=false
- fi
-
- if $has_libav && ! check_pkg libavfilter ">=4.0.0"; then
- has_libav=false
- fi
-
- if $has_libav && ! check_pkg libavresample ">=1.1.0"; then
- has_libav=false
- fi
-
- fi
+ check_pkg libavfilter ">=6.31.100" || has_libav=false
+ check_pkg libswresample ">=2.0.101" || has_libav=false
+ check_pkg libavresample ">=3.0.0" || has_libav=false
+ check_pkg libswscale ">=4.0.100" || has_libav=false
+ check_pkg libavformat ">=57.25.100" || has_libav=false
+ check_pkg libavcodec ">=57.24.102" || has_libav=false
+ check_pkg libavutil ">=55.17.103" || has_libav=false
if $has_libav; then
enable libav
else
- echo "WARNING: none or old libav or libffmpeg libraries were detected"
- echo " * use --disable-libav or --enable-libffmpeg_static"
- echo " ** supported ffmpeg libs n1.2+"
- echo " ** supported libav libs v10+"
+ echo "WARNING: none or old ffmpeg libraries were detected"
+ echo " * use --disable-libav or --enable-ffmpeg_static"
if enabled libav; then
- die "libav development support not found"
+ die "ffmpeg development support not found"
fi
fi
+
fi
fi