Commit d35c57874b for ffmpeg
commit d35c57874ba7240ccd4fd17e7e83f4672e69e680
Author: Ramiro Polla <ramiro.polla@gmail.com>
Date: Thu Oct 29 18:09:47 2026 +0100
Revert "swscale/swscale: Do not crash on floats"
This reverts commit d16a058dbc9974f5919da3315e8cb41f8e6102f0.
The crashes it addressed came from init_range_convert_constants() deriving
the range constants from a bit depth of 32. That had already been fixed at
the source by 8ab40ca984 ("swscale: fix gray -> grayf32 SIGFPE"), which
clamps the bit depth to 16 to match the 19-bit intermediates these outputs
use, and which was committed before this one.
Instead of fixing the computation, this commit disabled range conversion
for all 32-bit outputs. This had no effect while float gray outputs were
treated as limited range, but now that they are treated as full range, it
leaves limited range input unexpanded in the float output. With the clamp
in place, the 16-bit range converters handle these outputs correctly.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Signed-off-by: Ramiro Polla <ramiro.polla@gmail.com>
diff --git a/libswscale/swscale.c b/libswscale/swscale.c
index 05a59a5d33..a7715a79a9 100644
--- a/libswscale/swscale.c
+++ b/libswscale/swscale.c
@@ -653,7 +653,7 @@ av_cold void ff_sws_init_range_convert(SwsInternal *c)
{
c->lumConvertRange = NULL;
c->chrConvertRange = NULL;
- if (c->opts.src_range != c->opts.dst_range && !isAnyRGB(c->opts.dst_format) && c->dstBpc < 32) {
+ if (c->opts.src_range != c->opts.dst_range && !isAnyRGB(c->opts.dst_format)) {
init_range_convert_constants(c);
if (c->dstBpc <= 14) {
if (c->opts.src_range) {
diff --git a/tests/ref/fate/filter-pixdesc-grayf32be b/tests/ref/fate/filter-pixdesc-grayf32be
index 171475483a..2f870674f5 100644
--- a/tests/ref/fate/filter-pixdesc-grayf32be
+++ b/tests/ref/fate/filter-pixdesc-grayf32be
@@ -1 +1 @@
-pixdesc-grayf32be 9b23c74e8e8ffae5d7c7e82bbf5929da
+pixdesc-grayf32be f271715b20c9d6eb1315f0a47f0b0e5d
diff --git a/tests/ref/fate/filter-pixdesc-grayf32le b/tests/ref/fate/filter-pixdesc-grayf32le
index d598d123b4..2a2b6522f9 100644
--- a/tests/ref/fate/filter-pixdesc-grayf32le
+++ b/tests/ref/fate/filter-pixdesc-grayf32le
@@ -1 +1 @@
-pixdesc-grayf32le 291f074a24c44799a1f437d1c55556f1
+pixdesc-grayf32le e611536308fa5f74e64dbf30c4d8513f
diff --git a/tests/ref/fate/filter-pixfmts-copy b/tests/ref/fate/filter-pixfmts-copy
index 15e4aee8cf..25e8a6c586 100644
--- a/tests/ref/fate/filter-pixfmts-copy
+++ b/tests/ref/fate/filter-pixfmts-copy
@@ -59,8 +59,8 @@ gray16be 5b71eb9a890a3c52210512b9622231eb
gray16le 7d159a5c1735ffe4ebd01f84ffffa2d7
gray9be 2bcfb9b929ed9fa0ed4577ed0500a7eb
gray9le 0171e3a1dfa892fb881207d43ae54997
-grayf32be f3bf178835f8146aa09d1da94bba4d8a
-grayf32le fb6ea85bfbc8cd21c51fc0e110197294
+grayf32be 1bbc4ae0407753553e802c5a740d62e6
+grayf32le 6982b2fd5319bcbcb185d1aa08ec8eae
monob 8b04f859fee6a0be856be184acd7a0b5
monow 54d16d2c01abfd72ecdb5e51e283937c
nv12 8e24feb2c544dc26a20047a71e4c27aa
diff --git a/tests/ref/fate/filter-pixfmts-crop b/tests/ref/fate/filter-pixfmts-crop
index 09e0a1e9ea..53b74ffbfb 100644
--- a/tests/ref/fate/filter-pixfmts-crop
+++ b/tests/ref/fate/filter-pixfmts-crop
@@ -59,8 +59,8 @@ gray16be 9a87fd9facebf9858b61e2996a701a75
gray16le 8b23f96b32c91654f5d8698372c4fc6a
gray9be 77a834b1795d540074a64d9fb6452b91
gray9le 1ef37496619ba80bfb870da6573178e6
-grayf32be cf40ec06a8abe54852b7f85a00549eec
-grayf32le b672526c9da9c8959ab881f242f6890a
+grayf32be 6a702a8e026b81692cda21b5704391d0
+grayf32le e80eaddbf234d6cbe9bad1692b778eaa
nv12 92cda427f794374731ec0321ee00caac
nv16 3264b16aaae554c21f052102b491c13b
nv20be a69262f462f71973860ab08f2789ee6b
diff --git a/tests/ref/fate/filter-pixfmts-field b/tests/ref/fate/filter-pixfmts-field
index 8ed99eb575..9f30c63648 100644
--- a/tests/ref/fate/filter-pixfmts-field
+++ b/tests/ref/fate/filter-pixfmts-field
@@ -59,8 +59,8 @@ gray16be 3f9a4ee6683542a840a8767c4da2158a
gray16le b258756e59051a2d0a51905df56d1c69
gray9be 2cf4a1297d5231917669df224712b582
gray9le 46c9cc0de8525d36ed6052afa70de6c3
-grayf32be 72fbfa47b2863658a8a80d588f23b3e7
-grayf32le 6b856bdbf2a2bfcd2bc7d50f109daaf0
+grayf32be 6c4c5e8a8c132ef8687bf8fa474c489a
+grayf32le 4e9a3ed7c56218fc1df60aaeb3cf7a7e
monob 2129cc72a484d7e10a44de9117aa9f80
monow 03d783611d265cae78293f88ea126ea1
nv12 16f7a46708ef25ebd0b72e47920cc11e
diff --git a/tests/ref/fate/filter-pixfmts-fieldorder b/tests/ref/fate/filter-pixfmts-fieldorder
index 3a0e28db5d..2245eebc9e 100644
--- a/tests/ref/fate/filter-pixfmts-fieldorder
+++ b/tests/ref/fate/filter-pixfmts-fieldorder
@@ -59,8 +59,8 @@ gray16be 507d141b00748b23457ae5c61c4ca548
gray16le d4327602da9343272ecb7ca5e9b43129
gray9be 2bf69a7bae4954221d9f7f18cd5bb390
gray9le c45eb848ab86f63f30ceb7206fb41be9
-grayf32be 1aa7960131f880c54fe3c77f13448674
-grayf32le 4029ac9d197f255794c1b9e416520fc7
+grayf32be c68bf0d74437d70a8d238bbf895b1dca
+grayf32le d0c1066d3750739b433f5fbb218f53e7
nv16 085deb984ab986eb5cc961fe265e30c0
nv20be 16998bc4aa2bfa3255d115a0a19ad80e
nv20le c8bd359ec00903dd2b5526b4d8ecb09f
diff --git a/tests/ref/fate/filter-pixfmts-hflip b/tests/ref/fate/filter-pixfmts-hflip
index caa817caee..cfa86f776c 100644
--- a/tests/ref/fate/filter-pixfmts-hflip
+++ b/tests/ref/fate/filter-pixfmts-hflip
@@ -59,8 +59,8 @@ gray16be 20fc0cc0894d2fca3d86dcdea47acc90
gray16le 50b8a0225c2866e7b16c56cb58efdf48
gray9be 7747115e0cb893bd62ddba43c2009cb7
gray9le f5a7332cb42857a87290f87b1ddbbc0e
-grayf32be a69add7bbf892a71fe81b3b75982dbe2
-grayf32le 4563e176a35dc8a8a07e0829fad5eb88
+grayf32be 47b748257f49e6a0b28a5564addaff0f
+grayf32le a965138bc51c3a4f8a9134631c34a355
nv12 801e58f1be5fd0b5bc4bf007c604b0b4
nv16 06ba714cb8b220c203f5898ef39abf93
nv20be 979181e11f7bb74ad2d891daeebb7649
diff --git a/tests/ref/fate/filter-pixfmts-il b/tests/ref/fate/filter-pixfmts-il
index 71ca6160a6..dde63f7dd6 100644
--- a/tests/ref/fate/filter-pixfmts-il
+++ b/tests/ref/fate/filter-pixfmts-il
@@ -59,8 +59,8 @@ gray16be 06703c79bc5f2a19649ffd5920898174
gray16le 288f58021aa00237ebbf2b399ad19756
gray9be 1e398c2af40ea86f0db4998793e7a633
gray9le 43029010dad140bf06d71d5811dc3049
-grayf32be f36197c9e2ef5c50a995e980c1a37203
-grayf32le 8bf3d295c3ffd53da0e06d0702e7c1ca
+grayf32be 89d482c3b638875f79e20899a5176535
+grayf32le a30835dd8e98166a018bd68c754e440d
monob faba75df28033ba7ce3d82ff2a99ee68
monow 6e9cfb8d3a344c5f0c3e1d5e1297e580
nv12 3c3ba9b1b4c4dfff09c26f71b51dd146
diff --git a/tests/ref/fate/filter-pixfmts-null b/tests/ref/fate/filter-pixfmts-null
index 15e4aee8cf..25e8a6c586 100644
--- a/tests/ref/fate/filter-pixfmts-null
+++ b/tests/ref/fate/filter-pixfmts-null
@@ -59,8 +59,8 @@ gray16be 5b71eb9a890a3c52210512b9622231eb
gray16le 7d159a5c1735ffe4ebd01f84ffffa2d7
gray9be 2bcfb9b929ed9fa0ed4577ed0500a7eb
gray9le 0171e3a1dfa892fb881207d43ae54997
-grayf32be f3bf178835f8146aa09d1da94bba4d8a
-grayf32le fb6ea85bfbc8cd21c51fc0e110197294
+grayf32be 1bbc4ae0407753553e802c5a740d62e6
+grayf32le 6982b2fd5319bcbcb185d1aa08ec8eae
monob 8b04f859fee6a0be856be184acd7a0b5
monow 54d16d2c01abfd72ecdb5e51e283937c
nv12 8e24feb2c544dc26a20047a71e4c27aa
diff --git a/tests/ref/fate/filter-pixfmts-scale b/tests/ref/fate/filter-pixfmts-scale
index cf36267658..d6ea9496d3 100644
--- a/tests/ref/fate/filter-pixfmts-scale
+++ b/tests/ref/fate/filter-pixfmts-scale
@@ -59,8 +59,8 @@ gray16be 4be62cba0e89e8121fcfe257b8fd270f
gray16le 74dac11c70aa42e7b782dba73cd8855d
gray9be 82586e4dd7c141493dd445c900a7bdcb
gray9le 787f5c48ad9008636ba78de2cade71e1
-grayf32be 5e4c715519f53c15f1345df90481e5f5
-grayf32le 2ff1b84023e820307b1ba7a9550115bc
+grayf32be 5f41ae12f606c85b99772ce89606dbbd
+grayf32le fbb4010a4fce44c8b133556410162017
monob f01cb0b623357387827902d9d0963435
monow 35c68b86c226d6990b2dcb573a05ff6b
nv12 b118d24a3653fe66e5d9e079033aef79
diff --git a/tests/ref/fate/filter-pixfmts-transpose b/tests/ref/fate/filter-pixfmts-transpose
index bc3173c181..e4f8784178 100644
--- a/tests/ref/fate/filter-pixfmts-transpose
+++ b/tests/ref/fate/filter-pixfmts-transpose
@@ -59,8 +59,8 @@ gray16be 570c9f15778f767cd5cca8fb7908f119
gray16le b497d74284c38464e18cf5692c523a1c
gray9be 6ef99621245fcc00806e520a0a4419d4
gray9le 6bbd43b7d385b5c3e299bee18a88f9e2
-grayf32be 823288e1ec497bb1f22c070e502e5272
-grayf32le 6e9ec0e1cac3617f3041e681afd2c575
+grayf32be 6d9f450742f24d969dd935f943e52b74
+grayf32le e6188ebafd89996fb264d1f6da592f34
nv12 1965e3826144686748f2f6b516fca5ba
nv21 292adaf5271c5c8516b71640458c01f4
nv24 ea9de8b47faed722ee40182f89489beb
diff --git a/tests/ref/fate/filter-pixfmts-vflip b/tests/ref/fate/filter-pixfmts-vflip
index 87a1b268e8..8e6ea439b4 100644
--- a/tests/ref/fate/filter-pixfmts-vflip
+++ b/tests/ref/fate/filter-pixfmts-vflip
@@ -59,8 +59,8 @@ gray16be 483c6e570d97fbed9e51a61212910632
gray16le 65d76c53eef28ba6e74990760c57f98a
gray9be cd524d242f2ac6ea39ef4bb85c9691f3
gray9le 8a3264fc4192fcd9ca2008ca4782a451
-grayf32be c1ba5943a0d24d70e6a280f37e4f4593
-grayf32le 8e6c048a5b3b8b26d3a5ddfce255f3f6
+grayf32be 982544dfa8cfab9e0911cdf9fa652173
+grayf32le 41c495aeb4d2e2c8c8e36cc46f07097e
monob 7810c4857822ccfc844d78f5e803269a
monow 90a947bfcd5f2261e83b577f48ec57b1
nv12 261ebe585ae2aa4e70d39a10c1679294
diff --git a/tests/ref/lavf/grayf32be.pfm b/tests/ref/lavf/grayf32be.pfm
index 3ce4ad5133..c1999bb796 100644
--- a/tests/ref/lavf/grayf32be.pfm
+++ b/tests/ref/lavf/grayf32be.pfm
@@ -1,3 +1,3 @@
-d2c3a37f7bf52be25f3f56239b5fdd92 *tests/data/images/grayf32be.pfm/02.grayf32be.pfm
+e215d84196bccbb649e55954fd5423dc *tests/data/images/grayf32be.pfm/02.grayf32be.pfm
405524 tests/data/images/grayf32be.pfm/02.grayf32be.pfm
-tests/data/images/grayf32be.pfm/%02d.grayf32be.pfm CRC=0xe3fda443
+tests/data/images/grayf32be.pfm/%02d.grayf32be.pfm CRC=0x6e324f85
diff --git a/tests/ref/lavf/grayf32le.pfm b/tests/ref/lavf/grayf32le.pfm
index 3a883ad2ac..01a18ee72b 100644
--- a/tests/ref/lavf/grayf32le.pfm
+++ b/tests/ref/lavf/grayf32le.pfm
@@ -1,3 +1,3 @@
-ea7aad8650d06c7cc8c80cc57cbac672 *tests/data/images/grayf32le.pfm/02.grayf32le.pfm
+0dd9c6c475b28a91158acb316a493a93 *tests/data/images/grayf32le.pfm/02.grayf32le.pfm
405525 tests/data/images/grayf32le.pfm/02.grayf32le.pfm
-tests/data/images/grayf32le.pfm/%02d.grayf32le.pfm CRC=0x5443a443
+tests/data/images/grayf32le.pfm/%02d.grayf32le.pfm CRC=0x03714f85
diff --git a/tests/ref/lavf/none.grayf32le.exr b/tests/ref/lavf/none.grayf32le.exr
index 9db5bb78ef..54dc59e952 100644
--- a/tests/ref/lavf/none.grayf32le.exr
+++ b/tests/ref/lavf/none.grayf32le.exr
@@ -1 +1 @@
-tests/data/images/none.grayf32le.exr/%02d.none.grayf32le.exr CRC=0x5443a443
+tests/data/images/none.grayf32le.exr/%02d.none.grayf32le.exr CRC=0x03714f85
diff --git a/tests/ref/lavf/rle.grayf32le.exr b/tests/ref/lavf/rle.grayf32le.exr
index 5f44e01937..5846dc77ae 100644
--- a/tests/ref/lavf/rle.grayf32le.exr
+++ b/tests/ref/lavf/rle.grayf32le.exr
@@ -1 +1 @@
-tests/data/images/rle.grayf32le.exr/%02d.rle.grayf32le.exr CRC=0x5443a443
+tests/data/images/rle.grayf32le.exr/%02d.rle.grayf32le.exr CRC=0x03714f85
diff --git a/tests/ref/lavf/zip1.grayf32le.exr b/tests/ref/lavf/zip1.grayf32le.exr
index c74f2aed4d..db601f45bc 100644
--- a/tests/ref/lavf/zip1.grayf32le.exr
+++ b/tests/ref/lavf/zip1.grayf32le.exr
@@ -1 +1 @@
-tests/data/images/zip1.grayf32le.exr/%02d.zip1.grayf32le.exr CRC=0x5443a443
+tests/data/images/zip1.grayf32le.exr/%02d.zip1.grayf32le.exr CRC=0x03714f85
diff --git a/tests/ref/lavf/zip16.grayf32le.exr b/tests/ref/lavf/zip16.grayf32le.exr
index 25cb361be7..c642e972d8 100644
--- a/tests/ref/lavf/zip16.grayf32le.exr
+++ b/tests/ref/lavf/zip16.grayf32le.exr
@@ -1 +1 @@
-tests/data/images/zip16.grayf32le.exr/%02d.zip16.grayf32le.exr CRC=0x5443a443
+tests/data/images/zip16.grayf32le.exr/%02d.zip16.grayf32le.exr CRC=0x03714f85