]> git.sesse.net Git - ffmpeg/commitdiff
avfilter/avf_showfreqs: add group delay data mode
authorPaul B Mahol <onemda@gmail.com>
Sat, 28 Nov 2020 19:43:14 +0000 (20:43 +0100)
committerPaul B Mahol <onemda@gmail.com>
Sat, 28 Nov 2020 19:57:41 +0000 (20:57 +0100)
doc/filters.texi
libavfilter/avf_showfreqs.c

index 2f64d568a68b7ac09828351a67c24d73bfe89bbf..b927ddbfbb85ef757f35b4c0776272383c333338 100644 (file)
@@ -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
index 2ab9d4479f7c924525826d2b5d6d6e0ff741141a..6f286c03ba0db3abf15df261e8f1a138bc9af5e2 100644 (file)
@@ -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;
         }
     }