diff mbox series

[FFmpeg-devel,v2,2/2] avcodec/nvenc: Multi NVENC Split Frame Encoding in HEVC and AV1

Message ID 20240412200813.611054-2-ddesouza@nvidia.com
State New
Headers show
Series [FFmpeg-devel,v2,1/2] avcodec/nvenc: Multi NVENC Split Frame Encoding in HEVC and AV1 | expand

Checks

Context Check Description
yinshiyou/make_loongarch64 success Make finished
yinshiyou/make_fate_loongarch64 success Make fate finished
andriy/make_x86 success Make finished
andriy/make_fate_x86 success Make fate finished

Commit Message

Diego Felix de Souza via ffmpeg-devel April 12, 2024, 8:08 p.m. UTC
From: Diego Felix de Souza <ddesouza@nvidia.com>

When Split frame encoding is enabled, each input frame is partitioned into
horizontal strips which are encoded independently and simultaneously by
separate NVENCs, usually resulting in increased encoding speed compared to
single NVENC encoding.

Signed-off-by: Diego Felix de Souza <ddesouza@nvidia.com>
---
 libavcodec/nvenc.c      | 14 ++++----------
 libavcodec/nvenc_av1.c  |  2 +-
 libavcodec/nvenc_hevc.c |  2 +-
 3 files changed, 6 insertions(+), 12 deletions(-)

--
2.34.1

-----------------------------------------------------------------------------------
NVIDIA GmbH
Wuerselen
Amtsgericht Aachen
HRB 8361
Managing Directors: Rebecca Peters, Donald Robertson, Janet Hall, Ludwig von Reiche

-----------------------------------------------------------------------------------
This email message is for the sole use of the intended recipient(s) and may contain
confidential information.  Any unauthorized review, use, disclosure or distribution
is prohibited.  If you are not the intended recipient, please contact the sender by
reply email and destroy all copies of the original message.
-----------------------------------------------------------------------------------

Comments

Timo Rothenpieler April 13, 2024, 4:02 p.m. UTC | #1
squashed, added version bump and applied


Thanks!
diff mbox series

Patch

diff --git a/libavcodec/nvenc.c b/libavcodec/nvenc.c
index f4d0d21715..469ef3bebd 100644
--- a/libavcodec/nvenc.c
+++ b/libavcodec/nvenc.c
@@ -1697,18 +1697,12 @@  FF_ENABLE_DEPRECATION_WARNINGS
         ctx->init_encode_params.enableWeightedPrediction = 1;

 #ifdef NVENC_HAVE_SPLIT_FRAME_ENCODING
-    if (avctx->codec->id != AV_CODEC_ID_H264 )
-        ctx->init_encode_params.splitEncodeMode = ctx->split_encode_mode;
+    ctx->init_encode_params.splitEncodeMode = ctx->split_encode_mode;

     if ((ctx->split_encode_mode != NV_ENC_SPLIT_DISABLE_MODE) &&
-    ((ctx->weighted_pred == 1) && (avctx->codec->id == AV_CODEC_ID_HEVC ))) {
-        av_log(avctx, AV_LOG_WARNING, "Split encoding is not "
-            "supported if any of the following features: weighted prediction, "
-            "alpha layer encoding, subframe mode, output into video memory "
-            "buffer, picture timing/buffering period SEI message insertion "
-            "with DX12 interface are enabled in case of HEVC. For AV1, split "
-            "encoding is not supported when output into video memory buffer "
-            "is enabled.\n");
+        ((ctx->weighted_pred == 1) && (avctx->codec->id == AV_CODEC_ID_HEVC)))
+    {
+        av_log(avctx, AV_LOG_WARNING, "Split encoding not supported with weighted prediction enabled.\n");
     }
 #endif

