From a01b037c908eae2e4ed03a976fc63a0de6cd443b Mon Sep 17 00:00:00 2001 From: Paul B Mahol Date: Sat, 28 Nov 2020 20:43:14 +0100 Subject: [PATCH] avfilter/avf_showfreqs: add group delay data mode --- doc/filters.texi | 1 + libavfilter/avf_showfreqs.c | 13 ++++++++++++- 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/doc/filters.texi b/doc/filters.texi index 2f64d568a6..b927ddbfbb 100644 --- a/doc/filters.texi +++ b/doc/filters.texi @@ -25230,6 +25230,7 @@ It accepts the following values: @table @samp @item magnitude @item phase +@item delay @end table Default is @code{magnitude}. @end table diff --git a/libavfilter/avf_showfreqs.c b/libavfilter/avf_showfreqs.c index 2ab9d4479f..6f286c03ba 100644 --- a/libavfilter/avf_showfreqs.c +++ b/libavfilter/avf_showfreqs.c @@ -36,7 +36,7 @@ #include "internal.h" #include "window_func.h" -enum DataMode { MAGNITUDE, PHASE, NB_DATA }; +enum DataMode { MAGNITUDE, PHASE, DELAY, NB_DATA }; enum DisplayMode { LINE, BAR, DOT, NB_MODES }; enum ChannelMode { COMBINED, SEPARATE, NB_CMODES }; enum FrequencyScale { FS_LINEAR, FS_LOG, FS_RLOG, NB_FSCALES }; @@ -120,6 +120,7 @@ static const AVOption showfreqs_options[] = { { "data", "set data mode", OFFSET(data_mode), AV_OPT_TYPE_INT, {.i64=MAGNITUDE}, 0, NB_DATA-1, FLAGS, "data" }, { "magnitude", "show magnitude", 0, AV_OPT_TYPE_CONST, {.i64=MAGNITUDE}, 0, 0, FLAGS, "data" }, { "phase", "show phase", 0, AV_OPT_TYPE_CONST, {.i64=PHASE}, 0, 0, FLAGS, "data" }, + { "delay", "show group delay",0, AV_OPT_TYPE_CONST, {.i64=DELAY}, 0, 0, FLAGS, "data" }, { NULL } }; @@ -440,6 +441,16 @@ static int plot_freqs(AVFilterLink *inlink, AVFrame *in) plot_freq(s, ch, a, f, fg, &prev_y, out, outlink); } break; + case DELAY: + plot_freq(s, ch, 0, 0, fg, &prev_y, out, outlink); + + for (f = 1; f < s->nb_freq; f++) { + a = av_clipd((M_PI - P(IM(f, ch) * RE(f-1, ch) - IM(f-1, ch) * RE(f, ch), + RE(f, ch) * RE(f-1, ch) + IM(f, ch) * IM(f-1, ch))) / (2. * M_PI), 0, 1); + + plot_freq(s, ch, a, f, fg, &prev_y, out, outlink); + } + break; } }