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 07A0349758 for ; Fri, 19 Apr 2024 11:55:49 +0000 (UTC) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 4757B68D343; Fri, 19 Apr 2024 14:55:47 +0300 (EEST) Received: from btbn.de (btbn.de [144.76.60.213]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 6446D68D2BE for ; Fri, 19 Apr 2024 14:55:41 +0300 (EEST) Received: from [authenticated] by btbn.de (Postfix) with ESMTPSA id A8CAE27FFD92D for ; Fri, 19 Apr 2024 13:55:39 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=rothenpieler.org; s=mail; t=1713527739; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=W0Wta4lFMgtl6v34gNHURMWUyNTYFPhgo1Tkt7l4DlI=; b=cutyzQNm69HfLxya/iZIaLrZXn4AwSw0sYlJwepsSYnMu2i8J4Y5eFShhfkmSEP2c6HhNs dL/2dWW3rpnswh4dhdWYrLFv25cT/PCkoYNt9jCLARbdQV8ZFROazydTSv1pXNOCV3gZbG ZgR5C+ck9DPPDN3CaaW5iZcnrUO9xP2Biw9LJvwyuo7IRuXbNzKtBrVtOuge+OQqst50y1 8QexnJmTqP2PIwwcA+F+eK/HqM/Bfo41TlmPrKBf8Y6ZkrM3l5fUjyk2Vyb+v4zWFd/R/j hrbfwjbWrSjkK79Ux61uPVywkTEg3V9RYeXRUR//OuGRbXikP6aPGuyPvmW9uQ== Message-ID: Date: Fri, 19 Apr 2024 13:55:50 +0200 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird To: ffmpeg-devel@ffmpeg.org References: <20240415143932.338380-1-ddesouza@nvidia.com> <20240419083851.746482-1-ddesouza@nvidia.com> Content-Language: en-US, de-DE From: Timo Rothenpieler In-Reply-To: Subject: Re: [FFmpeg-devel] [PATCH v2] avcodec/nvenc: High bit depth encoding for HEVC 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 Content-Transfer-Encoding: 7bit Content-Type: text/plain; charset="us-ascii"; Format="flowed" Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" Archived-At: List-Archive: List-Post: On 19/04/2024 13:29, Lynne wrote: > Apr 19, 2024, 10:39 by ffmpeg-devel@ffmpeg.org: > >> From: Diego Felix de Souza >> >> Adding 10-bit encoding support for HEVC if the input is 8-bit. In >> case of 8-bit input content, NVENC performs an internal CUDA 8 to >> 10-bit conversion of the input prior to encoding. Currently, only >> AV1 supports encoding 8-bit content as 10-bit. >> >> Signed-off-by: Diego Felix de Souza >> --- >> libavcodec/nvenc.c | 10 +++++----- >> libavcodec/nvenc_hevc.c | 3 +++ >> 2 files changed, 8 insertions(+), 5 deletions(-) >> >> diff --git a/libavcodec/nvenc.c b/libavcodec/nvenc.c >> index 794174a53f..e48224347d 100644 >> --- a/libavcodec/nvenc.c >> +++ b/libavcodec/nvenc.c >> @@ -514,7 +514,7 @@ static int nvenc_check_capabilities(AVCodecContext *avctx) >> } >> >> ret = nvenc_check_cap(avctx, NV_ENC_CAPS_SUPPORT_10BIT_ENCODE); >> - if (IS_10BIT(ctx->data_pix_fmt) && ret <= 0) { >> + if ((IS_10BIT(ctx->data_pix_fmt) || ctx->highbitdepth) && ret <= 0) { >> av_log(avctx, AV_LOG_WARNING, "10 bit encode not supported\n"); >> return AVERROR(ENOSYS); >> } >> @@ -1420,8 +1420,8 @@ static av_cold int nvenc_setup_hevc_config(AVCodecContext *avctx) >> break; >> } >> >> - // force setting profile as main10 if input is 10 bit >> - if (IS_10BIT(ctx->data_pix_fmt)) { >> + // force setting profile as main10 if input is 10 bit or if it should be encoded as 10 bit >> + if (IS_10BIT(ctx->data_pix_fmt) || ctx->highbitdepth) { >> cc->profileGUID = NV_ENC_HEVC_PROFILE_MAIN10_GUID; >> avctx->profile = AV_PROFILE_HEVC_MAIN_10; >> } >> @@ -1435,8 +1435,8 @@ static av_cold int nvenc_setup_hevc_config(AVCodecContext *avctx) >> hevc->chromaFormatIDC = IS_YUV444(ctx->data_pix_fmt) ? 3 : 1; >> >> #ifdef NVENC_HAVE_NEW_BIT_DEPTH_API >> - hevc->inputBitDepth = hevc->outputBitDepth = >> - IS_10BIT(ctx->data_pix_fmt) ? NV_ENC_BIT_DEPTH_10 : NV_ENC_BIT_DEPTH_8; >> + hevc->inputBitDepth = IS_10BIT(ctx->data_pix_fmt) ? NV_ENC_BIT_DEPTH_10 : NV_ENC_BIT_DEPTH_8; >> + hevc->outputBitDepth = (IS_10BIT(ctx->data_pix_fmt) || ctx->highbitdepth) ? NV_ENC_BIT_DEPTH_10 : NV_ENC_BIT_DEPTH_8; >> #else >> hevc->pixelBitDepthMinus8 = IS_10BIT(ctx->data_pix_fmt) ? 2 : 0; >> #endif >> diff --git a/libavcodec/nvenc_hevc.c b/libavcodec/nvenc_hevc.c >> index b949cb1bd7..d54e5f2512 100644 >> --- a/libavcodec/nvenc_hevc.c >> +++ b/libavcodec/nvenc_hevc.c >> @@ -183,6 +183,9 @@ static const AVOption options[] = { >> { "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 }, >> -- >> 2.34.1 >> > > Rather than introducing a new setting, could you > instead use AVCodecContext.sw_pix_fmt? > It's currently documented as being unused for encoding, > but it fits the purpose. > Vulkan can also use it. I'm not sure I'm a fan of that. Setting sw_pix_fmt to some arbitrary 10bit format seems super random. How would that even look like from a users point of view who wanted to utilize this up-conversion mode via cli? _______________________________________________ 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".