diff --git a/libavcodec/nvenc_av1.c b/libavcodec/nvenc_av1.c
index 45dc3c26e0..a9e065e3b9 100644
--- a/libavcodec/nvenc_av1.c
+++ b/libavcodec/nvenc_av1.c
@@ -159,7 +159,7 @@  static const AVOption options[] = {
     { "3",            "",                                   0,                    AV_OPT_TYPE_CONST, { .i64 = NV_ENC_LOOKAHEAD_LEVEL_3 }, 0, 0, VE, .unit = "lookahead_level" },
 #endif
 #ifdef NVENC_HAVE_SPLIT_FRAME_ENCODING
-    { "split_encode_mode", "Specifies the split encoding mode", OFFSET(split_encode_mode), AV_OPT_TYPE_INT, { .i64 = NV_ENC_SPLIT_DISABLE_MODE }, 0, NV_ENC_SPLIT_DISABLE_MODE, VE, .unit = "split_encode_mode" },
+    { "split_encode_mode", "Specifies the split encoding mode", OFFSET(split_encode_mode), AV_OPT_TYPE_INT, { .i64 = NV_ENC_SPLIT_AUTO_MODE }, 0, NV_ENC_SPLIT_DISABLE_MODE, VE, .unit = "split_encode_mode" },
     { "disabled",          "Disabled for all configurations",                                                0, AV_OPT_TYPE_CONST, { .i64 = NV_ENC_SPLIT_DISABLE_MODE },      0, 0, VE, .unit = "split_encode_mode" },
     { "auto",              "Enabled or disabled depending on the preset and tuning info",                    0, AV_OPT_TYPE_CONST, { .i64 = NV_ENC_SPLIT_AUTO_MODE },         0, 0, VE, .unit = "split_encode_mode" },
     { "forced",            "Enabled with number of horizontal strips selected by the driver",                0, AV_OPT_TYPE_CONST, { .i64 = NV_ENC_SPLIT_AUTO_FORCED_MODE },  0, 0, VE, .unit = "split_encode_mode" },
diff --git a/libavcodec/nvenc_hevc.c b/libavcodec/nvenc_hevc.c
index 1f5e56ecd0..b949cb1bd7 100644
--- a/libavcodec/nvenc_hevc.c
+++ b/libavcodec/nvenc_hevc.c
@@ -218,7 +218,7 @@  static const AVOption options[] = {
     { "unidir_b",     "Enable use of unidirectional B-Frames.", OFFSET(unidir_b), AV_OPT_TYPE_BOOL,  { .i64 = 0 }, 0, 1, VE },
 #endif
 #ifdef NVENC_HAVE_SPLIT_FRAME_ENCODING
-    { "split_encode_mode", "Specifies the split encoding mode", OFFSET(split_encode_mode), AV_OPT_TYPE_INT, { .i64 = NV_ENC_SPLIT_DISABLE_MODE }, 0, NV_ENC_SPLIT_DISABLE_MODE, VE, .unit = "split_encode_mode" },
+    { "split_encode_mode", "Specifies the split encoding mode", OFFSET(split_encode_mode), AV_OPT_TYPE_INT, { .i64 = NV_ENC_SPLIT_AUTO_MODE }, 0, NV_ENC_SPLIT_DISABLE_MODE, VE, .unit = "split_encode_mode" },
     { "disabled",          "Disabled for all configurations",                                                0, AV_OPT_TYPE_CONST, { .i64 = NV_ENC_SPLIT_DISABLE_MODE },      0, 0, VE, .unit = "split_encode_mode" },
     { "auto",              "Enabled or disabled depending on the preset and tuning info",                    0, AV_OPT_TYPE_CONST, { .i64 = NV_ENC_SPLIT_AUTO_MODE },         0, 0, VE, .unit = "split_encode_mode" },
     { "forced",            "Enabled with number of horizontal strips selected by the driver",                0, AV_OPT_TYPE_CONST, { .i64 = NV_ENC_SPLIT_AUTO_FORCED_MODE },  0, 0, VE, .unit = "split_encode_mode" },