From patchwork Fri Apr 19 08:38:51 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Diego Felix de Souza via ffmpeg-devel X-Patchwork-Id: 48163 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:c906:b0:1a9:af23:56c1 with SMTP id gx6csp476572pzb; Fri, 19 Apr 2024 01:39:47 -0700 (PDT) X-Forwarded-Encrypted: i=2; AJvYcCVwoihSvHoUhdhUbfJuR2UuwVGzKZcUvPrfCV2VaNC/208OHRPhaTZWWHsaoFhKiimPR1d8u/O8KxMl77VH3GEWdFTplo6ZsYPjBA== X-Google-Smtp-Source: AGHT+IEo4Mb23Wh5FDaSvmeU9DTwGBsZCZxoAKVXGJeQFsoPUBkmQEOJaRNJxITlzmmI9i2HurLt X-Received: by 2002:a05:6512:20c3:b0:51a:c3a6:9209 with SMTP id u3-20020a05651220c300b0051ac3a69209mr534772lfr.68.1713515987468; Fri, 19 Apr 2024 01:39:47 -0700 (PDT) Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id x63-20020a50bac5000000b0056e1dc788b6si1862614ede.94.2024.04.19.01.39.47; Fri, 19 Apr 2024 01:39:47 -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; arc=fail (body hash mismatch); 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 Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 4AC2C68CDB2; Fri, 19 Apr 2024 11:39:44 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from NAM10-DM6-obe.outbound.protection.outlook.com (mail-dm6nam10on2085.outbound.protection.outlook.com [40.107.93.85]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 2AC8268C5E5 for ; Fri, 19 Apr 2024 11:39:37 +0300 (EEST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=gEKFjI/85R43SZZL+BZcyFjuNwq2nQAdQh3AUschscs/4P6Z/ohFeTwMdTJEmgdF/uNxEYnOQVUhWCyxEKox8MLP57g998aEEOrBGIVyaNH6MR2I4AaIAdbbRHVN0BAWA4+Eg1USCpL79JM/fXhDtWXEl8nP6vZjl/2EbtC5hpxpXsVzaRJyBlUk6VdPT2sa9o7QxzIaxi1koSyjL/JYzhSyY36k7JYvML0xb9JxKKnLm3rLFdpXBSp6smugLeifmbrylx+vwgYsc/f6U407Mvzg+QjNdEIA8iIA7h55hahQgDNJJZqDkIvgWQUQaGY7HeF7xcLyUu03erdJoq5Zvg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=ItjQhteFzwfjIztfTEIx8kRvm5bvQVYztY8K50i4qM8=; b=ogIlAEFFAAeW5Xc2ItrQKLWxO9Stx/gA/O/okrnFihOjl5F5Tv9sLBCfHHv1SI8K4EVUGN889eC3w3CqahjeF/CN59XvCcbI+L5hqvxQe8XHwAYhhiAvbJZz7JXV4H3vlIncHvOH0mkwh1is05yNZqzAb+QbIzRO1rSw0xhfhygtWTaAEYuQyrCJ7RIXFnYJRZFhDFeuCx6KdL2LsAer9NQXOc/C513ol0i7sZCRbUHVrok3Llx+z7Z5Gp0vVchufrpu5joPZO11hXBQ2vw4vazn2TCB8Uahcvll+fzDeopSAoxmwnrMQasuGTzpjGIxENBMdb598+zIz4PvEaKtKQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 216.228.117.160) smtp.rcpttodomain=ffmpeg.org smtp.mailfrom=nvidia.com; dmarc=pass (p=reject sp=reject pct=100) action=none header.from=nvidia.com; dkim=none (message not signed); arc=none (0) Received: from BL1PR13CA0081.namprd13.prod.outlook.com (2603:10b6:208:2b8::26) by SJ2PR12MB8876.namprd12.prod.outlook.com (2603:10b6:a03:539::18) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7472.37; Fri, 19 Apr 2024 08:39:33 +0000 Received: from BL02EPF0001A101.namprd05.prod.outlook.com (2603:10b6:208:2b8:cafe::d0) by BL1PR13CA0081.outlook.office365.com (2603:10b6:208:2b8::26) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7495.23 via Frontend Transport; Fri, 19 Apr 2024 08:39:32 +0000 X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 216.228.117.160) smtp.mailfrom=nvidia.com; dkim=none (message not signed) header.d=none;dmarc=pass action=none header.from=nvidia.com; Received-SPF: Pass (protection.outlook.com: domain of nvidia.com designates 216.228.117.160 as permitted sender) receiver=protection.outlook.com; client-ip=216.228.117.160; helo=mail.nvidia.com; pr=C Received: from mail.nvidia.com (216.228.117.160) by BL02EPF0001A101.mail.protection.outlook.com (10.167.241.132) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7452.22 via Frontend Transport; Fri, 19 Apr 2024 08:39:32 +0000 Received: from rnnvmail201.nvidia.com (10.129.68.8) by mail.nvidia.com (10.129.200.66) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.1544.4; Fri, 19 Apr 2024 01:39:15 -0700 Received: from nvidia.com (10.126.230.35) by rnnvmail201.nvidia.com (10.129.68.8) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.1544.4; Fri, 19 Apr 2024 01:39:14 -0700 To: Date: Fri, 19 Apr 2024 08:38:51 +0000 Message-ID: <20240419083851.746482-1-ddesouza@nvidia.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20240415143932.338380-1-ddesouza@nvidia.com> References: <20240415143932.338380-1-ddesouza@nvidia.com> MIME-Version: 1.0 X-Originating-IP: [10.126.230.35] X-ClientProxiedBy: rnnvmail203.nvidia.com (10.129.68.9) To rnnvmail201.nvidia.com (10.129.68.8) X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: BL02EPF0001A101:EE_|SJ2PR12MB8876:EE_ X-MS-Office365-Filtering-Correlation-Id: 4b9e13d1-c59b-42b5-663d-08dc604c3c39 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: vpSYxVhi7c4SqvgUtyXCEb4jPFFmZ1KgeH/Jeok0WgDjtUyVaNgnnIfzC87QbEcIPH/m/4qxKg1AZbgBIcbkdkGj2AUACrMHOgUpxp1ngEkZ7lZ8I138UPKXDUpEKQQsDETvxActIzPqeOqcahzDF+U6zz+qMbmNeE7ap6eql+H4dKOnMCs0yPpzoHqNBILuPx1av3QiOYuhGNqcK4jLKKZz18kRwVM1jgH0YBEHU282Nd7ZCzX9LZjpTGUCNrz/VjiKCuAUvz62OgVDqxCQsPa0oC4cPB53vC3AzSivxedgaeZuL11dW1kYIDx7t44tBKWi3EQk1qj2DwBFeZeI//RCiJLN0N+6WWUkSXsgEX+6614Jfrvb0j4Agcz0ae50KgpXB8tlWKe5LecX+PAIJYY5Xe2tkZq77Mbu1oSaajcbkbMpyT4BBDHfEMJ/vm8Zwu8WXT7NAjlYsrs4Nx833eT0Uciy4URowx1bvuBR725/Ay90T1mNbiYlOfA9jEX/9O5rL/IbUhJ/D6Jb4ka2zZOIrfKZsci7hVmT0mokiCeIYFb0s0azdWIqAH7/6MCLVHt8tqllEV9lYOhgJBb3aB62cuMVdnyCPex9z8x53msfxL6eIOzr/SUgPHAfs1MjaRfjInU3hNgw82PmKuf1sj2mxMLCojm+K3/fYhQw/v9wgN3ugpNutWmnid2K0YlhGOsMi+ZWRQb2GBTaAoynx4tXwfW1ixc+hspm2Fmzz9sk0YLM+9ZAKrmhoigvv6fZ X-Forefront-Antispam-Report: CIP:216.228.117.160; CTRY:US; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:mail.nvidia.com; PTR:dc6edge1.nvidia.com; CAT:NONE; SFS:(13230031)(36860700004)(82310400014)(1800799015)(376005); DIR:OUT; SFP:1101; X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 19 Apr 2024 08:39:32.1912 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 4b9e13d1-c59b-42b5-663d-08dc604c3c39 X-MS-Exchange-CrossTenant-Id: 43083d15-7273-40c1-b7db-39efd9ccc17a X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=43083d15-7273-40c1-b7db-39efd9ccc17a; Ip=[216.228.117.160]; Helo=[mail.nvidia.com] X-MS-Exchange-CrossTenant-AuthSource: BL02EPF0001A101.namprd05.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: SJ2PR12MB8876 Subject: [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: , X-Patchwork-Original-From: Diego Felix de Souza via ffmpeg-devel From: Diego Felix de Souza via ffmpeg-devel Reply-To: FFmpeg development discussions and patches Cc: ddesouza@nvidia.com Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: kuXcYOWSkkHF 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(-) -- 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. ----------------------------------------------------------------------------------- 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 },