This is an automated email from the git hooks/post-receive script.

Git pushed a commit to branch master
in repository ffmpeg.

commit 8ad7cc6ccd570898fe3b1df3a6817eacdc64fa8e
Author:     Niklas Haas <[email protected]>
AuthorDate: Sun May 17 13:20:37 2026 +0200
Commit:     Niklas Haas <[email protected]>
CommitDate: Tue Jun 9 01:11:01 2026 +0200

    swscale/tests/sws_ops: also print/test micro-op list
    
    Tests for changes or regressions in the generated micro-ops. This will be
    instrumental in my development of the micro-ops optimizer, and my plans to
    phase out some of the macro-op optimization passes in favor of doing those
    optimizations on the uop level instead.
    
     rgb24 16x16 -> rgb24 16x32:
       [ u8 +++X] SWS_OP_READ         : 3 elem(s) packed >> 0
         min: {0 0 0 _}, max: {255 255 255 _}
       [ u8 ...X] SWS_OP_FILTER_V     : 16 -> 32 bilinear (2 taps)
         min: {0 0 0 _}, max: {255 255 255 _}
       [f32 ...X] SWS_OP_DITHER       : 16x16 matrix + {0 3 2 -1}
         min: {1/512 1/512 1/512 _}, max: {255.998047 255.998047 255.998047 _}
       [f32 ...X] SWS_OP_MIN          : x <= {255 255 255 _}
         min: {1/512 1/512 1/512 _}, max: {255 255 255 _}
       [f32 +++X] SWS_OP_CONVERT      : f32 -> u8
         min: {0 0 0 _}, max: {255 255 255 _}
       [ u8 XXXX] SWS_OP_WRITE        : 3 elem(s) packed >> 0
         (X = unused, z = byteswapped, + = exact, 0 = zero)
      Retrying with split passes:
       [ u8 +++X] SWS_OP_READ         : 3 elem(s) packed >> 0
         min: {0 0 0 _}, max: {255 255 255 _}
       [ u8 XXXX] SWS_OP_WRITE        : 3 elem(s) planar >> 0
         (X = unused, z = byteswapped, + = exact, 0 = zero)
    + translated micro-ops:
    +    u8_read_packed_xyz
    +    u8_write_planar_xyz
      Sub-pass #1:
       [ u8 ...X] SWS_OP_READ         : 3 elem(s) planar >> 0 + 2 tap bilinear 
filter (V)
         min: {0 0 0 _}, max: {255 255 255 _}
       [f32 ...X] SWS_OP_DITHER       : 16x16 matrix + {0 3 2 -1}
         min: {1/512 1/512 1/512 _}, max: {255.998047 255.998047 255.998047 _}
       [f32 ...X] SWS_OP_MIN          : x <= {255 255 255 _}
         min: {1/512 1/512 1/512 _}, max: {255 255 255 _}
       [f32 +++X] SWS_OP_CONVERT      : f32 -> u8
         min: {0 0 0 _}, max: {255 255 255 _}
       [ u8 XXXX] SWS_OP_WRITE        : 3 elem(s) packed >> 0
         (X = unused, z = byteswapped, + = exact, 0 = zero)
    + translated micro-ops:
    +    u8_read_planar_fv_xyz
    +    f32_dither_xyz_0_3_2_16x16
    +    f32_min_xyz
    +    f32_to_u8_xyz
    +    u8_write_packed_xyz
    ...
    
    Signed-off-by: Niklas Haas <[email protected]>
---
 libswscale/tests/sws_ops.c  | 33 ++++++++++++++++++++++-----------
 tests/ref/fate/sws-ops-list |  2 +-
 2 files changed, 23 insertions(+), 12 deletions(-)

diff --git a/libswscale/tests/sws_ops.c b/libswscale/tests/sws_ops.c
index f3fe518e96..32fcece1b6 100644
--- a/libswscale/tests/sws_ops.c
+++ b/libswscale/tests/sws_ops.c
@@ -21,6 +21,7 @@
 #include "libavutil/pixdesc.h"
 #include "libswscale/ops.h"
 #include "libswscale/ops_dispatch.h"
+#include "libswscale/ops_internal.h"
 #include "libswscale/format.h"
 
 #ifdef _WIN32
@@ -36,24 +37,34 @@ static int print_ops(SwsContext *ctx, SwsOpList *ops, 
SwsCompiledOp *out)
         av_log(NULL, AV_LOG_INFO, " Sub-pass #%d:\n", pass_idx);
 
     ff_sws_op_list_print(NULL, AV_LOG_INFO, AV_LOG_INFO, ops);
-    *out = (SwsCompiledOp) {0}; /* dummy value, will be immediately freed */
 
-    bool has_filters = false;
-    for (int i = 0; i < ops->num_ops; i++) {
-        const SwsOp *op = &ops->ops[i];
-        if (op->op == SWS_OP_FILTER_H || op->op == SWS_OP_FILTER_V) {
-            has_filters = true;
-            break;
-        }
-    }
+    SwsUOpList *uops = ff_sws_uop_list_alloc();
+    if (!uops)
+        return AVERROR(ENOMEM);
 
-    if (has_filters) {
+    int ret = ff_sws_ops_translate(ops, uops);
+    if (ret == AVERROR(ENOTSUP)) {
         av_log(NULL, AV_LOG_INFO, " Retrying with split passes:\n");
-        return AVERROR(ENOTSUP);
+        goto fail;
+    } else if (ret < 0) {
+        av_log(NULL, AV_LOG_ERROR, "Error translating ops: %s\n", 
av_err2str(ret));
+        goto fail;
     }
 
+    av_log(NULL, AV_LOG_INFO, " translated micro-ops:\n");
+    for (int i = 0; i < uops->num_ops; i++) {
+        char name[SWS_UOP_NAME_MAX];
+        ff_sws_uop_name(&uops->ops[i], name);
+        av_log(NULL, AV_LOG_INFO, "    %s\n", name);
+    }
+
+    *out = (SwsCompiledOp) {0}; /* dummy value, will be immediately freed */
     pass_idx++;
     return 0;
+
+fail:
+    ff_sws_uop_list_free(&uops);
+    return ret;
 }
 
 /* Dummy backend that just prints all seen op lists */
diff --git a/tests/ref/fate/sws-ops-list b/tests/ref/fate/sws-ops-list
index 705b26e5cc..44b615a0c8 100644
--- a/tests/ref/fate/sws-ops-list
+++ b/tests/ref/fate/sws-ops-list
@@ -1 +1 @@
-09abbf1916b75341a4f9a643c8afb97f
+900da2b2c6276da01ae3f158d02abf0b

_______________________________________________
ffmpeg-cvslog mailing list -- [email protected]
To unsubscribe send an email to [email protected]

Reply via email to