From patchwork Mon Mar 18 08:12:44 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Xiang, Haihao" X-Patchwork-Id: 47159 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:958e:b0:1a3:31a3:7958 with SMTP id iu14csp864766pzb; Mon, 18 Mar 2024 01:13:19 -0700 (PDT) X-Forwarded-Encrypted: i=2; AJvYcCV0vR0E8DvkgLtrDji/0L5rEMthuiN3JrVaKN03QtcjRD4mz9VzlE9gD2hO8YKE+XlL/MZZgFLBDv1OFxn5gdx7Oa2RumTVfoduTA== X-Google-Smtp-Source: AGHT+IFp2uieHCEKuPoPSBMo0as/MvSm/VME5J4YPp5ltyTnR/RWQdJZb12RWqxdTcdmS3D46GPU X-Received: by 2002:aa7:c3d0:0:b0:568:9700:eda0 with SMTP id l16-20020aa7c3d0000000b005689700eda0mr4493678edr.37.1710749599505; Mon, 18 Mar 2024 01:13:19 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1710749599; cv=none; d=google.com; s=arc-20160816; b=syzOIYlJ1wKmERHtWKbrL4XW24bY5BQ2zrUV6ZGsC4WdbcIHnu6XCB5PLBjStzIVOq +kXwUumLYchllaVOYTzIufmp+jdlZ5CtWXd9ZHxT7pAFoI9Ph7Sv1gdhbMph9plRHb01 ta3OUpISoHW2c4i37RhcRC3D70Q73KNkiMKUg2jTNMxo/rnKPjoKGPOcsyF5xmymFSZj c1zefwEPHU0RjSmf4w6RRTUDhcp8WF0M6y2DfzU9cKfBNMmyTo/Iy4P9oHeQxw9GYgTP dukJ6ebmxY2G8V9srA+nXAu6Gyfcfn9TNgjradbXr2o/Zq+WzcTkGweH+Zn7hUe76SRv NRjw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:content-transfer-encoding:cc:reply-to :list-subscribe:list-help:list-post:list-archive:list-unsubscribe :list-id:precedence:subject:mime-version:message-id:date:to:from :dkim-signature:delivered-to; bh=Baof1+Yq8S2Zoe8jeYy6WHEvKU+gg5txXDNbZt7voMc=; fh=1kpmTRI1sW42eNCnNMby7VLIISQBX6KJuVYxOEG0t2A=; b=GfokDfcX/O1wCnFtXazxKLog6KrDqekKvdFkWHRVunKgooAp2h3svfCishly425dT2 mAw9sp0yB1fdjP1PK530G49PoicPeDkay1yMJAkCbcoi+jy6elxGHtlsYFmRHPUCoIND Q3j7t0IQZ5aR9VmAP77zWNamOdezuweqEJhstC8aYd/8iRsmD+rewkFdcX8kk2RXm6b0 Wcx4VzrNI6JO8tRl0LqgJ0CxhA+GDhd7jSrRRO/dmDWapOtPz0r4GQ/fq8kaA6VryB7D zJ8A6mQeYunR6ajKdPtWATRGX6toq2omOVmMlqActxH//Scg4iz8dDJ4wwQqvqUa//Eh YVUA==; dara=google.com ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@intel.com header.s=Intel header.b=Hcub45E1; 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 Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id x10-20020a056402414a00b005684974866bsi4215895eda.460.2024.03.18.01.13.19; Mon, 18 Mar 2024 01:13:19 -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=@intel.com header.s=Intel header.b=Hcub45E1; 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 6847368D253; Mon, 18 Mar 2024 10:13:15 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mgamail.intel.com (mgamail.intel.com [192.198.163.9]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 2E29068D212 for ; Mon, 18 Mar 2024 10:13:06 +0200 (EET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1710749593; x=1742285593; h=from:to:cc:subject:date:message-id:mime-version: content-transfer-encoding; bh=wsBNW5jWOgtXQHswsUHVBtY0Zxyqfn654LcBWLQBMm4=; b=Hcub45E1uvFYyG6e9gEi++jhzOUVbh4/BWCmBSPiuZvgzH1c6jNpW4BG 6ZfzXW2YtC3opURqWKffC8Q3Za8OFiDP7YnUT++yzmrK75Mr2a9qmSuZs Jl96ckEkPEGtvbPMeRnpxc0mC+9w6h4RkJlxA68iM3/eWKZ1syrEB/3fT yJ+gIvu9D+Bt18EI4KM8rdEAexkS7LGKzk1+GXbpoERnVuNX31JfVSRmb 7TUUyZNtEMzowGv0kxGLKS8Pbxb7QSCfbzo+QaxFifU7+ewQMN0/febpp WbhOnt9y2kSted9SGss/Aq95LOgYuGwdRL27LGR+WPNLGctCTZY8yYtQv Q==; X-IronPort-AV: E=McAfee;i="6600,9927,11016"; a="16270266" X-IronPort-AV: E=Sophos;i="6.07,134,1708416000"; d="scan'208";a="16270266" Received: from orviesa008.jf.intel.com ([10.64.159.148]) by fmvoesa103.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 18 Mar 2024 01:13:04 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="6.07,134,1708416000"; d="scan'208";a="14033606" Received: from xhh-dg264.sh.intel.com ([10.238.2.76]) by orviesa008-auth.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 18 Mar 2024 01:13:03 -0700 From: "Xiang, Haihao" To: ffmpeg-devel@ffmpeg.org Date: Mon, 18 Mar 2024 16:12:44 +0800 Message-Id: <20240318081246.3649869-1-haihao.xiang@intel.com> X-Mailer: git-send-email 2.34.1 MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 1/3] lavfi/tonemap_vaapi: By default use bt709 for output frame 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: Haihao Xiang Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: WqNXjpjbpgPN From: Haihao Xiang By default don't use the color properties from input frame as output frame properties when performing HDR to SDR conversion Signed-off-by: Haihao Xiang --- doc/filters.texi | 4 ++-- libavfilter/vf_tonemap_vaapi.c | 7 +++++-- 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/doc/filters.texi b/doc/filters.texi index 913365671d..2cb84c1476 100644 --- a/doc/filters.texi +++ b/doc/filters.texi @@ -27839,7 +27839,7 @@ Default is nv12. @item primaries, p Set the output color primaries. -Default is same as input. +Default is bt709. @item transfer, t Set the output transfer characteristics. @@ -27849,7 +27849,7 @@ Default is bt709. @item matrix, m Set the output colorspace matrix. -Default is same as input. +Default is bt709. @end table diff --git a/libavfilter/vf_tonemap_vaapi.c b/libavfilter/vf_tonemap_vaapi.c index 0b767202d2..a21f565e3a 100644 --- a/libavfilter/vf_tonemap_vaapi.c +++ b/libavfilter/vf_tonemap_vaapi.c @@ -278,13 +278,16 @@ static int tonemap_vaapi_filter_frame(AVFilterLink *inlink, AVFrame *input_frame if (err < 0) goto fail; + /* Use BT709 by default for HDR to SDR output frame */ + output_frame->color_primaries = AVCOL_PRI_BT709; + output_frame->color_trc = AVCOL_TRC_BT709; + output_frame->colorspace = AVCOL_SPC_BT709; + if (ctx->color_primaries != AVCOL_PRI_UNSPECIFIED) output_frame->color_primaries = ctx->color_primaries; if (ctx->color_transfer != AVCOL_TRC_UNSPECIFIED) output_frame->color_trc = ctx->color_transfer; - else - output_frame->color_trc = AVCOL_TRC_BT709; if (ctx->color_matrix != AVCOL_SPC_UNSPECIFIED) output_frame->colorspace = ctx->color_matrix; From patchwork Mon Mar 18 08:12:45 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Xiang, Haihao" X-Patchwork-Id: 47160 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:958e:b0:1a3:31a3:7958 with SMTP id iu14csp864826pzb; Mon, 18 Mar 2024 01:13:31 -0700 (PDT) X-Forwarded-Encrypted: i=2; AJvYcCXI+O8jY3q36VtfVLWYgtm4fUhmnGfhy+6/Jw77FvoBUqcWC/TLZJnMzoWVQm1OOrXRJ8m/rKCsOP65EDJNdAyyBXeb7nxqrPPO/A== X-Google-Smtp-Source: AGHT+IHxFuR3KUREjdMfT8SVHMRaCLr3l1J+uJ9Ih6o0lFfKnr6Qt9LzEyX0tw6kAtIxXNoPLBSO X-Received: by 2002:a05:6402:360d:b0:568:bda1:9649 with SMTP id el13-20020a056402360d00b00568bda19649mr3688769edb.2.1710749611308; Mon, 18 Mar 2024 01:13:31 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1710749611; cv=none; d=google.com; s=arc-20160816; b=zvgltjMvkXxyODet2tXam3FTw80rnTjJXGGrUqiEh9etVcOfQ+xZND/gXcMQTB4tJd OdQ5VQGBAULzr78xY/7W53/xm5AQwdUpJK6f3lHCFy/bvqRv+PH/rvbRDvvJYeGmq6Xb vZnexheGF1uMwB60LeHmgzV4/0e7Iks5XUikLaUQrRbMnscBCGJQLBWC0B3V/npYforR Hj5mBlPM9UXPGZVOSYh3B2BrstOj1L5SR/AXPiN/5N0m2u4k5MTvNFr+keLNDSOKxSxf MXBYVLHkod2V4WETAov6Qq+Vz3Br1pbPHyKoU77EqctaOKOE/WJDgyefmpL1qGOjYvOs dHSg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:content-transfer-encoding:cc:reply-to :list-subscribe:list-help:list-post:list-archive:list-unsubscribe :list-id:precedence:subject:mime-version:references:in-reply-to :message-id:date:to:from:dkim-signature:delivered-to; bh=BMskWgH7i24biGnzPHR9dEkGds6cYMWz7F1SirYiQFM=; fh=1kpmTRI1sW42eNCnNMby7VLIISQBX6KJuVYxOEG0t2A=; b=OR6VmqvBlGHAkjGxFKw4V8DfcwbKcKpMyxsb23bsq4xNDZGOw1HbWCv0eLsAm1qbDA 6FI4uCnnjy3XjUwQH6dGxIt9KAMIXgvY974iiMIhVkJ+WNY7GBvy4SoEN+9cQC9MpneN h+Eeg4aqTXGYgpSLtQRf5lp6aWTZsrw2SwZ8bjERbCdUQ97unvmtWXCyfhCa/7zrrdtZ WkSbSEB6Psm69LTDuP+nqRzTSyPkstAJoDK1jsYe1LLKN5iRT2jVPrbKd2C+s5ugXrIN 6Gyh3J4YZx+Su8MaZnTK71jKp9B4oudtesFGxXPhHFOOekwDk/bCDGPTQQlu/sXeqOnq vcaw==; dara=google.com ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@intel.com header.s=Intel header.b=dEAU+4T6; 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 Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id v13-20020a056402348d00b00568b6683c68si2903989edc.136.2024.03.18.01.13.31; Mon, 18 Mar 2024 01:13:31 -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=@intel.com header.s=Intel header.b=dEAU+4T6; 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 B0EEB68D25E; Mon, 18 Mar 2024 10:13:21 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mgamail.intel.com (mgamail.intel.com [192.198.163.9]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id E52DD68D212 for ; Mon, 18 Mar 2024 10:13:14 +0200 (EET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1710749600; x=1742285600; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=Ecw9FO2xnChW+cnVVp4tC5eSJM49MYWDgmR2DVoSC1s=; b=dEAU+4T6rZpRmVqNJ905vAZbhS8yLFuZ3Vl9dtv+YbljrNL+zX7mD6TD GgEJnSAvYo2K5avLovrLn4h7tIY3Gxrk3x8pWVCeAjj43H6nd3x8+GCMO CNsXWx167Sig1Yl9+Fc4ZN9ZoedHpG4bQE9UeNGmPVnVyQzZdWKsXAjUc LZQB0BzMkajDxs4qns6GZ8z21uPb5bbbcsxeD0zI7flrB2gO+TDtcMMyK Blz09Y4zEGTSvfqRS60m7LZpnVR6dzdZK/PTs3o3O5IAEi5SMCHhtq1em 3aYyWk4+GhbIFqHfFyT9NmfrLJmldtHRhdTf3P74dis7MxxmL8+TnTExP A==; X-IronPort-AV: E=McAfee;i="6600,9927,11016"; a="16270287" X-IronPort-AV: E=Sophos;i="6.07,134,1708416000"; d="scan'208";a="16270287" Received: from orviesa008.jf.intel.com ([10.64.159.148]) by fmvoesa103.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 18 Mar 2024 01:13:13 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="6.07,134,1708416000"; d="scan'208";a="14033634" Received: from xhh-dg264.sh.intel.com ([10.238.2.76]) by orviesa008-auth.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 18 Mar 2024 01:13:12 -0700 From: "Xiang, Haihao" To: ffmpeg-devel@ffmpeg.org Date: Mon, 18 Mar 2024 16:12:45 +0800 Message-Id: <20240318081246.3649869-2-haihao.xiang@intel.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20240318081246.3649869-1-haihao.xiang@intel.com> References: <20240318081246.3649869-1-haihao.xiang@intel.com> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 2/3] lavfi/tonemap_vaapi: Update the log 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: Haihao Xiang Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: k498wIxytVxi From: Haihao Xiang demote the message to AV_LOG_VERBOSE. Signed-off-by: Haihao Xiang --- libavfilter/vf_tonemap_vaapi.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libavfilter/vf_tonemap_vaapi.c b/libavfilter/vf_tonemap_vaapi.c index a21f565e3a..5d475e8ff2 100644 --- a/libavfilter/vf_tonemap_vaapi.c +++ b/libavfilter/vf_tonemap_vaapi.c @@ -336,7 +336,7 @@ static av_cold int tonemap_vaapi_init(AVFilterContext *avctx) vpp_ctx->output_format = av_get_pix_fmt(ctx->output_format_string); } else { vpp_ctx->output_format = AV_PIX_FMT_NV12; - av_log(avctx, AV_LOG_WARNING, "Output format not set, use default format NV12\n"); + av_log(avctx, AV_LOG_VERBOSE, "Output format not set, use default format NV12 for HDR to SDR tone mapping.\n"); } #define STRING_OPTION(var_name, func_name, default_value) do { \ From patchwork Mon Mar 18 08:12:46 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Xiang, Haihao" X-Patchwork-Id: 47161 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:958e:b0:1a3:31a3:7958 with SMTP id iu14csp864904pzb; Mon, 18 Mar 2024 01:13:41 -0700 (PDT) X-Forwarded-Encrypted: i=2; AJvYcCUX4RNmA73VHR2JVEa388orZNHutjT5bbjkJtwrqfG6K7hQuYyueRtP/c61xEb5se15aS9ZNySysZt0MgaWS7MEM0dNb6olEezyFQ== X-Google-Smtp-Source: AGHT+IEAYrlpT5Yzi6bMZ8HjqGa/inF1YV0Q3v8WckiGd9mHZdNaItX9sME7Zly7vrVmimkzEJyW X-Received: by 2002:a17:907:7283:b0:a46:b43e:fa3c with SMTP id dt3-20020a170907728300b00a46b43efa3cmr3296557ejc.15.1710749621084; Mon, 18 Mar 2024 01:13:41 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1710749621; cv=none; d=google.com; s=arc-20160816; b=KSxFhZQmhv5dXGdU5QWda+eqq0dtzy7xI8VfS4RuvArAMp1+L84XK8sdqWtLo2oVpE QHrj4aeYPbuMJbV1MBaF1Jqw/AXqUh1pd/rMFEBv7QZJX5gbO1LKOm/3mvO925NTtyYb Y77XatsYa/QSYS1KafSfxVJPYnbh+/SkEZVRsjhRWqgvl/dnbRawR2iHhSOHXRoUOI2R f5tfnaqKAPs7vnadYepKr1QvcvTdgnM+BZNR5vBr/0092t1OmTXybZMnkHXWkmUKkjPj jf0cBHfFk9hvevpMhTITIV1zAdnS5y9AWHFs7M+zc1TgpWNTxZo4aH+5Cy40m2ceQnZj oadQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:content-transfer-encoding:cc:reply-to :list-subscribe:list-help:list-post:list-archive:list-unsubscribe :list-id:precedence:subject:mime-version:references:in-reply-to :message-id:date:to:from:dkim-signature:delivered-to; bh=VM90b/sGJjq9ZdmyL4XO/u0ja+5CmAZPTY/R/rDyhIM=; fh=TqafCgWuD7Yayl7BilfF2D9WOiep8Ignc40AJ3ATxOo=; b=jW05/ahFt1563mF0TI3F7sDwQaWhBQYz5Tw2NfXPkwBNK+NJhAQpkrB0cX5AhKjbmg OZ+uGY3oxct2vVyt1CCgDzp4O4+h10TWDCq1aFxo3C7+Naq5ZzEBY9v+VenQ7zdWw2tO F1yjPnHnZ1M55ZX7G7NAEIds2QqfrWwQgQ+M8HDZNNxNMDv0OOMFruy2LbJrlG+Y+yN0 DHELOTSUbJhJzrhSL+J2LY/WMmOgBxfKXlOK8YxhWg7q8yaTTCxvQfKZTtxXW/YmwD2L CjNEjRwWdIjminAFcFKKKnvzTEYOhsHdrPW/rlbOH7WjP0rYw8hFbrmvkyAEFDJWerHy GKUA==; dara=google.com ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@intel.com header.s=Intel header.b="hhop/Obr"; 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 Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id op13-20020a170906bced00b00a46c0fe2cd4si602999ejb.763.2024.03.18.01.13.40; Mon, 18 Mar 2024 01:13:41 -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=@intel.com header.s=Intel header.b="hhop/Obr"; 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 D4E0568D264; Mon, 18 Mar 2024 10:13:23 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mgamail.intel.com (mgamail.intel.com [192.198.163.9]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id D279268D25F for ; Mon, 18 Mar 2024 10:13:16 +0200 (EET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1710749602; x=1742285602; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=4KYeHlvrZGKtcNblASJ4t+TjGW2OELdDeJMpOkWtM8s=; b=hhop/ObryZ2QXJ6x6KvcTs0Mw24iHTU49yC2wE0vD1aKki5uc/Yw9rzR lQdVyMYURmmjgt7Gp+lwWsxgnhkVT9mZgaBEJMA2xihYeJp5wND/En2ZG Y8N447AdoTmZ1KMWtqtMvOoV4/ougYyWYhRQA21tVBmX16lxa2dibIm12 FJAkBd/BjwKUqig3g/mjhVdcGqwT5ghQCKTpMoCgBF6nI8fBXuMfH21A2 igEbfu76fMeBtdXAjsF8JaiaOy5hX2adSCn759yYKBezNa5olIrzNFXdX VSPJDMA/9O/m1nEogri4uHKqnUAyGL7tQS0GUUbdfyKGNe7U/0DqhspTu A==; X-IronPort-AV: E=McAfee;i="6600,9927,11016"; a="16270291" X-IronPort-AV: E=Sophos;i="6.07,134,1708416000"; d="scan'208";a="16270291" Received: from orviesa008.jf.intel.com ([10.64.159.148]) by fmvoesa103.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 18 Mar 2024 01:13:15 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="6.07,134,1708416000"; d="scan'208";a="14033644" Received: from xhh-dg264.sh.intel.com ([10.238.2.76]) by orviesa008-auth.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 18 Mar 2024 01:13:13 -0700 From: "Xiang, Haihao" To: ffmpeg-devel@ffmpeg.org Date: Mon, 18 Mar 2024 16:12:46 +0800 Message-Id: <20240318081246.3649869-3-haihao.xiang@intel.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20240318081246.3649869-1-haihao.xiang@intel.com> References: <20240318081246.3649869-1-haihao.xiang@intel.com> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 3/3] lavfi/tonemap_vaapi: Add support for HDR to HDR tone mapping 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: Haihao Xiang , Xinpeng Sun Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: ukxtjAu4Gqx5 From: Xinpeng Sun Usage example: ffmpeg -y -hwaccel vaapi -hwaccel_output_format vaapi -i hdr.mp4 \ -vf "tonemap_vaapi=display=7500 3000|34000 16000|13250 34500|15635 16450|500 10000000:extra_hw_frames=64" \ -c:v hevc_vaapi output.mp4 Signed-off-by: Xinpeng Sun Signed-off-by: Haihao Xiang --- doc/filters.texi | 42 +++++--- libavfilter/vf_tonemap_vaapi.c | 191 +++++++++++++++++++++++++++++---- 2 files changed, 203 insertions(+), 30 deletions(-) diff --git a/doc/filters.texi b/doc/filters.texi index 2cb84c1476..fb18fecfa5 100644 --- a/doc/filters.texi +++ b/doc/filters.texi @@ -27818,8 +27818,7 @@ The inputs have same memory layout for color channels, the overlay has additiona @section tonemap_vaapi -Perform HDR(High Dynamic Range) to SDR(Standard Dynamic Range) conversion with tone-mapping. -It maps the dynamic range of HDR10 content to the SDR content. +Perform HDR-to-SDR or HDR-to-HDR tone-mapping. It currently only accepts HDR10 as input. It accepts the following parameters: @@ -27828,28 +27827,42 @@ It accepts the following parameters: @item format Specify the output pixel format. -Currently supported formats are: -@table @var -@item p010 -@item nv12 -@end table - -Default is nv12. +Default is nv12 for HDR-to-SDR tone-mapping and p010 for HDR-to-HDR +tone-mapping. @item primaries, p Set the output color primaries. -Default is bt709. +Default is bt709 for HDR-to-SDR tone-mapping and same as input for HDR-to-HDR +tone-mapping. @item transfer, t Set the output transfer characteristics. -Default is bt709. +Default is bt709 for HDR-to-SDR tone-mapping and same as input for HDR-to-HDR +tone-mapping. @item matrix, m Set the output colorspace matrix. -Default is bt709. +Default is bt709 for HDR-to-SDR tone-mapping and same as input for HDR-to-HDR +tone-mapping. + +@item display +Set the output mastering display colour volume. It is given by a '|'-separated +list of two values, two values are space separated. It set display primaries +x & y in G, B, R order, then white point x & y, the the nominal minimum & maximum +display luminances. + +HDR-to-HDR tone-mapping will be performed when this option is set. + +@item light +Set the output content light level information. It accepts 2 space-separated +values, the first input is the maximum light level and the second input is +he maximum average light level. + +It is ignored for HDR-to-SDR tone-mapping, and optional for HDR-to-HDR +tone-mapping. @end table @@ -27861,6 +27874,11 @@ Convert HDR(HDR10) video to bt2020-transfer-characteristic p010 format @example tonemap_vaapi=format=p010:t=bt2020-10 @end example +@item +Convert HDR video to HDR video +@example +tonemap_vaapi=display=7500\ 3000|34000\ 16000|13250\ 34500|15635\ 16450|500\ 10000000 +@end example @end itemize @section hstack_vaapi diff --git a/libavfilter/vf_tonemap_vaapi.c b/libavfilter/vf_tonemap_vaapi.c index 5d475e8ff2..7ebcb18f79 100644 --- a/libavfilter/vf_tonemap_vaapi.c +++ b/libavfilter/vf_tonemap_vaapi.c @@ -39,7 +39,11 @@ typedef struct HDRVAAPIContext { enum AVColorTransferCharacteristic color_transfer; enum AVColorSpace color_matrix; + char *mastering_display; + char *content_light; + VAHdrMetaDataHDR10 in_metadata; + VAHdrMetaDataHDR10 out_metadata; AVFrameSideData *src_display; AVFrameSideData *src_light; @@ -146,6 +150,87 @@ static int tonemap_vaapi_save_metadata(AVFilterContext *avctx, AVFrame *input_fr return 0; } +static int tonemap_vaapi_update_sidedata(AVFilterContext *avctx, AVFrame *output_frame) +{ + HDRVAAPIContext *ctx = avctx->priv; + AVFrameSideData *metadata; + AVMasteringDisplayMetadata *hdr_meta; + AVFrameSideData *metadata_lt; + AVContentLightMetadata *hdr_meta_lt; + int i; + const int mapping[3] = {1, 2, 0}; //green, blue, red + const int chroma_den = 50000; + const int luma_den = 10000; + + metadata = av_frame_new_side_data(output_frame, + AV_FRAME_DATA_MASTERING_DISPLAY_METADATA, + sizeof(AVMasteringDisplayMetadata)); + if (!metadata) + return AVERROR(ENOMEM); + + hdr_meta = (AVMasteringDisplayMetadata *)metadata->data; + + for (i = 0; i < 3; i++) { + const int j = mapping[i]; + hdr_meta->display_primaries[j][0].num = ctx->out_metadata.display_primaries_x[i]; + hdr_meta->display_primaries[j][0].den = chroma_den; + + hdr_meta->display_primaries[j][1].num = ctx->out_metadata.display_primaries_y[i]; + hdr_meta->display_primaries[j][1].den = chroma_den; + } + + hdr_meta->white_point[0].num = ctx->out_metadata.white_point_x; + hdr_meta->white_point[0].den = chroma_den; + + hdr_meta->white_point[1].num = ctx->out_metadata.white_point_y; + hdr_meta->white_point[1].den = chroma_den; + hdr_meta->has_primaries = 1; + + hdr_meta->max_luminance.num = ctx->out_metadata.max_display_mastering_luminance; + hdr_meta->max_luminance.den = luma_den; + + hdr_meta->min_luminance.num = ctx->out_metadata.min_display_mastering_luminance; + hdr_meta->min_luminance.den = luma_den; + hdr_meta->has_luminance = 1; + + av_log(avctx, AV_LOG_DEBUG, + "Mastering display colour volume(out):\n"); + av_log(avctx, AV_LOG_DEBUG, + "G(%u,%u) B(%u,%u) R(%u,%u) WP(%u,%u)\n", + ctx->out_metadata.display_primaries_x[0], + ctx->out_metadata.display_primaries_y[0], + ctx->out_metadata.display_primaries_x[1], + ctx->out_metadata.display_primaries_y[1], + ctx->out_metadata.display_primaries_x[2], + ctx->out_metadata.display_primaries_y[2], + ctx->out_metadata.white_point_x, + ctx->out_metadata.white_point_y); + av_log(avctx, AV_LOG_DEBUG, + "max_display_mastering_luminance=%u, min_display_mastering_luminance=%u\n", + ctx->out_metadata.max_display_mastering_luminance, + ctx->out_metadata.min_display_mastering_luminance); + + metadata_lt = av_frame_new_side_data(output_frame, + AV_FRAME_DATA_CONTENT_LIGHT_LEVEL, + sizeof(AVContentLightMetadata)); + if (!metadata_lt) + return AVERROR(ENOMEM); + + hdr_meta_lt = (AVContentLightMetadata *)metadata_lt->data; + + hdr_meta_lt->MaxCLL = FFMIN(ctx->out_metadata.max_content_light_level, 65535); + hdr_meta_lt->MaxFALL = FFMIN(ctx->out_metadata.max_pic_average_light_level, 65535); + + av_log(avctx, AV_LOG_DEBUG, + "Content light level information(out):\n"); + av_log(avctx, AV_LOG_DEBUG, + "MaxCLL(%u) MaxFALL(%u)\n", + ctx->out_metadata.max_content_light_level, + ctx->out_metadata.max_pic_average_light_level); + + return 0; +} + static int tonemap_vaapi_set_filter_params(AVFilterContext *avctx, AVFrame *input_frame) { VAAPIVPPContext *vpp_ctx = avctx->priv; @@ -208,15 +293,26 @@ static int tonemap_vaapi_build_filter_params(AVFilterContext *avctx) return AVERROR(EINVAL); } - for (i = 0; i < num_query_caps; i++) { - if (VA_TONE_MAPPING_HDR_TO_SDR & hdr_cap[i].caps_flag) - break; - } - - if (i >= num_query_caps) { - av_log(avctx, AV_LOG_ERROR, - "VAAPI driver doesn't support HDR to SDR\n"); - return AVERROR(EINVAL); + if (ctx->mastering_display) { + for (i = 0; i < num_query_caps; i++) { + if (VA_TONE_MAPPING_HDR_TO_HDR & hdr_cap[i].caps_flag) + break; + } + if (i >= num_query_caps) { + av_log(avctx, AV_LOG_ERROR, + "VAAPI driver doesn't support HDR to HDR\n"); + return AVERROR(EINVAL); + } + } else { + for (i = 0; i < num_query_caps; i++) { + if (VA_TONE_MAPPING_HDR_TO_SDR & hdr_cap[i].caps_flag) + break; + } + if (i >= num_query_caps) { + av_log(avctx, AV_LOG_ERROR, + "VAAPI driver doesn't support HDR to SDR\n"); + return AVERROR(EINVAL); + } } hdrtm_param.type = VAProcFilterHighDynamicRangeToneMapping; @@ -241,6 +337,8 @@ static int tonemap_vaapi_filter_frame(AVFilterLink *inlink, AVFrame *input_frame VAProcPipelineParameterBuffer params; int err; + VAHdrMetaData out_hdr_metadata; + av_log(avctx, AV_LOG_DEBUG, "Filter input: %s, %ux%u (%"PRId64").\n", av_get_pix_fmt_name(input_frame->format), input_frame->width, input_frame->height, input_frame->pts); @@ -278,10 +376,15 @@ static int tonemap_vaapi_filter_frame(AVFilterLink *inlink, AVFrame *input_frame if (err < 0) goto fail; - /* Use BT709 by default for HDR to SDR output frame */ - output_frame->color_primaries = AVCOL_PRI_BT709; - output_frame->color_trc = AVCOL_TRC_BT709; - output_frame->colorspace = AVCOL_SPC_BT709; + av_frame_remove_side_data(output_frame, AV_FRAME_DATA_CONTENT_LIGHT_LEVEL); + av_frame_remove_side_data(output_frame, AV_FRAME_DATA_MASTERING_DISPLAY_METADATA); + + if (!ctx->mastering_display) { + /* Use BT709 by default for HDR to SDR output frame */ + output_frame->color_primaries = AVCOL_PRI_BT709; + output_frame->color_trc = AVCOL_TRC_BT709; + output_frame->colorspace = AVCOL_SPC_BT709; + } if (ctx->color_primaries != AVCOL_PRI_UNSPECIFIED) output_frame->color_primaries = ctx->color_primaries; @@ -292,11 +395,24 @@ static int tonemap_vaapi_filter_frame(AVFilterLink *inlink, AVFrame *input_frame if (ctx->color_matrix != AVCOL_SPC_UNSPECIFIED) output_frame->colorspace = ctx->color_matrix; + if (ctx->mastering_display) { + err = tonemap_vaapi_update_sidedata(avctx, output_frame); + if (err < 0) + goto fail; + } + err = ff_vaapi_vpp_init_params(avctx, ¶ms, input_frame, output_frame); if (err < 0) goto fail; + if (ctx->mastering_display) { + out_hdr_metadata.metadata_type = VAProcHighDynamicRangeMetadataHDR10; + out_hdr_metadata.metadata = &ctx->out_metadata; + out_hdr_metadata.metadata_size = sizeof(VAHdrMetaDataHDR10); + params.output_hdr_metadata = &out_hdr_metadata; + } + if (vpp_ctx->nb_filter_buffers) { params.filters = &vpp_ctx->filter_buffers[0]; params.num_filters = vpp_ctx->nb_filter_buffers; @@ -312,9 +428,6 @@ static int tonemap_vaapi_filter_frame(AVFilterLink *inlink, AVFrame *input_frame av_get_pix_fmt_name(output_frame->format), output_frame->width, output_frame->height, output_frame->pts); - av_frame_remove_side_data(output_frame, AV_FRAME_DATA_CONTENT_LIGHT_LEVEL); - av_frame_remove_side_data(output_frame, AV_FRAME_DATA_MASTERING_DISPLAY_METADATA); - return ff_filter_frame(outlink, output_frame); fail: @@ -335,8 +448,13 @@ static av_cold int tonemap_vaapi_init(AVFilterContext *avctx) if (ctx->output_format_string) { vpp_ctx->output_format = av_get_pix_fmt(ctx->output_format_string); } else { - vpp_ctx->output_format = AV_PIX_FMT_NV12; - av_log(avctx, AV_LOG_VERBOSE, "Output format not set, use default format NV12 for HDR to SDR tone mapping.\n"); + if (ctx->mastering_display) { + vpp_ctx->output_format = AV_PIX_FMT_P010; + av_log(avctx, AV_LOG_VERBOSE, "Output format not set, use default format P010 for HDR to HDR tone mapping.\n"); + } else { + vpp_ctx->output_format = AV_PIX_FMT_NV12; + av_log(avctx, AV_LOG_VERBOSE, "Output format not set, use default format NV12 for HDR to SDR tone mapping.\n"); + } } #define STRING_OPTION(var_name, func_name, default_value) do { \ @@ -356,6 +474,37 @@ static av_cold int tonemap_vaapi_init(AVFilterContext *avctx) STRING_OPTION(color_transfer, color_transfer, AVCOL_TRC_UNSPECIFIED); STRING_OPTION(color_matrix, color_space, AVCOL_SPC_UNSPECIFIED); + if (ctx->mastering_display) { + if (10 != sscanf(ctx->mastering_display, + "%hu %hu|%hu %hu|%hu %hu|%hu %hu|%u %u", + &ctx->out_metadata.display_primaries_x[0], + &ctx->out_metadata.display_primaries_y[0], + &ctx->out_metadata.display_primaries_x[1], + &ctx->out_metadata.display_primaries_y[1], + &ctx->out_metadata.display_primaries_x[2], + &ctx->out_metadata.display_primaries_y[2], + &ctx->out_metadata.white_point_x, + &ctx->out_metadata.white_point_y, + &ctx->out_metadata.min_display_mastering_luminance, + &ctx->out_metadata.max_display_mastering_luminance)) { + av_log(avctx, AV_LOG_ERROR, + "Option mastering-display input invalid\n"); + return AVERROR(EINVAL); + } + + if (!ctx->content_light) { + ctx->out_metadata.max_content_light_level = 0; + ctx->out_metadata.max_pic_average_light_level = 0; + } else if (2 != sscanf(ctx->content_light, + "%hu %hu", + &ctx->out_metadata.max_content_light_level, + &ctx->out_metadata.max_pic_average_light_level)) { + av_log(avctx, AV_LOG_ERROR, + "Option content-light input invalid\n"); + return AVERROR(EINVAL); + } + } + return 0; } @@ -381,6 +530,12 @@ static const AVOption tonemap_vaapi_options[] = { { "t", "Output color transfer characteristics set", OFFSET(color_transfer_string), AV_OPT_TYPE_STRING, { .str = NULL }, .flags = FLAGS, .unit = "transfer" }, + { "display", "set mastering display colour volume", + OFFSET(mastering_display), AV_OPT_TYPE_STRING, + { .str = NULL }, .flags = FLAGS }, + { "light", "set content light level information", + OFFSET(content_light), AV_OPT_TYPE_STRING, + { .str = NULL }, .flags = FLAGS }, { NULL } };