From patchwork Thu Apr 9 11:07:17 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Lance Wang X-Patchwork-Id: 18791 Return-Path: X-Original-To: patchwork@ffaux-bg.ffmpeg.org Delivered-To: patchwork@ffaux-bg.ffmpeg.org Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org [79.124.17.100]) by ffaux.localdomain (Postfix) with ESMTP id 3381544AD15 for ; Thu, 9 Apr 2020 14:07:35 +0300 (EEST) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 1B89C68B7D0; Thu, 9 Apr 2020 14:07:35 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-pg1-f193.google.com (mail-pg1-f193.google.com [209.85.215.193]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 1D50768B5C2 for ; Thu, 9 Apr 2020 14:07:28 +0300 (EEST) Received: by mail-pg1-f193.google.com with SMTP id r4so4833683pgg.4 for ; Thu, 09 Apr 2020 04:07:28 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id; bh=2LwufRGzyj7Ld8TV5mN7gmsZ3ZvtjGQjtb5DRao28Ns=; b=ZdriyIVbONnjhgt4YMEkDIPtUr1vJmWPJbCVitRnOedCZjAiFjy5smD6SHovCsln/B 9flygMOrLsLLDuqUlzC12j4B3QmfUgDPXx5pSbCbnSxyH+Qi3Ry7ykj1HQuJXUoUvOh9 I4kmn4A5ufcOtGDaAohFkB+IEQmZEGh/t6NXzcjeYFbfpd+ocRUQ/kXLJS0HLPp6b3Nt EHPG9jBfuo5R1Ee0jT7uiAXOUyxB/glEaYlL37b+6v8cxVMqdmdqvIto8sjcA7PjOOtB xf/2HbnIPyiWMZL1YyFL0ge1OqERNNJW7aVh5k4Q4tUp0yPG9MVV2bLmMD8wa/YdHY6u yn3A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id; bh=2LwufRGzyj7Ld8TV5mN7gmsZ3ZvtjGQjtb5DRao28Ns=; b=RH/B/lupHuSeZELzpIQte0D9FW3MtPdBSclONL22edEtNg+joPvfcMcPortuujxDZC sNY51zTXxPdck/o+uhhGx5Qo/WBrYwlaLi42JqiqFQYVezH2B/zmNOb4kVPUUcY6E1cb WbMC9hui2Zq4xk1D/bliZ1QGQumavzJtCMbjJDVQkdsKf4otMVP5qqEgjlhkADAKXxyA s2Z/Vq/Dytj978vdf9qbt2zd0c/eSPFdEJvibRcyYURZj9M7nVecVyCCBNP/o6WXPCT9 53l1134BaJYmhteQxib/cj3x346tMqQ23OcAoiIUMEnwMQiJjM4ybp+WcMLTpfmbLUEk kd2Q== X-Gm-Message-State: AGi0Pub6ncy3UUfP5d53/gfzAoDNwwGeZn7+uxslBOv8lFZDGWxvb/DQ 1S/jYPTy0lROtT0qTvL1CJxshdPN X-Google-Smtp-Source: APiQypJ80eK+h8sT8r39UVH22geJ5j4xEg1YiuHWxGLucUj0E1ICL0LSY9xgnEODXgJOULzYMYZa7Q== X-Received: by 2002:a63:d351:: with SMTP id u17mr11289593pgi.396.1586430445992; Thu, 09 Apr 2020 04:07:25 -0700 (PDT) Received: from vpn.localdomain ([47.90.99.151]) by smtp.gmail.com with ESMTPSA id k17sm18977042pfp.194.2020.04.09.04.07.24 (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Thu, 09 Apr 2020 04:07:25 -0700 (PDT) From: lance.lmwang@gmail.com To: ffmpeg-devel@ffmpeg.org Date: Thu, 9 Apr 2020 19:07:17 +0800 Message-Id: <20200409110720.6965-1-lance.lmwang@gmail.com> X-Mailer: git-send-email 2.9.5 Subject: [FFmpeg-devel] [PATCH v1 1/4] avfilter/af_loudnorm: Add file option for the measured stats 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: Limin Wang MIME-Version: 1.0 Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" From: Limin Wang Signed-off-by: Limin Wang --- doc/filters.texi | 3 +++ libavfilter/af_loudnorm.c | 54 +++++++++++++++++++++++++++++++++++++-- 2 files changed, 55 insertions(+), 2 deletions(-) diff --git a/doc/filters.texi b/doc/filters.texi index 3931d8d79e..738a40df4e 100644 --- a/doc/filters.texi +++ b/doc/filters.texi @@ -4285,6 +4285,9 @@ Options are true or false. Default is false. @item print_format Set print format for stats. Options are summary, json, or none. Default value is none. + +@item file, f +Set file path for the measured stats @end table @section lowpass diff --git a/libavfilter/af_loudnorm.c b/libavfilter/af_loudnorm.c index 314b25fa39..bf530195e4 100644 --- a/libavfilter/af_loudnorm.c +++ b/libavfilter/af_loudnorm.c @@ -20,6 +20,8 @@ /* http://k.ylo.ph/2016/04/04/loudnorm.html */ +#include "libavutil/avstring.h" +#include "libavformat/avio.h" #include "libavutil/opt.h" #include "avfilter.h" #include "internal.h" @@ -62,6 +64,9 @@ typedef struct LoudNormContext { int linear; int dual_mono; enum PrintFormat print_format; + AVIOContext* pb; + char *filename; + void (*print)(AVFilterContext *ctx, const char *msg, ...) av_printf_format(2, 3); double *buf; int buf_size; @@ -119,6 +124,8 @@ static const AVOption loudnorm_options[] = { { "none", 0, 0, AV_OPT_TYPE_CONST, {.i64 = NONE}, 0, 0, FLAGS, "print_format" }, { "json", 0, 0, AV_OPT_TYPE_CONST, {.i64 = JSON}, 0, 0, FLAGS, "print_format" }, { "summary", 0, 0, AV_OPT_TYPE_CONST, {.i64 = SUMMARY}, 0, 0, FLAGS, "print_format" }, + { "file", "set file path for the measured stats", OFFSET(filename), AV_OPT_TYPE_STRING, {.str=NULL}, FLAGS }, + { "f", "set file path for the measured stats", OFFSET(filename), AV_OPT_TYPE_STRING, {.str=NULL}, FLAGS }, { NULL } }; @@ -781,6 +788,30 @@ static int config_input(AVFilterLink *inlink) return 0; } +static void print_log(AVFilterContext *ctx, const char *msg, ...) +{ + va_list va; + + va_start(va, msg); + if (msg) + av_vlog(ctx, AV_LOG_INFO, msg, va); + va_end(va); +} + +static void print_file(AVFilterContext *ctx, const char *msg, ...) +{ + LoudNormContext *s = ctx->priv; + va_list va; + + va_start(va, msg); + if (msg) { + char buf[1024]; + vsnprintf(buf, sizeof(buf), msg, va); + avio_write(s->pb, buf, av_strnlen(buf, sizeof(buf))); + } + va_end(va); +} + static av_cold int init(AVFilterContext *ctx) { LoudNormContext *s = ctx->priv; @@ -799,6 +830,22 @@ static av_cold int init(AVFilterContext *ctx) } } + if (s->print_format != NONE && s->filename) { + s->print = print_file; + } else { + s->print = print_log; + } + + if (s->filename) { + int ret = avio_open(&s->pb, s->filename, AVIO_FLAG_WRITE); + if (ret < 0) { + char buf[128]; + av_strerror(ret, buf, sizeof(buf)); + av_log(ctx, AV_LOG_ERROR, "Could not open %s: %s\n", s->filename, buf); + return ret; + } + } + return 0; } @@ -836,7 +883,7 @@ static av_cold void uninit(AVFilterContext *ctx) break; case JSON: - av_log(ctx, AV_LOG_INFO, + s->print(ctx, "\n{\n" "\t\"input_i\" : \"%.2f\",\n" "\t\"input_tp\" : \"%.2f\",\n" @@ -863,7 +910,7 @@ static av_cold void uninit(AVFilterContext *ctx) break; case SUMMARY: - av_log(ctx, AV_LOG_INFO, + s->print(ctx, "\n" "Input Integrated: %+6.1f LUFS\n" "Input True Peak: %+6.1f dBTP\n" @@ -899,6 +946,9 @@ end: av_freep(&s->limiter_buf); av_freep(&s->prev_smp); av_freep(&s->buf); + + if (s->pb) + avio_closep(&s->pb); } static const AVFilterPad avfilter_af_loudnorm_inputs[] = { From patchwork Thu Apr 9 11:07:18 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Lance Wang X-Patchwork-Id: 18792 Return-Path: X-Original-To: patchwork@ffaux-bg.ffmpeg.org Delivered-To: patchwork@ffaux-bg.ffmpeg.org Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org [79.124.17.100]) by ffaux.localdomain (Postfix) with ESMTP id 0350944AD15 for ; Thu, 9 Apr 2020 14:07:38 +0300 (EEST) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id DC6A968B7EE; Thu, 9 Apr 2020 14:07:37 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-pf1-f194.google.com (mail-pf1-f194.google.com [209.85.210.194]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 7EAF568B603 for ; Thu, 9 Apr 2020 14:07:29 +0300 (EEST) Received: by mail-pf1-f194.google.com with SMTP id v23so4617006pfm.1 for ; Thu, 09 Apr 2020 04:07:29 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=Sd7Ljlj9HvyRadGb4cfUIui5pkZH/9oFHmoCkv94kkU=; b=VjH7o1o45jZ/hBqfab3zC7s0AdNSbWSCzrl5tRorTLBjQVykH1DE9wAj0/Sdb046kF hS619xivnAOaD6qoCXnJj1cXok4rSk/rlk4WuyagD4aZb6hgvaGJ6rfmGFzsZQxNLMtE LDf0X9BvTREn6LTahzaw9STYCRMSRk3cMktJTtSrl8MdBjM2PdyYwjVJZ9GtEOozDmEj 3je2IE0clmzwyDvPnR7k+5eu7em0ZY+gkdNmpSZZL64/ThbkS3ILn/mnRY/9MFo3C9cI MDXIt4POiesbmHsUFA4wXRMDUFq24D+zmVEJIPO8fRLhpqZlTE7Cz10fAgjSd0y5+iJH Qz0g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=Sd7Ljlj9HvyRadGb4cfUIui5pkZH/9oFHmoCkv94kkU=; b=LcqSUdiIkVWHODgt8btOYG5F/YziSMwN4+GpO8r6ak29IHnVB8jUqDzi6eiOvp/nEV uyywuQ3Ze4a8du5gchfmAXDSZcw+OoA04bAxB/sHeZGUuCC3y3aS5hZWLhbY13En+h2x Q5gq82dBM29xy8x4jDlXdr6i3DWUY4FHkul3fOw+fQ6XCEZkaO8Pw2+nZ8q8ZXHX/rPd C5Dj3+RJ4ZXogLMHOo/eGhPLLF8En0xsIb+8vVGBr9XYWMaRp5RpnTlkJEllAQjieywe 7Onu0xbUykDa1z51+fGTToHtFYHrIWhIkID0Euj+nNgkiY66PqYV4q0EAoxTGbvvFSHJ 1YZQ== X-Gm-Message-State: AGi0Pub32JHvHXm2M6P8OghAfsg0lpndF4t36YffyvCi4E+x6FzTXA6N EMaxJ2hBfq38PV0KTWmcbbi6WgcU X-Google-Smtp-Source: APiQypKihkv3E1IElxEdO0go75AwrA4wwGCw6+bQa5DSmRVd6oDQ8ZUMuRzsy5pczCQeWBJEvECtLw== X-Received: by 2002:a63:68a:: with SMTP id 132mr611782pgg.377.1586430447511; Thu, 09 Apr 2020 04:07:27 -0700 (PDT) Received: from vpn.localdomain ([47.90.99.151]) by smtp.gmail.com with ESMTPSA id k17sm18977042pfp.194.2020.04.09.04.07.26 (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Thu, 09 Apr 2020 04:07:27 -0700 (PDT) From: lance.lmwang@gmail.com To: ffmpeg-devel@ffmpeg.org Date: Thu, 9 Apr 2020 19:07:18 +0800 Message-Id: <20200409110720.6965-2-lance.lmwang@gmail.com> X-Mailer: git-send-email 2.9.5 In-Reply-To: <20200409110720.6965-1-lance.lmwang@gmail.com> References: <20200409110720.6965-1-lance.lmwang@gmail.com> Subject: [FFmpeg-devel] [PATCH v1 2/4] avfilter/af_loudnorm: Add compact mode to simplify stats parsing 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: Limin Wang MIME-Version: 1.0 Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" From: Limin Wang Signed-off-by: Limin Wang --- doc/filters.texi | 2 +- libavfilter/af_loudnorm.c | 12 ++++++++++++ 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/doc/filters.texi b/doc/filters.texi index 738a40df4e..19171d48dc 100644 --- a/doc/filters.texi +++ b/doc/filters.texi @@ -4283,7 +4283,7 @@ Multi-channel input files are not affected by this option. Options are true or false. Default is false. @item print_format -Set print format for stats. Options are summary, json, or none. +Set print format for stats. Options are summary, json, compact or none. Default value is none. @item file, f diff --git a/libavfilter/af_loudnorm.c b/libavfilter/af_loudnorm.c index bf530195e4..3012aa2471 100644 --- a/libavfilter/af_loudnorm.c +++ b/libavfilter/af_loudnorm.c @@ -48,6 +48,7 @@ enum PrintFormat { NONE, JSON, SUMMARY, + COMPACT, PF_NB }; @@ -124,6 +125,7 @@ static const AVOption loudnorm_options[] = { { "none", 0, 0, AV_OPT_TYPE_CONST, {.i64 = NONE}, 0, 0, FLAGS, "print_format" }, { "json", 0, 0, AV_OPT_TYPE_CONST, {.i64 = JSON}, 0, 0, FLAGS, "print_format" }, { "summary", 0, 0, AV_OPT_TYPE_CONST, {.i64 = SUMMARY}, 0, 0, FLAGS, "print_format" }, + { "compact", 0, 0, AV_OPT_TYPE_CONST, {.i64 = COMPACT}, 0, 0, FLAGS, "print_format" }, { "file", "set file path for the measured stats", OFFSET(filename), AV_OPT_TYPE_STRING, {.str=NULL}, FLAGS }, { "f", "set file path for the measured stats", OFFSET(filename), AV_OPT_TYPE_STRING, {.str=NULL}, FLAGS }, { NULL } @@ -909,6 +911,16 @@ static av_cold void uninit(AVFilterContext *ctx) ); break; + case COMPACT: + s->print(ctx, "input_i: %.2f, input_tp: %.2f, input_lra: %.2f, input_thresh: %.2f, " + "output_i: %.2f, output_tp: %.2f, output_lra: %.2f, output_thresh: %.2f, " + "normalization_type: %s, target_offset: %.2f\n", + i_in, 20. * log10(tp_in), lra_in, thresh_in, + i_out, 20. * log10(tp_out), lra_out, thresh_out, + s->frame_type == LINEAR_MODE ? "linear" : "dynamic", + s->target_i - i_out); + break; + case SUMMARY: s->print(ctx, "\n" From patchwork Thu Apr 9 11:07:19 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Lance Wang X-Patchwork-Id: 18793 Return-Path: X-Original-To: patchwork@ffaux-bg.ffmpeg.org Delivered-To: patchwork@ffaux-bg.ffmpeg.org Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org [79.124.17.100]) by ffaux.localdomain (Postfix) with ESMTP id EAAD744AD15 for ; Thu, 9 Apr 2020 14:07:38 +0300 (EEST) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id D6E5D68B7ED; Thu, 9 Apr 2020 14:07:38 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-pl1-f193.google.com (mail-pl1-f193.google.com [209.85.214.193]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id DCAE468B703 for ; Thu, 9 Apr 2020 14:07:30 +0300 (EEST) Received: by mail-pl1-f193.google.com with SMTP id c12so3726513plz.2 for ; Thu, 09 Apr 2020 04:07:30 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=MyTQYm6JAJWmo7earCEJ7Jipg0H3nW6oTe4Tv2bsYWE=; b=mY+ThqOt7YiznyAoiWx+Y4nnGphpDO6BHeUokqa4fNHS6xGvjSLezLhJsLc4JGMIOf cGleX0UCVLm9z15a7FY+wD5WrSJm1m6okigKAzD93Jbl/L7XNMkZJqjTS3gOkl6/MbJD BHAh9cTrjmI1AuNKkqnOp5J1M2GSTiT9hWmBXm3nOQXl0fBL3BcbZl89V3IvaqSD828C 2K5MzXx+VY1G1zIdVGId0ANLN4DsApv3SJUHxMSu3GDyZ2Fr3hSHPLaXN9+eKKO/QgnV lLBGvyv8csQIrfoouBEiYXHFI3VeQLyxdIo3l4yYKN6nBsnb8xbRjfgilkSe6keh8wvi qymQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=MyTQYm6JAJWmo7earCEJ7Jipg0H3nW6oTe4Tv2bsYWE=; b=CXjyuzYRTbTLdylP8P5+FU3Mwm904R/NFdyqnDffHrE8rl4ECFsmAKO+sr94jMsfTJ Kty6FZLJUQw7W6mVb3VKZkcMQ9+IL71VUYVEJfalMX8fYCaEDIar/MRyPz6+0S4QEJEy XqlzyTpkb8fXbeQMwmRvBSWXRDFNNNSA1W49AMqmmTGFR0VKknu7aCHeuY6qgaAfWzKx sUJfbkWzg37SMMUgYdWa/p9TJbU2fZjmOZGc6R48u2S1mRfGX+vTOxwskXMgybLev/sa TdoVA9wGaPkB8uUWfkg/oATDt68yQSvhMCezE614Xc6Fi+lkGtBjAKcdZIYr6nZz2Sct Ae1g== X-Gm-Message-State: AGi0PubWVfdFxCufWx7eAEKNhD/cFgaNKT1vrLhHGLqTdbeTHQHa1Ifs Uk/+Q+cglMzs7qAukvmj6Ryaz+VZ X-Google-Smtp-Source: APiQypKwjHXZTjujCuK5BWX/0gOjAaO5Wu/lAkCFNWaPRBT/xZc81z3Q6McfmpxkSKcMdFFQiyIDqg== X-Received: by 2002:a17:902:322:: with SMTP id 31mr11702761pld.103.1586430449057; Thu, 09 Apr 2020 04:07:29 -0700 (PDT) Received: from vpn.localdomain ([47.90.99.151]) by smtp.gmail.com with ESMTPSA id k17sm18977042pfp.194.2020.04.09.04.07.27 (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Thu, 09 Apr 2020 04:07:28 -0700 (PDT) From: lance.lmwang@gmail.com To: ffmpeg-devel@ffmpeg.org Date: Thu, 9 Apr 2020 19:07:19 +0800 Message-Id: <20200409110720.6965-3-lance.lmwang@gmail.com> X-Mailer: git-send-email 2.9.5 In-Reply-To: <20200409110720.6965-1-lance.lmwang@gmail.com> References: <20200409110720.6965-1-lance.lmwang@gmail.com> Subject: [FFmpeg-devel] [PATCH v1 3/4] avfilter/af_loudnorm: Add support for two pass stats for measure 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: Limin Wang MIME-Version: 1.0 Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" From: Limin Wang Signed-off-by: Limin Wang --- libavfilter/af_loudnorm.c | 41 ++++++++++++++++++++++++++++++++++++++- 1 file changed, 40 insertions(+), 1 deletion(-) diff --git a/libavfilter/af_loudnorm.c b/libavfilter/af_loudnorm.c index 3012aa2471..380d0570d4 100644 --- a/libavfilter/af_loudnorm.c +++ b/libavfilter/af_loudnorm.c @@ -96,6 +96,7 @@ typedef struct LoudNormContext { int above_threshold; int prev_nb_samples; int channels; + int pass; FFEBUR128State *r128_in; FFEBUR128State *r128_out; @@ -128,6 +129,7 @@ static const AVOption loudnorm_options[] = { { "compact", 0, 0, AV_OPT_TYPE_CONST, {.i64 = COMPACT}, 0, 0, FLAGS, "print_format" }, { "file", "set file path for the measured stats", OFFSET(filename), AV_OPT_TYPE_STRING, {.str=NULL}, FLAGS }, { "f", "set file path for the measured stats", OFFSET(filename), AV_OPT_TYPE_STRING, {.str=NULL}, FLAGS }, + { "pass", "enable two pass stats for measure", OFFSET(pass), AV_OPT_TYPE_INT, {.i64 = -1}, -1, 2, FLAGS }, { NULL } }; @@ -833,11 +835,42 @@ static av_cold int init(AVFilterContext *ctx) } if (s->print_format != NONE && s->filename) { + if (s->pass == 1 && s->print_format != COMPACT) { + av_log(ctx, AV_LOG_ERROR, "first pass must be in compact format\n"); + return AVERROR_INVALIDDATA; + } s->print = print_file; } else { s->print = print_log; } + /* load first pass stats for second pass*/ + if (s->filename && s->pass == 2) { + char buf[1024] = { 0 }; + FILE *f = av_fopen_utf8(s->filename, "r"); + if (!f) { + av_log(ctx, AV_LOG_ERROR, "Could not open %s\n", s->filename); + return AVERROR_INVALIDDATA; + } + + if (fgets(buf, sizeof(buf)-1, f)) { + if (sscanf(buf, "input_i: %lf, input_tp: %lf, input_lra: %lf, input_thresh: %lf, target_offset: %lf\n", + &s->measured_i, &s->measured_lra, &s->measured_tp, &s->measured_thresh, + &s->offset) != 5) { + av_log(ctx, AV_LOG_ERROR, "Invalid first pass stats file(%s) for parse\n", s->filename); + return AVERROR_INVALIDDATA; + } + av_log(ctx, AV_LOG_INFO, "load first pass stats: measured_i %.2f, measured_lra: %.2f, " + "measured_tp: %.2f, measured_thresh: %.2f, target_offset: %.2f\n", + s->measured_i, s->measured_lra, s->measured_tp, s->measured_thresh, s->offset); + } else { + av_log(ctx, AV_LOG_ERROR, "Invalid first pass stats file(%s) for parse\n", s->filename); + return AVERROR_INVALIDDATA; + } + + fclose(f); + } + if (s->filename) { int ret = avio_open(&s->pb, s->filename, AVIO_FLAG_WRITE); if (ret < 0) { @@ -912,7 +945,13 @@ static av_cold void uninit(AVFilterContext *ctx) break; case COMPACT: - s->print(ctx, "input_i: %.2f, input_tp: %.2f, input_lra: %.2f, input_thresh: %.2f, " + if (s->pass == 1) + s->print(ctx, "input_i: %.2f, input_tp: %.2f, input_lra: %.2f, input_thresh: %.2f, " + "target_offset: %.2f \n", + i_in, 20. * log10(tp_in), lra_in, thresh_in, + s->target_i - i_out); + else + s->print(ctx, "input_i: %.2f, input_tp: %.2f, input_lra: %.2f, input_thresh: %.2f, " "output_i: %.2f, output_tp: %.2f, output_lra: %.2f, output_thresh: %.2f, " "normalization_type: %s, target_offset: %.2f\n", i_in, 20. * log10(tp_in), lra_in, thresh_in, From patchwork Thu Apr 9 11:07:20 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Lance Wang X-Patchwork-Id: 18794 Return-Path: X-Original-To: patchwork@ffaux-bg.ffmpeg.org Delivered-To: patchwork@ffaux-bg.ffmpeg.org Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org [79.124.17.100]) by ffaux.localdomain (Postfix) with ESMTP id EB4FB44AD15 for ; Thu, 9 Apr 2020 14:07:39 +0300 (EEST) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id DA9A168B810; Thu, 9 Apr 2020 14:07:39 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-pg1-f193.google.com (mail-pg1-f193.google.com [209.85.215.193]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 4AC5368B677 for ; Thu, 9 Apr 2020 14:07:32 +0300 (EEST) Received: by mail-pg1-f193.google.com with SMTP id k5so4844145pga.2 for ; Thu, 09 Apr 2020 04:07:32 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=I71k8BWevDDZZwHLcC9pIXLpb7T6+vV9P3L0aqFUfAU=; b=B2LcnJaHKjV3j1wHZXZ/Bk546T9ed06a4lL965mOsDaOFD1rhZXo7ydpMRRlS4owBp 6NlgiRO4a053QUdyiNN66RU2RVX6FEZQ1ecTJ0zPU7GvfClY0jlrV9KsXt4VprppPTX7 HjF06HHpB13qeZ1l2NiyAwLm93ta4Az6iasbQd2mlgMJVSfuOoEIbIbga/GCKZ6CnXp9 Yly74nUU9BTfy1NPaQHOcYEaxgcknZAKfPoC3F6sF+9H7/zvDZpgQwjKB1SbwMQxwUhN UAMe1Vnecq4bI6USni94cOsgNwfe2bJTRVTaP7M01U9NdHdb32jGtUmqU4snVHfjBegc 7ipg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=I71k8BWevDDZZwHLcC9pIXLpb7T6+vV9P3L0aqFUfAU=; b=ZnUuLWIGzFr3HrO7SRjnIROclpPd7aDF9T5/FTWAgiK3suSeq85rjo6qnzS5yaDUJj 0h7YNOmQjo7R8DcMnosV9qoIge1AGe49LIC07K3CJpSPdqXNt2IVZJxLofF2p00+yXro jvpA8HuPWTNrUs62W28+bhcTZyVGtU4q9RFF5rQImGsJ6hid0ECE5cRE7jXwozxdOJZ/ FG+MZx0/a6QxBwUZiJvxxo9P/CUdmtJpi8Mypre9iW8uB99oD6oEhG6IPFjDZQYY/jlD hbpmgDZCFoOo15ctNmTkij6HDT791rrKsHc1A9wDhi7Pe+hJOPki8rltKWwA6wxURvAK brkQ== X-Gm-Message-State: AGi0PuYocLJqNQYHbdcR4sTq0OMr+I+YemhXz7oUTNbDMBHzor/ye6nh ZX7q4VpU6ou6vObCOqBvO2XjfP41 X-Google-Smtp-Source: APiQypJeptwfX+xqPciZaxCjxedHgp9CpNH+1M09RyaIX4TmwrVyTP8BElTYJiQE+BVXVEV6wkSUIQ== X-Received: by 2002:a65:6451:: with SMTP id s17mr11539803pgv.124.1586430450572; Thu, 09 Apr 2020 04:07:30 -0700 (PDT) Received: from vpn.localdomain ([47.90.99.151]) by smtp.gmail.com with ESMTPSA id k17sm18977042pfp.194.2020.04.09.04.07.29 (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Thu, 09 Apr 2020 04:07:30 -0700 (PDT) From: lance.lmwang@gmail.com To: ffmpeg-devel@ffmpeg.org Date: Thu, 9 Apr 2020 19:07:20 +0800 Message-Id: <20200409110720.6965-4-lance.lmwang@gmail.com> X-Mailer: git-send-email 2.9.5 In-Reply-To: <20200409110720.6965-1-lance.lmwang@gmail.com> References: <20200409110720.6965-1-lance.lmwang@gmail.com> Subject: [FFmpeg-devel] [PATCH v1 4/4] avfilter/ebur128: prefer to use variable instead of type for sizeof 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: Limin Wang MIME-Version: 1.0 Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" From: Limin Wang Signed-off-by: Limin Wang --- libavfilter/ebur128.c | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/libavfilter/ebur128.c b/libavfilter/ebur128.c index c8986fb5e1..ca2fca0066 100644 --- a/libavfilter/ebur128.c +++ b/libavfilter/ebur128.c @@ -155,7 +155,7 @@ static int ebur128_init_channel_map(FFEBUR128State * st) { size_t i; st->d->channel_map = - (int *) av_malloc_array(st->channels, sizeof(int)); + (int *) av_malloc_array(st->channels, sizeof(*st->d->channel_map)); if (!st->d->channel_map) return AVERROR(ENOMEM); if (st->channels == 4) { @@ -221,17 +221,17 @@ FFEBUR128State *ff_ebur128_init(unsigned int channels, int errcode; FFEBUR128State *st; - st = (FFEBUR128State *) av_malloc(sizeof(FFEBUR128State)); + st = (FFEBUR128State *) av_malloc(sizeof(*st)); CHECK_ERROR(!st, 0, exit) st->d = (struct FFEBUR128StateInternal *) - av_malloc(sizeof(struct FFEBUR128StateInternal)); + av_malloc(sizeof(*st->d)); CHECK_ERROR(!st->d, 0, free_state) st->channels = channels; errcode = ebur128_init_channel_map(st); CHECK_ERROR(errcode, 0, free_internal) st->d->sample_peak = - (double *) av_mallocz_array(channels, sizeof(double)); + (double *) av_mallocz_array(channels, sizeof(*st->d->sample_peak)); CHECK_ERROR(!st->d->sample_peak, 0, free_channel_map) st->samplerate = samplerate; @@ -253,16 +253,16 @@ FFEBUR128State *ff_ebur128_init(unsigned int channels, } st->d->audio_data = (double *) av_mallocz_array(st->d->audio_data_frames, - st->channels * sizeof(double)); + st->channels * sizeof(*st->d->audio_data)); CHECK_ERROR(!st->d->audio_data, 0, free_sample_peak) ebur128_init_filter(st); st->d->block_energy_histogram = - av_mallocz(1000 * sizeof(unsigned long)); + av_mallocz(1000 * sizeof(*st->d->block_energy_histogram)); CHECK_ERROR(!st->d->block_energy_histogram, 0, free_audio_data) st->d->short_term_block_energy_histogram = - av_mallocz(1000 * sizeof(unsigned long)); + av_mallocz(1000 * sizeof(*st->d->short_term_block_energy_histogram)); CHECK_ERROR(!st->d->short_term_block_energy_histogram, 0, free_block_energy_histogram) st->d->short_term_frame_counter = 0; @@ -275,7 +275,7 @@ FFEBUR128State *ff_ebur128_init(unsigned int channels, if (ff_thread_once(&histogram_init, &init_histogram) != 0) goto free_short_term_block_energy_histogram; - st->d->data_ptrs = av_malloc_array(channels, sizeof(void *)); + st->d->data_ptrs = av_malloc_array(channels, sizeof(*st->d->data_ptrs)); CHECK_ERROR(!st->d->data_ptrs, 0, free_short_term_block_energy_histogram);