commit 870cf598eb695acdd126376997e41706e0de4514
Author: Leigh Scott <leigh123linux(a)gmail.com>
Date: Sat Apr 6 17:47:15 2024 +0100
Rebuild for new x265 version
compat-ffmpeg4.spec | 8 +-
configure-fix-nvenc-detection.patch | 22 +++++
nvenc-stop-using-deprecated-rc-modes.patch | 130 +++++++++++++++++++++++++++++
3 files changed, 158 insertions(+), 2 deletions(-)
---
diff --git a/compat-ffmpeg4.spec b/compat-ffmpeg4.spec
index 99adc90..624e63d 100644
--- a/compat-ffmpeg4.spec
+++ b/compat-ffmpeg4.spec
@@ -20,7 +20,6 @@
%endif
%if 0%{?fedora}
-%global _without_nvenc 1
%ifarch x86_64
%global _with_mfx 1
%endif
@@ -44,13 +43,15 @@
Summary: Digital VCR and streaming server
Name: compat-ffmpeg4
Version: 4.4.4
-Release: 4%{?dist}
+Release: 5%{?dist}
License: %{ffmpeg_license}
URL:
https://ffmpeg.org/
Source0: %{url}/releases/ffmpeg-%{version}.tar.xz
Source1: %{url}/releases/ffmpeg-%{version}.tar.xz.asc
Source2: %{url}/ffmpeg-devel.asc
Patch0: 25cd95a9dc3510c3cc0d7aad6f9d83f6a1078c7e.patch
+Patch1: configure-fix-nvenc-detection.patch
+Patch2: nvenc-stop-using-deprecated-rc-modes.patch
BuildRequires: gcc
BuildRequires: alsa-lib-devel
@@ -333,6 +334,9 @@ rm -rf %{buildroot}/%{_datadir}/compat-ffmpeg4/
%changelog
+* Sat Apr 06 2024 Leigh Scott <leigh123linux(a)gmail.com> - 4.4.4-5
+- Rebuild for new x265 version
+
* Sat Feb 03 2024 RPM Fusion Release Engineering <sergiomb(a)rpmfusion.org> -
4.4.4-4
- Rebuilt for
https://fedoraproject.org/wiki/Fedora_40_Mass_Rebuild
diff --git a/configure-fix-nvenc-detection.patch b/configure-fix-nvenc-detection.patch
new file mode 100644
index 0000000..a827225
--- /dev/null
+++ b/configure-fix-nvenc-detection.patch
@@ -0,0 +1,22 @@
+From 03823ac0c6a38bd6ba972539e3203a592579792f Mon Sep 17 00:00:00 2001
+From: Timo Rothenpieler <timo(a)rothenpieler.org>
+Date: Thu, 1 Jun 2023 23:24:43 +0200
+Subject: [PATCH] configure: use non-deprecated nvenc GUID for conftest
+
+---
+ configure | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/configure b/configure
+index 495493aa0e8a..ae56540f4eb0 100755
+--- a/configure
++++ b/configure
+@@ -7079,7 +7079,7 @@ enabled nvenc &&
+ test_cc -I$source_path <<EOF || disable nvenc
+ #include <ffnvcodec/nvEncodeAPI.h>
+ NV_ENCODE_API_FUNCTION_LIST flist;
+-void f(void) { struct { const GUID guid; } s[] = { { NV_ENC_PRESET_HQ_GUID } }; }
++void f(void) { struct { const GUID guid; } s[] = { { NV_ENC_CODEC_H264_GUID } }; }
+ int main(void) { return 0; }
+ EOF
+
diff --git a/nvenc-stop-using-deprecated-rc-modes.patch
b/nvenc-stop-using-deprecated-rc-modes.patch
new file mode 100644
index 0000000..7bf48f3
--- /dev/null
+++ b/nvenc-stop-using-deprecated-rc-modes.patch
@@ -0,0 +1,130 @@
+diff -uNrp a/libavcodec/nvenc.c b/libavcodec/nvenc.c
+--- a/libavcodec/nvenc.c 2023-04-12 19:02:02.000000000 +0100
++++ b/libavcodec/nvenc.c 2024-04-06 17:42:31.123436353 +0100
+@@ -39,9 +39,14 @@
+ #define CHECK_CU(x) FF_CUDA_CHECK_DL(avctx, dl_fn->cuda_dl, x)
+
+ #define NVENC_CAP 0x30
++
++#ifndef NVENC_NO_DEPRECATED_RC
+ #define IS_CBR(rc) (rc == NV_ENC_PARAMS_RC_CBR || \
+ rc == NV_ENC_PARAMS_RC_CBR_LOWDELAY_HQ || \
+ rc == NV_ENC_PARAMS_RC_CBR_HQ)
++#else
++#define IS_CBR(rc) (rc == NV_ENC_PARAMS_RC_CBR)
++#endif
+
+ const enum AVPixelFormat ff_nvenc_pix_fmts[] = {
+ AV_PIX_FMT_YUV420P,
+@@ -825,6 +830,7 @@ static void nvenc_override_rate_control(
+ case NV_ENC_PARAMS_RC_CONSTQP:
+ set_constqp(avctx);
+ return;
++#ifndef NVENC_NO_DEPRECATED_RC
+ case NV_ENC_PARAMS_RC_VBR_MINQP:
+ if (avctx->qmin < 0) {
+ av_log(avctx, AV_LOG_WARNING,
+@@ -835,12 +841,15 @@ static void nvenc_override_rate_control(
+ }
+ /* fall through */
+ case NV_ENC_PARAMS_RC_VBR_HQ:
++#endif
+ case NV_ENC_PARAMS_RC_VBR:
+ set_vbr(avctx);
+ break;
+ case NV_ENC_PARAMS_RC_CBR:
++#ifndef NVENC_NO_DEPRECATED_RC
+ case NV_ENC_PARAMS_RC_CBR_HQ:
+ case NV_ENC_PARAMS_RC_CBR_LOWDELAY_HQ:
++#endif
+ break;
+ }
+
+@@ -1074,12 +1083,14 @@ static av_cold int nvenc_setup_h264_conf
+
+ h264->outputPictureTimingSEI = 1;
+
++#ifndef NVENC_NO_DEPRECATED_RC
+ if (cc->rcParams.rateControlMode == NV_ENC_PARAMS_RC_CBR_LOWDELAY_HQ ||
+ cc->rcParams.rateControlMode == NV_ENC_PARAMS_RC_CBR_HQ ||
+ cc->rcParams.rateControlMode == NV_ENC_PARAMS_RC_VBR_HQ) {
+ h264->adaptiveTransformMode = NV_ENC_H264_ADAPTIVE_TRANSFORM_ENABLE;
+ h264->fmoMode = NV_ENC_H264_FMO_DISABLE;
+ }
++#endif
+
+ if (ctx->flags & NVENC_LOSSLESS) {
+ h264->qpPrimeYZeroTransformBypassFlag = 1;
+diff -uNrp a/libavcodec/nvenc.h b/libavcodec/nvenc.h
+--- a/libavcodec/nvenc.h 2023-04-12 19:01:50.000000000 +0100
++++ b/libavcodec/nvenc.h 2024-04-06 17:42:31.123436353 +0100
+@@ -70,6 +70,11 @@ typedef void ID3D11Device;
+ #define NVENC_HAVE_H264_LVL6
+ #endif
+
++// SDK 12.1 compile time feature checks
++#if NVENCAPI_CHECK_VERSION(12, 1)
++#define NVENC_NO_DEPRECATED_RC
++#endif
++
+ typedef struct NvencSurface
+ {
+ NV_ENC_INPUT_PTR input_surface;
+diff -uNrp a/libavcodec/nvenc_h264.c b/libavcodec/nvenc_h264.c
+--- a/libavcodec/nvenc_h264.c 2023-04-12 19:01:50.000000000 +0100
++++ b/libavcodec/nvenc_h264.c 2024-04-06 17:42:31.124436369 +0100
+@@ -100,6 +100,7 @@ static const AVOption options[] = {
+ { "constqp", "Constant QP mode", 0,
AV_OPT_TYPE_CONST, { .i64 = NV_ENC_PARAMS_RC_CONSTQP }, 0,
0, VE, "rc" },
+ { "vbr", "Variable bitrate mode", 0,
AV_OPT_TYPE_CONST, { .i64 = NV_ENC_PARAMS_RC_VBR }, 0,
0, VE, "rc" },
+ { "cbr", "Constant bitrate mode", 0,
AV_OPT_TYPE_CONST, { .i64 = NV_ENC_PARAMS_RC_CBR }, 0,
0, VE, "rc" },
++#ifndef NVENC_NO_DEPRECATED_RC
+ { "vbr_minqp", "Variable bitrate mode with MinQP
(deprecated)", 0, AV_OPT_TYPE_CONST, { .i64 = RCD(NV_ENC_PARAMS_RC_VBR_MINQP)
}, 0, 0, VE, "rc" },
+ { "ll_2pass_quality", "Multi-pass optimized for image quality
(deprecated)",
+ 0,
AV_OPT_TYPE_CONST, { .i64 = RCD(NV_ENC_PARAMS_RC_2_PASS_QUALITY) }, 0, 0, VE,
"rc" },
+@@ -109,6 +110,17 @@ static const AVOption options[] = {
+ { "cbr_ld_hq", "Constant bitrate low delay high quality
mode", 0, AV_OPT_TYPE_CONST, { .i64 = RCD(NV_ENC_PARAMS_RC_CBR_LOWDELAY_HQ)
}, 0, 0, VE, "rc" },
+ { "cbr_hq", "Constant bitrate high quality mode", 0,
AV_OPT_TYPE_CONST, { .i64 = RCD(NV_ENC_PARAMS_RC_CBR_HQ) }, 0,
0, VE, "rc" },
+ { "vbr_hq", "Variable bitrate high quality mode", 0,
AV_OPT_TYPE_CONST, { .i64 = RCD(NV_ENC_PARAMS_RC_VBR_HQ) }, 0,
0, VE, "rc" },
++#else
++ { "vbr_minqp", "Variable bitrate mode with MinQP
(deprecated)", 0, AV_OPT_TYPE_CONST, { .i64 = RCD(NV_ENC_PARAMS_RC_VBR) },
0, 0, VE, "rc" },
++ { "ll_2pass_quality", "Multi-pass optimized for image quality
(deprecated)",
++ 0,
AV_OPT_TYPE_CONST, { .i64 = RCD(NV_ENC_PARAMS_RC_VBR) }, 0, 0, VE,
"rc" },
++ { "ll_2pass_size", "Multi-pass optimized for constant frame size
(deprecated)",
++ 0,
AV_OPT_TYPE_CONST, { .i64 = RCD(NV_ENC_PARAMS_RC_CBR) }, 0, 0, VE,
"rc" },
++ { "vbr_2pass", "Multi-pass variable bitrate mode
(deprecated)", 0, AV_OPT_TYPE_CONST, { .i64 = RCD(NV_ENC_PARAMS_RC_VBR) },
0, 0, VE, "rc" },
++ { "cbr_ld_hq", "Constant bitrate low delay high quality
mode", 0, AV_OPT_TYPE_CONST, { .i64 = RCD(NV_ENC_PARAMS_RC_CBR) },
0, 0, VE, "rc" },
++ { "cbr_hq", "Constant bitrate high quality mode", 0,
AV_OPT_TYPE_CONST, { .i64 = RCD(NV_ENC_PARAMS_RC_CBR) }, 0,
0, VE, "rc" },
++ { "vbr_hq", "Variable bitrate high quality mode", 0,
AV_OPT_TYPE_CONST, { .i64 = RCD(NV_ENC_PARAMS_RC_VBR) }, 0,
0, VE, "rc" },
++#endif
+ { "rc-lookahead", "Number of frames to look ahead for
rate-control",
+ OFFSET(rc_lookahead),
AV_OPT_TYPE_INT, { .i64 = 0 }, 0, INT_MAX, VE },
+ { "surfaces", "Number of concurrent surfaces",
OFFSET(nb_surfaces), AV_OPT_TYPE_INT, { .i64 = 0 }, 0, MAX_REGISTERED_FRAMES, VE },
+diff -uNrp a/libavcodec/nvenc_hevc.c b/libavcodec/nvenc_hevc.c
+--- a/libavcodec/nvenc_hevc.c 2023-04-12 19:01:50.000000000 +0100
++++ b/libavcodec/nvenc_hevc.c 2024-04-06 17:42:31.124436369 +0100
+@@ -89,6 +89,7 @@ static const AVOption options[] = {
+ { "constqp", "Constant QP mode", 0,
AV_OPT_TYPE_CONST, { .i64 = NV_ENC_PARAMS_RC_CONSTQP }, 0,
0, VE, "rc" },
+ { "vbr", "Variable bitrate mode", 0,
AV_OPT_TYPE_CONST, { .i64 = NV_ENC_PARAMS_RC_VBR }, 0,
0, VE, "rc" },
+ { "cbr", "Constant bitrate mode", 0,
AV_OPT_TYPE_CONST, { .i64 = NV_ENC_PARAMS_RC_CBR }, 0,
0, VE, "rc" },
++#ifndef NVENC_NO_DEPRECATED_RC
+ { "vbr_minqp", "Variable bitrate mode with MinQP
(deprecated)", 0, AV_OPT_TYPE_CONST, { .i64 = RCD(NV_ENC_PARAMS_RC_VBR_MINQP)
}, 0, 0, VE, "rc" },
+ { "ll_2pass_quality", "Multi-pass optimized for image quality
(deprecated)",
+ 0,
AV_OPT_TYPE_CONST, { .i64 = RCD(NV_ENC_PARAMS_RC_2_PASS_QUALITY) }, 0, 0, VE,
"rc" },
+@@ -98,6 +99,17 @@ static const AVOption options[] = {
+ { "cbr_ld_hq", "Constant bitrate low delay high quality
mode", 0, AV_OPT_TYPE_CONST, { .i64 = RCD(NV_ENC_PARAMS_RC_CBR_LOWDELAY_HQ)
}, 0, 0, VE, "rc" },
+ { "cbr_hq", "Constant bitrate high quality mode", 0,
AV_OPT_TYPE_CONST, { .i64 = RCD(NV_ENC_PARAMS_RC_CBR_HQ) }, 0,
0, VE, "rc" },
+ { "vbr_hq", "Variable bitrate high quality mode", 0,
AV_OPT_TYPE_CONST, { .i64 = RCD(NV_ENC_PARAMS_RC_VBR_HQ) }, 0,
0, VE, "rc" },
++#else
++ { "vbr_minqp", "Variable bitrate mode with MinQP
(deprecated)", 0, AV_OPT_TYPE_CONST, { .i64 = RCD(NV_ENC_PARAMS_RC_VBR) },
0, 0, VE, "rc" },
++ { "ll_2pass_quality", "Multi-pass optimized for image quality
(deprecated)",
++ 0,
AV_OPT_TYPE_CONST, { .i64 = RCD(NV_ENC_PARAMS_RC_VBR) }, 0, 0, VE,
"rc" },
++ { "ll_2pass_size", "Multi-pass optimized for constant frame size
(deprecated)",
++ 0,
AV_OPT_TYPE_CONST, { .i64 = RCD(NV_ENC_PARAMS_RC_CBR) }, 0, 0, VE,
"rc" },
++ { "vbr_2pass", "Multi-pass variable bitrate mode
(deprecated)", 0, AV_OPT_TYPE_CONST, { .i64 = RCD(NV_ENC_PARAMS_RC_VBR) },
0, 0, VE, "rc" },
++ { "cbr_ld_hq", "Constant bitrate low delay high quality
mode", 0, AV_OPT_TYPE_CONST, { .i64 = RCD(NV_ENC_PARAMS_RC_CBR) },
0, 0, VE, "rc" },
++ { "cbr_hq", "Constant bitrate high quality mode", 0,
AV_OPT_TYPE_CONST, { .i64 = RCD(NV_ENC_PARAMS_RC_CBR) }, 0,
0, VE, "rc" },
++ { "vbr_hq", "Variable bitrate high quality mode", 0,
AV_OPT_TYPE_CONST, { .i64 = RCD(NV_ENC_PARAMS_RC_VBR) }, 0,
0, VE, "rc" },
++#endif
+ { "rc-lookahead", "Number of frames to look ahead for
rate-control",
+ OFFSET(rc_lookahead),
AV_OPT_TYPE_INT, { .i64 = 0 }, 0, INT_MAX, VE },
+ { "surfaces", "Number of concurrent surfaces",
OFFSET(nb_surfaces), AV_OPT_TYPE_INT, { .i64 = 0 }, 0, MAX_REGISTERED_FRAMES, VE },