This is an automated email from the git hooks/post-receive script. Git pushed a commit to branch master in repository ffmpeg.
commit ac611d31209bf351bc510ba7cbb9a238649fdcff Author: Lynne <[email protected]> AuthorDate: Sun May 31 01:03:54 2026 +0900 Commit: Lynne <[email protected]> CommitDate: Sun May 31 01:14:08 2026 +0900 swscale/tests/swscale: check if formats require the legacy path with -hw The issue is the legacy path does not support hardware frames, so falling back means erroring with ENOTSUP, which would fail the tests. Sponsored-by: Sovereign Tech Fund --- libswscale/tests/swscale.c | 40 +++++++++++++++++++++++++++++++++++++++- 1 file changed, 39 insertions(+), 1 deletion(-) diff --git a/libswscale/tests/swscale.c b/libswscale/tests/swscale.c index 868fc6e1f1..a6a034c420 100644 --- a/libswscale/tests/swscale.c +++ b/libswscale/tests/swscale.c @@ -27,6 +27,7 @@ #include <signal.h> #undef HAVE_AV_CONFIG_H +#include "config.h" #include "libavutil/cpu.h" #include "libavutil/parseutils.h" #include "libavutil/pixdesc.h" @@ -41,6 +42,10 @@ #include "libavutil/hwcontext.h" #include "libswscale/swscale.h" +#include "libswscale/format.h" +#if CONFIG_UNSTABLE +#include "libswscale/ops.h" +#endif struct options { enum AVPixelFormat src_fmt; @@ -225,7 +230,7 @@ static void unref_buffers(AVFrame *frame) static int checked_sws_scale_frame(SwsContext *c, AVFrame *dst, const AVFrame *src) { int ret = sws_scale_frame(c, dst, src); - if (ret < 0) { + if (ret < 0 && ret != AVERROR(ENOTSUP)) { av_log(NULL, AV_LOG_ERROR, "Failed %s ---> %s\n", av_get_pix_fmt_name(src->format), av_get_pix_fmt_name(dst->format)); } @@ -641,6 +646,37 @@ static inline int fmt_is_subsampled(enum AVPixelFormat fmt) av_pix_fmt_desc_get(fmt)->log2_chroma_h != 0; } +/* Returns 1 if the (src_fmt, dst_fmt) pair can be expressed by the new + * swscale ops infrastructure, 0 if it would fall back to the legacy path. + * Used to skip pairs that cannot run on hardware frames. */ +static int hw_pair_supported(enum AVPixelFormat src_fmt, enum AVPixelFormat dst_fmt) +{ +#if CONFIG_UNSTABLE + SwsContext *ctx; + SwsFormat src, dst; + SwsOpList *ops = NULL; + bool incomplete = false; + int ret; + + ctx = sws_alloc_context(); + if (!ctx) + return 0; + + ff_fmt_from_pixfmt(src_fmt, &src); + src.width = src.height = 96; + ff_fmt_from_pixfmt(dst_fmt, &dst); + dst.width = dst.height = 96; + ff_infer_colors(&src.color, &dst.color); + + ret = ff_sws_op_list_generate(ctx, &src, &dst, &ops, &incomplete); + ff_sws_op_list_free(&ops); + sws_free_context(&ctx); + return ret >= 0; +#else + return 1; +#endif +} + static inline int fmt_is_supported_by_hw(enum AVPixelFormat fmt) { if (!hw_device_constr) @@ -693,6 +729,8 @@ static int run_self_tests(const AVFrame *ref, const struct options *opts) continue; if (!sws_test_format(dst_fmt, 0) || !sws_test_format(dst_fmt, 1)) continue; + if (hw_device_ctx && !hw_pair_supported(src_fmt, dst_fmt)) + continue; for (int h = 0; h < FF_ARRAY_ELEMS(dst_h); h++) { for (int w = 0; w < FF_ARRAY_ELEMS(dst_w); w++) { for (int f = 0; f < FF_ARRAY_ELEMS(flags); f++) { _______________________________________________ ffmpeg-cvslog mailing list -- [email protected] To unsubscribe send an email to [email protected]
