summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMartin Storsjö <martin@martin.st>2022-10-25 13:13:34 +0300
committerMartin Storsjö <martin@martin.st>2022-11-04 14:33:49 +0200
commit9c008fdbd43c4a9f2c2ab9acd6a7d223d64fec89 (patch)
tree4b3c33099e3e152a0f1c19b896a5fbe6c64e41d2
parentc655749d1d007a8fcda4d85032733e0547d24c0d (diff)
downloadffmpeg-release/3.2.tar.gz
swscale: aarch64: Fix yuv2rgb with negative stridesrelease/3.2
Treat the 32 bit stride registers as signed. Alternatively, we could make the stride arguments ptrdiff_t instead of int, and changing all of the assembly to operate on these registers with their full 64 bit width, but that's a much larger and more intrusive change (and risks missing some operation, which would clamp the intermediates to 32 bit still). Fixes: https://trac.ffmpeg.org/ticket/9985 Signed-off-by: Martin Storsjö <martin@martin.st> (cherry picked from commit cb803a0072cb98945dcd3f1660bd2a975650ce42) Signed-off-by: Martin Storsjö <martin@martin.st>
-rw-r--r--libswscale/aarch64/yuv2rgb_neon.S8
1 files changed, 4 insertions, 4 deletions
diff --git a/libswscale/aarch64/yuv2rgb_neon.S b/libswscale/aarch64/yuv2rgb_neon.S
index b7446aa105..10bd1f7480 100644
--- a/libswscale/aarch64/yuv2rgb_neon.S
+++ b/libswscale/aarch64/yuv2rgb_neon.S
@@ -118,8 +118,8 @@
.endm
.macro increment_yuv422p
- add x6, x6, w7, UXTW // srcU += incU
- add x13, x13, w14, UXTW // srcV += incV
+ add x6, x6, w7, SXTW // srcU += incU
+ add x13, x13, w14, SXTW // srcV += incV
.endm
.macro compute_rgba r1 g1 b1 a1 r2 g2 b2 a2
@@ -188,8 +188,8 @@ function ff_\ifmt\()_to_\ofmt\()_neon, export=1
st4 {v16.8B,v17.8B,v18.8B,v19.8B}, [x2], #32
subs w8, w8, #16 // width -= 16
b.gt 2b
- add x2, x2, w3, UXTW // dst += padding
- add x4, x4, w5, UXTW // srcY += paddingY
+ add x2, x2, w3, SXTW // dst += padding
+ add x4, x4, w5, SXTW // srcY += paddingY
increment_\ifmt
subs w1, w1, #1 // height -= 1
b.gt 1b