aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPaul B Mahol <onemda@gmail.com>2020-11-28 20:43:14 +0100
committerPaul B Mahol <onemda@gmail.com>2020-11-28 20:57:41 +0100
commita01b037c908eae2e4ed03a976fc63a0de6cd443b (patch)
tree55665cf0a70a6a3d589df369432b4fad56014c86
parentf3891430fc15cc8a1b7a16916030962e0a4d609c (diff)
downloadffmpeg-a01b037c908eae2e4ed03a976fc63a0de6cd443b.tar.gz
avfilter/avf_showfreqs: add group delay data mode
-rw-r--r--doc/filters.texi1
-rw-r--r--libavfilter/avf_showfreqs.c13
2 files changed, 13 insertions, 1 deletions
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;
}
}