PR #23570 opened by Timo Rothenpieler (BtbN) URL: https://code.ffmpeg.org/FFmpeg/FFmpeg/pulls/23570 Patch URL: https://code.ffmpeg.org/FFmpeg/FFmpeg/pulls/23570.patch
This is meant to go in with the 9.0 version bump, since removing all those options is very much a breaking change. >From 2fea7425293d7f04e50884adf2fe30014a363b99 Mon Sep 17 00:00:00 2001 From: Timo Rothenpieler <[email protected]> Date: Tue, 23 Jun 2026 23:36:14 +0200 Subject: [PATCH 1/7] avcodec/nvenc: remove support for SDK versions older than 11.1 --- configure | 4 +- libavcodec/nvenc.c | 160 +--------------------------------------- libavcodec/nvenc.h | 36 --------- libavcodec/nvenc_h264.c | 25 ------- libavcodec/nvenc_hevc.c | 19 ----- 5 files changed, 4 insertions(+), 240 deletions(-) diff --git a/configure b/configure index 2bf25e9755..b992bada96 100755 --- a/configure +++ b/configure @@ -7223,9 +7223,7 @@ if ! disabled ffnvcodec; then ffnv_hdr_list="ffnvcodec/nvEncodeAPI.h ffnvcodec/dynlink_cuda.h ffnvcodec/dynlink_cuviddec.h ffnvcodec/dynlink_nvcuvid.h" check_pkg_config ffnvcodec "ffnvcodec >= 12.1.14.0" "$ffnv_hdr_list" "" || \ check_pkg_config ffnvcodec "ffnvcodec >= 12.0.16.1 ffnvcodec < 12.1" "$ffnv_hdr_list" "" || \ - check_pkg_config ffnvcodec "ffnvcodec >= 11.1.5.3 ffnvcodec < 12.0" "$ffnv_hdr_list" "" || \ - check_pkg_config ffnvcodec "ffnvcodec >= 11.0.10.3 ffnvcodec < 11.1" "$ffnv_hdr_list" "" || \ - check_pkg_config ffnvcodec "ffnvcodec >= 8.1.24.15 ffnvcodec < 8.2" "$ffnv_hdr_list" "" + check_pkg_config ffnvcodec "ffnvcodec >= 11.1.5.3 ffnvcodec < 12.0" "$ffnv_hdr_list" "" fi if enabled_all libglslang libshaderc; then diff --git a/libavcodec/nvenc.c b/libavcodec/nvenc.c index 257b6d3892..5ef0ed572a 100644 --- a/libavcodec/nvenc.c +++ b/libavcodec/nvenc.c @@ -180,17 +180,14 @@ static int nvenc_map_error(NVENCSTATUS err, const char **desc) static int nvenc_print_error(AVCodecContext *avctx, NVENCSTATUS err, const char *error_string) { + NvencContext *ctx = avctx->priv_data; + NV_ENCODE_API_FUNCTION_LIST *p_nvenc = &ctx->nvenc_dload_funcs.nvenc_funcs; const char *desc; const char *details = "(no details)"; int ret = nvenc_map_error(err, &desc); -#ifdef NVENC_HAVE_GETLASTERRORSTRING - NvencContext *ctx = avctx->priv_data; - NV_ENCODE_API_FUNCTION_LIST *p_nvenc = &ctx->nvenc_dload_funcs.nvenc_funcs; - if (p_nvenc && ctx->nvencoder) details = p_nvenc->nvEncGetLastErrorString(ctx->nvencoder); -#endif av_log(avctx, AV_LOG_ERROR, "%s: %s (%d): %s\n", error_string, desc, err, details); @@ -210,7 +207,6 @@ typedef struct GUIDTuple { static void nvenc_map_preset(NvencContext *ctx) { GUIDTuple presets[] = { -#ifdef NVENC_HAVE_NEW_PRESETS PRESET(P1), PRESET(P2), PRESET(P3), @@ -231,20 +227,6 @@ static void nvenc_map_preset(NvencContext *ctx) PRESET_ALIAS(LOW_LATENCY_HQ, P7, NVENC_DEPRECATED_PRESET | NVENC_LOWLATENCY), PRESET_ALIAS(LOSSLESS_DEFAULT, P4, NVENC_DEPRECATED_PRESET | NVENC_LOSSLESS), PRESET_ALIAS(LOSSLESS_HP, P1, NVENC_DEPRECATED_PRESET | NVENC_LOSSLESS), -#else - PRESET(DEFAULT), - PRESET(HP), - PRESET(HQ), - PRESET(BD), - PRESET_ALIAS(SLOW, HQ, NVENC_TWO_PASSES), - PRESET_ALIAS(MEDIUM, HQ, NVENC_ONE_PASS), - PRESET_ALIAS(FAST, HP, NVENC_ONE_PASS), - PRESET(LOW_LATENCY_DEFAULT, NVENC_LOWLATENCY), - PRESET(LOW_LATENCY_HP, NVENC_LOWLATENCY), - PRESET(LOW_LATENCY_HQ, NVENC_LOWLATENCY), - PRESET(LOSSLESS_DEFAULT, NVENC_LOSSLESS), - PRESET(LOSSLESS_HP, NVENC_LOSSLESS), -#endif }; GUIDTuple *t = &presets[ctx->preset]; @@ -252,10 +234,8 @@ static void nvenc_map_preset(NvencContext *ctx) ctx->init_encode_params.presetGUID = t->guid; ctx->flags = t->flags; -#ifdef NVENC_HAVE_NEW_PRESETS if (ctx->tuning_info == NV_ENC_TUNING_INFO_LOSSLESS) ctx->flags |= NVENC_LOSSLESS; -#endif } #undef PRESET @@ -287,54 +267,12 @@ static void nvenc_print_driver_requirement(AVCodecContext *avctx, int level) # else const char *minver = "520.56.06"; # endif -#elif NVENCAPI_CHECK_VERSION(11, 1) +#else # if defined(_WIN32) || defined(__CYGWIN__) const char *minver = "471.41"; # else const char *minver = "470.57.02"; # endif -#elif NVENCAPI_CHECK_VERSION(11, 0) -# if defined(_WIN32) || defined(__CYGWIN__) - const char *minver = "456.71"; -# else - const char *minver = "455.28"; -# endif -#elif NVENCAPI_CHECK_VERSION(10, 0) -# if defined(_WIN32) || defined(__CYGWIN__) - const char *minver = "450.51"; -# else - const char *minver = "445.87"; -# endif -#elif NVENCAPI_CHECK_VERSION(9, 1) -# if defined(_WIN32) || defined(__CYGWIN__) - const char *minver = "436.15"; -# else - const char *minver = "435.21"; -# endif -#elif NVENCAPI_CHECK_VERSION(9, 0) -# if defined(_WIN32) || defined(__CYGWIN__) - const char *minver = "418.81"; -# else - const char *minver = "418.30"; -# endif -#elif NVENCAPI_CHECK_VERSION(8, 2) -# if defined(_WIN32) || defined(__CYGWIN__) - const char *minver = "397.93"; -# else - const char *minver = "396.24"; -#endif -#elif NVENCAPI_CHECK_VERSION(8, 1) -# if defined(_WIN32) || defined(__CYGWIN__) - const char *minver = "390.77"; -# else - const char *minver = "390.25"; -# endif -#else -# if defined(_WIN32) || defined(__CYGWIN__) - const char *minver = "378.66"; -# else - const char *minver = "378.13"; -# endif #endif av_log(avctx, level, "The minimum required Nvidia driver for nvenc is %s or newer\n", minver); } @@ -588,7 +526,6 @@ static int nvenc_check_capabilities(AVCodecContext *avctx) return AVERROR(ENOSYS); } -#ifdef NVENC_HAVE_BFRAME_REF_MODE tmp = (ctx->b_ref_mode >= 0) ? ctx->b_ref_mode : NV_ENC_BFRAME_REF_MODE_DISABLED; ret = nvenc_check_cap(avctx, NV_ENC_CAPS_SUPPORT_BFRAME_REF_MODE); switch (tmp) { @@ -618,39 +555,18 @@ static int nvenc_check_capabilities(AVCodecContext *avctx) av_log(avctx, AV_LOG_ERROR, "Invalid b_ref_mode value %d\n", tmp); return AVERROR(EINVAL); } -#else - tmp = (ctx->b_ref_mode >= 0) ? ctx->b_ref_mode : 0; - if (tmp > 0) { - av_log(avctx, AV_LOG_WARNING, "B frames as references need SDK 8.1 at build time\n"); - return AVERROR(ENOSYS); - } -#endif -#ifdef NVENC_HAVE_MULTIPLE_REF_FRAMES ret = nvenc_check_cap(avctx, NV_ENC_CAPS_SUPPORT_MULTIPLE_REF_FRAMES); if(avctx->refs != NV_ENC_NUM_REF_FRAMES_AUTOSELECT && ret <= 0) { av_log(avctx, AV_LOG_WARNING, "Multiple reference frames are not supported by the device\n"); return AVERROR(ENOSYS); } -#else - if(avctx->refs != 0) { - av_log(avctx, AV_LOG_WARNING, "Multiple reference frames need SDK 9.1 at build time\n"); - return AVERROR(ENOSYS); - } -#endif -#ifdef NVENC_HAVE_SINGLE_SLICE_INTRA_REFRESH ret = nvenc_check_cap(avctx, NV_ENC_CAPS_SINGLE_SLICE_INTRA_REFRESH); if(ctx->single_slice_intra_refresh && ret <= 0) { av_log(avctx, AV_LOG_WARNING, "Single slice intra refresh not supported by the device\n"); return AVERROR(ENOSYS); } -#else - if(ctx->single_slice_intra_refresh) { - av_log(avctx, AV_LOG_WARNING, "Single slice intra refresh needs SDK 11.1 at build time\n"); - return AVERROR(ENOSYS); - } -#endif ret = nvenc_check_cap(avctx, NV_ENC_CAPS_SUPPORT_INTRA_REFRESH); if((ctx->intra_refresh || ctx->single_slice_intra_refresh) && ret <= 0) { @@ -658,13 +574,6 @@ static int nvenc_check_capabilities(AVCodecContext *avctx) return AVERROR(ENOSYS); } -#ifndef NVENC_HAVE_HEVC_CONSTRAINED_ENCODING - if (ctx->constrained_encoding && avctx->codec->id == AV_CODEC_ID_HEVC) { - av_log(avctx, AV_LOG_WARNING, "HEVC constrained encoding needs SDK 10.0 at build time\n"); - return AVERROR(ENOSYS); - } -#endif - ret = nvenc_check_cap(avctx, NV_ENC_CAPS_SUPPORT_CONSTRAINED_ENCODING); if(ctx->constrained_encoding && ret <= 0) { av_log(avctx, AV_LOG_WARNING, "Constrained encoding not supported by the device\n"); @@ -1130,7 +1039,6 @@ static av_cold int nvenc_setup_rate_control(AVCodecContext *avctx) if (avctx->rc_max_rate > 0) ctx->encode_config.rcParams.maxBitRate = avctx->rc_max_rate; -#ifdef NVENC_HAVE_MULTIPASS ctx->encode_config.rcParams.multiPass = ctx->multipass; if (ctx->flags & NVENC_ONE_PASS) @@ -1147,32 +1055,6 @@ static av_cold int nvenc_setup_rate_control(AVCodecContext *avctx) ctx->rc = NV_ENC_PARAMS_RC_VBR; } } -#else - if (ctx->rc < 0) { - if (ctx->flags & NVENC_ONE_PASS) - ctx->twopass = 0; - if (ctx->flags & NVENC_TWO_PASSES) - ctx->twopass = 1; - - if (ctx->twopass < 0) - ctx->twopass = (ctx->flags & NVENC_LOWLATENCY) != 0; - - if (ctx->cbr) { - if (ctx->twopass) { - ctx->rc = NV_ENC_PARAMS_RC_CBR_LOWDELAY_HQ; - } else { - ctx->rc = NV_ENC_PARAMS_RC_CBR; - } - } else if (ctx->cqp >= 0) { - ctx->rc = NV_ENC_PARAMS_RC_CONSTQP; - } else if (ctx->twopass) { - ctx->rc = NV_ENC_PARAMS_RC_VBR_HQ; - } else if ((avctx->qmin >= 0 && avctx->qmax >= 0) || - (ctx->qmin >= 0 && ctx->qmax >= 0)) { - ctx->rc = NV_ENC_PARAMS_RC_VBR_MINQP; - } - } -#endif if (ctx->rc >= 0 && ctx->rc & RC_MODE_DEPRECATED) { av_log(avctx, AV_LOG_WARNING, "Specified rc mode is deprecated.\n"); @@ -1181,7 +1063,6 @@ static av_cold int nvenc_setup_rate_control(AVCodecContext *avctx) ctx->rc &= ~RC_MODE_DEPRECATED; } -#ifdef NVENC_HAVE_QP_CHROMA_OFFSETS ctx->encode_config.rcParams.cbQPIndexOffset = ctx->qp_cb_offset; ctx->encode_config.rcParams.crQPIndexOffset = ctx->qp_cr_offset; @@ -1191,15 +1072,9 @@ static av_cold int nvenc_setup_rate_control(AVCodecContext *avctx) "av1_nvenc: qp_cr_offset is currently ignored by the NVENC driver " "(deltaQ_v_ac is forced equal to deltaQ_u_ac); only qp_cb_offset " "takes effect.\n"); -#else - if (ctx->qp_cb_offset || ctx->qp_cr_offset) - av_log(avctx, AV_LOG_WARNING, "Failed setting QP CB/CR offsets, SDK 11.1 or greater required at compile time.\n"); -#endif -#ifdef NVENC_HAVE_LDKFS if (ctx->ldkfs) ctx->encode_config.rcParams.lowDelayKeyFrameScale = ctx->ldkfs; -#endif if (ctx->flags & NVENC_LOSSLESS) { set_lossless(avctx); @@ -1341,9 +1216,7 @@ static av_cold int nvenc_setup_h264_config(AVCodecContext *avctx) h264->intraRefreshCnt = cc->gopLength - 1; cc->gopLength = NVENC_INFINITE_GOPLENGTH; h264->outputRecoveryPointSEI = 1; -#ifdef NVENC_HAVE_SINGLE_SLICE_INTRA_REFRESH h264->singleSliceIntraRefresh = ctx->single_slice_intra_refresh; -#endif } if (ctx->constrained_encoding) @@ -1364,9 +1237,7 @@ static av_cold int nvenc_setup_h264_config(AVCodecContext *avctx) /* Older SDKs use outputBufferingPeriodSEI to control filler data */ h264->outputBufferingPeriodSEI = ctx->cbr_padding; -#ifdef NVENC_HAVE_FILLER_DATA h264->enableFillerDataInsertion = ctx->cbr_padding; -#endif } h264->outputPictureTimingSEI = 1; @@ -1456,15 +1327,11 @@ static av_cold int nvenc_setup_h264_config(AVCodecContext *avctx) if (ctx->coder >= 0) h264->entropyCodingMode = ctx->coder; -#ifdef NVENC_HAVE_BFRAME_REF_MODE if (ctx->b_ref_mode >= 0) h264->useBFramesAsRef = ctx->b_ref_mode; -#endif -#ifdef NVENC_HAVE_MULTIPLE_REF_FRAMES h264->numRefL0 = avctx->refs; h264->numRefL1 = avctx->refs; -#endif #ifdef NVENC_HAVE_H264_AND_AV1_TEMPORAL_FILTER if (ctx->tf_level >= 0) { @@ -1539,9 +1406,7 @@ static av_cold int nvenc_setup_hevc_config(AVCodecContext *avctx) #ifdef NVENC_HAVE_HEVC_OUTPUT_RECOVERY_POINT_SEI hevc->outputRecoveryPointSEI = 1; #endif -#ifdef NVENC_HAVE_SINGLE_SLICE_INTRA_REFRESH hevc->singleSliceIntraRefresh = ctx->single_slice_intra_refresh; -#endif } #ifdef NVENC_HAVE_HEVC_AND_AV1_MASTERING_METADATA @@ -1553,10 +1418,8 @@ static av_cold int nvenc_setup_hevc_config(AVCodecContext *avctx) AV_FRAME_DATA_CONTENT_LIGHT_LEVEL); #endif -#ifdef NVENC_HAVE_HEVC_CONSTRAINED_ENCODING if (ctx->constrained_encoding) hevc->enableConstrainedEncoding = 1; -#endif hevc->disableSPSPPS = (avctx->flags & AV_CODEC_FLAG_GLOBAL_HEADER) ? 1 : 0; hevc->repeatSPSPPS = (avctx->flags & AV_CODEC_FLAG_GLOBAL_HEADER) ? 0 : 1; @@ -1573,9 +1436,7 @@ static av_cold int nvenc_setup_hevc_config(AVCodecContext *avctx) /* Older SDKs use outputBufferingPeriodSEI to control filler data */ hevc->outputBufferingPeriodSEI = ctx->cbr_padding; -#ifdef NVENC_HAVE_FILLER_DATA hevc->enableFillerDataInsertion = ctx->cbr_padding; -#endif } hevc->outputPictureTimingSEI = 1; @@ -1659,15 +1520,11 @@ static av_cold int nvenc_setup_hevc_config(AVCodecContext *avctx) hevc->tier = ctx->tier; -#ifdef NVENC_HAVE_HEVC_BFRAME_REF_MODE if (ctx->b_ref_mode >= 0) hevc->useBFramesAsRef = ctx->b_ref_mode; -#endif -#ifdef NVENC_HAVE_MULTIPLE_REF_FRAMES hevc->numRefL0 = avctx->refs; hevc->numRefL1 = avctx->refs; -#endif #ifdef NVENC_HAVE_TEMPORAL_FILTER if (ctx->tf_level >= 0) { @@ -1876,7 +1733,6 @@ static av_cold int nvenc_setup_encoder(AVCodecContext *avctx) preset_config.version = NV_ENC_PRESET_CONFIG_VER; preset_config.presetCfg.version = NV_ENC_CONFIG_VER; -#ifdef NVENC_HAVE_NEW_PRESETS ctx->init_encode_params.tuningInfo = ctx->tuning_info; if (ctx->flags & NVENC_LOSSLESS) @@ -1889,12 +1745,6 @@ static av_cold int nvenc_setup_encoder(AVCodecContext *avctx) ctx->init_encode_params.presetGUID, ctx->init_encode_params.tuningInfo, &preset_config); -#else - nv_status = p_nvenc->nvEncGetEncodePresetConfig(ctx->nvencoder, - ctx->init_encode_params.encodeGUID, - ctx->init_encode_params.presetGUID, - &preset_config); -#endif if (nv_status != NV_ENC_SUCCESS) return nvenc_print_error(avctx, nv_status, "Cannot get the preset configuration"); @@ -1921,13 +1771,11 @@ static av_cold int nvenc_setup_encoder(AVCodecContext *avctx) ctx->init_encode_params.enableEncodeAsync = 0; ctx->init_encode_params.enablePTD = 1; -#ifdef NVENC_HAVE_NEW_PRESETS /* If lookahead isn't set from CLI, use value from preset. * P6 & P7 presets may enable lookahead for better quality. * */ if (ctx->rc_lookahead == 0 && ctx->encode_config.rcParams.enableLookahead) ctx->rc_lookahead = ctx->encode_config.rcParams.lookaheadDepth; -#endif if (ctx->weighted_pred == 1) ctx->init_encode_params.enableWeightedPrediction = 1; @@ -1999,7 +1847,6 @@ static av_cold int nvenc_setup_encoder(AVCodecContext *avctx) return nvenc_print_error(avctx, nv_status, "InitializeEncoder failed"); } -#ifdef NVENC_HAVE_CUSTREAM_PTR if (ctx->cu_context) { nv_status = p_nvenc->nvEncSetIOCudaStreams(ctx->nvencoder, &ctx->cu_stream, &ctx->cu_stream); if (nv_status != NV_ENC_SUCCESS) { @@ -2007,7 +1854,6 @@ static av_cold int nvenc_setup_encoder(AVCodecContext *avctx) return nvenc_print_error(avctx, nv_status, "SetIOCudaStreams failed"); } } -#endif res = nvenc_pop_context(avctx); if (res < 0) diff --git a/libavcodec/nvenc.h b/libavcodec/nvenc.h index 32d4648f75..2f309b0f68 100644 --- a/libavcodec/nvenc.h +++ b/libavcodec/nvenc.h @@ -45,40 +45,6 @@ typedef void ID3D11Device; #define NVENCAPI_CHECK_VERSION(major, minor) \ ((major) < NVENCAPI_MAJOR_VERSION || ((major) == NVENCAPI_MAJOR_VERSION && (minor) <= NVENCAPI_MINOR_VERSION)) -// SDK 8.1 compile time feature checks -#if NVENCAPI_CHECK_VERSION(8, 1) -#define NVENC_HAVE_BFRAME_REF_MODE -#define NVENC_HAVE_QP_MAP_MODE -#endif - -// SDK 9.0 compile time feature checks -#if NVENCAPI_CHECK_VERSION(9, 0) -#define NVENC_HAVE_HEVC_BFRAME_REF_MODE -#endif - -// SDK 9.1 compile time feature checks -#if NVENCAPI_CHECK_VERSION(9, 1) -#define NVENC_HAVE_MULTIPLE_REF_FRAMES -#define NVENC_HAVE_CUSTREAM_PTR -#define NVENC_HAVE_GETLASTERRORSTRING -#define NVENC_HAVE_FILLER_DATA -#endif - -// SDK 10.0 compile time feature checks -#if NVENCAPI_CHECK_VERSION(10, 0) -#define NVENC_HAVE_NEW_PRESETS -#define NVENC_HAVE_MULTIPASS -#define NVENC_HAVE_LDKFS -#define NVENC_HAVE_H264_LVL6 -#define NVENC_HAVE_HEVC_CONSTRAINED_ENCODING -#endif - -// SDK 11.1 compile time feature checks -#if NVENCAPI_CHECK_VERSION(11, 1) -#define NVENC_HAVE_QP_CHROMA_OFFSETS -#define NVENC_HAVE_SINGLE_SLICE_INTRA_REFRESH -#endif - // SDK 12.0 compile time feature checks #if NVENCAPI_CHECK_VERSION(12, 0) #define NVENC_HAVE_HEVC_OUTPUT_RECOVERY_POINT_SEI @@ -160,7 +126,6 @@ enum { PRESET_LOW_LATENCY_HP, PRESET_LOSSLESS_DEFAULT, PRESET_LOSSLESS_HP, -#ifdef NVENC_HAVE_NEW_PRESETS PRESET_P1, PRESET_P2, PRESET_P3, @@ -168,7 +133,6 @@ enum { PRESET_P5, PRESET_P6, PRESET_P7, -#endif }; enum { diff --git a/libavcodec/nvenc_h264.c b/libavcodec/nvenc_h264.c index 6def749f2c..f5647c9dda 100644 --- a/libavcodec/nvenc_h264.c +++ b/libavcodec/nvenc_h264.c @@ -26,11 +26,7 @@ #define OFFSET(x) offsetof(NvencContext, x) #define VE AV_OPT_FLAG_VIDEO_PARAM | AV_OPT_FLAG_ENCODING_PARAM static const AVOption options[] = { -#ifdef NVENC_HAVE_NEW_PRESETS { "preset", "Set the encoding preset", OFFSET(preset), AV_OPT_TYPE_INT, { .i64 = PRESET_P4 }, PRESET_DEFAULT, PRESET_P7, VE, .unit = "preset" }, -#else - { "preset", "Set the encoding preset", OFFSET(preset), AV_OPT_TYPE_INT, { .i64 = PRESET_MEDIUM }, PRESET_DEFAULT, PRESET_LOSSLESS_HP, VE, .unit = "preset" }, -#endif { "default", "", 0, AV_OPT_TYPE_CONST, { .i64 = PRESET_DEFAULT }, 0, 0, VE, .unit = "preset" }, { "slow", "hq 2 passes", 0, AV_OPT_TYPE_CONST, { .i64 = PRESET_SLOW }, 0, 0, VE, .unit = "preset" }, { "medium", "hq 1 pass", 0, AV_OPT_TYPE_CONST, { .i64 = PRESET_MEDIUM }, 0, 0, VE, .unit = "preset" }, @@ -43,7 +39,6 @@ static const AVOption options[] = { { "llhp", "low latency hp", 0, AV_OPT_TYPE_CONST, { .i64 = PRESET_LOW_LATENCY_HP }, 0, 0, VE, .unit = "preset" }, { "lossless", "", 0, AV_OPT_TYPE_CONST, { .i64 = PRESET_LOSSLESS_DEFAULT }, 0, 0, VE, .unit = "preset" }, { "losslesshp", "", 0, AV_OPT_TYPE_CONST, { .i64 = PRESET_LOSSLESS_HP }, 0, 0, VE, .unit = "preset" }, -#ifdef NVENC_HAVE_NEW_PRESETS { "p1", "fastest (lowest quality)", 0, AV_OPT_TYPE_CONST, { .i64 = PRESET_P1 }, 0, 0, VE, .unit = "preset" }, { "p2", "faster (lower quality)", 0, AV_OPT_TYPE_CONST, { .i64 = PRESET_P2 }, 0, 0, VE, .unit = "preset" }, { "p3", "fast (low quality)", 0, AV_OPT_TYPE_CONST, { .i64 = PRESET_P3 }, 0, 0, VE, .unit = "preset" }, @@ -56,7 +51,6 @@ static const AVOption options[] = { { "ll", "Low latency", 0, AV_OPT_TYPE_CONST, { .i64 = NV_ENC_TUNING_INFO_LOW_LATENCY }, 0, 0, VE, .unit = "tune" }, { "ull", "Ultra low latency", 0, AV_OPT_TYPE_CONST, { .i64 = NV_ENC_TUNING_INFO_ULTRA_LOW_LATENCY }, 0, 0, VE, .unit = "tune" }, { "lossless", "Lossless", 0, AV_OPT_TYPE_CONST, { .i64 = NV_ENC_TUNING_INFO_LOSSLESS }, 0, 0, VE, .unit = "tune" }, -#endif { "profile", "Set the encoding profile", OFFSET(profile), AV_OPT_TYPE_INT, { .i64 = NV_ENC_H264_PROFILE_HIGH }, NV_ENC_H264_PROFILE_BASELINE, NV_ENC_H264_PROFILE_HIGH_444P, VE, .unit = "profile" }, { "baseline", "", 0, AV_OPT_TYPE_CONST, { .i64 = NV_ENC_H264_PROFILE_BASELINE }, 0, 0, VE, .unit = "profile" }, { "main", "", 0, AV_OPT_TYPE_CONST, { .i64 = NV_ENC_H264_PROFILE_MAIN }, 0, 0, VE, .unit = "profile" }, @@ -68,11 +62,7 @@ static const AVOption options[] = { { "high422", "", 0, AV_OPT_TYPE_CONST, { .i64 = NV_ENC_H264_PROFILE_HIGH_422 }, 0, 0, VE, .unit = "profile" }, #endif { "high444p", "", 0, AV_OPT_TYPE_CONST, { .i64 = NV_ENC_H264_PROFILE_HIGH_444P }, 0, 0, VE, .unit = "profile" }, -#ifdef NVENC_HAVE_H264_LVL6 { "level", "Set the encoding level restriction", OFFSET(level), AV_OPT_TYPE_INT, { .i64 = NV_ENC_LEVEL_AUTOSELECT }, NV_ENC_LEVEL_AUTOSELECT, NV_ENC_LEVEL_H264_62, VE, .unit = "level" }, -#else - { "level", "Set the encoding level restriction", OFFSET(level), AV_OPT_TYPE_INT, { .i64 = NV_ENC_LEVEL_AUTOSELECT }, NV_ENC_LEVEL_AUTOSELECT, NV_ENC_LEVEL_H264_52, VE, .unit = "level" }, -#endif { "auto", "", 0, AV_OPT_TYPE_CONST, { .i64 = NV_ENC_LEVEL_AUTOSELECT }, 0, 0, VE, .unit = "level" }, { "1", "", 0, AV_OPT_TYPE_CONST, { .i64 = NV_ENC_LEVEL_H264_1 }, 0, 0, VE, .unit = "level" }, { "1.0", "", 0, AV_OPT_TYPE_CONST, { .i64 = NV_ENC_LEVEL_H264_1 }, 0, 0, VE, .unit = "level" }, @@ -97,11 +87,9 @@ static const AVOption options[] = { { "5.0", "", 0, AV_OPT_TYPE_CONST, { .i64 = NV_ENC_LEVEL_H264_5 }, 0, 0, VE, .unit = "level" }, { "5.1", "", 0, AV_OPT_TYPE_CONST, { .i64 = NV_ENC_LEVEL_H264_51 }, 0, 0, VE, .unit = "level" }, { "5.2", "", 0, AV_OPT_TYPE_CONST, { .i64 = NV_ENC_LEVEL_H264_52 }, 0, 0, VE, .unit = "level" }, -#ifdef NVENC_HAVE_H264_LVL6 { "6.0", "", 0, AV_OPT_TYPE_CONST, { .i64 = NV_ENC_LEVEL_H264_60 }, 0, 0, VE, .unit = "level" }, { "6.1", "", 0, AV_OPT_TYPE_CONST, { .i64 = NV_ENC_LEVEL_H264_61 }, 0, 0, VE, .unit = "level" }, { "6.2", "", 0, AV_OPT_TYPE_CONST, { .i64 = NV_ENC_LEVEL_H264_62 }, 0, 0, VE, .unit = "level" }, -#endif { "rc", "Override the preset rate-control", OFFSET(rc), AV_OPT_TYPE_INT, { .i64 = -1 }, -1, INT_MAX, VE, .unit = "rc" }, { "constqp", "Constant QP mode", 0, AV_OPT_TYPE_CONST, { .i64 = NV_ENC_PARAMS_RC_CONSTQP }, 0, 0, VE, .unit = "rc" }, { "vbr", "Variable bitrate mode", 0, AV_OPT_TYPE_CONST, { .i64 = NV_ENC_PARAMS_RC_VBR }, 0, 0, VE, .unit = "rc" }, @@ -187,38 +175,27 @@ static const AVOption options[] = { { "cavlc", "", 0, AV_OPT_TYPE_CONST, { .i64 = NV_ENC_H264_ENTROPY_CODING_MODE_CAVLC }, 0, 0, VE, .unit = "coder" }, { "ac", "", 0, AV_OPT_TYPE_CONST, { .i64 = NV_ENC_H264_ENTROPY_CODING_MODE_CABAC }, 0, 0, VE, .unit = "coder" }, { "vlc", "", 0, AV_OPT_TYPE_CONST, { .i64 = NV_ENC_H264_ENTROPY_CODING_MODE_CAVLC }, 0, 0, VE, .unit = "coder" }, -#ifdef NVENC_HAVE_BFRAME_REF_MODE { "b_ref_mode", "Use B frames as references", OFFSET(b_ref_mode), AV_OPT_TYPE_INT, { .i64 = -1 }, -1, NV_ENC_BFRAME_REF_MODE_MIDDLE, VE, .unit = "b_ref_mode" }, { "disabled", "B frames will not be used for reference", 0, AV_OPT_TYPE_CONST, { .i64 = NV_ENC_BFRAME_REF_MODE_DISABLED }, 0, 0, VE, .unit = "b_ref_mode" }, { "each", "Each B frame will be used for reference", 0, AV_OPT_TYPE_CONST, { .i64 = NV_ENC_BFRAME_REF_MODE_EACH }, 0, 0, VE, .unit = "b_ref_mode" }, { "middle", "Only (number of B frames)/2 will be used for reference", 0,AV_OPT_TYPE_CONST, { .i64 = NV_ENC_BFRAME_REF_MODE_MIDDLE }, 0, 0, VE, .unit = "b_ref_mode" }, -#else - { "b_ref_mode", "(not supported)", OFFSET(b_ref_mode), AV_OPT_TYPE_INT, { .i64 = -1 }, -1, INT_MAX, VE, .unit = "b_ref_mode" }, - { "disabled", "", 0, AV_OPT_TYPE_CONST, { .i64 = 0 }, 0, 0, VE, .unit = "b_ref_mode" }, - { "each", "", 0, AV_OPT_TYPE_CONST, { .i64 = 1 }, 0, 0, VE, .unit = "b_ref_mode" }, - { "middle", "", 0, AV_OPT_TYPE_CONST, { .i64 = 2 }, 0, 0, VE, .unit = "b_ref_mode" }, -#endif { "a53cc", "Use A53 Closed Captions (if available)", OFFSET(a53_cc), AV_OPT_TYPE_BOOL, { .i64 = 1 }, 0, 1, VE }, #ifdef NVENC_HAVE_TIME_CODE { "s12m_tc", "Use timecode (if available)", OFFSET(s12m_tc), AV_OPT_TYPE_BOOL, { .i64 = 1 }, 0, 1, VE }, #endif { "dpb_size", "Specifies the DPB size used for encoding (0 means automatic)", OFFSET(dpb_size), AV_OPT_TYPE_INT, { .i64 = 0 }, 0, INT_MAX, VE }, -#ifdef NVENC_HAVE_MULTIPASS { "multipass", "Set the multipass encoding", OFFSET(multipass), AV_OPT_TYPE_INT, { .i64 = NV_ENC_MULTI_PASS_DISABLED }, NV_ENC_MULTI_PASS_DISABLED, NV_ENC_TWO_PASS_FULL_RESOLUTION, VE, .unit = "multipass" }, { "disabled", "Single Pass", 0, AV_OPT_TYPE_CONST, { .i64 = NV_ENC_MULTI_PASS_DISABLED }, 0, 0, VE, .unit = "multipass" }, { "qres", "Two Pass encoding is enabled where first Pass is quarter resolution", 0, AV_OPT_TYPE_CONST, { .i64 = NV_ENC_TWO_PASS_QUARTER_RESOLUTION }, 0, 0, VE, .unit = "multipass" }, { "fullres", "Two Pass encoding is enabled where first Pass is full resolution", 0, AV_OPT_TYPE_CONST, { .i64 = NV_ENC_TWO_PASS_FULL_RESOLUTION }, 0, 0, VE, .unit = "multipass" }, -#endif #ifdef NVENC_HAVE_H264_10BIT_SUPPORT { "highbitdepth", "Enable 10 bit encode for 8 bit input",OFFSET(highbitdepth),AV_OPT_TYPE_BOOL, { .i64 = 0 }, 0, 1, VE }, #endif -#ifdef NVENC_HAVE_LDKFS { "ldkfs", "Low delay key frame scale; Specifies the Scene Change frame size increase allowed in case of single frame VBV and CBR", OFFSET(ldkfs), AV_OPT_TYPE_INT, { .i64 = 0 }, 0, UCHAR_MAX, VE }, -#endif { "extra_sei", "Pass on extra SEI data (e.g. a53 cc) to be included in the bitstream", OFFSET(extra_sei), AV_OPT_TYPE_BOOL, { .i64 = 1 }, 0, 1, VE }, { "udu_sei", "Pass on user data unregistered SEI if available", @@ -231,10 +208,8 @@ static const AVOption options[] = { OFFSET(max_slice_size), AV_OPT_TYPE_INT, { .i64 = 0 }, 0, INT_MAX, VE }, { "constrained-encoding", "Enable constrainedFrame encoding where each slice in the constrained picture is independent of other slices", OFFSET(constrained_encoding), AV_OPT_TYPE_BOOL, { .i64 = 0 }, 0, 1, VE }, -#ifdef NVENC_HAVE_FILLER_DATA { "cbr_padding", "Pad the bitstream to ensure bitrate does not drop below the target in CBR mode", OFFSET(cbr_padding), AV_OPT_TYPE_BOOL, { .i64 = 0 }, 0, 1, VE }, -#endif #ifdef NVENC_HAVE_H264_AND_AV1_TEMPORAL_FILTER { "tf_level", "Specifies the strength of the temporal filtering", OFFSET(tf_level), AV_OPT_TYPE_INT, { .i64 = -1 }, -1, INT_MAX, VE, .unit = "tf_level" }, diff --git a/libavcodec/nvenc_hevc.c b/libavcodec/nvenc_hevc.c index 31624f45b1..17f3f4f027 100644 --- a/libavcodec/nvenc_hevc.c +++ b/libavcodec/nvenc_hevc.c @@ -26,11 +26,7 @@ #define OFFSET(x) offsetof(NvencContext, x) #define VE AV_OPT_FLAG_VIDEO_PARAM | AV_OPT_FLAG_ENCODING_PARAM static const AVOption options[] = { -#ifdef NVENC_HAVE_NEW_PRESETS { "preset", "Set the encoding preset", OFFSET(preset), AV_OPT_TYPE_INT, { .i64 = PRESET_P4 }, PRESET_DEFAULT, PRESET_P7, VE, .unit = "preset" }, -#else - { "preset", "Set the encoding preset", OFFSET(preset), AV_OPT_TYPE_INT, { .i64 = PRESET_MEDIUM }, PRESET_DEFAULT, PRESET_LOSSLESS_HP, VE, .unit = "preset" }, -#endif { "default", "", 0, AV_OPT_TYPE_CONST, { .i64 = PRESET_DEFAULT }, 0, 0, VE, .unit = "preset" }, { "slow", "hq 2 passes", 0, AV_OPT_TYPE_CONST, { .i64 = PRESET_SLOW }, 0, 0, VE, .unit = "preset" }, { "medium", "hq 1 pass", 0, AV_OPT_TYPE_CONST, { .i64 = PRESET_MEDIUM }, 0, 0, VE, .unit = "preset" }, @@ -43,7 +39,6 @@ static const AVOption options[] = { { "llhp", "low latency hp", 0, AV_OPT_TYPE_CONST, { .i64 = PRESET_LOW_LATENCY_HP }, 0, 0, VE, .unit = "preset" }, { "lossless", "lossless", 0, AV_OPT_TYPE_CONST, { .i64 = PRESET_LOSSLESS_DEFAULT }, 0, 0, VE, .unit = "preset" }, { "losslesshp", "lossless hp", 0, AV_OPT_TYPE_CONST, { .i64 = PRESET_LOSSLESS_HP }, 0, 0, VE, .unit = "preset" }, -#ifdef NVENC_HAVE_NEW_PRESETS { "p1", "fastest (lowest quality)", 0, AV_OPT_TYPE_CONST, { .i64 = PRESET_P1 }, 0, 0, VE, .unit = "preset" }, { "p2", "faster (lower quality)", 0, AV_OPT_TYPE_CONST, { .i64 = PRESET_P2 }, 0, 0, VE, .unit = "preset" }, { "p3", "fast (low quality)", 0, AV_OPT_TYPE_CONST, { .i64 = PRESET_P3 }, 0, 0, VE, .unit = "preset" }, @@ -59,7 +54,6 @@ static const AVOption options[] = { { "ll", "Low latency", 0, AV_OPT_TYPE_CONST, { .i64 = NV_ENC_TUNING_INFO_LOW_LATENCY }, 0, 0, VE, .unit = "tune" }, { "ull", "Ultra low latency", 0, AV_OPT_TYPE_CONST, { .i64 = NV_ENC_TUNING_INFO_ULTRA_LOW_LATENCY }, 0, 0, VE, .unit = "tune" }, { "lossless", "Lossless", 0, AV_OPT_TYPE_CONST, { .i64 = NV_ENC_TUNING_INFO_LOSSLESS }, 0, 0, VE, .unit = "tune" }, -#endif { "profile", "Set the encoding profile", OFFSET(profile), AV_OPT_TYPE_INT, { .i64 = NV_ENC_HEVC_PROFILE_MAIN }, NV_ENC_HEVC_PROFILE_MAIN, NV_ENC_HEVC_PROFILE_COUNT - 1, VE, .unit = "profile" }, { "main", "", 0, AV_OPT_TYPE_CONST, { .i64 = NV_ENC_HEVC_PROFILE_MAIN }, 0, 0, VE, .unit = "profile" }, { "main10", "", 0, AV_OPT_TYPE_CONST, { .i64 = NV_ENC_HEVC_PROFILE_MAIN_10 }, 0, 0, VE, .unit = "profile" }, @@ -169,36 +163,25 @@ static const AVOption options[] = { OFFSET(qmax), AV_OPT_TYPE_INT, { .i64 = -1 }, -1, 51, VE }, { "weighted_pred","Set 1 to enable weighted prediction", OFFSET(weighted_pred),AV_OPT_TYPE_INT, { .i64 = 0 }, 0, 1, VE }, -#ifdef NVENC_HAVE_HEVC_BFRAME_REF_MODE { "b_ref_mode", "Use B frames as references", OFFSET(b_ref_mode), AV_OPT_TYPE_INT, { .i64 = -1 }, -1, NV_ENC_BFRAME_REF_MODE_MIDDLE, VE, .unit = "b_ref_mode" }, { "disabled", "B frames will not be used for reference", 0, AV_OPT_TYPE_CONST, { .i64 = NV_ENC_BFRAME_REF_MODE_DISABLED }, 0, 0, VE, .unit = "b_ref_mode" }, { "each", "Each B frame will be used for reference", 0, AV_OPT_TYPE_CONST, { .i64 = NV_ENC_BFRAME_REF_MODE_EACH }, 0, 0, VE, .unit = "b_ref_mode" }, { "middle", "Only (number of B frames)/2 will be used for reference", 0,AV_OPT_TYPE_CONST, { .i64 = NV_ENC_BFRAME_REF_MODE_MIDDLE }, 0, 0, VE, .unit = "b_ref_mode" }, -#else - { "b_ref_mode", "(not supported)", OFFSET(b_ref_mode), AV_OPT_TYPE_INT, { .i64 = -1 }, -1, INT_MAX, VE, .unit = "b_ref_mode" }, - { "disabled", "", 0, AV_OPT_TYPE_CONST, { .i64 = 0 }, 0, 0, VE, .unit = "b_ref_mode" }, - { "each", "", 0, AV_OPT_TYPE_CONST, { .i64 = 1 }, 0, 0, VE, .unit = "b_ref_mode" }, - { "middle", "", 0, AV_OPT_TYPE_CONST, { .i64 = 2 }, 0, 0, VE, .unit = "b_ref_mode" }, -#endif { "a53cc", "Use A53 Closed Captions (if available)", OFFSET(a53_cc), AV_OPT_TYPE_BOOL, { .i64 = 1 }, 0, 1, VE }, { "s12m_tc", "Use timecode (if available)", OFFSET(s12m_tc), AV_OPT_TYPE_BOOL, { .i64 = 1 }, 0, 1, VE }, { "dpb_size", "Specifies the DPB size used for encoding (0 means automatic)", OFFSET(dpb_size), AV_OPT_TYPE_INT, { .i64 = 0 }, 0, INT_MAX, VE }, -#ifdef NVENC_HAVE_MULTIPASS { "multipass", "Set the multipass encoding", OFFSET(multipass), AV_OPT_TYPE_INT, { .i64 = NV_ENC_MULTI_PASS_DISABLED }, NV_ENC_MULTI_PASS_DISABLED, NV_ENC_TWO_PASS_FULL_RESOLUTION, VE, .unit = "multipass" }, { "disabled", "Single Pass", 0, AV_OPT_TYPE_CONST, { .i64 = NV_ENC_MULTI_PASS_DISABLED }, 0, 0, VE, .unit = "multipass" }, { "qres", "Two Pass encoding is enabled where first Pass is quarter resolution", 0, AV_OPT_TYPE_CONST, { .i64 = NV_ENC_TWO_PASS_QUARTER_RESOLUTION }, 0, 0, VE, .unit = "multipass" }, { "fullres", "Two Pass encoding is enabled where first Pass is full resolution", 0, AV_OPT_TYPE_CONST, { .i64 = NV_ENC_TWO_PASS_FULL_RESOLUTION }, 0, 0, VE, .unit = "multipass" }, -#endif #ifdef NVENC_HAVE_NEW_BIT_DEPTH_API { "highbitdepth", "Enable 10 bit encode for 8 bit input",OFFSET(highbitdepth),AV_OPT_TYPE_BOOL, { .i64 = 0 }, 0, 1, VE }, #endif -#ifdef NVENC_HAVE_LDKFS { "ldkfs", "Low delay key frame scale; Specifies the Scene Change frame size increase allowed in case of single frame VBV and CBR", OFFSET(ldkfs), AV_OPT_TYPE_INT, { .i64 = 0 }, 0, UCHAR_MAX, VE }, -#endif { "extra_sei", "Pass on extra SEI data (e.g. a53 cc) to be included in the bitstream", OFFSET(extra_sei), AV_OPT_TYPE_BOOL, { .i64 = 1 }, 0, 1, VE }, { "udu_sei", "Pass on user data unregistered SEI if available", @@ -211,10 +194,8 @@ static const AVOption options[] = { OFFSET(max_slice_size), AV_OPT_TYPE_INT, { .i64 = 0 }, 0, INT_MAX, VE }, { "constrained-encoding", "Enable constrainedFrame encoding where each slice in the constrained picture is independent of other slices", OFFSET(constrained_encoding), AV_OPT_TYPE_BOOL, { .i64 = 0 }, 0, 1, VE }, -#ifdef NVENC_HAVE_FILLER_DATA { "cbr_padding", "Pad the bitstream to ensure bitrate does not drop below the target in CBR mode", OFFSET(cbr_padding), AV_OPT_TYPE_BOOL, { .i64 = 0 }, 0, 1, VE }, -#endif #ifdef NVENC_HAVE_TEMPORAL_FILTER { "tf_level", "Specifies the strength of the temporal filtering", OFFSET(tf_level), AV_OPT_TYPE_INT, { .i64 = -1 }, -1, INT_MAX, VE, .unit = "tf_level" }, -- 2.52.0 >From fd29c73b4ae90e08ccdb866becee5b42c86fd9e1 Mon Sep 17 00:00:00 2001 From: Timo Rothenpieler <[email protected]> Date: Tue, 23 Jun 2026 23:42:51 +0200 Subject: [PATCH 2/7] avcodec/nvenc: remove old and long deprecated rc modes --- libavcodec/nvenc.c | 38 -------------------------------------- libavcodec/nvenc.h | 3 --- libavcodec/nvenc_h264.c | 21 --------------------- libavcodec/nvenc_hevc.c | 21 --------------------- 4 files changed, 83 deletions(-) diff --git a/libavcodec/nvenc.c b/libavcodec/nvenc.c index 5ef0ed572a..3f4ff3b9a3 100644 --- a/libavcodec/nvenc.c +++ b/libavcodec/nvenc.c @@ -48,13 +48,7 @@ #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, @@ -951,26 +945,10 @@ static void nvenc_override_rate_control(AVCodecContext *avctx) 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 && ctx->qmin < 0) { - av_log(avctx, AV_LOG_WARNING, - "The variable bitrate rate-control requires " - "the 'qmin' option set.\n"); - set_vbr(avctx); - return; - } - /* 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; } @@ -1056,13 +1034,6 @@ static av_cold int nvenc_setup_rate_control(AVCodecContext *avctx) } } - if (ctx->rc >= 0 && ctx->rc & RC_MODE_DEPRECATED) { - av_log(avctx, AV_LOG_WARNING, "Specified rc mode is deprecated.\n"); - av_log(avctx, AV_LOG_WARNING, "Use -rc constqp/cbr/vbr, -tune and -multipass instead.\n"); - - ctx->rc &= ~RC_MODE_DEPRECATED; - } - ctx->encode_config.rcParams.cbQPIndexOffset = ctx->qp_cb_offset; ctx->encode_config.rcParams.crQPIndexOffset = ctx->qp_cr_offset; @@ -1242,15 +1213,6 @@ static av_cold int nvenc_setup_h264_config(AVCodecContext *avctx) 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; } else { diff --git a/libavcodec/nvenc.h b/libavcodec/nvenc.h index 2f309b0f68..c3c4b94b71 100644 --- a/libavcodec/nvenc.h +++ b/libavcodec/nvenc.h @@ -39,8 +39,6 @@ typedef void ID3D11Device; #include "avcodec.h" #define MAX_REGISTERED_FRAMES 64 -#define RC_MODE_DEPRECATED 0x800000 -#define RCD(rc_mode) ((rc_mode) | RC_MODE_DEPRECATED) #define NVENCAPI_CHECK_VERSION(major, minor) \ ((major) < NVENCAPI_MAJOR_VERSION || ((major) == NVENCAPI_MAJOR_VERSION && (minor) <= NVENCAPI_MINOR_VERSION)) @@ -52,7 +50,6 @@ typedef void ID3D11Device; // SDK 12.1 compile time feature checks #if NVENCAPI_CHECK_VERSION(12, 1) -#define NVENC_NO_DEPRECATED_RC #define NVENC_HAVE_SPLIT_FRAME_ENCODING #endif diff --git a/libavcodec/nvenc_h264.c b/libavcodec/nvenc_h264.c index f5647c9dda..dea4ea6efa 100644 --- a/libavcodec/nvenc_h264.c +++ b/libavcodec/nvenc_h264.c @@ -94,27 +94,6 @@ static const AVOption options[] = { { "constqp", "Constant QP mode", 0, AV_OPT_TYPE_CONST, { .i64 = NV_ENC_PARAMS_RC_CONSTQP }, 0, 0, VE, .unit = "rc" }, { "vbr", "Variable bitrate mode", 0, AV_OPT_TYPE_CONST, { .i64 = NV_ENC_PARAMS_RC_VBR }, 0, 0, VE, .unit = "rc" }, { "cbr", "Constant bitrate mode", 0, AV_OPT_TYPE_CONST, { .i64 = NV_ENC_PARAMS_RC_CBR }, 0, 0, VE, .unit = "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, .unit = "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, .unit = "rc" }, - { "ll_2pass_size", "Multi-pass optimized for constant frame size (deprecated)", - 0, AV_OPT_TYPE_CONST, { .i64 = RCD(NV_ENC_PARAMS_RC_2_PASS_FRAMESIZE_CAP) }, 0, 0, VE, .unit = "rc" }, - { "vbr_2pass", "Multi-pass variable bitrate mode (deprecated)", 0, AV_OPT_TYPE_CONST, { .i64 = RCD(NV_ENC_PARAMS_RC_2_PASS_VBR) }, 0, 0, VE, .unit = "rc" }, - { "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, .unit = "rc" }, - { "cbr_hq", "Constant bitrate high quality mode", 0, AV_OPT_TYPE_CONST, { .i64 = RCD(NV_ENC_PARAMS_RC_CBR_HQ) }, 0, 0, VE, .unit = "rc" }, - { "vbr_hq", "Variable bitrate high quality mode", 0, AV_OPT_TYPE_CONST, { .i64 = RCD(NV_ENC_PARAMS_RC_VBR_HQ) }, 0, 0, VE, .unit = "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, .unit = "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, .unit = "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, .unit = "rc" }, - { "vbr_2pass", "Multi-pass variable bitrate mode (deprecated)", 0, AV_OPT_TYPE_CONST, { .i64 = RCD(NV_ENC_PARAMS_RC_VBR) }, 0, 0, VE, .unit = "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, .unit = "rc" }, - { "cbr_hq", "Constant bitrate high quality mode", 0, AV_OPT_TYPE_CONST, { .i64 = RCD(NV_ENC_PARAMS_RC_CBR) }, 0, 0, VE, .unit = "rc" }, - { "vbr_hq", "Variable bitrate high quality mode", 0, AV_OPT_TYPE_CONST, { .i64 = RCD(NV_ENC_PARAMS_RC_VBR) }, 0, 0, VE, .unit = "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 --git a/libavcodec/nvenc_hevc.c b/libavcodec/nvenc_hevc.c index 17f3f4f027..f8e905282a 100644 --- a/libavcodec/nvenc_hevc.c +++ b/libavcodec/nvenc_hevc.c @@ -89,27 +89,6 @@ static const AVOption options[] = { { "constqp", "Constant QP mode", 0, AV_OPT_TYPE_CONST, { .i64 = NV_ENC_PARAMS_RC_CONSTQP }, 0, 0, VE, .unit = "rc" }, { "vbr", "Variable bitrate mode", 0, AV_OPT_TYPE_CONST, { .i64 = NV_ENC_PARAMS_RC_VBR }, 0, 0, VE, .unit = "rc" }, { "cbr", "Constant bitrate mode", 0, AV_OPT_TYPE_CONST, { .i64 = NV_ENC_PARAMS_RC_CBR }, 0, 0, VE, .unit = "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, .unit = "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, .unit = "rc" }, - { "ll_2pass_size", "Multi-pass optimized for constant frame size (deprecated)", - 0, AV_OPT_TYPE_CONST, { .i64 = RCD(NV_ENC_PARAMS_RC_2_PASS_FRAMESIZE_CAP) }, 0, 0, VE, .unit = "rc" }, - { "vbr_2pass", "Multi-pass variable bitrate mode (deprecated)", 0, AV_OPT_TYPE_CONST, { .i64 = RCD(NV_ENC_PARAMS_RC_2_PASS_VBR) }, 0, 0, VE, .unit = "rc" }, - { "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, .unit = "rc" }, - { "cbr_hq", "Constant bitrate high quality mode", 0, AV_OPT_TYPE_CONST, { .i64 = RCD(NV_ENC_PARAMS_RC_CBR_HQ) }, 0, 0, VE, .unit = "rc" }, - { "vbr_hq", "Variable bitrate high quality mode", 0, AV_OPT_TYPE_CONST, { .i64 = RCD(NV_ENC_PARAMS_RC_VBR_HQ) }, 0, 0, VE, .unit = "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, .unit = "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, .unit = "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, .unit = "rc" }, - { "vbr_2pass", "Multi-pass variable bitrate mode (deprecated)", 0, AV_OPT_TYPE_CONST, { .i64 = RCD(NV_ENC_PARAMS_RC_VBR) }, 0, 0, VE, .unit = "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, .unit = "rc" }, - { "cbr_hq", "Constant bitrate high quality mode", 0, AV_OPT_TYPE_CONST, { .i64 = RCD(NV_ENC_PARAMS_RC_CBR) }, 0, 0, VE, .unit = "rc" }, - { "vbr_hq", "Variable bitrate high quality mode", 0, AV_OPT_TYPE_CONST, { .i64 = RCD(NV_ENC_PARAMS_RC_VBR) }, 0, 0, VE, .unit = "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 }, -- 2.52.0 >From 9c2521136a9fe5bda9131682daacdc950ca8fdb5 Mon Sep 17 00:00:00 2001 From: Timo Rothenpieler <[email protected]> Date: Tue, 23 Jun 2026 23:52:40 +0200 Subject: [PATCH 3/7] avcodec/nvenc: remove legacy cbr and 2pass AVOptions --- libavcodec/nvenc.c | 6 ++---- libavcodec/nvenc.h | 2 -- libavcodec/nvenc_h264.c | 2 -- libavcodec/nvenc_hevc.c | 2 -- 4 files changed, 2 insertions(+), 10 deletions(-) diff --git a/libavcodec/nvenc.c b/libavcodec/nvenc.c index 3f4ff3b9a3..d4f90f6d72 100644 --- a/libavcodec/nvenc.c +++ b/libavcodec/nvenc.c @@ -1021,13 +1021,11 @@ static av_cold int nvenc_setup_rate_control(AVCodecContext *avctx) if (ctx->flags & NVENC_ONE_PASS) ctx->encode_config.rcParams.multiPass = NV_ENC_MULTI_PASS_DISABLED; - if (ctx->flags & NVENC_TWO_PASSES || ctx->twopass > 0) + if (ctx->flags & NVENC_TWO_PASSES) ctx->encode_config.rcParams.multiPass = NV_ENC_TWO_PASS_FULL_RESOLUTION; if (ctx->rc < 0) { - if (ctx->cbr) { - ctx->rc = NV_ENC_PARAMS_RC_CBR; - } else if (ctx->cqp >= 0) { + if (ctx->cqp >= 0) { ctx->rc = NV_ENC_PARAMS_RC_CONSTQP; } else if (ctx->quality >= 0.0f) { ctx->rc = NV_ENC_PARAMS_RC_VBR; diff --git a/libavcodec/nvenc.h b/libavcodec/nvenc.h index c3c4b94b71..60573fe800 100644 --- a/libavcodec/nvenc.h +++ b/libavcodec/nvenc.h @@ -234,10 +234,8 @@ typedef struct NvencContext int level; int tier; int rc; - int cbr; int tile_rows; int tile_cols; - int twopass; int device; int flags; int async_depth; diff --git a/libavcodec/nvenc_h264.c b/libavcodec/nvenc_h264.c index dea4ea6efa..e9fddf1fd9 100644 --- a/libavcodec/nvenc_h264.c +++ b/libavcodec/nvenc_h264.c @@ -97,8 +97,6 @@ static const AVOption options[] = { { "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 }, - { "cbr", "Use cbr encoding mode", OFFSET(cbr), AV_OPT_TYPE_BOOL, { .i64 = 0 }, 0, 1, VE }, - { "2pass", "Use 2pass encoding mode", OFFSET(twopass), AV_OPT_TYPE_BOOL, { .i64 = -1 }, -1, 1, VE }, { "gpu", "Selects which NVENC capable GPU to use. First GPU is 0, second is 1, and so on.", OFFSET(device), AV_OPT_TYPE_INT, { .i64 = ANY_DEVICE }, -2, INT_MAX, VE, .unit = "gpu" }, { "any", "Pick the first device available", 0, AV_OPT_TYPE_CONST, { .i64 = ANY_DEVICE }, 0, 0, VE, .unit = "gpu" }, diff --git a/libavcodec/nvenc_hevc.c b/libavcodec/nvenc_hevc.c index f8e905282a..9709ebba66 100644 --- a/libavcodec/nvenc_hevc.c +++ b/libavcodec/nvenc_hevc.c @@ -92,8 +92,6 @@ static const AVOption options[] = { { "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 }, - { "cbr", "Use cbr encoding mode", OFFSET(cbr), AV_OPT_TYPE_BOOL, { .i64 = 0 }, 0, 1, VE }, - { "2pass", "Use 2pass encoding mode", OFFSET(twopass), AV_OPT_TYPE_BOOL, { .i64 = -1 }, -1, 1, VE }, { "gpu", "Selects which NVENC capable GPU to use. First GPU is 0, second is 1, and so on.", OFFSET(device), AV_OPT_TYPE_INT, { .i64 = ANY_DEVICE }, -2, INT_MAX, VE, .unit = "gpu" }, { "any", "Pick the first device available", 0, AV_OPT_TYPE_CONST, { .i64 = ANY_DEVICE }, 0, 0, VE, .unit = "gpu" }, -- 2.52.0 >From 0cb32b71c168ec2771af21c4e8ed8119d62a2aa0 Mon Sep 17 00:00:00 2001 From: Timo Rothenpieler <[email protected]> Date: Tue, 23 Jun 2026 23:59:52 +0200 Subject: [PATCH 4/7] avcodec/nvenc: remove deprecated preset aliases --- libavcodec/nvenc.c | 13 ------------- libavcodec/nvenc.h | 13 +------------ libavcodec/nvenc_av1.c | 3 +-- libavcodec/nvenc_h264.c | 11 +---------- libavcodec/nvenc_hevc.c | 11 +---------- 5 files changed, 4 insertions(+), 47 deletions(-) diff --git a/libavcodec/nvenc.c b/libavcodec/nvenc.c index d4f90f6d72..5f324032f6 100644 --- a/libavcodec/nvenc.c +++ b/libavcodec/nvenc.c @@ -211,16 +211,6 @@ static void nvenc_map_preset(NvencContext *ctx) PRESET_ALIAS(SLOW, P7, NVENC_TWO_PASSES), PRESET_ALIAS(MEDIUM, P4, NVENC_ONE_PASS), PRESET_ALIAS(FAST, P1, NVENC_ONE_PASS), - // Compat aliases - PRESET_ALIAS(DEFAULT, P4, NVENC_DEPRECATED_PRESET), - PRESET_ALIAS(HP, P1, NVENC_DEPRECATED_PRESET), - PRESET_ALIAS(HQ, P7, NVENC_DEPRECATED_PRESET), - PRESET_ALIAS(BD, P5, NVENC_DEPRECATED_PRESET), - PRESET_ALIAS(LOW_LATENCY_DEFAULT, P4, NVENC_DEPRECATED_PRESET | NVENC_LOWLATENCY), - PRESET_ALIAS(LOW_LATENCY_HP, P1, NVENC_DEPRECATED_PRESET | NVENC_LOWLATENCY), - PRESET_ALIAS(LOW_LATENCY_HQ, P7, NVENC_DEPRECATED_PRESET | NVENC_LOWLATENCY), - PRESET_ALIAS(LOSSLESS_DEFAULT, P4, NVENC_DEPRECATED_PRESET | NVENC_LOSSLESS), - PRESET_ALIAS(LOSSLESS_HP, P1, NVENC_DEPRECATED_PRESET | NVENC_LOSSLESS), }; GUIDTuple *t = &presets[ctx->preset]; @@ -714,9 +704,6 @@ static av_cold int nvenc_setup_device(AVCodecContext *avctx) nvenc_map_preset(ctx); - if (ctx->flags & NVENC_DEPRECATED_PRESET) - av_log(avctx, AV_LOG_WARNING, "The selected preset is deprecated. Use p1 to p7 + -tune or fast/medium/slow.\n"); - if (avctx->pix_fmt == AV_PIX_FMT_CUDA || avctx->pix_fmt == AV_PIX_FMT_D3D11 || avctx->hw_frames_ctx || avctx->hw_device_ctx) { AVHWFramesContext *frames_ctx; AVHWDeviceContext *hwdev_ctx; diff --git a/libavcodec/nvenc.h b/libavcodec/nvenc.h index 60573fe800..ad6ddaa434 100644 --- a/libavcodec/nvenc.h +++ b/libavcodec/nvenc.h @@ -111,18 +111,9 @@ typedef struct NvencDynLoadFunctions } NvencDynLoadFunctions; enum { - PRESET_DEFAULT = 0, - PRESET_SLOW, + PRESET_SLOW = 0, PRESET_MEDIUM, PRESET_FAST, - PRESET_HP, - PRESET_HQ, - PRESET_BD , - PRESET_LOW_LATENCY_DEFAULT , - PRESET_LOW_LATENCY_HQ , - PRESET_LOW_LATENCY_HP, - PRESET_LOSSLESS_DEFAULT, - PRESET_LOSSLESS_HP, PRESET_P1, PRESET_P2, PRESET_P3, @@ -161,8 +152,6 @@ enum { NVENC_LOSSLESS = 2, NVENC_ONE_PASS = 4, NVENC_TWO_PASSES = 8, - - NVENC_DEPRECATED_PRESET = 0x8000, }; enum { diff --git a/libavcodec/nvenc_av1.c b/libavcodec/nvenc_av1.c index 9f77dc2d92..b687260ef7 100644 --- a/libavcodec/nvenc_av1.c +++ b/libavcodec/nvenc_av1.c @@ -26,8 +26,7 @@ #define OFFSET(x) offsetof(NvencContext, x) #define VE AV_OPT_FLAG_VIDEO_PARAM | AV_OPT_FLAG_ENCODING_PARAM static const AVOption options[] = { - { "preset", "Set the encoding preset", OFFSET(preset), AV_OPT_TYPE_INT, { .i64 = PRESET_P4 }, PRESET_DEFAULT, PRESET_P7, VE, .unit = "preset" }, - { "default", "", 0, AV_OPT_TYPE_CONST, { .i64 = PRESET_DEFAULT }, 0, 0, VE, .unit = "preset" }, + { "preset", "Set the encoding preset", OFFSET(preset), AV_OPT_TYPE_INT, { .i64 = PRESET_P4 }, PRESET_SLOW, PRESET_P7, VE, .unit = "preset" }, { "slow", "hq 2 passes", 0, AV_OPT_TYPE_CONST, { .i64 = PRESET_SLOW }, 0, 0, VE, .unit = "preset" }, { "medium", "hq 1 pass", 0, AV_OPT_TYPE_CONST, { .i64 = PRESET_MEDIUM }, 0, 0, VE, .unit = "preset" }, { "fast", "hp 1 pass", 0, AV_OPT_TYPE_CONST, { .i64 = PRESET_FAST }, 0, 0, VE, .unit = "preset" }, diff --git a/libavcodec/nvenc_h264.c b/libavcodec/nvenc_h264.c index e9fddf1fd9..132c2d6a5d 100644 --- a/libavcodec/nvenc_h264.c +++ b/libavcodec/nvenc_h264.c @@ -26,19 +26,10 @@ #define OFFSET(x) offsetof(NvencContext, x) #define VE AV_OPT_FLAG_VIDEO_PARAM | AV_OPT_FLAG_ENCODING_PARAM static const AVOption options[] = { - { "preset", "Set the encoding preset", OFFSET(preset), AV_OPT_TYPE_INT, { .i64 = PRESET_P4 }, PRESET_DEFAULT, PRESET_P7, VE, .unit = "preset" }, - { "default", "", 0, AV_OPT_TYPE_CONST, { .i64 = PRESET_DEFAULT }, 0, 0, VE, .unit = "preset" }, + { "preset", "Set the encoding preset", OFFSET(preset), AV_OPT_TYPE_INT, { .i64 = PRESET_P4 }, PRESET_SLOW, PRESET_P7, VE, .unit = "preset" }, { "slow", "hq 2 passes", 0, AV_OPT_TYPE_CONST, { .i64 = PRESET_SLOW }, 0, 0, VE, .unit = "preset" }, { "medium", "hq 1 pass", 0, AV_OPT_TYPE_CONST, { .i64 = PRESET_MEDIUM }, 0, 0, VE, .unit = "preset" }, { "fast", "hp 1 pass", 0, AV_OPT_TYPE_CONST, { .i64 = PRESET_FAST }, 0, 0, VE, .unit = "preset" }, - { "hp", "", 0, AV_OPT_TYPE_CONST, { .i64 = PRESET_HP }, 0, 0, VE, .unit = "preset" }, - { "hq", "", 0, AV_OPT_TYPE_CONST, { .i64 = PRESET_HQ }, 0, 0, VE, .unit = "preset" }, - { "bd", "", 0, AV_OPT_TYPE_CONST, { .i64 = PRESET_BD }, 0, 0, VE, .unit = "preset" }, - { "ll", "low latency", 0, AV_OPT_TYPE_CONST, { .i64 = PRESET_LOW_LATENCY_DEFAULT }, 0, 0, VE, .unit = "preset" }, - { "llhq", "low latency hq", 0, AV_OPT_TYPE_CONST, { .i64 = PRESET_LOW_LATENCY_HQ }, 0, 0, VE, .unit = "preset" }, - { "llhp", "low latency hp", 0, AV_OPT_TYPE_CONST, { .i64 = PRESET_LOW_LATENCY_HP }, 0, 0, VE, .unit = "preset" }, - { "lossless", "", 0, AV_OPT_TYPE_CONST, { .i64 = PRESET_LOSSLESS_DEFAULT }, 0, 0, VE, .unit = "preset" }, - { "losslesshp", "", 0, AV_OPT_TYPE_CONST, { .i64 = PRESET_LOSSLESS_HP }, 0, 0, VE, .unit = "preset" }, { "p1", "fastest (lowest quality)", 0, AV_OPT_TYPE_CONST, { .i64 = PRESET_P1 }, 0, 0, VE, .unit = "preset" }, { "p2", "faster (lower quality)", 0, AV_OPT_TYPE_CONST, { .i64 = PRESET_P2 }, 0, 0, VE, .unit = "preset" }, { "p3", "fast (low quality)", 0, AV_OPT_TYPE_CONST, { .i64 = PRESET_P3 }, 0, 0, VE, .unit = "preset" }, diff --git a/libavcodec/nvenc_hevc.c b/libavcodec/nvenc_hevc.c index 9709ebba66..38907b497d 100644 --- a/libavcodec/nvenc_hevc.c +++ b/libavcodec/nvenc_hevc.c @@ -26,19 +26,10 @@ #define OFFSET(x) offsetof(NvencContext, x) #define VE AV_OPT_FLAG_VIDEO_PARAM | AV_OPT_FLAG_ENCODING_PARAM static const AVOption options[] = { - { "preset", "Set the encoding preset", OFFSET(preset), AV_OPT_TYPE_INT, { .i64 = PRESET_P4 }, PRESET_DEFAULT, PRESET_P7, VE, .unit = "preset" }, - { "default", "", 0, AV_OPT_TYPE_CONST, { .i64 = PRESET_DEFAULT }, 0, 0, VE, .unit = "preset" }, + { "preset", "Set the encoding preset", OFFSET(preset), AV_OPT_TYPE_INT, { .i64 = PRESET_P4 }, PRESET_SLOW, PRESET_P7, VE, .unit = "preset" }, { "slow", "hq 2 passes", 0, AV_OPT_TYPE_CONST, { .i64 = PRESET_SLOW }, 0, 0, VE, .unit = "preset" }, { "medium", "hq 1 pass", 0, AV_OPT_TYPE_CONST, { .i64 = PRESET_MEDIUM }, 0, 0, VE, .unit = "preset" }, { "fast", "hp 1 pass", 0, AV_OPT_TYPE_CONST, { .i64 = PRESET_FAST }, 0, 0, VE, .unit = "preset" }, - { "hp", "", 0, AV_OPT_TYPE_CONST, { .i64 = PRESET_HP }, 0, 0, VE, .unit = "preset" }, - { "hq", "", 0, AV_OPT_TYPE_CONST, { .i64 = PRESET_HQ }, 0, 0, VE, .unit = "preset" }, - { "bd", "", 0, AV_OPT_TYPE_CONST, { .i64 = PRESET_BD }, 0, 0, VE, .unit = "preset" }, - { "ll", "low latency", 0, AV_OPT_TYPE_CONST, { .i64 = PRESET_LOW_LATENCY_DEFAULT }, 0, 0, VE, .unit = "preset" }, - { "llhq", "low latency hq", 0, AV_OPT_TYPE_CONST, { .i64 = PRESET_LOW_LATENCY_HQ }, 0, 0, VE, .unit = "preset" }, - { "llhp", "low latency hp", 0, AV_OPT_TYPE_CONST, { .i64 = PRESET_LOW_LATENCY_HP }, 0, 0, VE, .unit = "preset" }, - { "lossless", "lossless", 0, AV_OPT_TYPE_CONST, { .i64 = PRESET_LOSSLESS_DEFAULT }, 0, 0, VE, .unit = "preset" }, - { "losslesshp", "lossless hp", 0, AV_OPT_TYPE_CONST, { .i64 = PRESET_LOSSLESS_HP }, 0, 0, VE, .unit = "preset" }, { "p1", "fastest (lowest quality)", 0, AV_OPT_TYPE_CONST, { .i64 = PRESET_P1 }, 0, 0, VE, .unit = "preset" }, { "p2", "faster (lower quality)", 0, AV_OPT_TYPE_CONST, { .i64 = PRESET_P2 }, 0, 0, VE, .unit = "preset" }, { "p3", "fast (low quality)", 0, AV_OPT_TYPE_CONST, { .i64 = PRESET_P3 }, 0, 0, VE, .unit = "preset" }, -- 2.52.0 >From 2bed6c63b6b00f6c37135f635b7759973eedb6b0 Mon Sep 17 00:00:00 2001 From: Timo Rothenpieler <[email protected]> Date: Wed, 24 Jun 2026 00:08:18 +0200 Subject: [PATCH 5/7] avcodec/nvenc: remove legacy option aliases --- libavcodec/nvenc_h264.c | 2 -- libavcodec/nvenc_hevc.c | 2 -- 2 files changed, 4 deletions(-) diff --git a/libavcodec/nvenc_h264.c b/libavcodec/nvenc_h264.c index 132c2d6a5d..103c9a95fd 100644 --- a/libavcodec/nvenc_h264.c +++ b/libavcodec/nvenc_h264.c @@ -106,9 +106,7 @@ static const AVOption options[] = { { "b_adapt", "When lookahead is enabled, set this to 0 to disable adaptive B-frame decision", OFFSET(b_adapt), AV_OPT_TYPE_BOOL, { .i64 = 1 }, 0, 1, VE }, { "spatial-aq", "set to 1 to enable Spatial AQ", OFFSET(aq), AV_OPT_TYPE_BOOL, { .i64 = 0 }, 0, 1, VE }, - { "spatial_aq", "set to 1 to enable Spatial AQ", OFFSET(aq), AV_OPT_TYPE_BOOL, { .i64 = 0 }, 0, 1, VE }, { "temporal-aq", "set to 1 to enable Temporal AQ", OFFSET(temporal_aq), AV_OPT_TYPE_BOOL, { .i64 = 0 }, 0, 1, VE }, - { "temporal_aq", "set to 1 to enable Temporal AQ", OFFSET(temporal_aq), AV_OPT_TYPE_BOOL, { .i64 = 0 }, 0, 1, VE }, { "zerolatency", "Set 1 to indicate zero latency operation (no reordering delay)", OFFSET(zerolatency), AV_OPT_TYPE_BOOL, { .i64 = 0 }, 0, 1, VE }, { "nonref_p", "Set this to 1 to enable automatic insertion of non-reference P-frames", diff --git a/libavcodec/nvenc_hevc.c b/libavcodec/nvenc_hevc.c index 38907b497d..94ba34c48b 100644 --- a/libavcodec/nvenc_hevc.c +++ b/libavcodec/nvenc_hevc.c @@ -100,9 +100,7 @@ static const AVOption options[] = { OFFSET(forced_idr), AV_OPT_TYPE_BOOL, { .i64 = 0 }, -1, 1, VE }, { "b_adapt", "When lookahead is enabled, set this to 0 to disable adaptive B-frame decision", OFFSET(b_adapt), AV_OPT_TYPE_BOOL, { .i64 = 1 }, 0, 1, VE }, - { "spatial_aq", "set to 1 to enable Spatial AQ", OFFSET(aq), AV_OPT_TYPE_BOOL, { .i64 = 0 }, 0, 1, VE }, { "spatial-aq", "set to 1 to enable Spatial AQ", OFFSET(aq), AV_OPT_TYPE_BOOL, { .i64 = 0 }, 0, 1, VE }, - { "temporal_aq", "set to 1 to enable Temporal AQ", OFFSET(temporal_aq), AV_OPT_TYPE_BOOL, { .i64 = 0 }, 0, 1, VE }, { "temporal-aq", "set to 1 to enable Temporal AQ", OFFSET(temporal_aq), AV_OPT_TYPE_BOOL, { .i64 = 0 }, 0, 1, VE }, { "zerolatency", "Set 1 to indicate zero latency operation (no reordering delay)", OFFSET(zerolatency), AV_OPT_TYPE_BOOL, { .i64 = 0 }, 0, 1, VE }, -- 2.52.0 >From 3cc1713867b6d2057604c8008257af46a1f39ba6 Mon Sep 17 00:00:00 2001 From: Timo Rothenpieler <[email protected]> Date: Wed, 24 Jun 2026 00:23:15 +0200 Subject: [PATCH 6/7] avcodec/nvenc: reject deprecated global_quality instead of -qp --- libavcodec/nvenc.c | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/libavcodec/nvenc.c b/libavcodec/nvenc.c index 5f324032f6..ff2b26c3bc 100644 --- a/libavcodec/nvenc.c +++ b/libavcodec/nvenc.c @@ -989,11 +989,10 @@ static av_cold int nvenc_setup_rate_control(AVCodecContext *avctx) { NvencContext *ctx = avctx->priv_data; - if (avctx->global_quality > 0) - av_log(avctx, AV_LOG_WARNING, "Using global_quality with nvenc is deprecated. Use qp instead.\n"); - - if (ctx->cqp < 0 && avctx->global_quality > 0) - ctx->cqp = avctx->global_quality; + if (avctx->global_quality > 0) { + av_log(avctx, AV_LOG_ERROR, "Using global_quality with nvenc is not supported. Use qp instead.\n"); + return AVERROR(EINVAL); + } if (avctx->bit_rate > 0) { ctx->encode_config.rcParams.averageBitRate = avctx->bit_rate; -- 2.52.0 >From d36397468ae716974956db4e95314023a3eb2363 Mon Sep 17 00:00:00 2001 From: Timo Rothenpieler <[email protected]> Date: Wed, 24 Jun 2026 00:33:36 +0200 Subject: [PATCH 7/7] libavcodec: minor version bump after nvenc changes --- Changelog | 1 + libavcodec/version.h | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/Changelog b/Changelog index 8cfac4c1a7..beacc002b0 100644 --- a/Changelog +++ b/Changelog @@ -19,6 +19,7 @@ version <next>: - Bitstream filter to split Dolby Vision multi-layer HEVC - Add AMF hardware memory mapping support. - ONNX Runtime DNN backend with GPU execution provider support +- Remove deprecated NVENC options and support for pre-11.1 SDK versions version 8.1: diff --git a/libavcodec/version.h b/libavcodec/version.h index 8c3d476003..5957009457 100644 --- a/libavcodec/version.h +++ b/libavcodec/version.h @@ -29,7 +29,7 @@ #include "version_major.h" -#define LIBAVCODEC_VERSION_MINOR 0 +#define LIBAVCODEC_VERSION_MINOR 1 #define LIBAVCODEC_VERSION_MICRO 100 #define LIBAVCODEC_VERSION_INT AV_VERSION_INT(LIBAVCODEC_VERSION_MAJOR, \ -- 2.52.0 _______________________________________________ ffmpeg-devel mailing list -- [email protected] To unsubscribe send an email to [email protected]
