Commit 366b9ab690 for ffmpeg

commit 366b9ab690ac0e4f22abaf50a9a47698101f9304
Author: Niklas Haas <git@haasn.dev>
Date:   Thu Oct 22 11:43:23 2026 +0200

    swscale/uops_macros_gen: share uop param printing between variants

    Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
    Signed-off-by: Niklas Haas <git@haasn.dev>

diff --git a/libswscale/uops_macros_gen.c b/libswscale/uops_macros_gen.c
index 888d159229..bd83bb1df3 100644
--- a/libswscale/uops_macros_gen.c
+++ b/libswscale/uops_macros_gen.c
@@ -16,6 +16,7 @@
  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
  */

+#include <stdbool.h>
 #include <string.h>

 #ifdef _WIN32
@@ -56,74 +57,81 @@ static const struct {
     [SWS_PIXEL_F32]  = { "SWS_PIXEL_F32",  "F32_" },
 };

-static int generate_entry_struct(void *opaque, void *key)
+/* Print uop params either as C struct designators, or as plain values */
+static void print_params(AVBPrint *bp, const SwsUOp *uop, bool designated)
 {
-    const SwsUOp *ref = opaque;
-    const SwsUOp *uop = key;
-    AVBPrint *bp = ref->data.opaque;
-    char name[SWS_UOP_NAME_MAX];
-    ff_sws_uop_name(uop, name);
-    av_bprintf(bp, " \\\n    MACRO(__VA_ARGS__, %-40s", name);
-    av_bprintf(bp, ", .type = %-13s, .uop = %-24s, .mask = 0x%x",
-               pixel_types[uop->type].full, uop_names[uop->uop].full, uop->mask);
+#define FMT(FIELD, VALUE, ...)     av_bprintf(bp, designated ? ", ." FIELD " = " VALUE      : ", " VALUE, __VA_ARGS__)
+#define FMT_SUB(FIELD, VALUE, ...) av_bprintf(bp, designated ? ", ." FIELD " = {" VALUE "}" : ", " VALUE, __VA_ARGS__)

     const SwsUOpParams *par = &uop->par;
     switch (uop->uop) {
     case SWS_UOP_READ_PLANAR_FH:
     case SWS_UOP_READ_PLANAR_FV:
     case SWS_UOP_READ_PLANAR_FV_FMA:
-        av_bprintf(bp, ", .par.filter.type = %s", pixel_types[par->filter.type].full);
+        FMT("par.filter.type", "%s", pixel_types[par->filter.type].full);
         break;
     case SWS_UOP_RW_SHUFFLE:
-        av_bprintf(bp, ", .par.shuffle.clear_value = 0x%x"
-                       ", .par.shuffle.read_size = %u"
-                       ", .par.shuffle.write_size = %u",
-                   par->shuffle.clear_value,
-                   par->shuffle.read_size, par->shuffle.write_size);
+        FMT("par.shuffle.clear_value", "0x%x", par->shuffle.clear_value);
+        FMT("par.shuffle.read_size",   "%u",   par->shuffle.read_size);
+        FMT("par.shuffle.write_size",  "%u",   par->shuffle.write_size);
         break;
     case SWS_UOP_LSHIFT:
     case SWS_UOP_RSHIFT:
-        av_bprintf(bp, ", .par.shift.amount = %u", par->shift.amount);
+        FMT("par.shift.amount", "%u", par->shift.amount);
         break;
     case SWS_UOP_PERMUTE:
     case SWS_UOP_COPY:
-        av_bprintf(bp, ", .par.move.num_moves = %d", par->move.num_moves);
-        av_bprintf(bp, ", .par.move.dst = {%d, %d, %d, %d, %d, %d}",
-                   par->move.dst[0], par->move.dst[1], par->move.dst[2],
-                   par->move.dst[3], par->move.dst[4], par->move.dst[5]);
-        av_bprintf(bp, ", .par.move.src = {%d, %d, %d, %d, %d, %d}",
-                   par->move.src[0], par->move.src[1], par->move.src[2],
-                   par->move.src[3], par->move.src[4], par->move.src[5]);
+        FMT("par.move.num_moves", "%d", par->move.num_moves);
+        FMT_SUB("par.move.dst", "%d, %d, %d, %d, %d, %d",
+                par->move.dst[0], par->move.dst[1], par->move.dst[2],
+                par->move.dst[3], par->move.dst[4], par->move.dst[5]);
+        FMT_SUB("par.move.src", "%d, %d, %d, %d, %d, %d",
+                par->move.src[0], par->move.src[1], par->move.src[2],
+                par->move.src[3], par->move.src[4], par->move.src[5]);
         break;
     case SWS_UOP_PACK:
     case SWS_UOP_UNPACK:
-        av_bprintf(bp, ", .par.pack.pattern = {%d, %d, %d, %d}",
-                   par->pack.pattern[0], par->pack.pattern[1],
-                   par->pack.pattern[2], par->pack.pattern[3]);
+        FMT_SUB("par.pack.pattern", "%d, %d, %d, %d",
+                par->pack.pattern[0], par->pack.pattern[1],
+                par->pack.pattern[2], par->pack.pattern[3]);
         break;
     case SWS_UOP_CLEAR:
-        av_bprintf(bp, ", .par.clear.one = 0x%05x, .par.clear.zero = 0x%05x",
-                   par->clear.one, par->clear.zero);
+        FMT("par.clear.one",  "0x%05x", par->clear.one);
+        FMT("par.clear.zero", "0x%05x", par->clear.zero);
         break;
     case SWS_UOP_LINEAR:
     case SWS_UOP_LINEAR_FMA:
-        av_bprintf(bp, ", .par.lin.one = 0x%05x, .par.lin.zero = 0x%05x",
-                   par->lin.one, par->lin.zero);
+        FMT("par.lin.one",  "0x%05x", par->lin.one);
+        FMT("par.lin.zero", "0x%05x", par->lin.zero);
         if (uop->uop == SWS_UOP_LINEAR_FMA)
-            av_bprintf(bp, ", .par.lin.exact = 0x%05x", par->lin.exact);
+            FMT("par.lin.exact", "0x%05x", par->lin.exact);
         break;
     case SWS_UOP_DITHER:
-        av_bprintf(bp, ", .par.dither.y_offset = {%u, %u, %u, %u}"
-                       ", .par.dither.size_log2 = %u",
-                   par->dither.y_offset[0], par->dither.y_offset[1],
-                   par->dither.y_offset[2], par->dither.y_offset[3],
-                   par->dither.size_log2);
+        FMT_SUB("par.dither.y_offset", "%u, %u, %u, %u",
+                par->dither.y_offset[0], par->dither.y_offset[1],
+                par->dither.y_offset[2], par->dither.y_offset[3]);
+        FMT("par.dither.size_log2", "%u", par->dither.size_log2);
         break;
     case SWS_UOP_LUT_3D:
-        av_bprintf(bp, ", .par.lut3d.dynamic = %d", par->lut3d.dynamic);
+        FMT("par.lut3d.dynamic", "%d", par->lut3d.dynamic);
         break;
     }

+#undef FMT
+#undef FMT_SUB
+}
+
+static int generate_entry_struct(void *opaque, void *key)
+{
+    const SwsUOp *ref = opaque;
+    const SwsUOp *uop = key;
+    AVBPrint *bp = ref->data.opaque;
+    char name[SWS_UOP_NAME_MAX];
+    ff_sws_uop_name(uop, name);
+    av_bprintf(bp, " \\\n    MACRO(__VA_ARGS__, %-40s", name);
+    av_bprintf(bp, ", .type = %-13s, .uop = %-24s, .mask = 0x%x",
+               pixel_types[uop->type].full, uop_names[uop->uop].full, uop->mask);
+    print_params(bp, uop, true);
     av_bprintf(bp, ")");
     return 0;
 }
