On 10/7/18, Daniel Molkentin <dan...@molkentin.de> wrote: > Allow to show short term instead of momentary. Useful for monitoring > whilst live mixing. > > Signed-off-by: Daniel Molkentin <dan...@molkentin.de> > Signed-off-by: Conrad Zelck <c.ze...@imail.de> > --- > doc/filters.texi | 9 ++++++++- > libavfilter/f_ebur128.c | 21 +++++++++++++++++++-- > 2 files changed, 27 insertions(+), 3 deletions(-) > > diff --git a/doc/filters.texi b/doc/filters.texi > index bd5154f9be..0363daffbb 100644 > --- a/doc/filters.texi > +++ b/doc/filters.texi > @@ -19279,7 +19279,8 @@ time graph to observe the loudness evolution. The > graphic contains the logged > message mentioned above, so it is not printed anymore when this option is > set, > unless the verbose logging is set. The main graphing area contains the > short-term loudness (3 seconds of analysis), and the gauge on the right is > for > -the momentary loudness (400 milliseconds). > +the momentary loudness (400 milliseconds), but can optionally be configured > +to instead display short-term loundness (see @var{gaugetype}). > > More information about the Loudness Recommendation EBU R128 on > @url{http://tech.ebu.ch/loudness}. > @@ -19362,6 +19363,12 @@ Set a specific target level (in LUFS) used as > relative zero in the visualization > This parameter is optional and has a default value of -23LUFS as specified > by EBU R128. However, material published online may prefer a level of > -16LUFS > (e.g. for use with podcasts or video platforms). > + > +@item gaugetype > +Set the value displayed by the gauge. Valid values are @code{momentary} and > s > +@code{short-term}. By default the momentary value will be used, but in > certain > +scenarios it may be more useful to observe the short term value instead > (e.g. > +live mixing). > @end table > > @subsection Examples > diff --git a/libavfilter/f_ebur128.c b/libavfilter/f_ebur128.c > index 89bfcb0b3e..9fd4bcef0a 100644 > --- a/libavfilter/f_ebur128.c > +++ b/libavfilter/f_ebur128.c > @@ -143,6 +143,7 @@ typedef struct EBUR128Context { > int dual_mono; ///< whether or not to treat single > channel input files as dual-mono > double pan_law; ///< pan law value used to calculate > dual-mono measurements > int target; ///< target level in LUFS used to set > relative zero LU in visualization > + char *gauge_type; ///< whether gauge shows momentary or
You forgot to change this one to int, but i can fix that when pushing. > short > } EBUR128Context; > > enum { > @@ -151,6 +152,12 @@ enum { > PEAK_MODE_TRUE_PEAKS = 1<<2, > }; > > +enum { > + GAUGE_TYPE_MOMENTARY = 0, > + GAUGE_TYPE_SHORTTERM = 1, > +}; > + > + > #define OFFSET(x) offsetof(EBUR128Context, x) > #define A AV_OPT_FLAG_AUDIO_PARAM > #define V AV_OPT_FLAG_VIDEO_PARAM > @@ -170,6 +177,9 @@ static const AVOption ebur128_options[] = { > { "dualmono", "treat mono input files as dual-mono", OFFSET(dual_mono), > AV_OPT_TYPE_BOOL, {.i64 = 0}, 0, 1, A|F }, > { "panlaw", "set a specific pan law for dual-mono files", > OFFSET(pan_law), AV_OPT_TYPE_DOUBLE, {.dbl = -3.01029995663978}, -10.0, 0.0, > A|F }, > { "target", "set a specific target level in LUFS (-23 to 0)", > OFFSET(target), AV_OPT_TYPE_INT, {.i64 = -23}, -23, 0, V|F }, > + { "gaugetype", "set gauge display type", OFFSET(gauge_type), > AV_OPT_TYPE_INT, {.i64 = 0 }, 0, INT_MAX, V|F, "type" }, > + { "momentary", "display momentary value", 0, AV_OPT_TYPE_CONST, > {.i64 = GAUGE_TYPE_MOMENTARY}, INT_MIN, INT_MAX, V|F, "type" }, > + { "shortterm", "display short-term value", 0, AV_OPT_TYPE_CONST, > {.i64 = GAUGE_TYPE_SHORTTERM}, INT_MIN, INT_MAX, V|F, "type" }, > { NULL }, > }; > > @@ -741,9 +751,16 @@ static int filter_frame(AVFilterLink *inlink, AVFrame > *insamples) > if (ebur128->do_video) { > int x, y, ret; > uint8_t *p; > + double gauge_value; > + > + if (ebur128->gauge_type == GAUGE_TYPE_MOMENTARY) { > + gauge_value = loudness_400 - ebur128->target; > + } else { > + gauge_value = loudness_3000 - ebur128->target; > + } > > const int y_loudness_lu_graph = lu_to_y(ebur128, > loudness_3000 - ebur128->target); > - const int y_loudness_lu_gauge = lu_to_y(ebur128, > loudness_400 - ebur128->target); > + const int y_loudness_lu_gauge = lu_to_y(ebur128, > gauge_value); > > /* draw the graph using the short-term loudness */ > p = pic->data[0] + ebur128->graph.y*pic->linesize[0] + > ebur128->graph.x*3; > @@ -755,7 +772,7 @@ static int filter_frame(AVFilterLink *inlink, AVFrame > *insamples) > p += pic->linesize[0]; > } > > - /* draw the gauge using the momentary loudness */ > + /* draw the gauge using either momentary or short-term > loudness */ > p = pic->data[0] + ebur128->gauge.y*pic->linesize[0] + > ebur128->gauge.x*3; > for (y = 0; y < ebur128->gauge.h; y++) { > const uint8_t *c = get_graph_color(ebur128, > y_loudness_lu_gauge, y); > -- > 2.17.1 > > _______________________________________________ > ffmpeg-devel mailing list > ffmpeg-devel@ffmpeg.org > http://ffmpeg.org/mailman/listinfo/ffmpeg-devel > _______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org http://ffmpeg.org/mailman/listinfo/ffmpeg-devel