From 5ee5f4b13cc4a512d5a6730bc1b4d913c9a9dc11 Mon Sep 17 00:00:00 2001 From: Paul B Mahol Date: Wed, 17 Aug 2016 21:56:42 +0200 Subject: [PATCH] avfilter/avf_showfreqs: make minimum amplitude for log scaler configurable --- doc/filters.texi | 3 +++ libavfilter/avf_showfreqs.c | 6 +++++- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/doc/filters.texi b/doc/filters.texi index 46a3158a22..cbe95aadad 100644 --- a/doc/filters.texi +++ b/doc/filters.texi @@ -16563,6 +16563,9 @@ It accepts the following values: @end table Default is @code{combined}. +@item minamp +Set minimum amplitude used in @code{log} amplitude scaler. + @end table @anchor{showspectrum} diff --git a/libavfilter/avf_showfreqs.c b/libavfilter/avf_showfreqs.c index 6f9d486d13..e2a923b864 100644 --- a/libavfilter/avf_showfreqs.c +++ b/libavfilter/avf_showfreqs.c @@ -18,6 +18,7 @@ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ +#include #include #include "libavcodec/avfft.h" @@ -53,6 +54,7 @@ typedef struct ShowFreqsContext { float **avg_data; float *window_func_lut; float overlap; + float minamp; int hop_size; int nb_channels; int nb_freq; @@ -122,6 +124,7 @@ static const AVOption showfreqs_options[] = { { "cmode", "set channel mode", OFFSET(cmode), AV_OPT_TYPE_INT, {.i64=COMBINED}, 0, NB_CMODES-1, FLAGS, "cmode" }, { "combined", "show all channels in same window", 0, AV_OPT_TYPE_CONST, {.i64=COMBINED}, 0, 0, FLAGS, "cmode" }, { "separate", "show each channel in own window", 0, AV_OPT_TYPE_CONST, {.i64=SEPARATE}, 0, 0, FLAGS, "cmode" }, + { "minamp", "set minimum amplitude", OFFSET(minamp), AV_OPT_TYPE_FLOAT, {.dbl=1e-6}, FLT_MIN, 1e-6, FLAGS }, { NULL } }; @@ -285,6 +288,7 @@ static inline void plot_freq(ShowFreqsContext *s, int ch, AVFrame *out, AVFilterLink *outlink) { const int w = s->w; + const float min = s->minamp; const float avg = s->avg_data[ch][f]; const float bsize = get_bsize(s, f); const int sx = get_sx(s, f); @@ -299,7 +303,7 @@ static inline void plot_freq(ShowFreqsContext *s, int ch, a = 1.0 - cbrt(a); break; case AS_LOG: - a = log(av_clipd(a, 1e-6, 1)) / log(1e-6); + a = log(av_clipd(a, min, 1)) / log(min); break; case AS_LINEAR: a = 1.0 - a;