PR #25738 opened by ffmpeg-devel URL: https://code.ffmpeg.org/FFmpeg/FFmpeg/pulls/25738 Patch URL: https://code.ffmpeg.org/FFmpeg/FFmpeg/pulls/25738.patch
**Backport:** https://code.ffmpeg.org/FFmpeg/FFmpeg/pulls/25600 The horizontal scaler intermediate buffer holds signed 16-bit samples that can be negative when scaling with filters that have negative lobes (such as bicubic). The 16-pixel and 8-pixel NEON vector loops in ff_yuv2planeX_10_neon treat src as signed int16_t via smlal, but the scalar tail loop for remaining (dstW % 8) pixels used unsigned ldrh before sxtw, interpreting negative intermediate values as large positive values around 65536 and saturating output pixels. Use ldrsh instead of ldrh so negative intermediate samples are properly sign-extended in the scalar tail loop. >From 738fd8707b4ec85aaa0159e2fff5e810fcd15e8f Mon Sep 17 00:00:00 2001 From: Greg Falcon <[email protected]> Date: Tue, 27 Oct 2026 12:58:57 -0400 Subject: [PATCH] swscale/aarch64: fix signed load in yuv2planeX_10 The horizontal scaler intermediate buffer holds signed 16-bit samples that can be negative when scaling with filters that have negative lobes (such as bicubic). The 16-pixel and 8-pixel NEON vector loops in ff_yuv2planeX_10_neon treat src as signed int16_t via smlal, but the scalar tail loop for remaining (dstW % 8) pixels used unsigned ldrh before sxtw, interpreting negative intermediate values as large positive values around 65536 and saturating output pixels. Use ldrsh instead of ldrh so negative intermediate samples are properly sign-extended in the scalar tail loop. Signed-off-by: Marvin Scholz <[email protected]> (cherry picked from commit dace243da83ff60c8c21026f99d8239d0458fc47) --- libswscale/aarch64/output.S | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libswscale/aarch64/output.S b/libswscale/aarch64/output.S index a650d72f54c..2e559ba1e55 100644 --- a/libswscale/aarch64/output.S +++ b/libswscale/aarch64/output.S @@ -165,7 +165,7 @@ function ff_yuv2planeX_10_neon, export=1 ldr x14, [x12], #8 // Load src pointer ldrsh w15, [x13], #2 // Load filter coefficient add x14, x14, x7, lsl #1 // Add pixel offset - ldrh w16, [x14] + ldrsh w16, [x14] sxtw x16, w16 sxtw x15, w15 -- 2.54.0 _______________________________________________ ffmpeg-devel mailing list -- [email protected] To unsubscribe send an email to [email protected]
