Commit 787043af6e for ffmpeg

commit 787043af6e2519cd90d35507cd1ba6d1ba8ed7fc
Author: James Almer <jamrial@gmail.com>
Date:   Sun Nov 8 11:26:19 2026 -0300

    swscale/output: add yuv2packed1 implementation for YAF32

    Signed-off-by: James Almer <jamrial@gmail.com>

diff --git a/libswscale/output.c b/libswscale/output.c
index b6ad322da0..55cba1ea5f 100644
--- a/libswscale/output.c
+++ b/libswscale/output.c
@@ -217,7 +217,8 @@ yuv2nv12cX_16_c_template(int big_endian, const uint8_t *chrDither,
 }

 static av_always_inline void
-yuv2plane1_float_c_template(const int32_t *src, float *dest, int dstW)
+yuv2plane1_float_c_template(const int32_t *src, float *dest, int dstW,
+                            ptrdiff_t stride)
 {
     static const int big_endian = HAVE_BIGENDIAN;
     static const int shift = 3;
@@ -228,12 +229,13 @@ yuv2plane1_float_c_template(const int32_t *src, float *dest, int dstW)
     for (i = 0; i < dstW; ++i){
         val = src[i] + (1 << (shift - 1));
         output_pixel(&val_uint, val, 0, uint);
-        dest[i] = float_mult * (float)val_uint;
+        dest[i * stride] = float_mult * (float)val_uint;
     }
 }

 static av_always_inline void
-yuv2plane1_float_bswap_c_template(const int32_t *src, uint32_t *dest, int dstW)
+yuv2plane1_float_bswap_c_template(const int32_t *src, uint32_t *dest, int dstW,
+                                  ptrdiff_t stride)
 {
     static const int big_endian = HAVE_BIGENDIAN;
     static const int shift = 3;
@@ -244,7 +246,7 @@ yuv2plane1_float_bswap_c_template(const int32_t *src, uint32_t *dest, int dstW)
     for (i = 0; i < dstW; ++i){
         val = src[i] + (1 << (shift - 1));
         output_pixel(&val_uint, val, 0, uint);
-        dest[i] = av_bswap32(av_float2int(float_mult * (float)val_uint));
+        dest[i * stride] = av_bswap32(av_float2int(float_mult * (float)val_uint));
     }
 }

@@ -292,7 +294,7 @@ yuv2planeX_float_bswap_c_template(const int16_t *filter, int filterSize, const i
 static void yuv2plane1_float ## BE_LE ## _c(const int16_t *src, uint8_t *dest, int dstW, \
                                             const uint8_t *dither, int offset) \
 { \
-    template((const int32_t *)src, (dest_type *)dest, dstW); \
+    template((const int32_t *)src, (dest_type *)dest, dstW, 1); \
 }

 #define yuv2planeX_float(template, dest_type, BE_LE) \
@@ -303,6 +305,28 @@ static void yuv2planeX_float ## BE_LE ## _c(const int16_t *filter, int filterSiz
     template(filter, filterSize, (const int32_t **)src, (dest_type *)dest, dstW, 1); \
 }

+#define yuv2yaf32_1(template, dest_type, BE_LE, is_be) \
+static void yuv2yaf32 ## BE_LE ## _1_c(SwsInternal *c, const int16_t *lumSrc, \
+                                       const int16_t *chrUSrc[2], \
+                                       const int16_t *chrVSrc[2], \
+                                       const int16_t *alpSrc, uint8_t *dest, \
+                                       int dstW, int uvalpha, int y) \
+{ \
+    dest_type *dst = (dest_type *) dest; \
+    template((const int32_t *)lumSrc, dst, dstW, 2); \
+    if (alpSrc) { \
+        template((const int32_t *)alpSrc, dst + 1, dstW, 2); \
+    } else { \
+        for (int i = 0; i < dstW; i++) { \
+            if (is_be) { \
+                AV_WB32(&dst[2 * i + 1], av_float2int(1.0f)); \
+            } else { \
+                AV_WL32(&dst[2 * i + 1], av_float2int(1.0f)); \
+            } \
+        } \
+    } \
+}
+
 #define yuv2yaf32_X(template, dest_type, BE_LE, is_be) \
 static void yuv2yaf32 ## BE_LE ## _X_c(SwsInternal *c, const int16_t *lumFilter, \
                                        const int16_t **lumSrc, int lumFilterSize, \
@@ -332,6 +356,8 @@ yuv2plane1_float(yuv2plane1_float_c_template,       float,    BE)
 yuv2plane1_float(yuv2plane1_float_bswap_c_template, uint32_t, LE)
 yuv2planeX_float(yuv2planeX_float_c_template,       float,    BE)
 yuv2planeX_float(yuv2planeX_float_bswap_c_template, uint32_t, LE)
+yuv2yaf32_1(yuv2plane1_float_c_template,            float,    be, 1)
+yuv2yaf32_1(yuv2plane1_float_bswap_c_template,      uint32_t, le, 0)
 yuv2yaf32_X(yuv2planeX_float_c_template,            float,    be, 1)
 yuv2yaf32_X(yuv2planeX_float_bswap_c_template,      uint32_t, le, 0)
 #else
@@ -339,6 +365,8 @@ yuv2plane1_float(yuv2plane1_float_c_template,       float,    LE)
 yuv2plane1_float(yuv2plane1_float_bswap_c_template, uint32_t, BE)
 yuv2planeX_float(yuv2planeX_float_c_template,       float,    LE)
 yuv2planeX_float(yuv2planeX_float_bswap_c_template, uint32_t, BE)
+yuv2yaf32_1(yuv2plane1_float_c_template,            float,    le, 0)
+yuv2yaf32_1(yuv2plane1_float_bswap_c_template,      uint32_t, be, 1)
 yuv2yaf32_X(yuv2planeX_float_c_template,            float,    le, 0)
 yuv2yaf32_X(yuv2planeX_float_bswap_c_template,      uint32_t, be, 1)
 #endif
@@ -3865,9 +3893,11 @@ av_cold void ff_sws_init_output_funcs(SwsInternal *c,
         *yuv2packedX = yuv2ya16be_X_c;
         break;
     case AV_PIX_FMT_YAF32LE:
+        *yuv2packed1 = yuv2yaf32le_1_c;
         *yuv2packedX = yuv2yaf32le_X_c;
         break;
     case AV_PIX_FMT_YAF32BE:
+        *yuv2packed1 = yuv2yaf32be_1_c;
         *yuv2packedX = yuv2yaf32be_X_c;
         break;
     case AV_PIX_FMT_V30XLE: