[PR] avfilter/f_ebur128: fix top-back channel weighting (PR #24024)
AYOUB NABIL BOUBAGRAT via ffmpeg-devel <[email protected]> Wed, 05 Aug 2026 17:43:30 -0000
| Newsgroups | gmane.comp.video.ffmpeg.devel |
|---|---|
| Message-ID | <178595181155.59.12817067371164676243@29965ddac10e> |
PR #24024 opened by AYOUB NABIL BOUBAGRAT (ayoubnabil) URL: https://code.ffmpeg.org/FFmpeg/FFmpeg/pulls/24024 Patch URL: https://code.ffmpeg.org/FFmpeg/FFmpeg/pulls/24024.patch ITU-R BS.1770 assigns a weight of 1.0 to height channels, but the filter included the top-back channels in the 1.41 surround mask. remove the top-back channels from that mask and add a FATE test for the resulting loudness measurement. fixes #23968. >From c0709674259bed377142a2a0013e3ab588515f99 Mon Sep 17 00:00:00 2001 From: Ayoub Nabil <[email protected]> Date: Wed, 5 Aug 2026 19:35:50 +0200 Subject: [PATCH] avfilter/f_ebur128: fix top-back channel weighting ITU-R BS.1770 assigns a weight of 1.0 to height channels, but the filter included the top-back channels in the 1.41 surround mask. remove the top-back channels from that mask and add a FATE test for the resulting loudness measurement. fixes #23968. Signed-off-by: Ayoub Nabil <[email protected]> --- libavfilter/f_ebur128.c | 11 ++++++----- tests/fate/filter-video.mak | 4 ++++ tests/ref/fate/filter-metadata-ebur128-height | 4 ++++ 3 files changed, 14 insertions(+), 5 deletions(-) create mode 100644 tests/ref/fate/filter-metadata-ebur128-height diff --git a/libavfilter/f_ebur128.c b/libavfilter/f_ebur128.c index e6c2132fca..f2744fb8e6 100644 --- a/libavfilter/f_ebur128.c +++ b/libavfilter/f_ebur128.c @@ -433,10 +433,11 @@ static int config_audio_output(AVFilterLink *outlink) EBUR128Context *ebur128 = ctx->priv; const int nb_channels = outlink->ch_layout.nb_channels; -#define BACK_MASK (AV_CH_BACK_LEFT |AV_CH_BACK_CENTER |AV_CH_BACK_RIGHT| \ - AV_CH_TOP_BACK_LEFT|AV_CH_TOP_BACK_CENTER|AV_CH_TOP_BACK_RIGHT| \ - AV_CH_SIDE_LEFT |AV_CH_SIDE_RIGHT| \ - AV_CH_SURROUND_DIRECT_LEFT |AV_CH_SURROUND_DIRECT_RIGHT) + /* Height channels always use a weight of 1.0 in ITU-R BS.1770. */ +#define WEIGHT_1_41_MASK (AV_CH_BACK_LEFT |AV_CH_BACK_CENTER | \ + AV_CH_BACK_RIGHT |AV_CH_SIDE_LEFT | \ + AV_CH_SIDE_RIGHT |AV_CH_SURROUND_DIRECT_LEFT | \ + AV_CH_SURROUND_DIRECT_RIGHT) ebur128->nb_channels = nb_channels; ebur128->dsp.y = av_calloc(nb_channels, 3 * sizeof(*ebur128->dsp.y)); @@ -470,7 +471,7 @@ static int config_audio_output(AVFilterLink *outlink) const enum AVChannel chl = av_channel_layout_channel_from_index(&outlink->ch_layout, i); if (chl == AV_CHAN_LOW_FREQUENCY || chl == AV_CHAN_LOW_FREQUENCY_2) { ebur128->ch_weighting[i] = 0; - } else if (chl < 64 && (1ULL << chl) & BACK_MASK) { + } else if (chl < 64 && (1ULL << chl) & WEIGHT_1_41_MASK) { ebur128->ch_weighting[i] = 1.41; } else { ebur128->ch_weighting[i] = 1.0; diff --git a/tests/fate/filter-video.mak b/tests/fate/filter-video.mak index 0eb2e7076c..039c08f182 100644 --- a/tests/fate/filter-video.mak +++ b/tests/fate/filter-video.mak @@ -833,6 +833,10 @@ FATE_METADATA_FILTER-$(call ALLYES, $(EBUR128_METADATA_DEPS)) += fate-filter-met fate-filter-metadata-ebur128: SRC = $(TARGET_SAMPLES)/filter/seq-3341-7_seq-3342-5-24bit.flac fate-filter-metadata-ebur128: CMD = run $(FILTER_METADATA_COMMAND) "amovie='$(SRC)',ebur128=metadata=1" +EBUR128_HEIGHT_DEPS = FFPROBE LAVFI_INDEV AEVALSRC_FILTER EBUR128_FILTER +FATE_FILTER_FFPROBE-$(call ALLYES, $(EBUR128_HEIGHT_DEPS)) += fate-filter-metadata-ebur128-height +fate-filter-metadata-ebur128-height: CMD = run $(FILTER_METADATA_COMMAND) "aevalsrc=0.12589*sin(2*PI*997*t):channel_layout=TBL:sample_rate=48000:duration=0.4,ebur128=metadata=1" + READVITC_METADATA_DEPS = LAVFI_INDEV MOVIE_FILTER \ AVI_DEMUXER FFVHUFF_DECODER READVITC_FILTER FATE_METADATA_FILTER-$(call ALLYES, $(READVITC_METADATA_DEPS)) += fate-filter-metadata-readvitc-def diff --git a/tests/ref/fate/filter-metadata-ebur128-height b/tests/ref/fate/filter-metadata-ebur128-height new file mode 100644 index 0000000000..f182793368 --- /dev/null +++ b/tests/ref/fate/filter-metadata-ebur128-height @@ -0,0 +1,4 @@ +pts=0|tag:lavfi.r128.M=-120.691|tag:lavfi.r128.S=-120.691|tag:lavfi.r128.I=-70.000|tag:lavfi.r128.LRA=0.000|tag:lavfi.r128.LRA.low=0.000|tag:lavfi.r128.LRA.high=0.000 +pts=4800|tag:lavfi.r128.M=-120.691|tag:lavfi.r128.S=-120.691|tag:lavfi.r128.I=-70.000|tag:lavfi.r128.LRA=0.000|tag:lavfi.r128.LRA.low=0.000|tag:lavfi.r128.LRA.high=0.000 +pts=9600|tag:lavfi.r128.M=-120.691|tag:lavfi.r128.S=-120.691|tag:lavfi.r128.I=-70.000|tag:lavfi.r128.LRA=0.000|tag:lavfi.r128.LRA.low=0.000|tag:lavfi.r128.LRA.high=0.000 +pts=14400|tag:lavfi.r128.M=-21.010|tag:lavfi.r128.S=-120.691|tag:lavfi.r128.I=-21.010|tag:lavfi.r128.LRA=0.000|tag:lavfi.r128.LRA.low=0.000|tag:lavfi.r128.LRA.high=0.000 -- 2.52.0 _______________________________________________ ffmpeg-devel mailing list -- [email protected] To unsubscribe send an email to [email protected]