From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from ffbox0-bg.ffmpeg.org (ffbox0-bg.ffmpeg.org [79.124.17.100]) by master.gitmailbox.com (Postfix) with ESMTPS id 03A194CF72 for ; Thu, 4 Dec 2025 18:50:25 +0000 (UTC) Authentication-Results: ffbox; dkim=fail (body hash mismatch (got b'/C/QKl7KfvY5Zjfek/jvHPdDu5pWtOdKcKhMTtgG64o=', expected b'Wf1M8U8qHpvxFYo8zy0AGN/0C73Vhs96wGwTNnsYNag=')) header.d=ffmpeg.org header.i=@ffmpeg.org header.a=rsa-sha256 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=ffmpeg.org; i=@ffmpeg.org; q=dns/txt; s=mail; t=1764874215; h=mime-version : to : date : message-id : reply-to : subject : list-id : list-archive : list-archive : list-help : list-owner : list-post : list-subscribe : list-unsubscribe : from : cc : content-type : content-transfer-encoding : from; bh=/C/QKl7KfvY5Zjfek/jvHPdDu5pWtOdKcKhMTtgG64o=; b=sV4YJfLmcsOd8R1hDMKYU5CzNiZJDI/hISiY4sN3iB3cdhuBNAOVwOQ+AUB8oxBeTLred bcw+X9XFliWQ0HhDzafByHDZQWxjPZ+vWcgZuzhEkOjM7ux9J93Ew+BBrPRcVgWo6756guC iGA/88FcFph/gBDFsVKE6cRTOrVxKn+HTXY6qFrkzX3OXX26EIJF8urTr3SjC+fFI993PMN mX3f1HDXjGTAj8PEALODPGCI0bK1EA9akQPj7AC/gvOLZ+6jVQYSi7hV0Ckgoqf1BagmhGY lMJrkwTNRojg2d5BGNg+jh8B7aQZ2mgAB12n8OiG7UNbKKw2kqdDfKUVh48A== Received: from [172.19.0.3] (unknown [172.19.0.3]) by ffbox0-bg.ffmpeg.org (Postfix) with ESMTP id E521D69057A; Thu, 4 Dec 2025 20:50:15 +0200 (EET) ARC-Seal: i=1; cv=none; a=rsa-sha256; d=ffmpeg.org; s=arc; t=1764874192; b=PR0LzkvMW0cMHLPdPRWldBEJCKJ5WEpe0fHc4V9q6ElCagYqQp27fIIp/6tA6GQED1gDE KaPRkY87j2wZuZ5dydrCYNId5H6n8BaYm5txKna1tLgjFdwgm7GjdVCn6uI7bAJ8rhJ/XQ/ g1ioocWUNLX8tvzmdiYZeP5FRsk5RRBqFSEkFu5DSXX60zhEUIO0724PdJ8b8AGKi1BQ/BN Jj6oYXsQKBqY630ZdjjqlTNc1932cUbgk1tOQ5mbfTyU4y5cxqUOYXtMGyf7HUreZdohx// RapyNAClcAiaAtISbjn9HmOehMgDdGGuI2ENnUYm0CvtVrxsoWI+WPagfS5Q== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=ffmpeg.org; s=arc; t=1764874192; h=from : sender : reply-to : subject : date : message-id : to : cc : mime-version : content-type : content-transfer-encoding : content-id : content-description : resent-date : resent-from : resent-sender : resent-to : resent-cc : resent-message-id : in-reply-to : references : list-id : list-help : list-unsubscribe : list-subscribe : list-post : list-owner : list-archive; bh=KGJT3HayFTmycfU+bWG4JdBFW0EI5GgGwMEsSMB5eFM=; b=fnT0V86Ud0TL/zLOXw7PhCdTdUSu2TTk2IvecbDjB3NSfAboMWFP9ScPm1Jy1DlCBWu2v 5KxYMEXJXOl4LSuS5MSen3L0q/URnefrGJJtqWksxip6FEBTAsg+63MsjAMT/MewwU8i/lP 1bkracDzE0twifhezFprGGyyRgIbkS7R+RHMsYOUIzgNtBCWLb+Oz71JeCbPxW0q6DIWcBL uLNAfhTxthzFH2VRTI+V/56kuK1ytlGAiFyOWYLMiBvsiLZjWgQtDo6rPpthxsQU4ElO8Jr jji/Xy03C5AFifVwL5uwC+04Qbz1BJHtgimr/FFF351BrjNdgD9gvAmSeybg== ARC-Authentication-Results: i=1; ffmpeg.org; dkim=pass header.d=ffmpeg.org header.i=@ffmpeg.org; arc=none; dmarc=pass header.from=ffmpeg.org policy.dmarc=quarantine Authentication-Results: ffmpeg.org; dkim=pass header.d=ffmpeg.org header.i=@ffmpeg.org; arc=none (Message is not ARC signed); dmarc=pass (Used From Domain Record) header.from=ffmpeg.org policy.dmarc=quarantine DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=ffmpeg.org; i=@ffmpeg.org; q=dns/txt; s=mail; t=1764874184; h=content-type : mime-version : content-transfer-encoding : from : to : reply-to : subject : date : from; bh=Wf1M8U8qHpvxFYo8zy0AGN/0C73Vhs96wGwTNnsYNag=; b=ymZzBCJIYkYGEBSUdHyajlUmHNJ21eSQ+E2ukTnRrzQ70nFvOX19FbA3QwNp7gkRiTbY6 U+b6j4SiORSUl1wHOxu/1j1IzPzS/491+bTVGP8sQ/4+OTRqStIU4ShfUPvGQdAJ4VfZomT ct9ED18qqisZabKFc43kbopfEJEDj+QXLaNePo6p9LExiX9Ce6P4YSTFuAPkXiwSX5Wlpon MwFB5UDTzZeTZCY4BT6dDL6NQJBY2i4V1rDNRy46VMsTKqsCvlAEyccoFVHK43hNEOiZTuK 9u5qzNwUyWai1uPc9M82bS1SmtK4JlDXdtj55VQ/sOiQyY4+GCzbxobNRGjA== Received: from 55ca25703178 (code.ffmpeg.org [188.245.149.3]) by ffbox0-bg.ffmpeg.org (Postfix) with ESMTPS id 610BE6904F7 for ; Thu, 4 Dec 2025 20:49:44 +0200 (EET) MIME-Version: 1.0 To: ffmpeg-devel@ffmpeg.org Date: Thu, 04 Dec 2025 18:49:44 -0000 Message-ID: <176487418459.39.5536138902218866174@2cb04c0e5124> Message-ID-Hash: 75SMKNHWTSJI7BAMHMODGO23YQVYJ2AU X-Message-ID-Hash: 75SMKNHWTSJI7BAMHMODGO23YQVYJ2AU X-MailFrom: code@ffmpeg.org X-Mailman-Rule-Hits: nonmember-moderation X-Mailman-Rule-Misses: dmarc-mitigation; no-senders; approved; loop; banned-address; header-match-ffmpeg-devel.ffmpeg.org-0; header-match-ffmpeg-devel.ffmpeg.org-1; header-match-ffmpeg-devel.ffmpeg.org-2; header-match-ffmpeg-devel.ffmpeg.org-3; emergency; member-moderation X-Mailman-Version: 3.3.10 Precedence: list Reply-To: FFmpeg development discussions and patches Subject: [FFmpeg-devel] [PATCH] Add new swscale operation list self-test (and fix a bug it uncovered) (PR #21104) List-Id: FFmpeg development discussions and patches Archived-At: Archived-At: List-Archive: List-Archive: List-Help: List-Owner: List-Post: List-Subscribe: List-Unsubscribe: From: Niklas Haas via ffmpeg-devel Cc: Niklas Haas Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Archived-At: List-Archive: List-Post: PR #21104 opened by Niklas Haas (haasn) URL: https://code.ffmpeg.org/FFmpeg/FFmpeg/pulls/21104 Patch URL: https://code.ffmpeg.org/FFmpeg/FFmpeg/pulls/21104.patch >>From 7bda21249c263dec6f615a1058d181b6169890f7 Mon Sep 17 00:00:00 2001 From: Niklas Haas Date: Thu, 4 Dec 2025 19:32:16 +0100 Subject: [PATCH 1/2] swscale/format: handle YA format swizzles more robustly This code was previously broken; since YAF32BE/LE were not included as part of the format enumeration. However, since we *always* know the correct swizzle for YA formats, we can just special-case this by the number of components instead. --- libswscale/format.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/libswscale/format.c b/libswscale/format.c index 2ae6d50523..5ac0418266 100644 --- a/libswscale/format.c +++ b/libswscale/format.c @@ -630,6 +630,10 @@ static SwsPixelType fmt_pixel_type(enum AVPixelFormat fmt) static SwsSwizzleOp fmt_swizzle(enum AVPixelFormat fmt) { + const AVPixFmtDescriptor *desc = av_pix_fmt_desc_get(fmt); + if (desc->nb_components == 2) /* YA formats */ + return (SwsSwizzleOp) {{ .x = 0, 3, 1, 2 }}; + switch (fmt) { case AV_PIX_FMT_ARGB: case AV_PIX_FMT_0RGB: @@ -663,10 +667,6 @@ static SwsSwizzleOp fmt_swizzle(enum AVPixelFormat fmt) case AV_PIX_FMT_X2BGR10LE: case AV_PIX_FMT_X2BGR10BE: return (SwsSwizzleOp) {{ .x = 3, 2, 1, 0 }}; - case AV_PIX_FMT_YA8: - case AV_PIX_FMT_YA16BE: - case AV_PIX_FMT_YA16LE: - return (SwsSwizzleOp) {{ .x = 0, 3, 1, 2 }}; case AV_PIX_FMT_XV30BE: case AV_PIX_FMT_XV30LE: return (SwsSwizzleOp) {{ .x = 3, 2, 0, 1 }}; -- 2.49.1 >>From 13648bed352d008d3d65dec58331702f17e41c7e Mon Sep 17 00:00:00 2001 From: Niklas Haas Date: Thu, 4 Dec 2025 19:25:51 +0100 Subject: [PATCH 2/2] swscale/tests: add new test for generated operation lists This is similar to swscale/tests/swscale.c, but significantly cheaper - it merely prints the generated (optimized) operation list for every format conversion. Mostly useful for my own purposes as a regression test when making changes to the ops optimizer. Note the distinction between this and tests/swscale.c, the latter of which tests the result of applying an operation list for equality, rather than the operation list itself. --- libswscale/Makefile | 1 + libswscale/tests/sws_ops.c | 99 ++++++++++++++++++++++++++++++++++++++ 2 files changed, 100 insertions(+) create mode 100644 libswscale/tests/sws_ops.c diff --git a/libswscale/Makefile b/libswscale/Makefile index a096ed331e..bde1144897 100644 --- a/libswscale/Makefile +++ b/libswscale/Makefile @@ -43,3 +43,4 @@ TESTPROGS = colorspace \ floatimg_cmp \ pixdesc_query \ swscale \ + sws_ops \ diff --git a/libswscale/tests/sws_ops.c b/libswscale/tests/sws_ops.c new file mode 100644 index 0000000000..536d0d3599 --- /dev/null +++ b/libswscale/tests/sws_ops.c @@ -0,0 +1,99 @@ +/* + * Copyright (C) 2025 Nikles Haas + * + * This file is part of FFmpeg. + * + * FFmpeg is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * FFmpeg is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with FFmpeg; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + */ + +#include "libavutil/pixdesc.h" +#include "libswscale/ops.h" +#include "libswscale/format.h" + +static int run_test(SwsContext *const ctx, + const AVPixFmtDescriptor *const src_desc, + const AVPixFmtDescriptor *const dst_desc) +{ + bool dummy; + + SwsFormat src = { + .format = av_pix_fmt_desc_get_id(src_desc), + .desc = src_desc, + }; + + SwsFormat dst = { + .format = av_pix_fmt_desc_get_id(dst_desc), + .desc = dst_desc, + }; + + ff_infer_colors(&src.color, &dst.color); + + SwsOpList *ops = ff_sws_op_list_alloc(); + if (!ops) + return AVERROR(ENOMEM); + + if (ff_sws_decode_pixfmt(ops, src.format) < 0) + goto fail; + if (ff_sws_decode_colors(ctx, SWS_PIXEL_F32, ops, src, &dummy) < 0) + goto fail; + if (ff_sws_encode_colors(ctx, SWS_PIXEL_F32, ops, dst, &dummy) < 0) + goto fail; + if (ff_sws_encode_pixfmt(ops, dst.format) < 0) + goto fail; + + av_log(NULL, AV_LOG_INFO, "%s -> %s:\n", + av_get_pix_fmt_name(src.format), av_get_pix_fmt_name(dst.format)); + + ff_sws_op_list_optimize(ops); + ff_sws_op_list_print(NULL, AV_LOG_INFO, ops); + +fail: + /* silently skip unsupported formats */ + ff_sws_op_list_free(&ops); + return 0; +} + +static void log_cb(void *avcl, int level, const char *fmt, va_list vl) +{ + if (level == AV_LOG_INFO) + vfprintf(stdout, fmt, vl); + else + av_log_default_callback(avcl, level, fmt, vl); +} + +int main(int argc, char **argv) +{ + SwsContext *ctx = sws_alloc_context(); + int ret = 1; + + av_log_set_callback(log_cb); + + for (const AVPixFmtDescriptor *src = av_pix_fmt_desc_next(NULL); + src; src = av_pix_fmt_desc_next(src)) + { + for (const AVPixFmtDescriptor *dst = av_pix_fmt_desc_next(NULL); + dst; dst = av_pix_fmt_desc_next(dst)) + { + int ret = run_test(ctx, src, dst); + if (ret < 0) + goto fail; + } + } + + ret = 0; +fail: + sws_free_context(&ctx); + return ret; +} -- 2.49.1 _______________________________________________ ffmpeg-devel mailing list -- ffmpeg-devel@ffmpeg.org To unsubscribe send an email to ffmpeg-devel-leave@ffmpeg.org