From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org [79.124.17.100]) by master.gitmailbox.com (Postfix) with ESMTP id 615D545046 for ; Fri, 30 Dec 2022 17:50:58 +0000 (UTC) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 3DAD868BB07; Fri, 30 Dec 2022 19:50:56 +0200 (EET) Received: from out203-205-221-209.mail.qq.com (out203-205-221-209.mail.qq.com [203.205.221.209]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id B40DC680741 for ; Fri, 30 Dec 2022 19:50:48 +0200 (EET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=foxmail.com; s=s201512; t=1672422644; bh=XgJcfm1EbN5otUslkY4678sRnAZzEeDSXBuBr3s19dA=; h=From:To:Cc:Subject:Date; b=CEPor+5ZbGck9LMEAi21dZ1c8bSy7ilC4JEXVmdwd+YplR4fIAcO61Z+tE+G0jUDj yaWj1VSS6Q1iqr7KIblgNJqOpruABqPzNlURCDq4mQ2+4QNy+Vh3M3BTSpeehtLJGr FO3FHDiBlt4XAvf0GjSqJt+TT2968WFnMWRcaVzc= Received: from localhost.localdomain ([121.35.187.62]) by newxmesmtplogicsvrszb1-0.qq.com (NewEsmtp) with SMTP id CAB33489; Sat, 31 Dec 2022 01:50:43 +0800 X-QQ-mid: xmsmtpt1672422643taffaj9sf Message-ID: X-QQ-XMAILINFO: NDz66ktblfzJms37L8HL4jbK3k65TEpZP5aazR4WF10k4wtkhnQ4LbrsKFt3Ib 01PGwqzHLYNNupanobtEWvZeQIfJc1dVIQXnwE24diACtYMF5yP0EIyx01hT/HRz1nmWxvtzDnbY A3t5bYgWKLE5Jq7AsTYK5itxC6iU7XoA95kKXkdxIByxfGoZ//Hrz6t33STZl+P4SP0J/myYfw43 qa0ZvSDyfqt4WLmzZw22Z4JSXkkqWU5c+JgkYkCUmSWLuy0+rX7zNxpNSZZRwV6flXYoLbuSQKoA RX23o3hsrgXCbeRBzL/pmpaXiJDuHTZrNQYS6NE1D7cyML6EndXnSjhd+BWPJzPkrQPUgsa8dkkR GCiZzcM4blhlaJ+v8fv62+wBr43Ed9YxdB37D9s6FWQU3HGzqCIWfkUMjkfk0Mlg+DnyUhYK2w1g TcnBYNIJBIhl+W/UkRlC87V2A63MGm1S9m63O+BD49gYQV8pcp5CkG+rriOPF7GjIDHUfi4lsgj/ SgpmUNJ5RzTr7naA9xGuTfkjO2QOJHyOCUSogJsl4BHholMKPLNwPPgmqavjjepKU0C+tsNZ1T/Y v+CH7jEQ2zN7ZPYX/YnJ78/Kfo9XK80vfjRqvgIs/BsS0cpMEIg0V6X9JkgFUfAorlviL0/IVcF1 XEhkM2fIob+psoW9lpiMR+vNlggMVUZJuHQgNqAcqzpUahuJ3w08kmbkqWcgBgB36n0xJ38EOetT ulkH++81PMArD8RqFZmrQ+WH6A4KfqsNdTVjssK2h2rA32HfOKfjAeePS/xhPgBYgBBr8WXCYK+f WKA3C1iPW2R3dlsbFu6m0nFyhVtez+VJVnuRi2JlfaaSAJFlz+eujgz8jifIwEHOuAsNhZWrau46 7bJTaGNm+yFsKbABPYFyEDLfsWUQRxexOH3pLOWBatzBpiufYuVZVgQA/glZP4wvDLEHLaIF6eHf /setpihXvOsMs3taGB2g== From: Zhao Zhili To: ffmpeg-devel@ffmpeg.org Date: Sat, 31 Dec 2022 01:50:19 +0800 X-OQ-MSGID: <20221230175019.191187-1-quinkblack@foxmail.com> X-Mailer: git-send-email 2.34.1 MIME-Version: 1.0 Subject: [FFmpeg-devel] [RFC PATCH] avcodec/nvenc: add alpha layer encoding support 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 Cc: Zhao Zhili Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" Archived-At: List-Archive: List-Post: From: Zhao Zhili Signed-off-by: Zhao Zhili --- I need help. A lot of things doesn't work as Nvidia's doc: 1. Global header is broken. NV_ENC_SEQUENCE_PARAM_PAYLOAD doesn't work with multi SPS/PPS. It output VPS, SPS_0, SPS_1, PPS_0, with PPS_1 missing. 2. NV_ENC_LOCK_BITSTREAM.alphaLayerSizeInBytes is always 0, although the data is there. 3. The alpha layer bitstream is corrupted. It can be decoded with a lot of errors. libavcodec/nvenc.c | 13 +++++++++++++ libavcodec/nvenc.h | 1 + libavcodec/nvenc_hevc.c | 2 ++ 3 files changed, 16 insertions(+) diff --git a/libavcodec/nvenc.c b/libavcodec/nvenc.c index f6df7cb6ac..e46cea4302 100644 --- a/libavcodec/nvenc.c +++ b/libavcodec/nvenc.c @@ -578,6 +578,12 @@ static int nvenc_check_capabilities(AVCodecContext *avctx) return AVERROR(ENOSYS); } + if (ctx->alpha_bitrate_ratio > 0 && + nvenc_check_cap(avctx, NV_ENC_CAPS_SUPPORT_ALPHA_LAYER_ENCODING) <= 0) { + av_log(avctx, AV_LOG_ERROR, "Alpha layer encoding not supported\n"); + return AVERROR(ENOSYS); + } + ctx->support_dyn_bitrate = nvenc_check_cap(avctx, NV_ENC_CAPS_SUPPORT_DYN_BITRATE_CHANGE); return 0; @@ -1290,6 +1296,13 @@ static av_cold int nvenc_setup_hevc_config(AVCodecContext *avctx) hevc->enableConstrainedEncoding = 1; #endif + if (ctx->alpha_bitrate_ratio > 0 && (pixdesc->flags & AV_PIX_FMT_FLAG_ALPHA)) { + hevc->enableAlphaLayerEncoding = 1; + cc->rcParams.alphaLayerBitrateRatio = ctx->alpha_bitrate_ratio; + av_log(avctx, AV_LOG_DEBUG, "Enable alpha layer encoding for pix_fmt %s\n", + pixdesc->name); + } + hevc->disableSPSPPS = (avctx->flags & AV_CODEC_FLAG_GLOBAL_HEADER) ? 1 : 0; hevc->repeatSPSPPS = (avctx->flags & AV_CODEC_FLAG_GLOBAL_HEADER) ? 0 : 1; hevc->outputAUD = ctx->aud; diff --git a/libavcodec/nvenc.h b/libavcodec/nvenc.h index 05a7ac48b1..f210d71eeb 100644 --- a/libavcodec/nvenc.h +++ b/libavcodec/nvenc.h @@ -240,6 +240,7 @@ typedef struct NvencContext int udu_sei; int timing_info; int highbitdepth; + int alpha_bitrate_ratio; } NvencContext; int ff_nvenc_encode_init(AVCodecContext *avctx); diff --git a/libavcodec/nvenc_hevc.c b/libavcodec/nvenc_hevc.c index 5ad423444a..67a649fad2 100644 --- a/libavcodec/nvenc_hevc.c +++ b/libavcodec/nvenc_hevc.c @@ -177,6 +177,8 @@ static const AVOption options[] = { OFFSET(single_slice_intra_refresh), AV_OPT_TYPE_BOOL, { .i64 = 0 }, 0, 1, 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 }, + { "alpha-bitrate-ratio", "Specifies the ratio in which bitrate should be split between base and alpha layer, 0 for disable alpha layer encoding", + OFFSET(alpha_bitrate_ratio), AV_OPT_TYPE_INT, { .i64 = 0 }, 0, INT_MAX, VE }, { NULL } }; -- 2.34.1 _______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org https://ffmpeg.org/mailman/listinfo/ffmpeg-devel To unsubscribe, visit link above, or email ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe".