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 382284EF43 for ; Thu, 19 Feb 2026 22:36:12 +0000 (UTC) Authentication-Results: ffbox; dkim=fail (body hash mismatch (got b'cefCDd+zbeD0ktcHc31aOD/KE+ENk+hVP2Fj0ldGksg=', expected b'7EErDLUjeQ05d+mn24mGXHcZSzOe8WuSm//xIwRQHT8=')) 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=1771540561; 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=cefCDd+zbeD0ktcHc31aOD/KE+ENk+hVP2Fj0ldGksg=; b=4K/r8FvQCaHnuexK6nxETlR6sd/d5/SX7BuB6v6OkDpylt+D09fYpIawm9oOgMNTi7TiJ IfJ//tfcmqCATuNzCnx4tlQVCF8KgEnhVEV4KXthiHPI7F9Hn0VlmdwAIQSzrLXyjJWGNfV c/Qfjf5pUYYweBnbYVcVfOSxZu15D3ejsorL6rK7BPuRBmTP3M9NjKEZgjd4cIYR2jCIFNw 2D2TfGz7h5nsMfQdr1qQnrgAfGx/Gb/ISOiWtmkEz49Il6g12Z2InS9KwA1gip9SsPyJg0Q yHrb07Xvd6MIw6x5dpJHktQK5WRikTeQKQ9ccFKnfSvNYQZF6G0bXa6QxRSg== Received: from [172.18.0.3] (unknown [172.18.0.3]) by ffbox0-bg.ffmpeg.org (Postfix) with ESMTP id ABFE56912EA; Fri, 20 Feb 2026 00:36:01 +0200 (EET) ARC-Seal: i=1; cv=none; a=rsa-sha256; d=ffmpeg.org; s=arc; t=1771540542; b=CW5QWqEhrnE/pJWdmn0CMIA5KAydCesL0Bd4bMizCam1UaYFxMjd7DA/H0b4YLV0GvX6S 9JTeQ8II3pTTRA35v43msdpmM88E5ope0eItCpxPXKvtWE1TtQsvT1EM/aTeZhVLH2EUUk0 LYue0UN2VjOFDvniwgTmPsRZB039lOrrMxs8rWneGDPvnqF4fhBf5PD+LtANqScxZPP0Mrj 5Aqum/KOI47O/nqCEUBFG+Zw7bLbxSh3tbN6fkhPunBCIIKkKa6J5JTQ8Vm3PjfyvD55p8O YQoZYWMOnwG66GnfUDQSn6hi5YFSrBsWeuradZkzu6Cd2QctVTBNb8Fp+llQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=ffmpeg.org; s=arc; t=1771540542; 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=ZTXZqqlYVmiwqP284w5hh7WHjn1u1aOp1/vKZdYnkp0=; b=tPlbR2vMbIyjcPqujSH7qlWtfvcwcJEenl5fhE0ywutT+nGyKHmJRLWGFy7oIPblnX2hE Jn+BrQAiKy3X0Xwx+O60Pz9KP/MsJFScxdUsrg1aObN1eWlXx5FGdNCKeCqzpUNx+mNwFfR R8AaGx7kBsG2S0Tb6IZU9Icr1f+sVclAU+qCv96cGLB6jJsd/CEGzni1EVbPPZWQf+jvv3P UuR06STXlY50iIprIEtFSOQ1m0PjbSLLoZOkNyn3WjRy5N6KiT8SmCVi6kfyaytaBBc3yB3 l0V63GA2q3pGp6Z30Nlz9B4pCnii1CjJ0SN9H5wffm8JRsMCuT7SQm2hxUsA== 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=1771540534; h=content-type : mime-version : content-transfer-encoding : from : to : reply-to : subject : date : from; bh=7EErDLUjeQ05d+mn24mGXHcZSzOe8WuSm//xIwRQHT8=; b=1IxoNPsq1/A5eLj403ezcUDq4I3qHYsWmxFiI1qMnpqiNXtv5XhIoEhV6z7kpH0rLQYL1 aZtQYuhz6qdv3NCoMRwJ+eBazITAkuztrO3GD75XCmHF7zimZZ1n3ZAhn2MJXIqMqeNQM/i lSSUof6K43BcPHcGX9Kb6bt0v4f36y1DUy9/RUod/cMlEII9k7oQIRIrODXTO1c+hkL9Kug 8YktxCRK7tg+IIA1k9NZHLwlplxnkciSG1JMFjCavgPG4f4dy+hY91hYz2kiGT+ReKqowWh MFZQfgy+hqiSXPXTvHwzVmB7gl7/SSqNdn1XXOcGI8LUkQTQFZh3oOYihA3A== MIME-Version: 1.0 To: ffmpeg-devel@ffmpeg.org Date: Thu, 19 Feb 2026 22:35:34 -0000 Message-ID: <177154053510.25.18307075055184263403@29965ddac10e> Message-ID-Hash: QAOKACJHW5PJRS5LO33KSHBIAOWC2GGD X-Message-ID-Hash: QAOKACJHW5PJRS5LO33KSHBIAOWC2GGD 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] [PR] swscale/tests/sws_ops: print range values in the output (PR #21809) 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: Ramiro Polla via ffmpeg-devel Cc: Ramiro Polla Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Archived-At: List-Archive: List-Post: PR #21809 opened by Ramiro Polla (ramiro) URL: https://code.ffmpeg.org/FFmpeg/FFmpeg/pulls/21809 Patch URL: https://code.ffmpeg.org/FFmpeg/FFmpeg/pulls/21809.patch >>From 50f122947f9369500ebea64c3971c38f48c84d74 Mon Sep 17 00:00:00 2001 From: Ramiro Polla Date: Thu, 19 Feb 2026 22:54:32 +0100 Subject: [PATCH 1/4] swscale/tests/sws_ops: print range values in the output This gives more information about each operation and helps catch issues earlier on. Sponsored-by: Sovereign Tech Fund Signed-off-by: Ramiro Polla --- libswscale/tests/sws_ops.c | 7 ++++--- tests/ref/fate/sws-ops-list | 2 +- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/libswscale/tests/sws_ops.c b/libswscale/tests/sws_ops.c index bf84128291..bf3b2627f5 100644 --- a/libswscale/tests/sws_ops.c +++ b/libswscale/tests/sws_ops.c @@ -70,10 +70,11 @@ fail: static void log_stdout(void *avcl, int level, const char *fmt, va_list vl) { - if (level != AV_LOG_INFO) { - av_log_default_callback(avcl, level, fmt, vl); - } else { + if (level == AV_LOG_INFO || + (level == AV_LOG_TRACE && !strcmp(fmt, " min: {%s, %s, %s, %s}, max: {%s, %s, %s, %s}\n"))) { vfprintf(stdout, fmt, vl); + } else { + av_log_default_callback(avcl, level, fmt, vl); } } diff --git a/tests/ref/fate/sws-ops-list b/tests/ref/fate/sws-ops-list index af3cf2f4e9..aa97811bbe 100644 --- a/tests/ref/fate/sws-ops-list +++ b/tests/ref/fate/sws-ops-list @@ -1 +1 @@ -3505d38dc669faf6f14036516b6caf61 +2cf9d8a755726bc80f60ca9f4dc31380 -- 2.52.0 >>From d9c9d596ca2c041d8cf3e834501d8c2f3a567ca9 Mon Sep 17 00:00:00 2001 From: Ramiro Polla Date: Thu, 19 Feb 2026 22:59:29 +0100 Subject: [PATCH 2/4] swscale/format: print an underscore instead of nan for undefined range values This makes the output smaller and cleaner. Sponsored-by: Sovereign Tech Fund Signed-off-by: Ramiro Polla --- libswscale/ops.c | 12 ++++++++---- tests/ref/fate/sws-ops-list | 2 +- 2 files changed, 9 insertions(+), 5 deletions(-) diff --git a/libswscale/ops.c b/libswscale/ops.c index 900077584a..d0ef12f706 100644 --- a/libswscale/ops.c +++ b/libswscale/ops.c @@ -805,10 +805,14 @@ void ff_sws_op_list_print(void *log, int lev, const SwsOpList *ops) op->comps.max[2].den || op->comps.max[3].den) { av_log(log, AV_LOG_TRACE, " min: {%s, %s, %s, %s}, max: {%s, %s, %s, %s}\n", - PRINTQ(op->comps.min[0]), PRINTQ(op->comps.min[1]), - PRINTQ(op->comps.min[2]), PRINTQ(op->comps.min[3]), - PRINTQ(op->comps.max[0]), PRINTQ(op->comps.max[1]), - PRINTQ(op->comps.max[2]), PRINTQ(op->comps.max[3])); + op->comps.min[0].den ? PRINTQ(op->comps.min[0]) : "_", + op->comps.min[1].den ? PRINTQ(op->comps.min[1]) : "_", + op->comps.min[2].den ? PRINTQ(op->comps.min[2]) : "_", + op->comps.min[3].den ? PRINTQ(op->comps.min[3]) : "_", + op->comps.max[0].den ? PRINTQ(op->comps.max[0]) : "_", + op->comps.max[1].den ? PRINTQ(op->comps.max[1]) : "_", + op->comps.max[2].den ? PRINTQ(op->comps.max[2]) : "_", + op->comps.max[3].den ? PRINTQ(op->comps.max[3]) : "_"); } } diff --git a/tests/ref/fate/sws-ops-list b/tests/ref/fate/sws-ops-list index aa97811bbe..5e6bc18060 100644 --- a/tests/ref/fate/sws-ops-list +++ b/tests/ref/fate/sws-ops-list @@ -1 +1 @@ -2cf9d8a755726bc80f60ca9f4dc31380 +ff9217864eb50375b74de8671815348f -- 2.52.0 >>From afddc033bceacb3b13cc050e5afae6d18292e5bf Mon Sep 17 00:00:00 2001 From: Ramiro Polla Date: Thu, 19 Feb 2026 23:11:08 +0100 Subject: [PATCH 3/4] swscale/ops: clear unused components after each op update Instead of leaving it up to each case to clear it. Sponsored-by: Sovereign Tech Fund Signed-off-by: Ramiro Polla --- libswscale/ops.c | 18 +++++++++++------- libswscale/ops_optimizer.c | 1 - tests/ref/fate/sws-ops-list | 2 +- 3 files changed, 12 insertions(+), 9 deletions(-) diff --git a/libswscale/ops.c b/libswscale/ops.c index d0ef12f706..9d5ce08c9d 100644 --- a/libswscale/ops.c +++ b/libswscale/ops.c @@ -216,9 +216,7 @@ void ff_sws_apply_op_q(const SwsOp *op, AVRational x[4]) static const unsigned flags_identity = SWS_COMP_ZERO | SWS_COMP_EXACT; static unsigned merge_comp_flags(unsigned a, unsigned b) { - const unsigned flags_or = SWS_COMP_GARBAGE; - const unsigned flags_and = SWS_COMP_ZERO | SWS_COMP_EXACT; - return ((a & b) & flags_and) | ((a | b) & flags_or); + return ((a & b) & flags_identity); } /* Infer + propagate known information about components */ @@ -295,8 +293,7 @@ void ff_sws_op_list_update_comps(SwsOpList *ops) op->comps.flags[i] = prev.flags[0]; op->comps.min[i] = Q(0); op->comps.max[i] = Q((1ULL << pattern) - 1); - } else - op->comps.flags[i] = SWS_COMP_GARBAGE; + } } break; case SWS_OP_PACK: { @@ -304,8 +301,6 @@ void ff_sws_op_list_update_comps(SwsOpList *ops) for (int i = 0; i < 4; i++) { if (op->pack.pattern[i]) flags = merge_comp_flags(flags, prev.flags[i]); - if (i > 0) /* clear remaining comps for sanity */ - op->comps.flags[i] = SWS_COMP_GARBAGE; } op->comps.flags[0] = flags; break; @@ -451,6 +446,15 @@ void ff_sws_op_list_update_comps(SwsOpList *ops) break; } + /* Clear unused components */ + for (int i = (op->op == SWS_OP_WRITE) ? op->rw.elems : 0; i < 4; i++) { + if (next.unused[i]) { + op->comps.flags[i] = SWS_COMP_GARBAGE; + op->comps.min[i].den = 0; + op->comps.max[i].den = 0; + } + } + next = op->comps; } } diff --git a/libswscale/ops_optimizer.c b/libswscale/ops_optimizer.c index c8713352a1..204a4e9208 100644 --- a/libswscale/ops_optimizer.c +++ b/libswscale/ops_optimizer.c @@ -378,7 +378,6 @@ retry: continue; if ((prev->comps.flags[i] & SWS_COMP_ZERO) && - !(prev->comps.flags[i] & SWS_COMP_GARBAGE) && op->c.q4[i].num == 0) { /* Redundant clear-to-zero of zero component */ diff --git a/tests/ref/fate/sws-ops-list b/tests/ref/fate/sws-ops-list index 5e6bc18060..605d47ca66 100644 --- a/tests/ref/fate/sws-ops-list +++ b/tests/ref/fate/sws-ops-list @@ -1 +1 @@ -ff9217864eb50375b74de8671815348f +8bbe2820f5e57bfdd6b2de000e0f1c97 -- 2.52.0 >>From bbd03652056596f9564962fef659215495598afb Mon Sep 17 00:00:00 2001 From: Ramiro Polla Date: Thu, 19 Feb 2026 23:20:08 +0100 Subject: [PATCH 4/4] swscale/ops: clear range values SWS_OP_{MIN,MAX} Sponsored-by: Sovereign Tech Fund Signed-off-by: Ramiro Polla --- libswscale/ops.c | 26 +++++++++++++++++++++++--- tests/ref/fate/sws-ops-list | 2 +- 2 files changed, 24 insertions(+), 4 deletions(-) diff --git a/libswscale/ops.c b/libswscale/ops.c index 9d5ce08c9d..a472799962 100644 --- a/libswscale/ops.c +++ b/libswscale/ops.c @@ -219,6 +219,22 @@ static unsigned merge_comp_flags(unsigned a, unsigned b) return ((a & b) & flags_identity); } +/* Linearly propagate flags per component */ +static void propagate_flags(SwsOp *op, const SwsComps *prev) +{ + for (int i = 0; i < 4; i++) + op->comps.flags[i] = prev->flags[i]; +} + +/* Clear undefined values in dst with src */ +static void clear_undefined_values(AVRational dst[4], const AVRational src[4]) +{ + for (int i = 0; i < 4; i++) { + if (dst[i].den == 0) + dst[i] = src[i]; + } +} + /* Infer + propagate known information about components */ void ff_sws_op_list_update_comps(SwsOpList *ops) { @@ -274,11 +290,15 @@ void ff_sws_op_list_update_comps(SwsOpList *ops) /* fall through */ case SWS_OP_LSHIFT: case SWS_OP_RSHIFT: + propagate_flags(op, &prev); + break; case SWS_OP_MIN: + propagate_flags(op, &prev); + clear_undefined_values(op->comps.max, op->c.q4); + break; case SWS_OP_MAX: - /* Linearly propagate flags per component */ - for (int i = 0; i < 4; i++) - op->comps.flags[i] = prev.flags[i]; + propagate_flags(op, &prev); + clear_undefined_values(op->comps.min, op->c.q4); break; case SWS_OP_DITHER: /* Strip zero flag because of the nonzero dithering offset */ diff --git a/tests/ref/fate/sws-ops-list b/tests/ref/fate/sws-ops-list index 605d47ca66..b09e792005 100644 --- a/tests/ref/fate/sws-ops-list +++ b/tests/ref/fate/sws-ops-list @@ -1 +1 @@ -8bbe2820f5e57bfdd6b2de000e0f1c97 +2b5ba168f2ad1287718d73c1c234511a -- 2.52.0 _______________________________________________ ffmpeg-devel mailing list -- ffmpeg-devel@ffmpeg.org To unsubscribe send an email to ffmpeg-devel-leave@ffmpeg.org