From patchwork Tue Aug 3 00:12:31 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: James Almer X-Patchwork-Id: 29210 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a6b:6c0f:0:0:0:0:0 with SMTP id a15csp2043871ioh; Mon, 2 Aug 2021 18:10:42 -0700 (PDT) X-Google-Smtp-Source: ABdhPJyXj9JKbUJLLSy3zYDiKKyzP7tIYFDkc3RGh1gdC+G/oup40vK5lgGGPUAXdveSEDvLvExo X-Received: by 2002:aa7:c2c8:: with SMTP id m8mr22616671edp.50.1627953042279; Mon, 02 Aug 2021 18:10:42 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1627953042; cv=none; d=google.com; s=arc-20160816; b=ifwNMXiCRM1T2KrBlMJAX3ohlAGMMHiTnhbU6b0jUxIxEPBZb/tLUysWwycOycFvln G9UHejJD4q0cgtc8IIhvOhgNO1yyXm541nn26oOvVEMZfpYDMVG6SzYloW3yAmo0j5Jo kJegyydy1jsKZiCgeEfvsbRxL/c91pWLH8zJ+AL6fJtC0mhT+qgae7FJDewM7DsZxXMG k+ie4KsBqoDFWFD2YR+F2lW6Dh0bjhG4ZfdwHP1JxK4MhTrlqHjFf1kwiRdn2oxwNtcW 3tKnzDmKSqtBmU2HG54Q9W5WmBR7zen3wNLW/XsUcMlOE0ll7zg6Xp2GFjWaWkkPYEYB /cKg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:content-transfer-encoding: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=pjxmHt759rfW3OI4YdXJSdEpPfCAyFtvGunQCU5ZOTM=; b=peAN1PAzsi1VMLiqxGA+rAsQXJ+0ek4YOE8z1zlk3kuYBauIKUy7CN0jdE3FAYg+/a kzYXxyIAE4Xle92vKu9307ujyZNdco6gDOw//9i4qOwIgOeqWU1GP/Q2OjElaXN2AgsX KaaF3iPl6WRyUmfxPmgF9/qWJNCjO8l6LN2kASKqqfsTmEstcUovHni1FiyAeIGVDk45 Gd/EblkQSzZ0vFymdS2ibLqqHweeImqmdOxdy7FkxVywd6YRm5v6tTHpp1UJi7aPBuod c5f0W8jR7zEHOxmUqMk5uMVf4A/CZCfp9+7SfZatdOET4UVy3kxP67Sy89EWoRdSyfha Ugiw== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@gmail.com header.s=20161025 header.b=QkgQDfMk; 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 i14si14012836eje.573.2021.08.02.18.10.41; Mon, 02 Aug 2021 18:10:42 -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=@gmail.com header.s=20161025 header.b=QkgQDfMk; 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 E7666688178; Tue, 3 Aug 2021 04:10:37 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-qv1-f50.google.com (mail-qv1-f50.google.com [209.85.219.50]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 753526804F4 for ; Tue, 3 Aug 2021 04:10:31 +0300 (EEST) Received: by mail-qv1-f50.google.com with SMTP id em4so5004556qvb.0 for ; Mon, 02 Aug 2021 18:10:31 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:subject:date:message-id:in-reply-to:references:mime-version :content-transfer-encoding; bh=8WD/s5Gb5C/uzL24YIpSUzRFSktQsMNX+uMXrc09x+I=; b=QkgQDfMkU23CxIL1E+tkFQfjt5vefmAZJGLLwjDt3Ua2zcxnoqXEgLTrr/NqhhE/GB PxhfcYUgJEJ2GZNLJtuBknCovyNSZPRj3s7Mo3eBt841Gm8GQHxw/pmkX4JVyO6qMisj xe+h5Jkiy+vqW7hJu6iPUvugy2MNWxUsaejGwPunMepf+T2bq3KQLryHaVfg/M+ljlpL 73o9D9QBB63E4II0evtBO8LmhH9+oHKaot8MQAyYFmjQGumgJ0kxOk/URG3hgyv93+tA NogjBiWm3Pn3Lv929cvIIlKc1j6a6HnJOt95ot8vGRM7zzAqyUFyYFQHcUW7T4AyE6vW rVLQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=8WD/s5Gb5C/uzL24YIpSUzRFSktQsMNX+uMXrc09x+I=; b=Ir24NA51fOUGoNi+0N30aRCrL982lpvlnjd/n5j1ropSDcw2sa4o7+F2vmp7LCh+an df4IdA7NEd87dETMMp2OIbvFEmb6LsnxOOlVwP/zroqIqwi32LaKHvFZU9XgFgFmDa9C HZ1ImOkf0dHCppE7ziGNv+guLSw9Ml/G0xVSW/8k1xEnts5G2Q1l7Q5PoNyJ2z9GrJgU dke8qkwkleguTusDmHcksqL8uEPNyrM++ZeFDOs41tfdritP5q1rYLqjtOFG3wFIyaEK LycQ9bKPzgaIi8V5y9Trt4Yjkh49tMgaAXBVfhyBh8AtoZ9Y4hH6UgXCF6ber7g+ztac Yv8A== X-Gm-Message-State: AOAM532TEmbzYfoZM+pecyvW0reMhg7xjnAAdOPib6IRgkwH3EiNFSvX eWi/EkMzJzNm9BC35dKHvpWuW2MAqD3lCA== X-Received: by 2002:a17:902:8c83:b029:11b:3f49:f88c with SMTP id t3-20020a1709028c83b029011b3f49f88cmr3348715plo.63.1627949585602; Mon, 02 Aug 2021 17:13:05 -0700 (PDT) Received: from localhost.localdomain ([191.84.227.130]) by smtp.gmail.com with ESMTPSA id e12sm14832545pgv.51.2021.08.02.17.13.04 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 02 Aug 2021 17:13:05 -0700 (PDT) From: James Almer To: ffmpeg-devel@ffmpeg.org Date: Mon, 2 Aug 2021 21:12:31 -0300 Message-Id: <20210803001231.2346-3-jamrial@gmail.com> X-Mailer: git-send-email 2.32.0 In-Reply-To: <20210803001231.2346-1-jamrial@gmail.com> References: <20210803001231.2346-1-jamrial@gmail.com> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 3/3] avfilter/vf_showinfo: add support for H.274 Film Grain Characteristics frame side data 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 Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: KC9G+87am73Y Signed-off-by: James Almer --- libavfilter/vf_showinfo.c | 70 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 70 insertions(+) diff --git a/libavfilter/vf_showinfo.c b/libavfilter/vf_showinfo.c index 5e1c4dc2e3..2d1748bd0b 100644 --- a/libavfilter/vf_showinfo.c +++ b/libavfilter/vf_showinfo.c @@ -29,6 +29,7 @@ #include "libavutil/display.h" #include "libavutil/imgutils.h" #include "libavutil/internal.h" +#include "libavutil/film_grain_params.h" #include "libavutil/hdr_dynamic_metadata.h" #include "libavutil/opt.h" #include "libavutil/pixdesc.h" @@ -361,6 +362,72 @@ static void dump_sei_unregistered_metadata(AVFilterContext *ctx, const AVFrameSi av_log(ctx, AV_LOG_INFO, "\n"); } +static void dump_sei_film_grain_params_metadata(AVFilterContext *ctx, const AVFrameSideData *sd) +{ + const AVFilmGrainParams *fgp = (const AVFilmGrainParams *)sd->data; + const char *const film_grain_type_names[] = { + [AV_FILM_GRAIN_PARAMS_NONE] = "none", + [AV_FILM_GRAIN_PARAMS_AV1] = "av1", + [AV_FILM_GRAIN_PARAMS_H274] = "h274", + }; + + if (fgp->type >= FF_ARRAY_ELEMS(film_grain_type_names)) { + av_log(ctx, AV_LOG_ERROR, "invalid data\n"); + return; + } + + av_log(ctx, AV_LOG_INFO, "film grain parameters: type %s; ", film_grain_type_names[fgp->type]); + av_log(ctx, AV_LOG_INFO, "seed=%"PRIu64"; ", fgp->seed); + + switch (fgp->type) { + case AV_FILM_GRAIN_PARAMS_NONE: + case AV_FILM_GRAIN_PARAMS_AV1: + return; + case AV_FILM_GRAIN_PARAMS_H274: { + const AVFilmGrainH274Params *h274 = &fgp->codec.h274; + const char *color_range_str = av_color_range_name(h274->color_range); + const char *color_primaries_str = av_color_primaries_name(h274->color_primaries); + const char *color_trc_str = av_color_transfer_name(h274->color_trc); + const char *colorspace_str = av_color_space_name(h274->color_space); + + av_log(ctx, AV_LOG_INFO, "model_id=%d; ", h274->model_id); + av_log(ctx, AV_LOG_INFO, "bit_depth_luma=%d; ", h274->bit_depth_luma); + av_log(ctx, AV_LOG_INFO, "bit_depth_chroma=%d; ", h274->bit_depth_chroma); + av_log(ctx, AV_LOG_INFO, "color_range=%s; ", color_range_str ? color_range_str : "unknown"); + av_log(ctx, AV_LOG_INFO, "color_primaries=%s; ", color_primaries_str ? color_primaries_str : "unknown"); + av_log(ctx, AV_LOG_INFO, "color_trc=%s; ", color_trc_str ? color_trc_str : "unknown"); + av_log(ctx, AV_LOG_INFO, "color_space=%s; ", colorspace_str ? colorspace_str : "unknown"); + av_log(ctx, AV_LOG_INFO, "blending_mode_id=%d; ", h274->blending_mode_id); + av_log(ctx, AV_LOG_INFO, "log2_scale_factor=%d; ", h274->log2_scale_factor); + + for (int c = 0; c < 3; c++) + if (h274->component_model_present[c] && (h274->num_model_values[c] > 6 || + h274->num_intensity_intervals[c] < 1 || + h274->num_intensity_intervals[c] > 256)) { + av_log(ctx, AV_LOG_ERROR, "invalid data\n"); + return; + } + + for (int c = 0; c < 3; c++) { + if (h274->component_model_present[c]) { + av_log(ctx, AV_LOG_INFO, "num_intensity_intervals[%d]=%u; ", c, h274->num_intensity_intervals[c]); + av_log(ctx, AV_LOG_INFO, "num_model_values[%d]=%u; ", c, h274->num_model_values[c]); + for (int i = 0; i < h274->num_intensity_intervals[c]; i++) { + av_log(ctx, AV_LOG_INFO, "intensity_interval_lower_bound[%d][%d]=%u; ", + c, i, h274->intensity_interval_lower_bound[c][i]); + av_log(ctx, AV_LOG_INFO, "intensity_interval_upper_bound[%d][%d]=%u; ", + c, i, h274->intensity_interval_upper_bound[c][i]); + for (int j = 0; j < h274->num_model_values[c]; j++) + av_log(ctx, AV_LOG_INFO, "comp_model_value[%d][%d][%d]=%d; ", + c, i, j, h274->comp_model_value[c][i][j]); + } + } + } + break; + } + } +} + static void dump_color_property(AVFilterContext *ctx, AVFrame *frame) { const char *color_range_str = av_color_range_name(frame->color_range); @@ -546,6 +613,9 @@ static int filter_frame(AVFilterLink *inlink, AVFrame *frame) case AV_FRAME_DATA_SEI_UNREGISTERED: dump_sei_unregistered_metadata(ctx, sd); break; + case AV_FRAME_DATA_FILM_GRAIN_PARAMS: + dump_sei_film_grain_params_metadata(ctx, sd); + break; default: av_log(ctx, AV_LOG_WARNING, "unknown side data type %d " "(%"SIZE_SPECIFIER" bytes)\n", sd->type, sd->size);