[FFmpeg-cvslog] avfilter/af_astats: remove invalid 5x factor in window size calculation

Paul B Mahol git at videolan.org
Sat Aug 21 23:07:42 EEST 2021


ffmpeg | branch: master | Paul B Mahol <onemda at gmail.com> | Sat Aug 21 21:44:18 2021 +0200| [5b258c27702c3a58b9be2b23b074ad4c4355bdac] | committer: Paul B Mahol

avfilter/af_astats: remove invalid 5x factor in window size calculation

Also allow smaller window sizes, and change histogram for noise
floor calculation to uint64_t type.

> http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=5b258c27702c3a58b9be2b23b074ad4c4355bdac
---

 doc/filters.texi        | 2 +-
 libavfilter/af_astats.c | 6 +++---
 2 files changed, 4 insertions(+), 4 deletions(-)

diff --git a/doc/filters.texi b/doc/filters.texi
index a5752c4d6e..c84202cf85 100644
--- a/doc/filters.texi
+++ b/doc/filters.texi
@@ -2647,7 +2647,7 @@ It accepts the following option:
 @table @option
 @item length
 Short window length in seconds, used for peak and trough RMS measurement.
-Default is @code{0.05} (50 milliseconds). Allowed range is @code{[0.01 - 10]}.
+Default is @code{0.05} (50 milliseconds). Allowed range is @code{[0 - 10]}.
 
 @item metadata
 
diff --git a/libavfilter/af_astats.c b/libavfilter/af_astats.c
index c8fbe44f69..9577468c81 100644
--- a/libavfilter/af_astats.c
+++ b/libavfilter/af_astats.c
@@ -82,7 +82,7 @@ typedef struct ChannelStats {
     uint64_t nb_infs;
     uint64_t nb_denormals;
     double *win_samples;
-    unsigned histogram[HISTOGRAM_SIZE];
+    uint64_t histogram[HISTOGRAM_SIZE];
     int win_pos;
     int max_index;
     double noise_floor;
@@ -109,7 +109,7 @@ typedef struct AudioStatsContext {
 #define FLAGS AV_OPT_FLAG_AUDIO_PARAM|AV_OPT_FLAG_FILTERING_PARAM
 
 static const AVOption astats_options[] = {
-    { "length", "set the window length", OFFSET(time_constant), AV_OPT_TYPE_DOUBLE, {.dbl=.05}, .01, 10, FLAGS },
+    { "length", "set the window length", OFFSET(time_constant), AV_OPT_TYPE_DOUBLE, {.dbl=.05}, 0, 10, FLAGS },
     { "metadata", "inject metadata in the filtergraph", OFFSET(metadata), AV_OPT_TYPE_BOOL, {.i64=0}, 0, 1, FLAGS },
     { "reset", "recalculate stats after this many frames", OFFSET(reset_count), AV_OPT_TYPE_INT, {.i64=0}, 0, INT_MAX, FLAGS },
     { "measure_perchannel", "only measure_perchannel these per-channel statistics", OFFSET(measure_perchannel), AV_OPT_TYPE_FLAGS, {.i64=MEASURE_ALL}, 0, UINT_MAX, FLAGS, "measure" },
@@ -213,7 +213,7 @@ static int config_output(AVFilterLink *outlink)
     if (!s->chstats)
         return AVERROR(ENOMEM);
 
-    s->tc_samples = 5 * s->time_constant * outlink->sample_rate + .5;
+    s->tc_samples = FFMAX(s->time_constant * outlink->sample_rate + .5, 1);
     s->nb_channels = outlink->channels;
 
     for (int i = 0; i < s->nb_channels; i++) {



More information about the ffmpeg-cvslog mailing list