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

Git pushed a commit to branch master
in repository ffmpeg.

commit 3f77ce4deed82a98be15451b7aa79c899113deaa
Author:     Zuxy Meng <[email protected]>
AuthorDate: Fri Sep 4 21:18:41 2026 -0700
Commit:     Zuxy Meng <[email protected]>
CommitDate: Thu Oct 1 17:49:31 2026 -0700

    avcodec/ppc/h264dsp: Fix edge cases for bi-weight on ppc
    
    S16 saturating sum must be computed dot-product-first. The Altivec code
    added the offset to the first product before adding the second product,
    so an intermediate saturation could corrupt the result even when the
    true sum fits.
    
    Swap the two vec_adds to form the dot product first. This fixes
    bi-weight checkasm test for PPC.
    
    Signed-off-by: Zuxy Meng <[email protected]>
---
 libavcodec/ppc/h264dsp.c | 4 ++--
 tests/checkasm/h264dsp.c | 4 ++--
 2 files changed, 4 insertions(+), 4 deletions(-)

diff --git a/libavcodec/ppc/h264dsp.c b/libavcodec/ppc/h264dsp.c
index d832e7f01c..c558dafa0b 100644
--- a/libavcodec/ppc/h264dsp.c
+++ b/libavcodec/ppc/h264dsp.c
@@ -749,16 +749,16 @@ void biweight_h264_W_altivec(uint8_t *dst, uint8_t *src, 
ptrdiff_t stride, int h
             v0 = vec_mladd(v0, vweightd, zero_s16v);
             v2 = vec_mladd(v2, vweights, zero_s16v);
 
-            v0 = vec_adds(v0, voffset);
             v0 = vec_adds(v0, v2);
+            v0 = vec_adds(v0, voffset);
             v0 = vec_sra(v0, vlog2_denom);
         }
         if (w == 16 || !dst_aligned) {
             v1 = vec_mladd(v1, vweightd, zero_s16v);
             v3 = vec_mladd(v3, vweights, zero_s16v);
 
-            v1 = vec_adds(v1, voffset);
             v1 = vec_adds(v1, v3);
+            v1 = vec_adds(v1, voffset);
             v1 = vec_sra(v1, vlog2_denom);
         }
         vdst = vec_packsu(v0, v1);
diff --git a/tests/checkasm/h264dsp.c b/tests/checkasm/h264dsp.c
index a38ee32d9c..61839b13d6 100644
--- a/tests/checkasm/h264dsp.c
+++ b/tests/checkasm/h264dsp.c
@@ -544,8 +544,8 @@ static void check_weight(void)
     }
 }
 
-// only arch that can pass test
-#define H264_CHECK_BIWEIGHT ARCH_X86
+// only archs that can pass test
+#define H264_CHECK_BIWEIGHT (ARCH_X86 || ARCH_PPC)
 
 #if H264_CHECK_BIWEIGHT
 static void check_biweight(void)

-- 
To stop receiving notification emails like this one, please contact
[email protected].
_______________________________________________
ffmpeg-cvslog mailing list -- [email protected]
To unsubscribe send an email to [email protected]

Reply via email to