From patchwork Sun Oct 7 21:19:56 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Daniel Molkentin X-Patchwork-Id: 10563 Delivered-To: ffmpegpatchwork@gmail.com Received: by 2002:ab0:73d2:0:0:0:0:0 with SMTP id m18csp2901213uaq; Sun, 7 Oct 2018 14:21:02 -0700 (PDT) X-Google-Smtp-Source: ACcGV61bFPYk8bw0e0I/gTDHuZODIGm/NP/sqKWE61fuCc0zoxlx4fw+8PJ5T76rgZefmCGC8lo2 X-Received: by 2002:a1c:3288:: with SMTP id y130-v6mr13280430wmy.11.1538947262213; Sun, 07 Oct 2018 14:21:02 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1538947262; cv=none; d=google.com; s=arc-20160816; b=ceniMIRnIhPfEVMmA8xKq08lpMRWEA3qbHPYjUyBZ1tYMVdavRKXUwPmm6tA+g1VG4 I/RMVFXWdMbIn/Q2nDrbxFf6LrLfRdSgaELjLKXmTKTwMRKyegI4+SfNx9oT7rI685dq ntvTJSKAbe/JlYwd0EraM+zBVHAG9TUyLUbdA0ahFXsy59ec/5BL3haMbG4BmxOyKPvE 3ti0rZ5rn6lQqq/KMHlc2Hz2ZiDsqDBgZ15i2TD1N+auhYvf6Ppn1biseSGKQGt1jxOL E16/SBj/xRV6QoEYOgEJRcmWkgUbr9YDA3AoDIfRQmI9VMIzBJx/J5syD8NPmYyGIH/D F8ZA== 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:delivered-to; bh=nWn8sJK9+cDM2Mf2XI8SYkZloknGDvkFvQ/eo7D1sCo=; b=zz/kN8cieTikDKkKwpIWoNGB9AxYa8w7UIADBc1sm+4M7FtzJCgcLfI3ejujtSjZHQ rvCZvo+iyuc7ZH331oz4CqQuesktzWDACpcvbn7CgBwP62bx+aVDe6g3JvlmMvToJ1U5 PPW7mD8pKEK0w2mvjVUixt8KIbjhpz5B8UJpSgcSVfGt+GMTzlkjaVK9UFj+nsrk5VHJ WFnHZYMJVBeCuXOqC/ZX0mcQVQVttVQgIMI14v2ylrgsyRkY5nC1QUVQJv9FcPGXQvte fjLxkrQ1cx6qafUvHnkQSFQ+eOLKdPvB0b9McKSm9jmC3W7bs/4/Lke4963pu5zPuwj6 E7Cw== ARC-Authentication-Results: i=1; mx.google.com; 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 c19-v6si6575631wmh.43.2018.10.07.14.21.01; Sun, 07 Oct 2018 14:21:02 -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; 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 5BF62680280; Mon, 8 Oct 2018 00:20:07 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail.molkentin.net (mail.molkentin.net [138.201.121.149]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id ED3C768A2AF for ; Mon, 8 Oct 2018 00:19:59 +0300 (EEST) Received: from localhost (localhost4.localdomain4 [127.0.0.1]) by mail.molkentin.net (Postfix) with ESMTP id 5B3BEE3460; Sun, 7 Oct 2018 23:20:21 +0200 (CEST) X-Virus-Scanned: amavisd-new at example.com Received: from mail.molkentin.net ([127.0.0.1]) by localhost (mail.molkentin.net [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id RR5Tbs3WHTMa; Sun, 7 Oct 2018 23:20:20 +0200 (CEST) Received: from oldnewthing.club.berlin.ccc.de (dancefloor-nat.fuckup.club.berlin.ccc.de [195.160.172.42]) (using TLSv1.2 with cipher DHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) (Authenticated sender: daniel@molkentin.de) by mail.molkentin.net (Postfix) with ESMTPSA id 3C33BE35DA; Sun, 7 Oct 2018 23:20:19 +0200 (CEST) From: Daniel Molkentin To: ffmpeg-devel@ffmpeg.org Date: Sun, 7 Oct 2018 23:19:56 +0200 Message-Id: <20181007211956.17615-6-daniel@molkentin.de> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20181007211956.17615-1-daniel@molkentin.de> References: <20181007211956.17615-1-daniel@molkentin.de> Subject: [FFmpeg-devel] [PATCH 5/5] libavfilter/ebur128: add scale parameter X-BeenThere: ffmpeg-devel@ffmpeg.org X-Mailman-Version: 2.1.20 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: Conrad Zelck , Daniel Molkentin MIME-Version: 1.0 Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" This allows switching between absolute (LUFS) and relativ (LU) display in the status line. Signed-off-by: Daniel Molkentin Signed-off-by: Conrad Zelck --- doc/filters.texi | 8 ++++---- libavfilter/f_ebur128.c | 42 ++++++++++++++++++++++++++++++++--------- 2 files changed, 37 insertions(+), 13 deletions(-) diff --git a/doc/filters.texi b/doc/filters.texi index 875b412f41..df957fda0f 100644 --- a/doc/filters.texi +++ b/doc/filters.texi @@ -19375,10 +19375,10 @@ Set the value displayed by the gauge. Valid values are @code{momentary} and s scenarios it may be more useful to observe the short term value instead (e.g. live mixing). -@item mabsolute -Sets whether to display the loudness in LUFS (1, the default) LU relative to -the target (0). This only affects the video output, not the summary or -continous log output. +@item scale +Sets the display scale for the loudness. Valid parameters are @code{absolute} +(in LUFS) or @code{relative} (LU) relative to the target. This only affects the +video output, not the summary or continous log output. @end table @subsection Examples diff --git a/libavfilter/f_ebur128.c b/libavfilter/f_ebur128.c index 53f21c9d14..259d2036fc 100644 --- a/libavfilter/f_ebur128.c +++ b/libavfilter/f_ebur128.c @@ -146,6 +146,7 @@ typedef struct EBUR128Context { double pan_law; ///< pan law value used to calculate dual-mono measurements int target; ///< target level in LUFS used to set relative zero LU in visualization int gauge_type; ///< whether gauge shows momentary or short + int scale; ///< display scale type of statistics } EBUR128Context; enum { @@ -159,6 +160,10 @@ enum { GAUGE_TYPE_SHORTTERM = 1, }; +enum { + SCALE_TYPE_ABSOLUTE = 0, + SCALE_TYPE_RELATIVE = 1, +}; #define OFFSET(x) offsetof(EBUR128Context, x) #define A AV_OPT_FLAG_AUDIO_PARAM @@ -182,6 +187,11 @@ static const AVOption ebur128_options[] = { { "gauge", "set gauge display type", OFFSET(gauge_type), AV_OPT_TYPE_INT, {.i64 = 0 }, 0, INT_MAX, V|F, "gaugetype" }, { "momentary", "display momentary value", 0, AV_OPT_TYPE_CONST, {.i64 = GAUGE_TYPE_MOMENTARY}, INT_MIN, INT_MAX, V|F, "gaugetype" }, { "shortterm", "display short-term value", 0, AV_OPT_TYPE_CONST, {.i64 = GAUGE_TYPE_SHORTTERM}, INT_MIN, INT_MAX, V|F, "gaugetype" }, + { "scale", "sets display method for the stats", OFFSET(scale), AV_OPT_TYPE_INT, {.i64 = 0}, 0, INT_MAX, V|F, "scaletype" }, + { "absolute", "display absolute values (LUFS)", 0, AV_OPT_TYPE_CONST, {.i64 = SCALE_TYPE_ABSOLUTE}, INT_MIN, INT_MAX, V|F, "scaletype" }, + { "LUFS", "display absolute values (LUFS)", 0, AV_OPT_TYPE_CONST, {.i64 = SCALE_TYPE_ABSOLUTE}, INT_MIN, INT_MAX, V|F, "scaletype" }, + { "relative", "display values relative to target (LU)", 0, AV_OPT_TYPE_CONST, {.i64 = SCALE_TYPE_RELATIVE}, INT_MIN, INT_MAX, V|F, "scaletype" }, + { "LU", "display values relative to target (LU)", 0, AV_OPT_TYPE_CONST, {.i64 = SCALE_TYPE_RELATIVE}, INT_MIN, INT_MAX, V|F, "scaletype" }, { NULL }, }; @@ -758,7 +768,7 @@ static int filter_frame(AVFilterLink *inlink, AVFrame *insamples) loudness_3000 -= ebur128->pan_law; } -#define LOG_FMT "TARGET:%d M:%6.1f S:%6.1f I:%6.1f LUFS LRA:%6.1f LU" +#define LOG_FMT "TARGET:%d LUFS M:%6.1f S:%6.1f I:%6.1f %s LRA:%6.1f LU" /* push one video frame */ if (ebur128->do_video) { @@ -796,10 +806,17 @@ static int filter_frame(AVFilterLink *inlink, AVFrame *insamples) } /* draw textual info */ - drawtext(pic, PAD, PAD - PAD/2, FONT16, font_colors, - LOG_FMT " ", // padding to erase trailing characters - ebur128->target, loudness_400, loudness_3000, - ebur128->integrated_loudness, ebur128->loudness_range); + if (ebur128->scale == SCALE_TYPE_ABSOLUTE) { + drawtext(pic, PAD, PAD - PAD/2, FONT16, font_colors, + LOG_FMT " ", // padding to erase trailing characters + ebur128->target, loudness_400, loudness_3000, + ebur128->integrated_loudness, "LUFS", ebur128->loudness_range); + } else { + drawtext(pic, PAD, PAD - PAD/2, FONT16, font_colors, + LOG_FMT " ", // padding to erase trailing characters + ebur128->target, loudness_400-ebur128->target, loudness_3000-ebur128->target, + ebur128->integrated_loudness-ebur128->target, "LU", ebur128->loudness_range); + } /* set pts and push frame */ pic->pts = pts; @@ -839,10 +856,17 @@ static int filter_frame(AVFilterLink *inlink, AVFrame *insamples) SET_META_PEAK(true, TRUE); } - av_log(ctx, ebur128->loglevel, "t: %-10s " LOG_FMT, - av_ts2timestr(pts, &outlink->time_base), - ebur128->target, loudness_400, loudness_3000, - ebur128->integrated_loudness, ebur128->loudness_range); + if (ebur128->scale == SCALE_TYPE_ABSOLUTE) { + av_log(ctx, ebur128->loglevel, "t: %-10s " LOG_FMT, + av_ts2timestr(pts, &outlink->time_base), + ebur128->target, loudness_400, loudness_3000, + ebur128->integrated_loudness, "LUFS", ebur128->loudness_range); + } else { + av_log(ctx, ebur128->loglevel, "t: %-10s " LOG_FMT, + av_ts2timestr(pts, &outlink->time_base), + ebur128->target, loudness_400-ebur128->target, loudness_3000-ebur128->target, + ebur128->integrated_loudness-ebur128->target, "LU", ebur128->loudness_range); + } #define PRINT_PEAKS(str, sp, ptype) do { \ if (ebur128->peak_mode & PEAK_MODE_ ## ptype ## _PEAKS) { \