PR #21283 opened by Ramiro Polla (ramiro)
URL: https://code.ffmpeg.org/FFmpeg/FFmpeg/pulls/21283
Patch URL: https://code.ffmpeg.org/FFmpeg/FFmpeg/pulls/21283.patch

This is helpful for debugging specific input/output combinations.


>From 040e15ca6b3af80332ee28a2afc31146b4f2c880 Mon Sep 17 00:00:00 2001
From: Ramiro Polla <[email protected]>
Date: Tue, 23 Dec 2025 17:18:19 +0100
Subject: [PATCH] swscale/tests/sws_ops: add optional -src and -dst parameters

---
 libswscale/tests/sws_ops.c | 47 ++++++++++++++++++++++++++++++++++++++
 1 file changed, 47 insertions(+)

diff --git a/libswscale/tests/sws_ops.c b/libswscale/tests/sws_ops.c
index 1c17cf24a0..69852fc1e0 100644
--- a/libswscale/tests/sws_ops.c
+++ b/libswscale/tests/sws_ops.c
@@ -76,12 +76,50 @@ static void log_stdout(void *avcl, int level, const char 
*fmt, va_list vl)
 
 int main(int argc, char **argv)
 {
+    enum AVPixelFormat src_fmt_min = 0;
+    enum AVPixelFormat dst_fmt_min = 0;
+    enum AVPixelFormat src_fmt_max = AV_PIX_FMT_NB - 1;
+    enum AVPixelFormat dst_fmt_max = AV_PIX_FMT_NB - 1;
     int ret = 1;
 
 #ifdef _WIN32
     _setmode(_fileno(stdout), _O_BINARY);
 #endif
 
+    for (int i = 1; i < argc; i += 2) {
+        if (!strcmp(argv[i], "-help") || !strcmp(argv[i], "--help")) {
+            fprintf(stderr,
+                    "sws_ops [options...]\n"
+                    "   -help\n"
+                    "       This text\n"
+                    "   -dst <pixfmt>\n"
+                    "       Only test the specified destination pixel format\n"
+                    "   -src <pixfmt>\n"
+                    "       Only test the specified source pixel format\n"
+            );
+            return 0;
+        }
+        if (argv[i][0] != '-' || i + 1 == argc)
+            goto bad_option;
+        if (!strcmp(argv[i], "-src")) {
+            src_fmt_min = src_fmt_max = av_get_pix_fmt(argv[i + 1]);
+            if (src_fmt_min == AV_PIX_FMT_NONE) {
+                fprintf(stderr, "invalid pixel format %s\n", argv[i + 1]);
+                goto error;
+            }
+        } else if (!strcmp(argv[i], "-dst")) {
+            dst_fmt_min = dst_fmt_max = av_get_pix_fmt(argv[i + 1]);
+            if (dst_fmt_min == AV_PIX_FMT_NONE) {
+                fprintf(stderr, "invalid pixel format %s\n", argv[i + 1]);
+                goto error;
+            }
+        } else {
+bad_option:
+            fprintf(stderr, "bad option or argument missing (%s) see -help\n", 
argv[i]);
+            goto error;
+        }
+    }
+
     SwsContext *ctx = sws_alloc_context();
     AVFrame *frame = av_frame_alloc();
     if (!ctx || !frame)
@@ -90,7 +128,13 @@ int main(int argc, char **argv)
 
     av_log_set_callback(log_stdout);
     for (const AVPixFmtDescriptor *src = NULL; (src = 
av_pix_fmt_desc_next(src));) {
+        enum AVPixelFormat src_fmt = av_pix_fmt_desc_get_id(src);
+        if (src_fmt < src_fmt_min || src_fmt > src_fmt_max)
+            continue;
         for (const AVPixFmtDescriptor *dst = NULL; (dst = 
av_pix_fmt_desc_next(dst));) {
+            enum AVPixelFormat dst_fmt = av_pix_fmt_desc_get_id(dst);
+            if (dst_fmt < dst_fmt_min || dst_fmt > dst_fmt_max)
+                continue;
             int err = run_test(ctx, frame, src, dst);
             if (err < 0)
                 goto fail;
@@ -102,4 +146,7 @@ fail:
     av_frame_free(&frame);
     sws_free_context(&ctx);
     return ret;
+
+error:
+    return AVERROR(EINVAL);
 }
-- 
2.49.1

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

Reply via email to