summarylogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--.SRCINFO168
-rw-r--r--010-ffmpeg-fix-vmaf-model-path.patch11
-rw-r--r--015-ffmpeg-cuda11-fix.patch15
-rw-r--r--020-ffmpeg-add-svt-hevc.patch575
-rw-r--r--040-ffmpeg-add-av_stream_get_first_dts-for-chromium.patch29
-rw-r--r--050-ffmpeg-fix-segfault-with-avisynthplus.patch11
-rw-r--r--060-ffmpeg-fix-nvidia-vulkan-decoding-segfault.patch12
-rw-r--r--PKGBUILD250
8 files changed, 328 insertions, 743 deletions
diff --git a/.SRCINFO b/.SRCINFO
index 7dabad6c4bb6..a100ceb49eae 100644
--- a/.SRCINFO
+++ b/.SRCINFO
@@ -1,128 +1,143 @@
pkgbase = ffmpeg-full-git
pkgdesc = Complete solution to record, convert and stream audio and video (all possible features including libfdk-aac; git version)
- pkgver = 4.4.r98604.g11a2d05b3f
+ pkgver = 7.1.r115075.gf8a613d6a8
pkgrel = 1
url = https://www.ffmpeg.org/
arch = x86_64
- license = custom: nonfree and unredistributable
+ license = LicenseRef-nonfree-and-unredistributable
makedepends = git
+ makedepends = clang
+ makedepends = amf-headers
+ makedepends = ffnvcodec-headers
makedepends = nasm
makedepends = opencl-headers
makedepends = vulkan-headers
- makedepends = ffnvcodec-headers
- makedepends = clang
makedepends = decklink-sdk
- makedepends = amf-headers
depends = alsa-lib
+ depends = aom
+ depends = aribb24
+ depends = libaribcaption
depends = avisynthplus
depends = bzip2
+ depends = cairo
+ depends = celt
+ depends = codec2
+ depends = cuda
+ depends = dav1d
+ depends = flite1
+ depends = fontconfig
+ depends = freetype2
depends = frei0r-plugins
- depends = libgcrypt
+ depends = fribidi
+ depends = glib2
+ depends = glslang
depends = gmp
depends = gnutls
+ depends = gsm
+ depends = harfbuzz
+ depends = jack
+ depends = kvazaar
depends = ladspa
+ depends = lame
+ depends = libavc1394
+ depends = lcms2
+ depends = lensfun-git
depends = libass
- depends = aom
- depends = aribb24
depends = libbluray
depends = libbs2b
depends = libcaca
- depends = celt
depends = libcdio-paranoia
- depends = codec2
- depends = dav1d
depends = libdc1394
- depends = libavc1394
+ depends = libdrm
depends = libfdk-aac
- depends = fontconfig
- depends = freetype2
- depends = fribidi
- depends = glslang
+ depends = libgcrypt
+ depends = libgl
depends = libgme
- depends = gsm
depends = libiec61883
depends = libilbc
- depends = jack
- depends = kvazaar
- depends = lensfun
+ depends = libjxl
depends = libmodplug
- depends = lame
+ depends = libmysofa
+ depends = libomxil-bellagio
+ depends = libopenmpt
+ depends = libplacebo
+ depends = libpulse
+ depends = librabbitmq-c
+ depends = libraw1394
+ depends = librsvg
+ depends = libsoxr
+ depends = libssh
+ depends = libtheora
+ depends = libva
+ depends = libvdpau
+ depends = libvorbis
+ depends = libvpl
+ depends = libvpx
+ depends = libx11
+ depends = libxcb
+ depends = libxext
+ depends = libxml2
+ depends = libxv
+ depends = libwebp
+ depends = lilv
+ depends = lv2
+ depends = ocl-icd
+ depends = openal
depends = opencore-amr
+ depends = opencv2
+ depends = openh264
depends = openjpeg2
+ depends = openvino
depends = opus
- depends = pulseaudio
- depends = librabbitmq-c
+ depends = qrencode
+ depends = quirc
depends = rav1e
- depends = librsvg
- depends = rubberband
depends = rtmpdump
+ depends = rubberband
+ depends = sdl2
+ depends = smbclient
depends = snappy
- depends = libsoxr
+ depends = sndio
depends = speex
+ depends = spirv-tools
depends = srt
- depends = libssh
- depends = svt-hevc
depends = svt-av1
+ depends = svt-hevc
depends = svt-vp9
- depends = tensorflow
depends = tesseract
- depends = libtheora
depends = twolame
depends = v4l-utils
+ depends = vapoursynth
depends = vid.stab
depends = vmaf
- depends = libvorbis
- depends = libvpx
- depends = wavpack
- depends = libwebp
+ depends = vpl-runtime
+ depends = vulkan-icd-loader
depends = x264
depends = x265
- depends = libxcb
depends = xvidcore
- depends = libxml2
- depends = zimg
- depends = zeromq
- depends = zvbi
- depends = lv2
- depends = lilv
depends = xz
- depends = libmysofa
- depends = openal
- depends = ocl-icd
- depends = libgl
- depends = sndio
- depends = sdl2
- depends = vapoursynth
- depends = vulkan-icd-loader
- depends = libxv
- depends = libx11
- depends = libxext
+ depends = zeromq
+ depends = zimg
depends = zlib
- depends = cuda
- depends = libomxil-bellagio
- depends = libdrm
- depends = intel-media-sdk
- depends = libva
- depends = libvdpau
+ depends = zvbi
depends = chromaprint-fftw
depends = davs2
- depends = flite1-patched
- depends = libklvanc-git
- depends = openh264
- depends = libopenmpt-svn
+ depends = libklvanc
+ depends = librist
+ depends = rockchip-mpp
depends = shine
+ depends = uavs3d-git
depends = vo-amrwbenc
depends = xavs
depends = xavs2
- depends = pocketsphinx
- depends = rockchip-mpp
+ depends = xevd
+ depends = xeve
provides = libavcodec.so
provides = libavdevice.so
provides = libavfilter.so
provides = libavformat.so
provides = libavutil.so
provides = libpostproc.so
- provides = libavresample.so
provides = libswscale.so
provides = libswresample.so
provides = ffmpeg
@@ -130,19 +145,20 @@ pkgbase = ffmpeg-full-git
provides = ffmpeg-git
conflicts = ffmpeg
source = git+https://git.ffmpeg.org/ffmpeg.git
- source = 010-ffmpeg-fix-vmaf-model-path.patch
- source = 015-ffmpeg-cuda11-fix.patch
- source = 020-ffmpeg-add-svt-hevc.patch
- source = 030-ffmpeg-add-svt-hevc-docs-1.4.3.patch::https://raw.githubusercontent.com/OpenVisualCloud/SVT-HEVC/v1.4.3/ffmpeg_plugin/0002-doc-Add-libsvt_hevc-encoder-docs.patch
- source = 040-ffmpeg-add-svt-vp9-0.2.2.patch::https://raw.githubusercontent.com/OpenVisualCloud/SVT-VP9/v0.2.2/ffmpeg_plugin/master-0001-Add-ability-for-ffmpeg-to-run-svt-vp9.patch
+ source = 010-ffmpeg-add-svt-hevc-ged80959.patch::https://raw.githubusercontent.com/OpenVisualCloud/SVT-HEVC/ed80959ebb5586aa7763c91a397d44be1798587c/ffmpeg_plugin/master-0001-lavc-svt_hevc-add-libsvt-hevc-encoder-wrapper.patch
+ source = 020-ffmpeg-add-svt-hevc-docs-ged80959.patch::https://raw.githubusercontent.com/OpenVisualCloud/SVT-HEVC/ed80959ebb5586aa7763c91a397d44be1798587c/ffmpeg_plugin/0002-doc-Add-libsvt_hevc-encoder-docs.patch
+ source = 030-ffmpeg-add-svt-vp9-g3b9a3fa.patch::https://raw.githubusercontent.com/OpenVisualCloud/SVT-VP9/3b9a3fa43da4cc5fe60c7d22afe2be15341392ea/ffmpeg_plugin/master-0001-Add-ability-for-ffmpeg-to-run-svt-vp9.patch
+ source = 040-ffmpeg-add-av_stream_get_first_dts-for-chromium.patch
+ source = 050-ffmpeg-fix-segfault-with-avisynthplus.patch
+ source = 060-ffmpeg-fix-nvidia-vulkan-decoding-segfault.patch
source = LICENSE
sha256sums = SKIP
- sha256sums = b6fcef2f4cbb1daa47d17245702fbd67ab3289b6b16f090ab99b9c2669453a02
- sha256sums = 12cb889fd2ddd03ecc0f5fa2e345c7787ff4b28c4d284a5c694c71d5a590763c
- sha256sums = 65699b95643ac24f57de503da83a8d5ad39be9fde216fa6a502b09a3f5120c64
- sha256sums = 1499e419dda72b1604dc5e3959668f3843292ff56bfba78734e31510ba576de0
- sha256sums = b74be6d805672210e226e7c0b403f88b0ee8a53c732c9bdc873c4b44aeb75c96
+ sha256sums = 9047e18d34716812d4ea7eafc1d0fd8b376d922a4b6b4dc20237662fcaf0c996
+ sha256sums = a164ebdc4d281352bf7ad1b179aae4aeb33f1191c444bed96cb8ab333c046f81
+ sha256sums = 59da61f2b2c556fbe0cdbf84bcc00977ee3d2447085decb21f6298226559f2aa
+ sha256sums = b54b47f4f3837ddc41227bd2202ea3c62e2ddb06c6cfbd7a9adc304d641d79ba
+ sha256sums = 0e277c0d5e33612ca7a11025958133b17bfbe23168b0aee5bd07f674f6fd7440
+ sha256sums = f2f73793a45c9dffb033f23c1b10a612abe6528cbd06c04b06e8189d1ef208be
sha256sums = 04a7176400907fd7db0d69116b99de49e582a6e176b3bfb36a03e50a4cb26a36
pkgname = ffmpeg-full-git
-
diff --git a/010-ffmpeg-fix-vmaf-model-path.patch b/010-ffmpeg-fix-vmaf-model-path.patch
deleted file mode 100644
index 1e92c02e5595..000000000000
--- a/010-ffmpeg-fix-vmaf-model-path.patch
+++ /dev/null
@@ -1,11 +0,0 @@
---- a/libavfilter/vf_libvmaf.c
-+++ b/libavfilter/vf_libvmaf.c
-@@ -72,7 +72,7 @@ typedef struct LIBVMAFContext {
- #define FLAGS AV_OPT_FLAG_FILTERING_PARAM|AV_OPT_FLAG_VIDEO_PARAM
-
- static const AVOption libvmaf_options[] = {
-- {"model_path", "Set the model to be used for computing vmaf.", OFFSET(model_path), AV_OPT_TYPE_STRING, {.str="/usr/local/share/model/vmaf_v0.6.1.pkl"}, 0, 1, FLAGS},
-+ {"model_path", "Set the model to be used for computing vmaf.", OFFSET(model_path), AV_OPT_TYPE_STRING, {.str="/usr/share/model/vmaf_v0.6.1.pkl"}, 0, 1, FLAGS},
- {"log_path", "Set the file path to be used to store logs.", OFFSET(log_path), AV_OPT_TYPE_STRING, {.str=NULL}, 0, 1, FLAGS},
- {"log_fmt", "Set the format of the log (xml or json).", OFFSET(log_fmt), AV_OPT_TYPE_STRING, {.str=NULL}, 0, 1, FLAGS},
- {"enable_transform", "Enables transform for computing vmaf.", OFFSET(enable_transform), AV_OPT_TYPE_BOOL, {.i64=0}, 0, 1, FLAGS},
diff --git a/015-ffmpeg-cuda11-fix.patch b/015-ffmpeg-cuda11-fix.patch
deleted file mode 100644
index 8a1033323752..000000000000
--- a/015-ffmpeg-cuda11-fix.patch
+++ /dev/null
@@ -1,15 +0,0 @@
---- a/configure
-+++ b/configure
-@@ -4320,10 +4320,10 @@ fi
-
- if enabled cuda_nvcc; then
- nvcc_default="nvcc"
-- nvccflags_default="-gencode arch=compute_30,code=sm_30 -O2"
-+ nvccflags_default="-gencode arch=compute_52,code=sm_52 -O2"
- else
- nvcc_default="clang"
-- nvccflags_default="--cuda-gpu-arch=sm_30 -O2"
-+ nvccflags_default="--cuda-gpu-arch=sm_52 -O2"
- NVCC_C=""
- fi
-
diff --git a/020-ffmpeg-add-svt-hevc.patch b/020-ffmpeg-add-svt-hevc.patch
deleted file mode 100644
index dda7b82f3288..000000000000
--- a/020-ffmpeg-add-svt-hevc.patch
+++ /dev/null
@@ -1,575 +0,0 @@
---- a/configure
-+++ b/configure
-@@ -269,6 +269,7 @@ External library support:
- --enable-libspeex enable Speex de/encoding via libspeex [no]
- --enable-libsrt enable Haivision SRT protocol via libsrt [no]
- --enable-libssh enable SFTP protocol via libssh [no]
-+ --enable-libsvthevc enable HEVC encoding via svt [no]
- --enable-libsvtav1 enable AV1 encoding via SVT [no]
- --enable-libtensorflow enable TensorFlow as a DNN module backend
- for DNN based filters like sr [no]
-@@ -1806,6 +1807,7 @@ EXTERNAL_LIBRARY_LIST="
- libspeex
- libsrt
- libssh
-+ libsvthevc
- libsvtav1
- libtensorflow
- libtesseract
-@@ -3245,6 +3247,7 @@ libshine_encoder_select="audio_frame_queue"
- libspeex_decoder_deps="libspeex"
- libspeex_encoder_deps="libspeex"
- libspeex_encoder_select="audio_frame_queue"
-+libsvt_hevc_encoder_deps="libsvthevc"
- libsvtav1_encoder_deps="libsvtav1"
- libtheora_encoder_deps="libtheora"
- libtwolame_encoder_deps="libtwolame"
-@@ -6401,6 +6404,7 @@ enabled libsoxr && require libsoxr soxr.h soxr_create -lsoxr
- enabled libssh && require_pkg_config libssh libssh libssh/sftp.h sftp_init
- enabled libspeex && require_pkg_config libspeex speex speex/speex.h speex_decoder_init
- enabled libsrt && require_pkg_config libsrt "srt >= 1.3.0" srt/srt.h srt_socket
-+enabled libsvthevc && require_pkg_config libsvthevc SvtHevcEnc EbApi.h EbInitHandle
- enabled libsvtav1 && require_pkg_config libsvtav1 "SvtAv1Enc >= 0.8.4" EbSvtAv1Enc.h svt_av1_enc_init_handle
- enabled libtensorflow && require libtensorflow tensorflow/c/c_api.h TF_Version -ltensorflow
- enabled libtesseract && require_pkg_config libtesseract tesseract tesseract/capi.h TessBaseAPICreate
---- a/libavcodec/Makefile
-+++ b/libavcodec/Makefile
-@@ -1026,6 +1026,7 @@ OBJS-$(CONFIG_LIBRAV1E_ENCODER) += librav1e.o
- OBJS-$(CONFIG_LIBSHINE_ENCODER) += libshine.o
- OBJS-$(CONFIG_LIBSPEEX_DECODER) += libspeexdec.o
- OBJS-$(CONFIG_LIBSPEEX_ENCODER) += libspeexenc.o
-+OBJS-$(CONFIG_LIBSVT_HEVC_ENCODER) += libsvt_hevc.o
- OBJS-$(CONFIG_LIBSVTAV1_ENCODER) += libsvtav1.o
- OBJS-$(CONFIG_LIBTHEORA_ENCODER) += libtheoraenc.o
- OBJS-$(CONFIG_LIBTWOLAME_ENCODER) += libtwolame.o
---- a/libavcodec/allcodecs.c
-+++ b/libavcodec/allcodecs.c
-@@ -727,6 +727,7 @@ extern AVCodec ff_librsvg_decoder;
- extern AVCodec ff_libshine_encoder;
- extern AVCodec ff_libspeex_encoder;
- extern AVCodec ff_libspeex_decoder;
-+extern AVCodec ff_libsvt_hevc_encoder;
- extern AVCodec ff_libsvtav1_encoder;
- extern AVCodec ff_libtheora_encoder;
- extern AVCodec ff_libtwolame_encoder;
---- /dev/null
-+++ b/libavcodec/libsvt_hevc.c
-@@ -0,0 +1,518 @@
-+/*
-+* Scalable Video Technology for HEVC encoder library plugin
-+*
-+* Copyright (c) 2019 Intel Corporation
-+*
-+* This file is part of FFmpeg.
-+*
-+* FFmpeg is free software; you can redistribute it and/or
-+* modify it under the terms of the GNU Lesser General Public
-+* License as published by the Free Software Foundation; either
-+* version 2.1 of the License, or (at your option) any later version.
-+*
-+* FFmpeg is distributed in the hope that it will be useful,
-+* but WITHOUT ANY WARRANTY; without even the implied warranty of
-+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-+* Lesser General Public License for more details.
-+*
-+* You should have received a copy of the GNU Lesser General Public
-+* License along with this program; if not, write to the Free Software
-+* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
-+*/
-+
-+#include "EbApi.h"
-+
-+#include "libavutil/common.h"
-+#include "libavutil/frame.h"
-+#include "libavutil/opt.h"
-+
-+#include "internal.h"
-+#include "avcodec.h"
-+
-+typedef enum eos_status {
-+ EOS_NOT_REACHED = 0,
-+ EOS_SENT,
-+ EOS_RECEIVED
-+}EOS_STATUS;
-+
-+typedef struct SvtContext {
-+ AVClass *class;
-+
-+ EB_H265_ENC_CONFIGURATION enc_params;
-+ EB_COMPONENTTYPE *svt_handle;
-+ EB_BUFFERHEADERTYPE in_buf;
-+ uint8_t *in_data;
-+ EOS_STATUS eos_flag;
-+
-+ // User options.
-+ int profile;
-+ int hierarchical_level;
-+ int enc_mode;
-+ int tier;
-+ int level;
-+ int rc_mode;
-+ int scd;
-+ int tune;
-+ int base_layer_switch_mode;
-+ int qp;
-+ int aud;
-+ int asm_type;
-+ int forced_idr;
-+ int la_depth;
-+ int thread_count;
-+ int high_dynamic_range;
-+} SvtContext;
-+
-+static int error_mapping(EB_ERRORTYPE svt_ret)
-+{
-+ switch (svt_ret) {
-+ case EB_ErrorInsufficientResources:
-+ return AVERROR(ENOMEM);
-+
-+ case EB_ErrorUndefined:
-+ case EB_ErrorInvalidComponent:
-+ case EB_ErrorBadParameter:
-+ return AVERROR(EINVAL);
-+
-+ case EB_ErrorDestroyThreadFailed:
-+ case EB_ErrorSemaphoreUnresponsive:
-+ case EB_ErrorDestroySemaphoreFailed:
-+ case EB_ErrorCreateMutexFailed:
-+ case EB_ErrorMutexUnresponsive:
-+ case EB_ErrorDestroyMutexFailed:
-+ return AVERROR_EXTERNAL;
-+
-+ case EB_NoErrorEmptyQueue:
-+ return AVERROR(EAGAIN);
-+
-+ case EB_ErrorNone:
-+ return 0;
-+
-+ default:
-+ return AVERROR_UNKNOWN;
-+ }
-+}
-+
-+static void free_buffer(SvtContext *svt_enc)
-+{
-+ if (svt_enc && svt_enc->in_data) {
-+ av_freep(&svt_enc->in_data);
-+ svt_enc->in_data = NULL;
-+ }
-+}
-+
-+static EB_ERRORTYPE alloc_buffer(SvtContext *svt_enc)
-+{
-+ EB_BUFFERHEADERTYPE *in_buf = &svt_enc->in_buf;
-+ EB_H265_ENC_INPUT *in_data = NULL;
-+
-+ memset(in_buf, 0, sizeof(*in_buf));
-+ in_buf->nSize = sizeof(*in_buf);
-+ in_buf->sliceType = EB_INVALID_PICTURE;
-+
-+ in_data = (EB_H265_ENC_INPUT *)av_mallocz(sizeof(*in_data));
-+ if (in_data) {
-+ svt_enc->in_data = in_buf->pBuffer = (uint8_t *)in_data;
-+ return EB_ErrorNone;
-+ } else {
-+ return EB_ErrorInsufficientResources;
-+ }
-+}
-+
-+static int config_enc_params(EB_H265_ENC_CONFIGURATION *param,
-+ AVCodecContext *avctx)
-+{
-+ SvtContext *svt_enc = avctx->priv_data;
-+
-+ param->sourceWidth = avctx->width;
-+ param->sourceHeight = avctx->height;
-+
-+ if ((avctx->pix_fmt == AV_PIX_FMT_YUV420P10) ||
-+ (avctx->pix_fmt == AV_PIX_FMT_YUV422P10) ||
-+ (avctx->pix_fmt == AV_PIX_FMT_YUV444P10)) {
-+ av_log(avctx, AV_LOG_DEBUG, "Set 10 bits depth input\n");
-+ param->encoderBitDepth = 10;
-+ } else {
-+ av_log(avctx, AV_LOG_DEBUG, "Set 8 bits depth input\n");
-+ param->encoderBitDepth = 8;
-+ }
-+
-+ if ((avctx->pix_fmt == AV_PIX_FMT_YUV420P) ||
-+ (avctx->pix_fmt == AV_PIX_FMT_YUV420P10))
-+ param->encoderColorFormat = EB_YUV420;
-+ else if ((avctx->pix_fmt == AV_PIX_FMT_YUV422P) ||
-+ (avctx->pix_fmt == AV_PIX_FMT_YUV422P10))
-+ param->encoderColorFormat = EB_YUV422;
-+ else
-+ param->encoderColorFormat = EB_YUV444;
-+
-+ param->profile = svt_enc->profile;
-+
-+ if (FF_PROFILE_HEVC_MAIN_STILL_PICTURE == param->profile) {
-+ av_log(avctx, AV_LOG_ERROR, "Main Still Picture Profile not supported\n");
-+ return EB_ErrorBadParameter;
-+ }
-+
-+ if ((param->encoderColorFormat >= EB_YUV422) &&
-+ (param->profile != FF_PROFILE_HEVC_REXT)) {
-+ av_log(avctx, AV_LOG_WARNING, "Rext Profile forced for 422 or 444\n");
-+ param->profile = FF_PROFILE_HEVC_REXT;
-+ }
-+
-+ if ((FF_PROFILE_HEVC_MAIN == param->profile) &&
-+ (param->encoderBitDepth > 8)) {
-+ av_log(avctx, AV_LOG_WARNING, "Main10 Profile forced for 10 bits\n");
-+ param->profile = FF_PROFILE_HEVC_MAIN_10;
-+ }
-+
-+ param->targetBitRate = avctx->bit_rate;
-+ param->vbvMaxrate = avctx->rc_max_rate;
-+ param->vbvBufsize = avctx->rc_buffer_size;
-+
-+ if (avctx->gop_size > 0)
-+ param->intraPeriodLength = avctx->gop_size - 1;
-+
-+ if ((avctx->framerate.num > 0) && (avctx->framerate.den > 0)) {
-+ param->frameRateNumerator = avctx->framerate.num;
-+ param->frameRateDenominator =
-+ avctx->framerate.den * avctx->ticks_per_frame;
-+ } else {
-+ param->frameRateNumerator = avctx->time_base.den;
-+ param->frameRateDenominator =
-+ avctx->time_base.num * avctx->ticks_per_frame;
-+ }
-+
-+ param->hierarchicalLevels = svt_enc->hierarchical_level;
-+ param->encMode = svt_enc->enc_mode;
-+ param->tier = svt_enc->tier;
-+ param->level = svt_enc->level;
-+ param->rateControlMode = svt_enc->rc_mode;
-+ param->sceneChangeDetection = svt_enc->scd;
-+ param->tune = svt_enc->tune;
-+ param->baseLayerSwitchMode = svt_enc->base_layer_switch_mode;
-+ param->qp = svt_enc->qp;
-+ param->accessUnitDelimiter = svt_enc->aud;
-+ param->asmType = svt_enc->asm_type;
-+ param->intraRefreshType = svt_enc->forced_idr;
-+ param->highDynamicRangeInput = svt_enc->high_dynamic_range;
-+ if (param->rateControlMode) {
-+ param->maxQpAllowed = avctx->qmax;
-+ param->minQpAllowed = avctx->qmin;
-+ }
-+
-+ if (svt_enc->la_depth != -1)
-+ param->lookAheadDistance = svt_enc->la_depth;
-+
-+ if ((svt_enc->thread_count > 0) &&
-+ (svt_enc->thread_count < (EB_THREAD_COUNT_MIN_CORE * EB_THREAD_COUNT_FACTOR))) {
-+ param->threadCount = EB_THREAD_COUNT_MIN_CORE * EB_THREAD_COUNT_FACTOR;
-+ av_log(avctx, AV_LOG_WARNING, "Thread count is set too small, forced to %"PRId32"\n",
-+ param->threadCount);
-+ } else if (svt_enc->thread_count % EB_THREAD_COUNT_MIN_CORE) {
-+ param->threadCount = (svt_enc->thread_count + EB_THREAD_COUNT_MIN_CORE - 1)
-+ / EB_THREAD_COUNT_MIN_CORE * EB_THREAD_COUNT_MIN_CORE;
-+ av_log(avctx, AV_LOG_DEBUG, "Thread count is rounded to %"PRId32"\n",
-+ param->threadCount);
-+ } else {
-+ param->threadCount = svt_enc->thread_count;
-+ }
-+
-+ if (avctx->flags & AV_CODEC_FLAG_GLOBAL_HEADER)
-+ param->codeVpsSpsPps = 0;
-+ else
-+ param->codeVpsSpsPps = 1;
-+
-+ param->codeEosNal = 1;
-+
-+ return EB_ErrorNone;
-+}
-+
-+static void read_in_data(EB_H265_ENC_CONFIGURATION *config,
-+ const AVFrame *frame,
-+ EB_BUFFERHEADERTYPE *header_ptr)
-+{
-+ uint8_t is16bit;
-+ uint64_t frame_size;
-+ EB_H265_ENC_INPUT *in_data = (EB_H265_ENC_INPUT *)header_ptr->pBuffer;
-+
-+ is16bit = config->encoderBitDepth > 8;
-+ frame_size = (uint64_t)(config->sourceWidth * config->sourceHeight) << is16bit;
-+
-+ in_data->luma = frame->data[0];
-+ in_data->cb = frame->data[1];
-+ in_data->cr = frame->data[2];
-+
-+ in_data->yStride = frame->linesize[0] >> is16bit;
-+ in_data->cbStride = frame->linesize[1] >> is16bit;
-+ in_data->crStride = frame->linesize[2] >> is16bit;
-+
-+ if (config->encoderColorFormat == EB_YUV420)
-+ frame_size *= 3/2u;
-+ else if (config->encoderColorFormat == EB_YUV422)
-+ frame_size *= 2u;
-+ else
-+ frame_size *= 3u;
-+
-+ header_ptr->nFilledLen += frame_size;
-+}
-+
-+static av_cold int eb_enc_init(AVCodecContext *avctx)
-+{
-+ SvtContext *svt_enc = avctx->priv_data;
-+ EB_ERRORTYPE svt_ret;
-+
-+ svt_enc->eos_flag = EOS_NOT_REACHED;
-+
-+ svt_ret = EbInitHandle(&svt_enc->svt_handle, svt_enc, &svt_enc->enc_params);
-+ if (svt_ret != EB_ErrorNone) {
-+ av_log(avctx, AV_LOG_ERROR, "Failed to init handle\n");
-+ return error_mapping(svt_ret);
-+ }
-+
-+ svt_ret = config_enc_params(&svt_enc->enc_params, avctx);
-+ if (svt_ret != EB_ErrorNone) {
-+ av_log(avctx, AV_LOG_ERROR, "Failed to config parameters\n");
-+ goto failed_init_handle;
-+ }
-+
-+ svt_ret = EbH265EncSetParameter(svt_enc->svt_handle, &svt_enc->enc_params);
-+ if (svt_ret != EB_ErrorNone) {
-+ av_log(avctx, AV_LOG_ERROR, "Failed to set parameters\n");
-+ goto failed_init_handle;
-+ }
-+
-+ svt_ret = EbInitEncoder(svt_enc->svt_handle);
-+ if (svt_ret != EB_ErrorNone) {
-+ av_log(avctx, AV_LOG_ERROR, "Failed to init encoder\n");
-+ goto failed_init_handle;
-+ }
-+
-+ if (avctx->flags & AV_CODEC_FLAG_GLOBAL_HEADER) {
-+ EB_BUFFERHEADERTYPE *header_ptr = NULL;
-+
-+ svt_ret = EbH265EncStreamHeader(svt_enc->svt_handle, &header_ptr);
-+ if (svt_ret != EB_ErrorNone) {
-+ av_log(avctx, AV_LOG_ERROR, "Failed to build stream header\n");
-+ goto failed_init_encoder;
-+ }
-+
-+ avctx->extradata_size = header_ptr->nFilledLen;
-+ avctx->extradata = av_malloc(avctx->extradata_size + AV_INPUT_BUFFER_PADDING_SIZE);
-+ if (!avctx->extradata) {
-+ av_log(avctx, AV_LOG_ERROR, "Failed to allocate extradata\n");
-+ svt_ret = EB_ErrorInsufficientResources;
-+ goto failed_init_encoder;
-+ }
-+ memcpy(avctx->extradata, header_ptr->pBuffer, avctx->extradata_size);
-+ memset(avctx->extradata+avctx->extradata_size, 0, AV_INPUT_BUFFER_PADDING_SIZE);
-+ }
-+
-+ svt_ret = alloc_buffer(svt_enc);
-+ if (svt_ret != EB_ErrorNone) {
-+ av_log(avctx, AV_LOG_ERROR, "Failed to alloc data buffer\n");
-+ goto failed_init_encoder;
-+ }
-+ return 0;
-+
-+failed_init_encoder:
-+ EbDeinitEncoder(svt_enc->svt_handle);
-+failed_init_handle:
-+ EbDeinitHandle(svt_enc->svt_handle);
-+ svt_enc->svt_handle = NULL;
-+ svt_enc = NULL;
-+ return error_mapping(svt_ret);
-+}
-+
-+static int eb_encode_frame(AVCodecContext *avctx, AVPacket *pkt,
-+ const AVFrame *frame, int *got_packet)
-+{
-+ SvtContext *svt_enc = avctx->priv_data;
-+ EB_BUFFERHEADERTYPE *header_ptr = &svt_enc->in_buf;
-+ EB_ERRORTYPE svt_ret;
-+ int av_ret;
-+
-+ if (EOS_RECEIVED == svt_enc->eos_flag) {
-+ *got_packet = 0;
-+ return 0;
-+ }
-+
-+ if (!frame) {
-+ if (!svt_enc->eos_flag) {
-+ svt_enc->eos_flag = EOS_SENT;
-+
-+ header_ptr->nAllocLen = 0;
-+ header_ptr->nFilledLen = 0;
-+ header_ptr->nTickCount = 0;
-+ header_ptr->nFlags = EB_BUFFERFLAG_EOS;
-+ header_ptr->pBuffer = NULL;
-+
-+ EbH265EncSendPicture(svt_enc->svt_handle, header_ptr);
-+
-+ av_log(avctx, AV_LOG_DEBUG, "Sent EOS\n");
-+ }
-+ } else {
-+ read_in_data(&svt_enc->enc_params, frame, header_ptr);
-+ header_ptr->pts = frame->pts;
-+
-+ EbH265EncSendPicture(svt_enc->svt_handle, header_ptr);
-+
-+ av_log(avctx, AV_LOG_DEBUG, "Sent PTS %"PRId64"\n", header_ptr->pts);
-+ }
-+
-+ header_ptr = NULL;
-+ svt_ret = EbH265GetPacket(svt_enc->svt_handle, &header_ptr, svt_enc->eos_flag);
-+
-+ if (svt_ret == EB_NoErrorEmptyQueue) {
-+ *got_packet = 0;
-+ av_log(avctx, AV_LOG_DEBUG, "Received none\n");
-+ return 0;
-+ }
-+
-+ av_log(avctx, AV_LOG_DEBUG, "Received PTS %"PRId64" packet\n", header_ptr->pts);
-+
-+ av_ret = ff_alloc_packet2(avctx, pkt, header_ptr->nFilledLen, 0);
-+ if (av_ret) {
-+ av_log(avctx, AV_LOG_ERROR, "Failed to allocate a packet\n");
-+ EbH265ReleaseOutBuffer(&header_ptr);
-+ return av_ret;
-+ }
-+
-+ memcpy(pkt->data, header_ptr->pBuffer, header_ptr->nFilledLen);
-+ pkt->size = header_ptr->nFilledLen;
-+ pkt->pts = header_ptr->pts;
-+ pkt->dts = header_ptr->dts;
-+
-+ if ((header_ptr->sliceType == EB_IDR_PICTURE) ||
-+ (header_ptr->sliceType == EB_I_PICTURE))
-+ pkt->flags |= AV_PKT_FLAG_KEY;
-+ if (header_ptr->sliceType == EB_NON_REF_PICTURE)
-+ pkt->flags |= AV_PKT_FLAG_DISPOSABLE;
-+
-+ EbH265ReleaseOutBuffer(&header_ptr);
-+
-+ *got_packet = 1;
-+
-+ if (EB_BUFFERFLAG_EOS == header_ptr->nFlags)
-+ svt_enc->eos_flag = EOS_RECEIVED;
-+
-+ return 0;
-+}
-+
-+static av_cold int eb_enc_close(AVCodecContext *avctx)
-+{
-+ SvtContext *svt_enc = avctx->priv_data;
-+
-+ if (svt_enc) {
-+ free_buffer(svt_enc);
-+
-+ if (svt_enc->svt_handle) {
-+ EbDeinitEncoder(svt_enc->svt_handle);
-+ EbDeinitHandle(svt_enc->svt_handle);
-+ svt_enc->svt_handle = NULL;
-+ }
-+ }
-+
-+ return 0;
-+}
-+
-+#define OFFSET(x) offsetof(SvtContext, x)
-+#define VE AV_OPT_FLAG_VIDEO_PARAM | AV_OPT_FLAG_ENCODING_PARAM
-+static const AVOption options[] = {
-+ { "asm_type", "Assembly instruction set type [0: C Only, 1: Auto]", OFFSET(asm_type),
-+ AV_OPT_TYPE_BOOL, { .i64 = 1 }, 0, 1, VE },
-+
-+ { "aud", "Include Access Unit Delimiter", OFFSET(aud),
-+ AV_OPT_TYPE_BOOL, { .i64 = 0 }, 0, 1, VE },
-+
-+ { "bl_mode", "Random Access Prediction Structure type setting", OFFSET(base_layer_switch_mode),
-+ AV_OPT_TYPE_BOOL, { .i64 = 0 }, 0, 1, VE },
-+
-+ { "forced-idr", "If forcing keyframes, force them as IDR frames.", OFFSET(forced_idr),
-+ AV_OPT_TYPE_INT, { .i64 = -1 }, -1, INT_MAX, VE },
-+
-+ { "hielevel", "Hierarchical prediction levels setting", OFFSET(hierarchical_level),
-+ AV_OPT_TYPE_INT, { .i64 = 3 }, 0, 3, VE , "hielevel"},
-+ { "flat", NULL, 0, AV_OPT_TYPE_CONST, { .i64 = 0 }, INT_MIN, INT_MAX, VE, "hielevel" },
-+ { "1 level", NULL, 0, AV_OPT_TYPE_CONST, { .i64 = 1 }, INT_MIN, INT_MAX, VE, "hielevel" },
-+ { "2 level", NULL, 0, AV_OPT_TYPE_CONST, { .i64 = 2 }, INT_MIN, INT_MAX, VE, "hielevel" },
-+ { "3 level", NULL, 0, AV_OPT_TYPE_CONST, { .i64 = 3 }, INT_MIN, INT_MAX, VE, "hielevel" },
-+
-+ { "la_depth", "Look ahead distance [0, 256]", OFFSET(la_depth),
-+ AV_OPT_TYPE_INT, { .i64 = -1 }, -1, 256, VE },
-+
-+ { "level", "Set level (level_idc)", OFFSET(level),
-+ AV_OPT_TYPE_INT, { .i64 = 0 }, 0, 0xff, VE, "level" },
-+
-+ { "preset", "Encoding preset [0, 12]",
-+ OFFSET(enc_mode), AV_OPT_TYPE_INT, { .i64 = 7 }, 0, 12, VE },
-+
-+ { "profile", "Profile setting, Main Still Picture Profile not supported", OFFSET(profile),
-+ AV_OPT_TYPE_INT, { .i64 = FF_PROFILE_HEVC_MAIN }, FF_PROFILE_HEVC_MAIN, FF_PROFILE_HEVC_REXT, VE, "profile"},
-+
-+ { "qp", "QP value for intra frames", OFFSET(qp),
-+ AV_OPT_TYPE_INT, { .i64 = 32 }, 0, 51, VE },
-+
-+ { "rc", "Bit rate control mode", OFFSET(rc_mode),
-+ AV_OPT_TYPE_INT, { .i64 = 0 }, 0, 1, VE , "rc"},
-+ { "cqp", NULL, 0, AV_OPT_TYPE_CONST, { .i64 = 0 }, INT_MIN, INT_MAX, VE, "rc" },
-+ { "vbr", NULL, 0, AV_OPT_TYPE_CONST, { .i64 = 1 }, INT_MIN, INT_MAX, VE, "rc" },
-+
-+ { "sc_detection", "Scene change detection", OFFSET(scd),
-+ AV_OPT_TYPE_BOOL, { .i64 = 1 }, 0, 1, VE },
-+
-+ { "thread_count", "Number of threads [0: Auto, 96: Min]", OFFSET(thread_count),
-+ AV_OPT_TYPE_INT, {.i64 = 0}, 0, INT_MAX, VE },
-+
-+ { "tier", "Set tier (general_tier_flag)", OFFSET(tier),
-+ AV_OPT_TYPE_INT, { .i64 = 0 }, 0, 1, VE, "tier" },
-+ { "main", NULL, 0, AV_OPT_TYPE_CONST, { .i64 = 0 }, 0, 0, VE, "tier" },
-+ { "high", NULL, 0, AV_OPT_TYPE_CONST, { .i64 = 1 }, 0, 0, VE, "tier" },
-+
-+ { "tune", "Quality tuning mode", OFFSET(tune), AV_OPT_TYPE_INT, { .i64 = 1 }, 0, 2, VE, "tune" },
-+ { "sq", "Visually optimized mode", 0,
-+ AV_OPT_TYPE_CONST, { .i64 = 0 }, INT_MIN, INT_MAX, VE, "tune" },
-+ { "oq", "PSNR / SSIM optimized mode", 0,
-+ AV_OPT_TYPE_CONST, { .i64 = 1 }, INT_MIN, INT_MAX, VE, "tune" },
-+ { "vmaf", "VMAF optimized mode", 0,
-+ AV_OPT_TYPE_CONST, { .i64 = 2 }, INT_MIN, INT_MAX, VE, "tune" },
-+ { "hdr", "High dynamic range input (HDR10)", OFFSET(high_dynamic_range), AV_OPT_TYPE_INT, { .i64 = 0}, 0, 1, VE, "hdr" },
-+ {NULL},
-+};
-+
-+static const AVClass class = {
-+ .class_name = "libsvt_hevc",
-+ .item_name = av_default_item_name,
-+ .option = options,
-+ .version = LIBAVUTIL_VERSION_INT,
-+};
-+
-+static const AVCodecDefault eb_enc_defaults[] = {
-+ { "b", "7M" },
-+ { "qmin", "10" },
-+ { "qmax", "48" },
-+ { "g", "-2" },
-+ { NULL },
-+};
-+
-+AVCodec ff_libsvt_hevc_encoder = {
-+ .name = "libsvt_hevc",
-+ .long_name = NULL_IF_CONFIG_SMALL("SVT-HEVC(Scalable Video Technology for HEVC) encoder"),
-+ .priv_data_size = sizeof(SvtContext),
-+ .type = AVMEDIA_TYPE_VIDEO,
-+ .id = AV_CODEC_ID_HEVC,
-+ .init = eb_enc_init,
-+ .encode2 = eb_encode_frame,
-+ .close = eb_enc_close,
-+ .capabilities = AV_CODEC_CAP_DELAY,
-+ .pix_fmts = (const enum AVPixelFormat[]){ AV_PIX_FMT_YUV420P,
-+ AV_PIX_FMT_YUV420P10,
-+ AV_PIX_FMT_YUV422P,
-+ AV_PIX_FMT_YUV422P10,
-+ AV_PIX_FMT_YUV444P,
-+ AV_PIX_FMT_YUV444P10,
-+ AV_PIX_FMT_NONE },
-+ .priv_class = &class,
-+ .defaults = eb_enc_defaults,
-+ .caps_internal = FF_CODEC_CAP_INIT_CLEANUP,
-+ .wrapper_name = "libsvt_hevc",
-+};
diff --git a/040-ffmpeg-add-av_stream_get_first_dts-for-chromium.patch b/040-ffmpeg-add-av_stream_get_first_dts-for-chromium.patch
new file mode 100644
index 000000000000..4ffb84fd9ff2
--- /dev/null
+++ b/040-ffmpeg-add-av_stream_get_first_dts-for-chromium.patch
@@ -0,0 +1,29 @@
+--- a/libavformat/avformat.h
++++ b/libavformat/avformat.h
+@@ -1170,6 +1170,10 @@ typedef struct AVStreamGroup {
+
+ struct AVCodecParserContext *av_stream_get_parser(const AVStream *s);
+
++// Chromium: We use the internal field first_dts vvv
++int64_t av_stream_get_first_dts(const AVStream *st);
++// Chromium: We use the internal field first_dts ^^^
++
+ #define AV_PROGRAM_RUNNING 1
+
+ /**
+--- a/libavformat/utils.c
++++ b/libavformat/utils.c
+@@ -57,6 +57,13 @@ int ff_unlock_avformat(void)
+ return ff_mutex_unlock(&avformat_mutex) ? -1 : 0;
+ }
+
++// Chromium: We use the internal field first_dts vvv
++int64_t av_stream_get_first_dts(const AVStream *st)
++{
++ return ffstream(st)->first_dts;
++}
++// Chromium: We use the internal field first_dts ^^^
++
+ /* an arbitrarily chosen "sane" max packet size -- 50M */
+ #define SANE_CHUNK_SIZE (50000000)
+
diff --git a/050-ffmpeg-fix-segfault-with-avisynthplus.patch b/050-ffmpeg-fix-segfault-with-avisynthplus.patch
new file mode 100644
index 000000000000..9e2ddb399c9e
--- /dev/null
+++ b/050-ffmpeg-fix-segfault-with-avisynthplus.patch
@@ -0,0 +1,11 @@
+--- a/libavformat/avisynth.c
++++ b/libavformat/avisynth.c
+@@ -142,7 +142,7 @@ static av_cold void avisynth_atexit_handler(void);
+
+ static av_cold int avisynth_load_library(void)
+ {
+- avs_library.library = dlopen(AVISYNTH_LIB, RTLD_NOW | RTLD_LOCAL);
++ avs_library.library = dlopen(AVISYNTH_LIB, RTLD_NOW | RTLD_DEEPBIND);
+ if (!avs_library.library)
+ return AVERROR_UNKNOWN;
+
diff --git a/060-ffmpeg-fix-nvidia-vulkan-decoding-segfault.patch b/060-ffmpeg-fix-nvidia-vulkan-decoding-segfault.patch
new file mode 100644
index 000000000000..7caf065eb55a
--- /dev/null
+++ b/060-ffmpeg-fix-nvidia-vulkan-decoding-segfault.patch
@@ -0,0 +1,12 @@
+--- a/libavutil/vulkan.c
++++ b/libavutil/vulkan.c
+@@ -607,6 +607,9 @@ int ff_vk_exec_add_dep_frame(FFVulkanContext *s, FFVkExecContext *e, AVFrame *f,
+ uint32_t *queue_family_dst;
+ VkAccessFlagBits *access_dst;
+
++ if (!f || !f->hw_frames_ctx)
++ return 1;
++
+ AVHWFramesContext *hwfc = (AVHWFramesContext *)f->hw_frames_ctx->data;
+ AVVulkanFramesContext *vkfc = hwfc->hwctx;
+ AVVkFrame *vkf = (AVVkFrame *)f->data[0];
diff --git a/PKGBUILD b/PKGBUILD
index bc30a223900e..4b33e296fffe 100644
--- a/PKGBUILD
+++ b/PKGBUILD
@@ -1,87 +1,193 @@
# Maintainer: Daniel Bermond <dbermond@archlinux.org>
-_svt_hevc_ver='1.4.3'
-_svt_vp9_ver='0.2.2'
-
pkgname=ffmpeg-full-git
-pkgver=4.4.r98604.g11a2d05b3f
+pkgver=7.1.r115075.gf8a613d6a8
pkgrel=1
+_svt_hevc_ver='ed80959ebb5586aa7763c91a397d44be1798587c'
+_svt_vp9_ver='3b9a3fa43da4cc5fe60c7d22afe2be15341392ea'
pkgdesc='Complete solution to record, convert and stream audio and video (all possible features including libfdk-aac; git version)'
arch=('x86_64')
url='https://www.ffmpeg.org/'
-license=('custom: nonfree and unredistributable')
+license=('LicenseRef-nonfree-and-unredistributable')
depends=(
- # official repositories:
- 'alsa-lib' 'avisynthplus' 'bzip2' 'frei0r-plugins' 'libgcrypt' 'gmp' 'gnutls'
- 'ladspa' 'libass' 'aom' 'aribb24' 'libbluray' 'libbs2b' 'libcaca' 'celt'
- 'libcdio-paranoia' 'codec2' 'dav1d' 'libdc1394' 'libavc1394' 'libfdk-aac'
- 'fontconfig' 'freetype2' 'fribidi' 'glslang' 'libgme' 'gsm' 'libiec61883'
- 'libilbc' 'jack' 'kvazaar' 'lensfun' 'libmodplug' 'lame' 'opencore-amr'
- 'openjpeg2' 'opus' 'pulseaudio' 'librabbitmq-c' 'rav1e' 'librsvg' 'rubberband'
- 'rtmpdump' 'snappy' 'libsoxr' 'speex' 'srt' 'libssh' 'svt-hevc' 'svt-av1'
- 'svt-vp9' 'tensorflow' 'tesseract' 'libtheora' 'twolame' 'v4l-utils'
- 'vid.stab' 'vmaf' 'libvorbis' 'libvpx' 'wavpack' 'libwebp' 'x264' 'x265'
- 'libxcb' 'xvidcore' 'libxml2' 'zimg' 'zeromq' 'zvbi' 'lv2' 'lilv' 'xz'
- 'libmysofa' 'openal' 'ocl-icd' 'libgl' 'sndio' 'sdl2' 'vapoursynth'
- 'vulkan-icd-loader' 'libxv' 'libx11' 'libxext' 'zlib' 'cuda'
- 'libomxil-bellagio' 'libdrm' 'intel-media-sdk' 'libva' 'libvdpau'
- # AUR:
- 'chromaprint-fftw' 'davs2' 'flite1-patched' 'libklvanc-git' 'openh264'
- 'libopenmpt-svn' 'shine' 'vo-amrwbenc' 'xavs' 'xavs2' 'pocketsphinx'
- 'rockchip-mpp'
-)
-makedepends=(
- # official repositories:
- 'git' 'nasm' 'opencl-headers' 'vulkan-headers' 'ffnvcodec-headers' 'clang'
- # AUR:
- 'decklink-sdk' 'amf-headers'
+ 'alsa-lib'
+ 'aom'
+ 'aribb24'
+ 'libaribcaption'
+ 'avisynthplus'
+ 'bzip2'
+ 'cairo'
+ 'celt'
+ 'codec2'
+ 'cuda'
+ 'dav1d'
+ 'flite1'
+ 'fontconfig'
+ 'freetype2'
+ 'frei0r-plugins'
+ 'fribidi'
+ 'glib2'
+ 'glslang'
+ 'gmp'
+ 'gnutls'
+ 'gsm'
+ 'harfbuzz'
+ 'jack'
+ 'kvazaar'
+ 'ladspa'
+ 'lame'
+ 'libavc1394'
+ 'lcms2'
+ 'lensfun-git'
+ 'libass'
+ 'libbluray'
+ 'libbs2b'
+ 'libcaca'
+ 'libcdio-paranoia'
+ 'libdc1394'
+ 'libdrm'
+ 'libfdk-aac'
+ 'libgcrypt'
+ 'libgl'
+ 'libgme'
+ 'libiec61883'
+ 'libilbc'
+ 'libjxl'
+ 'libmodplug'
+ 'libmysofa'
+ 'libomxil-bellagio'
+ 'libopenmpt'
+ 'libplacebo'
+ 'libpulse'
+ 'librabbitmq-c'
+ 'libraw1394'
+ 'librsvg'
+ 'libsoxr'
+ 'libssh'
+ 'libtheora'
+ 'libva'
+ 'libvdpau'
+ 'libvorbis'
+ 'libvpl'
+ 'libvpx'
+ 'libx11'
+ 'libxcb'
+ 'libxext'
+ 'libxml2'
+ 'libxv'
+ 'libwebp'
+ 'lilv'
+ 'lv2'
+ 'ocl-icd'
+ 'openal'
+ 'opencore-amr'
+ 'opencv2'
+ 'openh264'
+ 'openjpeg2'
+ 'openvino'
+ 'opus'
+ 'qrencode'
+ 'quirc'
+ 'rav1e'
+ 'rtmpdump'
+ 'rubberband'
+ 'sdl2'
+ 'smbclient'
+ 'snappy'
+ 'sndio'
+ 'speex'
+ 'spirv-tools'
+ 'srt'
+ 'svt-av1'
+ 'svt-hevc'
+ 'svt-vp9'
+ 'tesseract'
+ 'twolame'
+ 'v4l-utils'
+ 'vapoursynth'
+ 'vid.stab'
+ 'vmaf'
+ 'vpl-runtime'
+ 'vulkan-icd-loader'
+ 'x264'
+ 'x265'
+ 'xvidcore'
+ 'xz'
+ 'zeromq'
+ 'zimg'
+ 'zlib'
+ 'zvbi'
+ 'chromaprint-fftw'
+ 'davs2'
+ 'libklvanc'
+ 'librist'
+ 'rockchip-mpp'
+ 'shine'
+ 'uavs3d-git'
+ 'vo-amrwbenc'
+ 'xavs'
+ 'xavs2'
+ 'xevd'
+ 'xeve'
)
+makedepends=('git' 'clang' 'amf-headers' 'ffnvcodec-headers' 'nasm' 'opencl-headers'
+ 'vulkan-headers' 'decklink-sdk')
provides=('libavcodec.so' 'libavdevice.so' 'libavfilter.so' 'libavformat.so'
- 'libavutil.so' 'libpostproc.so' 'libavresample.so' 'libswscale.so'
- 'libswresample.so' 'ffmpeg' 'ffmpeg-full' 'ffmpeg-git')
+ 'libavutil.so' 'libpostproc.so' 'libswscale.so' 'libswresample.so'
+ 'ffmpeg' 'ffmpeg-full' 'ffmpeg-git')
conflicts=('ffmpeg')
source=('git+https://git.ffmpeg.org/ffmpeg.git'
- '010-ffmpeg-fix-vmaf-model-path.patch'
- '015-ffmpeg-cuda11-fix.patch'
- '020-ffmpeg-add-svt-hevc.patch'
- "030-ffmpeg-add-svt-hevc-docs-${_svt_hevc_ver}.patch"::"https://raw.githubusercontent.com/OpenVisualCloud/SVT-HEVC/v${_svt_hevc_ver}/ffmpeg_plugin/0002-doc-Add-libsvt_hevc-encoder-docs.patch"
- "040-ffmpeg-add-svt-vp9-${_svt_vp9_ver}.patch"::"https://raw.githubusercontent.com/OpenVisualCloud/SVT-VP9/v${_svt_vp9_ver}/ffmpeg_plugin/master-0001-Add-ability-for-ffmpeg-to-run-svt-vp9.patch"
+ #"005-ffmpeg-add-svt-hevc-g${_svt_hevc_ver:0:7}.patch"
+ #"006-ffmpeg-add-svt-vp9-g${_svt_vp9_ver:0:7}.patch"
+ "010-ffmpeg-add-svt-hevc-g${_svt_hevc_ver:0:7}.patch"::"https://raw.githubusercontent.com/OpenVisualCloud/SVT-HEVC/${_svt_hevc_ver}/ffmpeg_plugin/master-0001-lavc-svt_hevc-add-libsvt-hevc-encoder-wrapper.patch"
+ "020-ffmpeg-add-svt-hevc-docs-g${_svt_hevc_ver:0:7}.patch"::"https://raw.githubusercontent.com/OpenVisualCloud/SVT-HEVC/${_svt_hevc_ver}/ffmpeg_plugin/0002-doc-Add-libsvt_hevc-encoder-docs.patch"
+ "030-ffmpeg-add-svt-vp9-g${_svt_vp9_ver:0:7}.patch"::"https://raw.githubusercontent.com/OpenVisualCloud/SVT-VP9/${_svt_vp9_ver}/ffmpeg_plugin/master-0001-Add-ability-for-ffmpeg-to-run-svt-vp9.patch"
+ '040-ffmpeg-add-av_stream_get_first_dts-for-chromium.patch'
+ '050-ffmpeg-fix-segfault-with-avisynthplus.patch'
+ '060-ffmpeg-fix-nvidia-vulkan-decoding-segfault.patch'
'LICENSE')
sha256sums=('SKIP'
- 'b6fcef2f4cbb1daa47d17245702fbd67ab3289b6b16f090ab99b9c2669453a02'
- '12cb889fd2ddd03ecc0f5fa2e345c7787ff4b28c4d284a5c694c71d5a590763c'
- '65699b95643ac24f57de503da83a8d5ad39be9fde216fa6a502b09a3f5120c64'
- '1499e419dda72b1604dc5e3959668f3843292ff56bfba78734e31510ba576de0'
- 'b74be6d805672210e226e7c0b403f88b0ee8a53c732c9bdc873c4b44aeb75c96'
+ '9047e18d34716812d4ea7eafc1d0fd8b376d922a4b6b4dc20237662fcaf0c996'
+ 'a164ebdc4d281352bf7ad1b179aae4aeb33f1191c444bed96cb8ab333c046f81'
+ '59da61f2b2c556fbe0cdbf84bcc00977ee3d2447085decb21f6298226559f2aa'
+ 'b54b47f4f3837ddc41227bd2202ea3c62e2ddb06c6cfbd7a9adc304d641d79ba'
+ '0e277c0d5e33612ca7a11025958133b17bfbe23168b0aee5bd07f674f6fd7440'
+ 'f2f73793a45c9dffb033f23c1b10a612abe6528cbd06c04b06e8189d1ef208be'
'04a7176400907fd7db0d69116b99de49e582a6e176b3bfb36a03e50a4cb26a36')
prepare() {
rm -f ffmpeg/libavcodec/libsvt_{hevc,vp9}.c
- patch -d ffmpeg -Np1 -i "${srcdir}/010-ffmpeg-fix-vmaf-model-path.patch"
- patch -d ffmpeg -Np1 -i "${srcdir}/015-ffmpeg-cuda11-fix.patch"
- patch -d ffmpeg -Np1 -i "${srcdir}/020-ffmpeg-add-svt-hevc.patch"
- patch -d ffmpeg -Np1 -i "${srcdir}/030-ffmpeg-add-svt-hevc-docs-${_svt_hevc_ver}.patch"
- patch -d ffmpeg -Np1 -i "${srcdir}/040-ffmpeg-add-svt-vp9-${_svt_vp9_ver}.patch"
+ #cp --remove-destination "$(readlink "010-ffmpeg-add-svt-hevc-g${_svt_hevc_ver:0:7}.patch")" \
+ # "010-ffmpeg-add-svt-hevc-g${_svt_hevc_ver:0:7}.patch"
+ #patch -Np1 -i "005-ffmpeg-add-svt-hevc-g${_svt_hevc_ver:0:7}.patch"
+ #cp --remove-destination "$(readlink "030-ffmpeg-add-svt-vp9-g${_svt_vp9_ver:0:7}.patch")" \
+ # "030-ffmpeg-add-svt-vp9-g${_svt_vp9_ver:0:7}.patch"
+ #patch -Np1 -i "006-ffmpeg-add-svt-vp9-g${_svt_vp9_ver:0:7}.patch"
+ patch -d ffmpeg -Np1 -i "${srcdir}/010-ffmpeg-add-svt-hevc-g${_svt_hevc_ver:0:7}.patch"
+ patch -d ffmpeg -Np1 -i "${srcdir}/020-ffmpeg-add-svt-hevc-docs-g${_svt_hevc_ver:0:7}.patch"
+ patch -d ffmpeg -Np1 -i "${srcdir}/030-ffmpeg-add-svt-vp9-g${_svt_vp9_ver:0:7}.patch"
+ patch -d ffmpeg -Np1 -i "${srcdir}/040-ffmpeg-add-av_stream_get_first_dts-for-chromium.patch"
+ patch -d ffmpeg -Np1 -i "${srcdir}/050-ffmpeg-fix-segfault-with-avisynthplus.patch"
+ patch -d ffmpeg -Np1 -i "${srcdir}/060-ffmpeg-fix-nvidia-vulkan-decoding-segfault.patch"
}
pkgver() {
- local _version
- local _revision
- local _shorthash
- _version="$(git -C ffmpeg describe --tags --long | awk -F'-' '{ sub(/^n/, "", $1); print $1 }')"
- _revision="$(git -C ffmpeg describe --tags --match 'N' | awk -F'-' '{ print $2 }')"
- _shorthash="$(git -C ffmpeg rev-parse --short HEAD)"
- printf '%s.r%s.g%s' "$_version" "$_revision" "$_shorthash"
+ printf '%s.r%s.g%s' "$(git -C ffmpeg describe --tags --long | awk -F'-' '{ sub(/^n/, "", $1); print $1 }')" \
+ "$(git -C ffmpeg describe --tags --match 'N' | awk -F'-' '{ print $2 }')" \
+ "$(git -C ffmpeg rev-parse --short HEAD)"
}
build() {
cd ffmpeg
printf '%s\n' ' -> Running ffmpeg configure script...'
+ export CFLAGS+=' -I/opt/cuda/include'
+ export LDFLAGS+=' -L/opt/cuda/lib64'
+ export PKG_CONFIG_PATH="/opt/intel/openvino/runtime/lib/intel64/pkgconfig${PKG_CONFIG_PATH:+":${PKG_CONFIG_PATH}"}"
+
./configure \
--prefix='/usr' \
- --extra-cflags='-I/opt/cuda/include -I/usr/include/tensorflow' \
- --extra-ldflags='-L/opt/cuda/lib64' \
+ --enable-lto \
\
--disable-rpath \
--enable-gpl \
@@ -90,8 +196,8 @@ build() {
--enable-shared \
--disable-static \
--disable-stripping \
+ --disable-htmlpages \
--enable-gray \
- --enable-avresample \
\
--enable-alsa \
--enable-avisynth \
@@ -103,8 +209,10 @@ build() {
--enable-gnutls \
--enable-iconv \
--enable-ladspa \
+ --enable-lcms2 \
--enable-libaom \
--enable-libaribb24 \
+ --enable-libaribcaption \
--enable-libass \
--enable-libbluray \
--enable-libbs2b \
@@ -117,15 +225,17 @@ build() {
--enable-libdc1394 \
--enable-libfdk-aac \
--enable-libflite \
- --enable-fontconfig \
+ --enable-libfontconfig \
--enable-libfreetype \
--enable-libfribidi \
+ --enable-libharfbuzz \
--enable-libglslang \
--enable-libgme \
--enable-libgsm \
--enable-libiec61883 \
--enable-libilbc \
--enable-libjack \
+ --enable-libjxl \
--enable-libklvanc \
--enable-libkvazaar \
--enable-liblensfun \
@@ -133,43 +243,51 @@ build() {
--enable-libmp3lame \
--enable-libopencore-amrnb \
--enable-libopencore-amrwb \
- --disable-libopencv \
+ --enable-libopencv \
--enable-libopenh264 \
--enable-libopenjpeg \
--enable-libopenmpt \
- --disable-libopenvino \
+ --enable-libopenvino \
--enable-libopus \
+ --enable-libplacebo \
--enable-libpulse \
+ --enable-libqrencode \
+ --enable-libquirc \
--enable-librabbitmq \
--enable-librav1e \
+ --enable-librist \
--enable-librsvg \
--enable-librubberband \
--enable-librtmp \
+ --disable-libshaderc \
--enable-libshine \
- --disable-libsmbclient \
+ --enable-libsmbclient \
--enable-libsnappy \
--enable-libsoxr \
--enable-libspeex \
--enable-libsrt \
--enable-libssh \
- --enable-libsvthevc \
--enable-libsvtav1 \
- --enable-libtensorflow \
+ --enable-libsvthevc \
+ --enable-libsvtvp9 \
+ --disable-libtensorflow \
--enable-libtesseract \
--enable-libtheora \
--disable-libtls \
+ --disable-libtorch \
--enable-libtwolame \
+ --enable-libuavs3d \
--enable-libv4l2 \
--enable-libvidstab \
--enable-libvmaf \
--enable-libvo-amrwbenc \
--enable-libvorbis \
--enable-libvpx \
- --enable-libsvtvp9 \
- --enable-libwavpack \
--enable-libwebp \
--enable-libx264 \
--enable-libx265 \
+ --enable-libxevd \
+ --enable-libxeve \
--enable-libxavs \
--enable-libxavs2 \
--enable-libxcb \
@@ -190,7 +308,7 @@ build() {
--enable-opencl \
--enable-opengl \
--disable-openssl \
- --enable-pocketsphinx \
+ --disable-pocketsphinx \
--enable-sndio \
--enable-sdl2 \
--enable-vapoursynth \
@@ -204,7 +322,7 @@ build() {
--enable-cuvid \
--enable-ffnvcodec \
--enable-libdrm \
- --enable-libmfx \
+ --enable-libvpl \
--enable-libnpp \
--enable-nvdec \
--enable-nvenc \