From patchwork Mon Feb 14 23:44:19 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Lance Wang X-Patchwork-Id: 34296 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6838:14aa:0:0:0:0 with SMTP id bz10csp5960299nkb; Mon, 14 Feb 2022 15:44:59 -0800 (PST) X-Google-Smtp-Source: ABdhPJxjf1Xo5+BIw1EzdS+SFuF2SgTm1z2Kxnhd2TwycOUz2Yx+U4LpcNB5n4k38uLGZkSGt2pW X-Received: by 2002:a17:906:72d4:: with SMTP id m20mr860465ejl.601.1644882299249; Mon, 14 Feb 2022 15:44:59 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1644882299; cv=none; d=google.com; s=arc-20160816; b=w4EvCh9l0TvBWC6ZAUmO+GEHLocSWJbFtD7jaTxMMxOQ722u4SnW8kzgQM9MLAvl9E 7zcvK6hVL1IT0mPZdslHgABXeAGfcCIAMf9/andHaXbHVsEyEZ9rgMae7PZ/ykrgdAkD CqyjKmg0eMuNZPmvSKC+Fj/iKOoDlrr9TT1ly/TbzI8K6zk/omOofrz/E5HLQ8F0Xxib MtPLhXgpmml2EH0wGd7jtyfm+CEmcVSVsVFmBD1QH9I95hlOtC2sqdUSb2MKm6xJi4nc VzUIJN6i1niZxuGdzPlTusb3f9wvyDiXibAYae4559c2LrLADl0Ypnj3bAKa3lQJVaMY hZSw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:content-transfer-encoding:mime-version:cc:reply-to :list-subscribe:list-help:list-post:list-archive:list-unsubscribe :list-id:precedence:subject:references:in-reply-to:message-id:date :to:from:dkim-signature:delivered-to; bh=djTGVMa6w4pJyZtrrWYKeBzaXzhYsQIWYtrYfdvj/CI=; b=bwRrFs4VUh4uYrn3r03h5lfmmmjpnfk2rqtz5BiBwBbW5qMfPnx6lh5/87VOtJvY7C qxpZg3ETg/ft7RTNqeFDjJJwwwm4JXCotf7cDBoiWBu6uFAdpyt3hcLIVbtbhocZq1ly u6mxWGsIbSbQrLwah/Disgt4MRRz/H/3BroRuVAmEqL4A0zPD+sC+b8h22Wa6tvQ2YG0 fm1HAziSZKytsop0g/OW9U2GZQYay1p96UxKc7XNyxL2uycF/ktLs8MI56FuF1w6X0rU Rgi4Yr0qMFMCHBZW2F5AQ/av8EJg7kRQuo1sxmuOuWFIl2Jet/SZiMuLIcS9pbvHWDPN JcuQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@gmail.com header.s=20210112 header.b=cnSVZoMn; 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 nd29si34546706ejc.75.2022.02.14.15.44.58; Mon, 14 Feb 2022 15:44:59 -0800 (PST) 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=20210112 header.b=cnSVZoMn; 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 3B08068B1F8; Tue, 15 Feb 2022 01:44:36 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-pf1-f178.google.com (mail-pf1-f178.google.com [209.85.210.178]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 8B0EF68B1C1 for ; Tue, 15 Feb 2022 01:44:29 +0200 (EET) Received: by mail-pf1-f178.google.com with SMTP id p10so11269176pfo.12 for ; Mon, 14 Feb 2022 15:44:29 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=sv6/h7x/NmF7XfuUIA8S+IsfmqQeFIIKBuQ/k1w1ZZ4=; b=cnSVZoMno8osaTA4A6udiM5z44WUBQnQ9u6aJI3hrd4ge7E0+Q4LrF6MUdTU+V+20j HMIqOkon2w2Ha3vW1I+Ob0zJJ2pCHIX0OqTKdOX7UWsa+iEqRI4/JtJnVR11l6LMWEO0 qh5pI9iIaYjPsAvcMGsOUt+szbcNiLRi8EEiupp/bRKW9lN6NZzjH6fDtru+06ajG5mk MbdCU4qoB3jdJ1W+KxqShQLBynj8l0vjDuvBeck/uvpIuhrdPt3CL4qCKM2yF2lLJQGI o0eTqAY7t+vB6c7FfBi/zlwdTOuwgtYv24zi/1kR53AVDSujMrzgkPXpO/0U3SVg5RmN BhEA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=sv6/h7x/NmF7XfuUIA8S+IsfmqQeFIIKBuQ/k1w1ZZ4=; b=lsZq7K+arVMPyMksLpdf1I4Nudkl0bV+RYPnxqTEL7nRktUEHpldKFZIDbwxAqygEZ oxl5tFx/9UJrHdE9JM2RnRit1iWPw1mHXGgeSxlA0B9oxbrz45eqLcq49usgDh4fGUqn elWAugWzPgAiqV9bqi1SxDFjxHeET1CRq2+k33m9yMsjJJk2en67s+kVjqSQKAMBeA/e s3tgAZoptpfS6yHL7uiI18tUCKMrjdaIvNna9DQxn3o5p8IIto+TLpISGdVVqkms++fz 6vwd+AvbdnDiGdRwYQkKi0dae02bUmKEruiSGEvZdqufwiCKICa+AkgIolrAPnV6Hb+O Kpgg== X-Gm-Message-State: AOAM530ceXQoWOP2wMuxV6PRa4CPw9CQFTr9fuUXD/KZl1UgLPwtffo6 qNs3FmdL07s2BKWIQYmwoLjDo7PgVDg= X-Received: by 2002:a63:5b1c:: with SMTP id p28mr1215848pgb.227.1644882267693; Mon, 14 Feb 2022 15:44:27 -0800 (PST) Received: from vpn2.localdomain ([161.117.202.209]) by smtp.gmail.com with ESMTPSA id mi7sm492304pjb.21.2022.02.14.15.44.26 (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Mon, 14 Feb 2022 15:44:27 -0800 (PST) From: lance.lmwang@gmail.com To: ffmpeg-devel@ffmpeg.org Date: Tue, 15 Feb 2022 07:44:19 +0800 Message-Id: <1644882260-8559-3-git-send-email-lance.lmwang@gmail.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1644882260-8559-1-git-send-email-lance.lmwang@gmail.com> References: <1644882260-8559-1-git-send-email-lance.lmwang@gmail.com> Subject: [FFmpeg-devel] [PATCH 3/4] avfilter: support for CUVA HDR Vivid metadata 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: Limin Wang MIME-Version: 1.0 Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: 11+p1LV8V+Ej From: Limin Wang Signed-off-by: Limin Wang --- libavfilter/vf_showinfo.c | 86 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 86 insertions(+) diff --git a/libavfilter/vf_showinfo.c b/libavfilter/vf_showinfo.c index 71728bc..bee84b2 100644 --- a/libavfilter/vf_showinfo.c +++ b/libavfilter/vf_showinfo.c @@ -32,6 +32,7 @@ #include "libavutil/internal.h" #include "libavutil/film_grain_params.h" #include "libavutil/hdr_dynamic_metadata.h" +#include "libavutil/hdr_dynamic_vivid_metadata.h" #include "libavutil/opt.h" #include "libavutil/pixdesc.h" #include "libavutil/spherical.h" @@ -307,6 +308,88 @@ static void dump_dynamic_hdr_plus(AVFilterContext *ctx, AVFrameSideData *sd) } } +static void dump_dynamic_hdr_vivid(AVFilterContext *ctx, AVFrameSideData *sd) +{ + AVDynamicHDRVivid *hdr_vivid; + + av_log(ctx, AV_LOG_INFO, "HDR Vivid metadata: "); + if (sd->size < sizeof(*hdr_vivid)) { + av_log(ctx, AV_LOG_ERROR, "invalid hdr vivid data\n"); + return; + } + + hdr_vivid = (AVDynamicHDRVivid *)sd->data; + av_log(ctx, AV_LOG_INFO, "system_start_code: %d, ", hdr_vivid->system_start_code); + av_log(ctx, AV_LOG_INFO, "num_windows: %d, ", hdr_vivid->num_windows); + for (int w = 0; w < hdr_vivid->num_windows; w++) { + const AVHDRVividColorTransformParams *params = &hdr_vivid->params[w]; + + av_log(ctx, AV_LOG_INFO, "minimum_maxrgb[%d]: %.4f, ", w, av_q2d(params->minimum_maxrgb)); + av_log(ctx, AV_LOG_INFO, "average_maxrgb[%d]: %.4f, ", w, av_q2d(params->average_maxrgb)); + av_log(ctx, AV_LOG_INFO, "variance_maxrgb[%d]:%.4f, ", w, av_q2d(params->variance_maxrgb)); + av_log(ctx, AV_LOG_INFO, "maximum_maxrgb[%d]: %.4f, ", w, av_q2d(params->maximum_maxrgb)); + } + + for (int w = 0; w < hdr_vivid->num_windows; w++) { + const AVHDRVividColorTransformParams *params = &hdr_vivid->params[w]; + + av_log(ctx, AV_LOG_INFO, "tone_mapping_mode_flag[%d]: %d, ", w, params->tone_mapping_mode_flag); + av_log(ctx, AV_LOG_INFO, "tone_mapping_param_num[%d]: %d, ", w, params->tone_mapping_param_num); + if (params->tone_mapping_mode_flag) { + for (int i = 0; i < params->tone_mapping_param_num; i++) { + const AVHDRVividColorToneMappingParams *tm_params = ¶ms->tm_params[i]; + + av_log(ctx, AV_LOG_INFO, "targeted_system_display_maximum_luminance[%d][%d]: %.4f, ", + w, i, av_q2d(tm_params->targeted_system_display_maximum_luminance)); + av_log(ctx, AV_LOG_INFO, "base_enable_flag[%d][%d]: %d, ", + w, i, tm_params->base_enable_flag); + if (tm_params->base_enable_flag) { + av_log(ctx, AV_LOG_INFO, "base_param_m_p[%d][%d]: %.4f, ", w, i, av_q2d(tm_params->base_param_m_p)); + av_log(ctx, AV_LOG_INFO, "base_param_m_m[%d][%d]: %.4f, ", w, i, av_q2d(tm_params->base_param_m_m)); + av_log(ctx, AV_LOG_INFO, "base_param_m_a[%d][%d]: %.4f, ", w, i, av_q2d(tm_params->base_param_m_a)); + av_log(ctx, AV_LOG_INFO, "base_param_m_b[%d][%d]: %.4f, ", w, i, av_q2d(tm_params->base_param_m_b)); + av_log(ctx, AV_LOG_INFO, "base_param_m_n[%d][%d]: %.4f, ", w, i, av_q2d(tm_params->base_param_m_n)); + av_log(ctx, AV_LOG_INFO, "base_param_k1[%d][%d]: %d, ", w, i, tm_params->base_param_k1); + av_log(ctx, AV_LOG_INFO, "base_param_k2[%d][%d]: %d, ", w, i, tm_params->base_param_k2); + av_log(ctx, AV_LOG_INFO, "base_param_k3[%d][%d]: %d, ", w, i, tm_params->base_param_k3); + av_log(ctx, AV_LOG_INFO, "base_param_Delta_enable_mode[%d][%d]: %d, ", w, i, + tm_params->base_param_Delta_enable_mode); + av_log(ctx, AV_LOG_INFO, "base_param_Delta[%d][%d]: %.4f, ", w, i, av_q2d(tm_params->base_param_Delta)); + } + if (tm_params->three_Spline_flag) { + av_log(ctx, AV_LOG_INFO, "3Spline_flag[%d][%d]: %d, ", w, i, tm_params->three_Spline_flag); + av_log(ctx, AV_LOG_INFO, "3Spline_TH_mode[%d][%d]: %d, ", w, i, tm_params->three_Spline_TH_mode); + + for (int j = 0; j < tm_params->three_Spline_num; j++) { + av_log(ctx, AV_LOG_INFO, "3Spline_TH_enable_MB[%d][%d][%d]: %.4f, ", + w, i, j, av_q2d(tm_params->three_Spline_TH_enable_MB)); + av_log(ctx, AV_LOG_INFO, "3Spline_TH[%d][%d][%d]: %.4f, ", + w, i, j, av_q2d(tm_params->three_Spline_TH)); + av_log(ctx, AV_LOG_INFO, "3Spline_TH_Delta1[%d][%d][%d]: %.4f, ", + w, i, j, av_q2d(tm_params->three_Spline_TH_Delta1)); + av_log(ctx, AV_LOG_INFO, "3Spline_TH_Delta2[%d][%d][%d]: %.4f, ", + w, i, j, av_q2d(tm_params->three_Spline_TH_Delta2)); + av_log(ctx, AV_LOG_INFO, "3Spline_enable_Strength[%d][%d][%d]: %.4f, ", + w, i, j, av_q2d(tm_params->three_Spline_enable_Strength)); + } + } + } + } + + av_log(ctx, AV_LOG_INFO, "color_saturation_mapping_flag[%d]: %d", + w, params->color_saturation_mapping_flag); + if (params->color_saturation_mapping_flag) { + av_log(ctx, AV_LOG_INFO, ", color_saturation_num[%d]: %d", + w, params->color_saturation_num); + for (int i = 0; i < params->color_saturation_num; i++) { + av_log(ctx, AV_LOG_INFO, ", color_saturation_gain[%d][%d]: %.4f", + w, i, av_q2d(params->color_saturation_gain[i])); + } + } + } +} + + static void dump_content_light_metadata(AVFilterContext *ctx, AVFrameSideData *sd) { const AVContentLightMetadata *metadata = (const AVContentLightMetadata *)sd->data; @@ -704,6 +787,9 @@ static int filter_frame(AVFilterLink *inlink, AVFrame *frame) case AV_FRAME_DATA_DYNAMIC_HDR_PLUS: dump_dynamic_hdr_plus(ctx, sd); break; + case AV_FRAME_DATA_DYNAMIC_HDR_VIVID: + dump_dynamic_hdr_vivid(ctx, sd); + break; case AV_FRAME_DATA_CONTENT_LIGHT_LEVEL: dump_content_light_metadata(ctx, sd); break;