@@ -137,58 +145,7 @@ static int generate_entry_args(void *opaque, void *key)
     ff_sws_uop_name(uop, name);
     av_bprintf(bp, " \\\n    MACRO(__VA_ARGS__, %-40s, %-13s, %-24s, 0x%x",
                name, pixel_types[uop->type].full, uop_names[uop->uop].full, uop->mask);
-
-    const SwsUOpParams *par = &uop->par;
-    switch (uop->uop) {
-    case SWS_UOP_READ_PLANAR_FH:
-    case SWS_UOP_READ_PLANAR_FV:
-    case SWS_UOP_READ_PLANAR_FV_FMA:
-        av_bprintf(bp, ", %s", pixel_types[par->filter.type].full);
-        break;
-    case SWS_UOP_RW_SHUFFLE:
-        av_bprintf(bp, ", 0x%x, %u, %u", par->shuffle.clear_value,
-                   par->shuffle.read_size, par->shuffle.write_size);
-        break;
-    case SWS_UOP_LSHIFT:
-    case SWS_UOP_RSHIFT:
-        av_bprintf(bp, ", %u", par->shift.amount);
-        break;
-    case SWS_UOP_PERMUTE:
-    case SWS_UOP_COPY:
-        av_bprintf(bp, ", %d", par->move.num_moves);
-        av_bprintf(bp, ", %d, %d, %d, %d, %d, %d",
-                   par->move.dst[0], par->move.dst[1], par->move.dst[2],
-                   par->move.dst[3], par->move.dst[4], par->move.dst[5]);
-        av_bprintf(bp, ", %d, %d, %d, %d, %d, %d",
-                   par->move.src[0], par->move.src[1], par->move.src[2],
-                   par->move.src[3], par->move.src[4], par->move.src[5]);
-        break;
-    case SWS_UOP_PACK:
-    case SWS_UOP_UNPACK:
-        av_bprintf(bp, ", %d, %d, %d, %d",
-                   par->pack.pattern[0], par->pack.pattern[1],
-                   par->pack.pattern[2], par->pack.pattern[3]);
-        break;
-    case SWS_UOP_CLEAR:
-        av_bprintf(bp, ", 0x%05x, 0x%05x", par->clear.one, par->clear.zero);
-        break;
-    case SWS_UOP_LINEAR:
-    case SWS_UOP_LINEAR_FMA:
-        av_bprintf(bp, ", 0x%05x, 0x%05x", par->lin.one, par->lin.zero);
-        if (uop->uop == SWS_UOP_LINEAR_FMA)
-            av_bprintf(bp, ", 0x%05x", par->lin.exact);
-        break;
-    case SWS_UOP_DITHER:
-        av_bprintf(bp, ", %u, %u, %u, %u, %u",
-                   par->dither.y_offset[0], par->dither.y_offset[1],
-                   par->dither.y_offset[2], par->dither.y_offset[3],
-                   par->dither.size_log2);
-        break;
-    case SWS_UOP_LUT_3D:
-        av_bprintf(bp, ", %d", par->lut3d.dynamic);
-        break;
-    }
-
+    print_params(bp, uop, false);
     av_bprintf(bp, ")");
     return 0;
 }