Commit 3b5d53038e for ffmpeg
commit 3b5d53038e72a2bf18afd0712b231099d6f22ca0
Author: Michael Niedermayer <michael@niedermayer.cc>
Date: Thu Oct 15 04:56:44 2026 +0000
swscale/arm: align unscaled NEON YUV to RGB slices to source chroma
The 32-bit ARM NEON YUV-to-RGB converters selected by
SET_FF_NVX_TO_RGBX_FUNC share the even-slice precondition with their
AArch64 counterparts: for vertically subsampled input they process two
luma rows per iteration, so an odd slice boundary picks the wrong
chroma phase and the last iteration writes one row past the slice end.
Threaded conversion produces such slices because the packed RGB
destination keeps dst_slice_align at one row.
Raise dst_slice_align when selecting these converters, mirroring the
preceding AArch64 change. YUV422P keeps full-height chroma and stays
single-row, so its alignment is unchanged.
Fixes: d6fdc78e9164 ("sws: implement slice threading")
Assisted-by: Fairy
diff --git a/libswscale/arm/swscale_unscaled.c b/libswscale/arm/swscale_unscaled.c
index c526ea1c50..8368724e30 100644
--- a/libswscale/arm/swscale_unscaled.c
+++ b/libswscale/arm/swscale_unscaled.c
@@ -150,6 +150,7 @@ DECLARE_FF_NVX_TO_ALL_RGBX_FUNCS(nv21)
&& !(c->opts.src_w & 15) \
&& !accurate_rnd) { \
c->convert_unscaled = ifmt##_to_##ofmt##_neon_wrapper; \
+ c->dst_slice_align = FFMAX(c->dst_slice_align, 1 << c->chrSrcVSubSample); \
} \
} while (0)