swscale/loongarch: fix LASX YUV2RGB residual for multi-row slices

The res variable (pixel residual count for widths not divisible by 16)
is computed once before the row loop, but DEALYUV2RGBLINERES and
DEALYUV2RGBLINERES32 destructively subtract 8 from it inside the loop
body. When srcSliceH > 2, subsequent row pairs get an incorrect
residual count, producing wrong output for the tail pixels.

Fix by recomputing res from the constant c->opts.dst_w at the top of
each row-pair iteration.

Signed-off-by: David Christle <dev@christle.is>
This commit is contained in:
David Christle
2026-03-02 13:14:07 +00:00
committed by Martin Storsjö
co-authored by Martin Storsjö
parent 40e60a7db0
commit 8e591af32b
+2
View File
@@ -185,6 +185,7 @@
const uint8_t *py_2 = py_1 + srcStride[0]; \
const uint8_t *pu = src[1] + (y >> vshift) * srcStride[1]; \
const uint8_t *pv = src[2] + (y >> vshift) * srcStride[2]; \
res = c->opts.dst_w & 15; \
for(x = 0; x < h_size; x++) { \
#define YUV2RGBFUNC32(func_name, dst_type, alpha) \
@@ -213,6 +214,7 @@
const uint8_t *py_2 = py_1 + srcStride[0]; \
const uint8_t *pu = src[1] + (y >> vshift) * srcStride[1]; \
const uint8_t *pv = src[2] + (y >> vshift) * srcStride[2]; \
res = c->opts.dst_w & 15; \
for(x = 0; x < h_size; x++) { \
#define DEALYUV2RGBLINE \