From 870cf598eb695acdd126376997e41706e0de4514 Mon Sep 17 00:00:00 2001 From: Leigh Scott Date: Sat, 6 Apr 2024 17:47:15 +0100 Subject: [PATCH] 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(-) create mode 100644 configure-fix-nvenc-detection.patch create mode 100644 nvenc-stop-using-deprecated-rc-modes.patch 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 - 4.4.4-5 +- Rebuild for new x265 version + * Sat Feb 03 2024 RPM Fusion Release Engineering - 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 +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 < + 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 },