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)