@ -146,6 +146,7 @@ typedef struct EBUR128Context {
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
int gauge_type ; ///< whether gauge shows momentary or short
int scale ; ///< display scale type of statistics
} EBUR128Context ;
enum {
@ -159,6 +160,10 @@ enum {
GAUGE_TYPE_SHORTTERM = 1 ,
} ;
enum {
SCALE_TYPE_ABSOLUTE = 0 ,
SCALE_TYPE_RELATIVE = 1 ,
} ;
# define OFFSET(x) offsetof(EBUR128Context, x)
# define A AV_OPT_FLAG_AUDIO_PARAM
@ -184,6 +189,11 @@ static const AVOption ebur128_options[] = {
{ " m " , " display momentary value " , 0 , AV_OPT_TYPE_CONST , { . i64 = GAUGE_TYPE_MOMENTARY } , INT_MIN , INT_MAX , V | F , " gaugetype " } ,
{ " shortterm " , " display short-term value " , 0 , AV_OPT_TYPE_CONST , { . i64 = GAUGE_TYPE_SHORTTERM } , INT_MIN , INT_MAX , V | F , " gaugetype " } ,
{ " s " , " display short-term value " , 0 , AV_OPT_TYPE_CONST , { . i64 = GAUGE_TYPE_SHORTTERM } , INT_MIN , INT_MAX , V | F , " gaugetype " } ,
{ " scale " , " sets display method for the stats " , OFFSET ( scale ) , AV_OPT_TYPE_INT , { . i64 = 0 } , SCALE_TYPE_ABSOLUTE , SCALE_TYPE_RELATIVE , V | F , " scaletype " } ,
{ " absolute " , " display absolute values (LUFS) " , 0 , AV_OPT_TYPE_CONST , { . i64 = SCALE_TYPE_ABSOLUTE } , INT_MIN , INT_MAX , V | F , " scaletype " } ,
{ " LUFS " , " display absolute values (LUFS) " , 0 , AV_OPT_TYPE_CONST , { . i64 = SCALE_TYPE_ABSOLUTE } , INT_MIN , INT_MAX , V | F , " scaletype " } ,
{ " relative " , " display values relative to target (LU) " , 0 , AV_OPT_TYPE_CONST , { . i64 = SCALE_TYPE_RELATIVE } , INT_MIN , INT_MAX , V | F , " scaletype " } ,
{ " LU " , " display values relative to target (LU) " , 0 , AV_OPT_TYPE_CONST , { . i64 = SCALE_TYPE_RELATIVE } , INT_MIN , INT_MAX , V | F , " scaletype " } ,
{ NULL } ,
} ;
@ -760,7 +770,7 @@ static int filter_frame(AVFilterLink *inlink, AVFrame *insamples)
loudness_3000 - = ebur128 - > pan_law ;
}
# define LOG_FMT "TARGET:%d M:%6.1f S:%6.1f I:%6.1f LUFS LRA:%6.1f LU"
# define LOG_FMT "TARGET:%d LUFS M:%6.1f S:%6.1f I:%6.1f %s LRA:%6.1f LU"
/* push one video frame */
if ( ebur128 - > do_video ) {
@ -798,10 +808,17 @@ static int filter_frame(AVFilterLink *inlink, AVFrame *insamples)
}
/* draw textual info */
drawtext ( pic , PAD , PAD - PAD / 2 , FONT16 , font_colors ,
LOG_FMT " " , // padding to erase trailing characters
ebur128 - > target , loudness_400 , loudness_3000 ,
ebur128 - > integrated_loudness , ebur128 - > loudness_range ) ;
if ( ebur128 - > scale = = SCALE_TYPE_ABSOLUTE ) {
drawtext ( pic , PAD , PAD - PAD / 2 , FONT16 , font_colors ,
LOG_FMT " " , // padding to erase trailing characters
ebur128 - > target , loudness_400 , loudness_3000 ,
ebur128 - > integrated_loudness , " LUFS " , ebur128 - > loudness_range ) ;
} else {
drawtext ( pic , PAD , PAD - PAD / 2 , FONT16 , font_colors ,
LOG_FMT " " , // padding to erase trailing characters
ebur128 - > target , loudness_400 - ebur128 - > target , loudness_3000 - ebur128 - > target ,
ebur128 - > integrated_loudness - ebur128 - > target , " LU " , ebur128 - > loudness_range ) ;
}
/* set pts and push frame */
pic - > pts = pts ;
@ -841,10 +858,17 @@ static int filter_frame(AVFilterLink *inlink, AVFrame *insamples)
SET_META_PEAK ( true , TRUE ) ;
}
av_log ( ctx , ebur128 - > loglevel , " t: %-10s " LOG_FMT ,
av_ts2timestr ( pts , & outlink - > time_base ) ,
ebur128 - > target , loudness_400 , loudness_3000 ,
ebur128 - > integrated_loudness , ebur128 - > loudness_range ) ;
if ( ebur128 - > scale = = SCALE_TYPE_ABSOLUTE ) {
av_log ( ctx , ebur128 - > loglevel , " t: %-10s " LOG_FMT ,
av_ts2timestr ( pts , & outlink - > time_base ) ,
ebur128 - > target , loudness_400 , loudness_3000 ,
ebur128 - > integrated_loudness , " LUFS " , ebur128 - > loudness_range ) ;
} else {
av_log ( ctx , ebur128 - > loglevel , " t: %-10s " LOG_FMT ,
av_ts2timestr ( pts , & outlink - > time_base ) ,
ebur128 - > target , loudness_400 - ebur128 - > target , loudness_3000 - ebur128 - > target ,
ebur128 - > integrated_loudness - ebur128 - > target , " LU " , ebur128 - > loudness_range ) ;
}
# define PRINT_PEAKS(str, sp, ptype) do { \
if ( ebur128 - > peak_mode & PEAK_MODE_ # # ptype # # _PEAKS ) { \