From patchwork Thu Jul 27 02:39:50 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: =?utf-8?b?0JLQvtC00Y/QvdC90LjQutC+0LIg0JDQu9C10LrRgdCw0L3QtNGA?= X-Patchwork-Id: 43003 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:c11c:b0:130:ccc6:6c4b with SMTP id bh28csp132017pzb; Wed, 26 Jul 2023 19:40:12 -0700 (PDT) X-Google-Smtp-Source: APBJJlEtXwLg4ZPb24liUZGlznd77VYVzn24mzNckwHjwGKQ/bss9xu4Kr0XvmbsELyM/fH8iW8G X-Received: by 2002:aa7:c617:0:b0:522:4cb6:d1e3 with SMTP id h23-20020aa7c617000000b005224cb6d1e3mr850360edq.10.1690425612454; Wed, 26 Jul 2023 19:40:12 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1690425612; cv=none; d=google.com; s=arc-20160816; b=PPaeM8f5fd7rExZJAUrSs0ZVK7DqhHKO5pAdagCWSrwmNsiMX0ZYZ9V92Z0vIg8pjH GAPcu2cumIe8IuKDzRphGEC8Q5Prf++MDYGm833vLv57zySFGzjQbIYKww+uTTZHxPI0 3k07v9/ksHveLeN/k2IJgGvAU7QXpjRvIs+CIvPRf4yrdXtVQlMH758vONKXLg4GD2uU l2NOq9toLBXz18YRBgh1qMGUnQOFqhBKAE4FPzN2YbQM1sm20lKjkt6wv1zMNG3EWwqC ZIKOzKT9u1N3cV8RLZJuo6T5bPlEYFIvItg7hfN1UguaTmtoW0JOqJnE7gbA7lfOFpAc 9ssA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:reply-to:list-subscribe:list-help:list-post :list-archive:list-unsubscribe:list-id:precedence:subject:to :message-id:date:from:mime-version:dkim-signature:delivered-to; bh=azK1kC9UdVF9DKCC+DTaV6VYKZChqpXg0qrv6QlFl3s=; fh=R98lELYJM/mx5c43yyTif1+e2VSuXrRUnRf2aiVPK+0=; b=fTxLzIHr86CGs2DNZBx8G28oyxxIMYYhiSe8s9D6ay7bCxme0q58lR1TsMDAcfpNOv fLzCLS+cY3fy0SeAXT9eXzVFDtHvxZ4SUKJxkBE4PStArjSf4PZrt6gC4PYxu4otLzXv M/RyuVs0eWCrTvCDuNiz/0WIrkAi5cwtmDGq/PE9SZmxCtbJqU9hYjyTeNzoZyR2oelk RbRMll5YTt+OCUcmazojzeA/Zs5KJknzrtJaUvtHli/xR7cwqfmyAqxAfFUiMDSWAUL4 kzcjKtdOeLMKdGsehk0EKup+WbNM9H4kuupHkTRWDM5sU8lkrP2QAjSdyEawCnmPxJPg ygxQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@gmail.com header.s=20221208 header.b=A7KW2zsx; spf=pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) smtp.mailfrom=ffmpeg-devel-bounces@ffmpeg.org; dmarc=fail (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id f9-20020a056402150900b005227bc9dc21si210171edw.102.2023.07.26.19.40.12; Wed, 26 Jul 2023 19:40:12 -0700 (PDT) Received-SPF: pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) client-ip=79.124.17.100; Authentication-Results: mx.google.com; dkim=neutral (body hash did not verify) header.i=@gmail.com header.s=20221208 header.b=A7KW2zsx; spf=pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) smtp.mailfrom=ffmpeg-devel-bounces@ffmpeg.org; dmarc=fail (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id A7C2068C9E0; Thu, 27 Jul 2023 05:40:09 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-wr1-f54.google.com (mail-wr1-f54.google.com [209.85.221.54]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 60E4268C9B8 for ; Thu, 27 Jul 2023 05:40:03 +0300 (EEST) Received: by mail-wr1-f54.google.com with SMTP id ffacd0b85a97d-313e742a787so241002f8f.1 for ; Wed, 26 Jul 2023 19:40:03 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20221208; t=1690425602; x=1691030402; h=to:subject:message-id:date:from:mime-version:from:to:cc:subject :date:message-id:reply-to; bh=9k6eMyQ10WFGBI6gatA675ijWeLk5ZUxfqh5MMrUSn8=; b=A7KW2zsx9fcT0zECNQGF91XTxIQI+1zrUhQ1FXGvrT5QkrPOCgXywTqNMf5/3Hbyye OJ15knZB91ncE9u4MoPrLUvapAhN6GKb0BBBli6A4rSDHgZ9oQIyp1brUjYzjLbHbb6w EGxMmVSSrnlqIEjLivvgDUaXrOoF1oXylQuAUoOo9sPd7EGfN5VclJqHr5o1k0Cwen1t 3oZw9uCf2QWV5cb8tFTlzMmPRX1uXApkQhSj/6SWC/nsz6kYSkT84cDFp/lC9bu5fy+/ znmTEevrcpVwPwuTTbyw4DkXSh8Me96amZhRSWvJUWRDwAMFviukPtl+qcinN06SPtOw Bcow== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1690425602; x=1691030402; h=to:subject:message-id:date:from:mime-version:x-gm-message-state :from:to:cc:subject:date:message-id:reply-to; bh=9k6eMyQ10WFGBI6gatA675ijWeLk5ZUxfqh5MMrUSn8=; b=dt7ukDFIYftHHr7VAsXk+XDkzpQrrWOKhNEaWRy+F0FBQCkufs6VggaSAwI3Lo+TNI gvYr5jnkOvuVFU0T9m9w9ju/LXJO4Y71/h8rNh+EnL85ffYI4d4l78PphVayLvLprouV t8NggHg9p8XKUju01qpk6wNI9eLK+st9Q1OhDZnfSsvQ2AbCHAjsEJPUoZH/rCVeRNMy MBwaEYUO5rBdMnNUH/iIM6ECORagbf2BziOX3JIiI5DTchoYCo3zBMa4kVIgDDrYXc41 BB9p9s3zkKzEKo+pVMnjWViJrwEVPiM7Pf983JnjURFdkejfsTeQIcipYVnU8hZXlvE7 +p6g== X-Gm-Message-State: ABy/qLYEFoia17d29KDARR4zPELO8V2M4Hrdz/BJCQqrvK7CeudpAOtp NTNxEV33WekfHgZlWFo9UAgSx88yk/zQgrEPrQcnt66Y X-Received: by 2002:a5d:5752:0:b0:314:1096:6437 with SMTP id q18-20020a5d5752000000b0031410966437mr444011wrw.19.1690425602450; Wed, 26 Jul 2023 19:40:02 -0700 (PDT) MIME-Version: 1.0 From: =?utf-8?b?0JLQvtC00Y/QvdC90LjQutC+0LIg0JDQu9C10LrRgdCw0L3QtNGA?= Date: Thu, 27 Jul 2023 12:39:50 +1000 Message-ID: To: ffmpeg-devel@ffmpeg.org X-Content-Filtered-By: Mailman/MimeDel 2.1.29 Subject: [FFmpeg-devel] [PATCH] Add NVENC "Maximum encoded slice size in bytes" for H.264/HEVC codecs. X-BeenThere: ffmpeg-devel@ffmpeg.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: FFmpeg development discussions and patches List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-To: FFmpeg development discussions and patches Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: bkOeGUuVcSgV From: Aleksoid Date: Thu, 27 Jul 2023 12:26:23 +1000 Subject: [PATCH] Add NVENC "Maximum encoded slice size in bytes" for H.264/HEVC codecs. Signed-off-by: Aleksoid --- libavcodec/nvenc.c | 18 ++++++++++++++---- libavcodec/nvenc.h | 1 + libavcodec/nvenc_h264.c | 2 ++ libavcodec/nvenc_hevc.c | 2 ++ 4 files changed, 19 insertions(+), 4 deletions(-) diff --git a/libavcodec/nvenc.c b/libavcodec/nvenc.c index 0b6417674e..c82fcbfe1e 100644 --- a/libavcodec/nvenc.c +++ b/libavcodec/nvenc.c @@ -1166,8 +1166,13 @@ static av_cold int nvenc_setup_h264_config(AVCodecContext *avctx) || vui->videoFormat != 5 || vui->videoFullRangeFlag != 0); - h264->sliceMode = 3; - h264->sliceModeData = avctx->slices > 0 ? avctx->slices : 1; + if (ctx->max_slice_size > 0) { + h264->sliceMode = 1; + h264->sliceModeData = ctx->max_slice_size; + } else { + h264->sliceMode = 3; + h264->sliceModeData = avctx->slices > 0 ? avctx->slices : 1; + } if (ctx->intra_refresh) { h264->enableIntraRefresh = 1; @@ -1287,8 +1292,13 @@ static av_cold int nvenc_setup_hevc_config(AVCodecContext *avctx) || vui->videoFormat != 5 || vui->videoFullRangeFlag != 0); - hevc->sliceMode = 3; - hevc->sliceModeData = avctx->slices > 0 ? avctx->slices : 1; + if (ctx->max_slice_size > 0) { + hevc->sliceMode = 1; + hevc->sliceModeData = ctx->max_slice_size; + } else { + hevc->sliceMode = 3; + hevc->sliceModeData = avctx->slices > 0 ? avctx->slices : 1; + } if (ctx->intra_refresh) { hevc->enableIntraRefresh = 1; diff --git a/libavcodec/nvenc.h b/libavcodec/nvenc.h index 3a4b456a41..cf0e8e5946 100644 --- a/libavcodec/nvenc.h +++ b/libavcodec/nvenc.h @@ -262,6 +262,7 @@ typedef struct NvencContext int udu_sei; int timing_info; int highbitdepth; + int max_slice_size; } NvencContext; int ff_nvenc_encode_init(AVCodecContext *avctx); diff --git a/libavcodec/nvenc_h264.c b/libavcodec/nvenc_h264.c index a99860998e..4440e49b25 100644 --- a/libavcodec/nvenc_h264.c +++ b/libavcodec/nvenc_h264.c @@ -206,6 +206,8 @@ static const AVOption options[] = { OFFSET(intra_refresh),AV_OPT_TYPE_BOOL, { .i64 = 0 }, 0, 1, VE }, { "single-slice-intra-refresh", "Use single slice intra refresh", OFFSET(single_slice_intra_refresh), AV_OPT_TYPE_BOOL, { .i64 = 0 }, 0, 1, VE }, + { "max_slice_size", "Maximum encoded slice size in bytes", + 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 }, { NULL } diff --git a/libavcodec/nvenc_hevc.c b/libavcodec/nvenc_hevc.c index a02f277888..e606655e7e 100644 --- a/libavcodec/nvenc_hevc.c +++ b/libavcodec/nvenc_hevc.c @@ -187,6 +187,8 @@ static const AVOption options[] = { OFFSET(intra_refresh),AV_OPT_TYPE_BOOL, { .i64 = 0 }, 0, 1, VE }, { "single-slice-intra-refresh", "Use single slice intra refresh", OFFSET(single_slice_intra_refresh), AV_OPT_TYPE_BOOL, { .i64 = 0 }, 0, 1, VE }, + { "max_slice_size", "Maximum encoded slice size in bytes", + 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 }, { NULL }