This is an automated email from the git hooks/post-receive script.

Git pushed a commit to branch master
in repository ffmpeg.

The following commit(s) were added to refs/heads/master by this push:
     new fc02470c62 avfilter/f_ebur128: fix top-back channel weighting
fc02470c62 is described below

commit fc02470c62a71a8fa431f3e424bc8049fec8d90a
Author:     Ayoub Nabil <[email protected]>
AuthorDate: Wed Aug 5 19:35:50 2026 +0200
Commit:     James Almer <[email protected]>
CommitDate: Thu Aug 6 00:30:00 2026 +0000

    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(-)

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 f8c0ffc3cb..6f6a3c7391 100644
--- a/tests/fate/filter-video.mak
+++ b/tests/fate/filter-video.mak
@@ -836,6 +836,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

_______________________________________________
ffmpeg-cvslog mailing list -- [email protected]
To unsubscribe send an email to [email protected]

Reply via email to