From 74d4fd0822c39809c8f1fdc0efc672bee5cacfc7 Mon Sep 17 00:00:00 2001 From: Paul B Mahol Date: Wed, 10 Jul 2019 16:03:34 +0200 Subject: avfilter/avf_showfreqs: make selecting window size simpler The previous solution was very bad. --- doc/filters.texi | 20 ++------------------ libavfilter/avf_showfreqs.c | 17 +++-------------- 2 files changed, 5 insertions(+), 32 deletions(-) diff --git a/doc/filters.texi b/doc/filters.texi index 60b9204245..c92ed8de07 100644 --- a/doc/filters.texi +++ b/doc/filters.texi @@ -22346,25 +22346,9 @@ Reverse logarithmic scale. Default is @code{lin}. @item win_size -Set window size. +Set window size. Allowed range is from 16 to 65536. -It accepts the following values: -@table @samp -@item w16 -@item w32 -@item w64 -@item w128 -@item w256 -@item w512 -@item w1024 -@item w2048 -@item w4096 -@item w8192 -@item w16384 -@item w32768 -@item w65536 -@end table -Default is @code{w2048} +Default is @code{2048} @item win_func Set windowing function. diff --git a/libavfilter/avf_showfreqs.c b/libavfilter/avf_showfreqs.c index e65aa60eec..8755ac3a9e 100644 --- a/libavfilter/avf_showfreqs.c +++ b/libavfilter/avf_showfreqs.c @@ -46,6 +46,7 @@ typedef struct ShowFreqsContext { int w, h; int mode; int cmode; + int fft_size; int fft_bits; int ascale, fscale; int avg; @@ -85,20 +86,7 @@ static const AVOption showfreqs_options[] = { { "lin", "linear", 0, AV_OPT_TYPE_CONST, {.i64=FS_LINEAR}, 0, 0, FLAGS, "fscale" }, { "log", "logarithmic", 0, AV_OPT_TYPE_CONST, {.i64=FS_LOG}, 0, 0, FLAGS, "fscale" }, { "rlog", "reverse logarithmic", 0, AV_OPT_TYPE_CONST, {.i64=FS_RLOG}, 0, 0, FLAGS, "fscale" }, - { "win_size", "set window size", OFFSET(fft_bits), AV_OPT_TYPE_INT, {.i64=11}, 4, 16, FLAGS, "fft" }, - { "w16", 0, 0, AV_OPT_TYPE_CONST, {.i64=4}, 0, 0, FLAGS, "fft" }, - { "w32", 0, 0, AV_OPT_TYPE_CONST, {.i64=5}, 0, 0, FLAGS, "fft" }, - { "w64", 0, 0, AV_OPT_TYPE_CONST, {.i64=6}, 0, 0, FLAGS, "fft" }, - { "w128", 0, 0, AV_OPT_TYPE_CONST, {.i64=7}, 0, 0, FLAGS, "fft" }, - { "w256", 0, 0, AV_OPT_TYPE_CONST, {.i64=8}, 0, 0, FLAGS, "fft" }, - { "w512", 0, 0, AV_OPT_TYPE_CONST, {.i64=9}, 0, 0, FLAGS, "fft" }, - { "w1024", 0, 0, AV_OPT_TYPE_CONST, {.i64=10}, 0, 0, FLAGS, "fft" }, - { "w2048", 0, 0, AV_OPT_TYPE_CONST, {.i64=11}, 0, 0, FLAGS, "fft" }, - { "w4096", 0, 0, AV_OPT_TYPE_CONST, {.i64=12}, 0, 0, FLAGS, "fft" }, - { "w8192", 0, 0, AV_OPT_TYPE_CONST, {.i64=13}, 0, 0, FLAGS, "fft" }, - { "w16384", 0, 0, AV_OPT_TYPE_CONST, {.i64=14}, 0, 0, FLAGS, "fft" }, - { "w32768", 0, 0, AV_OPT_TYPE_CONST, {.i64=15}, 0, 0, FLAGS, "fft" }, - { "w65536", 0, 0, AV_OPT_TYPE_CONST, {.i64=16}, 0, 0, FLAGS, "fft" }, + { "win_size", "set window size", OFFSET(fft_size), AV_OPT_TYPE_INT, {.i64=2048}, 16, 65536, FLAGS }, { "win_func", "set window function", OFFSET(win_func), AV_OPT_TYPE_INT, {.i64=WFUNC_HANNING}, 0, NB_WFUNC-1, FLAGS, "win_func" }, { "rect", "Rectangular", 0, AV_OPT_TYPE_CONST, {.i64=WFUNC_RECT}, 0, 0, FLAGS, "win_func" }, { "bartlett", "Bartlett", 0, AV_OPT_TYPE_CONST, {.i64=WFUNC_BARTLETT}, 0, 0, FLAGS, "win_func" }, @@ -180,6 +168,7 @@ static int config_output(AVFilterLink *outlink) float overlap; int i; + s->fft_bits = av_log2(s->fft_size); s->nb_freq = 1 << (s->fft_bits - 1); s->win_size = s->nb_freq << 1; av_audio_fifo_free(s->fifo); -- cgit v1.2.3