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

Includes !25757, which is being reviewed.


>From 3fd675f8fe7e067812a09be938615823dc1a8268 Mon Sep 17 00:00:00 2001
From: Ramiro Polla <[email protected]>
Date: Thu, 29 Oct 2026 19:43:15 +0100
Subject: [PATCH 1/8] avutil/pixfmt: document color range for floating point
 formats

The narrow and full range definitions only exist for integer
representations: H.273 (VideoFullRangeFlag), BT.709, BT.2020 and BT.2100
all specify them as equations on n-bit integer code values, and none of
them define range for floating point. Floating point samples hold the
normalized signal E directly, and may lie outside of its nominal range
(e.g. HDR highlights above 1.0, out-of-gamut colors below 0.0).

This matches other implementations: zimg applies pixel_range to integer
formats only, and VapourSynth uses fixed float bounds regardless of
_Range (Y in [0, 1], chroma centered on 0).

Since AVFrame and AVCodecContext still carry a range for these formats,
document that it should be set to AVCOL_RANGE_UNSPECIFIED, matching what
libavfilter already does for them, and that readers must treat it as
full range whatever its value, since some decoders tag these formats as
AVCOL_RANGE_JPEG.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
Signed-off-by: Ramiro Polla <[email protected]>
---
 libavcodec/avcodec.h | 5 +++++
 libavutil/frame.h    | 5 +++++
 libavutil/pixfmt.h   | 4 ++++
 3 files changed, 14 insertions(+)

diff --git a/libavcodec/avcodec.h b/libavcodec/avcodec.h
index bb654ec5a6f..de99df778d8 100644
--- a/libavcodec/avcodec.h
+++ b/libavcodec/avcodec.h
@@ -678,6 +678,11 @@ typedef struct AVCodecContext {
      *   output format.
      * - decoding: Set by libavcodec, can be set by the user to propagate the
      *   color range to components reading from the decoder context.
+     *
+     * @note Floating point pixel formats are always full range. For them,
+     *       this should be set to AVCOL_RANGE_UNSPECIFIED, and must be
+     *       treated as full range when reading, whatever its value. See
+     *       AVColorRange.
      */
     enum AVColorRange color_range;
 
diff --git a/libavutil/frame.h b/libavutil/frame.h
index 1fd296aa835..40a51294d6c 100644
--- a/libavutil/frame.h
+++ b/libavutil/frame.h
@@ -726,6 +726,11 @@ typedef struct AVFrame {
      * MPEG vs JPEG YUV range.
      * - encoding: Set by user
      * - decoding: Set by libavcodec
+     *
+     * @note Floating point pixel formats are always full range. For them,
+     *       this should be set to AVCOL_RANGE_UNSPECIFIED, and must be
+     *       treated as full range when reading, whatever its value. See
+     *       AVColorRange.
      */
     enum AVColorRange color_range;
 
diff --git a/libavutil/pixfmt.h b/libavutil/pixfmt.h
index 750e05b644f..b0bf9524c9a 100644
--- a/libavutil/pixfmt.h
+++ b/libavutil/pixfmt.h
@@ -749,6 +749,10 @@ enum AVColorSpace {
  *   - 'n' is the output bit depth.
  *   - For additional definitions such as rounding and clipping to valid n
  *     bit unsigned integer range, please refer to BT.2100 (Table 9).
+ *
+ * These definitions only apply to integer representations. Floating point
+ * representations hold 'E' directly, without any scaling or offset, and are
+ * not limited to its nominal range.
  */
 enum AVColorRange {
     AVCOL_RANGE_UNSPECIFIED = 0,
-- 
2.54.0


>From 1ab7d2efb24d66ccf18c7328ea460cfce9de4c36 Mon Sep 17 00:00:00 2001
From: Ramiro Polla <[email protected]>
Date: Sat, 31 Oct 2026 17:53:13 +0100
Subject: [PATCH 2/8] swscale: treat float gray formats as full range

Legacy swscale was still reading float gray values as limited range,
whereas swscale2 correctly ignores the range for float gray formats.

Reproducible with sample EXR file with 2 levels of gray:
$ ffmpeg -f lavfi \
         -i "color=black:s=128x64,format=grayf32,geq=lum='if(lt(X,64),1,0.93)'" 
\
         -frames:v 1 grayf32.exr

Legacy only shows 1 level
$ ffplay -sws_backends legacy grayf32.exr

swscale2 shows the 2 levels
$ ffplay -sws_backends c      grayf32.exr

Signed-off-by: Ramiro Polla <[email protected]>
---
 libswscale/utils.c                           | 9 +++++++++
 tests/ref/fate/exr-ya-scanline-zip-half-12x8 | 2 +-
 tests/ref/fate/jpeg-mpf-gainmap              | 6 +++---
 3 files changed, 13 insertions(+), 4 deletions(-)

diff --git a/libswscale/utils.c b/libswscale/utils.c
index c148813cd14..2361bb94c0e 100644
--- a/libswscale/utils.c
+++ b/libswscale/utils.c
@@ -836,6 +836,15 @@ static int handle_jpeg(/* enum AVPixelFormat */ int 
*format)
     case AV_PIX_FMT_GRAY16BE:
     case AV_PIX_FMT_YA16BE:
     case AV_PIX_FMT_YA16LE:
+    /* Floating point formats */
+    case AV_PIX_FMT_GRAYF16BE:
+    case AV_PIX_FMT_GRAYF16LE:
+    case AV_PIX_FMT_GRAYF32BE:
+    case AV_PIX_FMT_GRAYF32LE:
+    case AV_PIX_FMT_YAF16BE:
+    case AV_PIX_FMT_YAF16LE:
+    case AV_PIX_FMT_YAF32BE:
+    case AV_PIX_FMT_YAF32LE:
         return 1;
     default:
         return 0;
diff --git a/tests/ref/fate/exr-ya-scanline-zip-half-12x8 
b/tests/ref/fate/exr-ya-scanline-zip-half-12x8
index 6c07f198461..4861eda52fd 100644
--- a/tests/ref/fate/exr-ya-scanline-zip-half-12x8
+++ b/tests/ref/fate/exr-ya-scanline-zip-half-12x8
@@ -3,4 +3,4 @@
 #codec_id 0: rawvideo
 #dimensions 0: 12x8
 #sar 0: 1/1
-0,          0,          0,        1,     1536, 0xa33f5f69
+0,          0,          0,        1,     1536, 0x826d7637
diff --git a/tests/ref/fate/jpeg-mpf-gainmap b/tests/ref/fate/jpeg-mpf-gainmap
index 2c2cadac2cf..17f3723651c 100644
--- a/tests/ref/fate/jpeg-mpf-gainmap
+++ b/tests/ref/fate/jpeg-mpf-gainmap
@@ -1,5 +1,5 @@
-a94724be0101759474066d233ef14001 *tests/data/fate/jpeg-mpf-gainmap.jpeg_mpf
-5649 tests/data/fate/jpeg-mpf-gainmap.jpeg_mpf
+dcf02a726b98394f2084bb83c3f45311 *tests/data/fate/jpeg-mpf-gainmap.jpeg_mpf
+5607 tests/data/fate/jpeg-mpf-gainmap.jpeg_mpf
 #tb 0: 1/25
 #media_type 0: video
 #codec_id 0: rawvideo
@@ -11,7 +11,7 @@ a94724be0101759474066d233ef14001 
*tests/data/fate/jpeg-mpf-gainmap.jpeg_mpf
 #dimensions 1: 64x48
 #sar 1: 1/1
 0,          0,          0,        1,     9216, 0xe5834dd7
-1,          0,          0,        1,     9216, 0x662fcc6a
+1,          0,          0,        1,     9216, 0x23c5fae7
 frame|stream_index=0
 frame|stream_index=1|side_datum/gain_map_parameters:side_data_type=Gain map 
parameters|side_datum/gain_map_parameters:version=0|side_datum/gain_map_parameters:use_base_color_space=1|side_datum/gain_map_parameters:base_hdr_headroom=0/1|side_datum/gain_map_parameters:alternate_hdr_headroom=5895489/1048576|component_entry/rgb:gain_map_min=-3392315/4194304|component_entry/rgb:gain_map_max=13278945/2097152|component_entry/rgb:gamma=691797/1048576|component_entry/rgb:base_offset=1/64|component_entry/rgb:alternate_offset=1/64
 stream_group|index=0|nb_streams=2|type=Gain Map (Split base rendition and gain 
map)
-- 
2.54.0


>From 704c10a50b1cb250e5d4a270fe68a37082153966 Mon Sep 17 00:00:00 2001
From: Ramiro Polla <[email protected]>
Date: Thu, 29 Oct 2026 18:09:47 +0100
Subject: [PATCH 3/8] 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 <[email protected]>
Signed-off-by: Ramiro Polla <[email protected]>
---
 libswscale/swscale.c                     | 2 +-
 tests/ref/fate/filter-pixdesc-grayf32be  | 2 +-
 tests/ref/fate/filter-pixdesc-grayf32le  | 2 +-
 tests/ref/fate/filter-pixfmts-copy       | 4 ++--
 tests/ref/fate/filter-pixfmts-crop       | 4 ++--
 tests/ref/fate/filter-pixfmts-field      | 4 ++--
 tests/ref/fate/filter-pixfmts-fieldorder | 4 ++--
 tests/ref/fate/filter-pixfmts-hflip      | 4 ++--
 tests/ref/fate/filter-pixfmts-il         | 4 ++--
 tests/ref/fate/filter-pixfmts-null       | 4 ++--
 tests/ref/fate/filter-pixfmts-scale      | 4 ++--
 tests/ref/fate/filter-pixfmts-transpose  | 4 ++--
 tests/ref/fate/filter-pixfmts-vflip      | 4 ++--
 tests/ref/lavf/grayf32be.pfm             | 4 ++--
 tests/ref/lavf/grayf32le.pfm             | 4 ++--
 tests/ref/lavf/none.grayf32le.exr        | 2 +-
 tests/ref/lavf/rle.grayf32le.exr         | 2 +-
 tests/ref/lavf/zip1.grayf32le.exr        | 2 +-
 tests/ref/lavf/zip16.grayf32le.exr       | 2 +-
 19 files changed, 31 insertions(+), 31 deletions(-)

diff --git a/libswscale/swscale.c b/libswscale/swscale.c
index 05a59a5d330..a7715a79a96 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 171475483ad..2f870674f5d 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 d598d123b4e..2a2b6522f98 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 15e4aee8cf6..25e8a6c5863 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 09e0a1e9ea2..53b74ffbfbb 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 8ed99eb5751..9f30c636489 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 3a0e28db5d5..2245eebc9e3 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 caa817caeeb..cfa86f776c8 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 71ca6160a68..dde63f7dd65 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 15e4aee8cf6..25e8a6c5863 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 cf362676581..d6ea9496d37 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 bc3173c1817..e4f87841789 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 87a1b268e8a..8e6ea439b4a 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 3ce4ad51337..c1999bb796d 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 3a883ad2ac6..01a18ee72bb 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 9db5bb78ef9..54dc59e9525 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 5f44e019378..5846dc77ae2 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 c74f2aed4de..db601f45bc5 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 25cb361be7e..c642e972d81 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
-- 
2.54.0


>From d61ae1aeb6415e244549495ce9958c3ce54549b2 Mon Sep 17 00:00:00 2001
From: Ramiro Polla <[email protected]>
Date: Sat, 31 Oct 2026 17:53:32 +0100
Subject: [PATCH 4/8] swscale/graph: do not flag an unspecified float or RGB
 range as incomplete

Legacy swscale was still expecting range information and rejecting
float formats that had the value unspecified under SWS_STRICT, whereas
swscale2 correctly ignores the range for float gray formats.

Reproducible with:
$ ffmpeg -f lavfi \
         -i 
"color=gray:s=64x64,format=grayf32,setparams=color_primaries=bt709:color_trc=bt709:colorspace=unknown"
 \
         -frames:v 1
         -sws_flags strict -sws_backends legacy
         -vf "scale=out_range=pc:out_chroma_loc=left,format=yuv420p" -f null -

Signed-off-by: Ramiro Polla <[email protected]>
---
 libswscale/graph.c | 6 ++++--
 1 file changed, 4 insertions(+), 2 deletions(-)

diff --git a/libswscale/graph.c b/libswscale/graph.c
index f4ae0f5871d..abb107f1c6e 100644
--- a/libswscale/graph.c
+++ b/libswscale/graph.c
@@ -612,8 +612,10 @@ static int add_legacy_sws_pass(SwsGraph *graph, const 
SwsFormat *src,
     ff_sws_chroma_pos(src, &graph->incomplete, &sws->src_h_chr_pos, 
&sws->src_v_chr_pos);
     ff_sws_chroma_pos(dst, &graph->incomplete, &sws->dst_h_chr_pos, 
&sws->dst_v_chr_pos);
 
-    graph->incomplete |= src->range == AVCOL_RANGE_UNSPECIFIED;
-    graph->incomplete |= dst->range == AVCOL_RANGE_UNSPECIFIED;
+    if (!isFloat(src->format) && !isAnyRGB(src->format))
+        graph->incomplete |= src->range == AVCOL_RANGE_UNSPECIFIED;
+    if (!isFloat(dst->format) && !isAnyRGB(dst->format))
+        graph->incomplete |= dst->range == AVCOL_RANGE_UNSPECIFIED;
 
     /* Allow overriding chroma position with the legacy API */
     legacy_chr_pos(graph, &sws->src_h_chr_pos, ctx->src_h_chr_pos, &warned);
-- 
2.54.0


>From 3e715c24119326e713b0e1b3833fefe7d8b3ffe6 Mon Sep 17 00:00:00 2001
From: Ramiro Polla <[email protected]>
Date: Wed, 4 Nov 2026 18:31:55 +0100
Subject: [PATCH 5/8] swscale/format: leave the range of float formats
 unspecified

Color range does not apply to floating point formats. Float gray formats
were already sanitized to AVCOL_RANGE_UNSPECIFIED, but float RGB formats
were sanitized to AVCOL_RANGE_JPEG along with the rest of the RGB family.
Move the float check out of the gray branch so that it applies to all
float formats.

This does not change any output: legacy swscale ignores the range of RGB
formats, and the ops backend passes floats through regardless of range.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
Signed-off-by: Ramiro Polla <[email protected]>
---
 libswscale/format.c | 8 ++++----
 1 file changed, 4 insertions(+), 4 deletions(-)

diff --git a/libswscale/format.c b/libswscale/format.c
index fbe2d813f9c..447f11a894f 100644
--- a/libswscale/format.c
+++ b/libswscale/format.c
@@ -315,12 +315,12 @@ static void sanitize_fmt(SwsFormat *fmt, const 
AVPixFmtDescriptor *desc)
         /* Grayscale formats */
         fmt->color.prim = AVCOL_PRI_UNSPECIFIED;
         fmt->csp        = AVCOL_SPC_UNSPECIFIED;
-        if (desc->flags & AV_PIX_FMT_FLAG_FLOAT)
-            fmt->range = AVCOL_RANGE_UNSPECIFIED;
-        else
-            fmt->range = AVCOL_RANGE_JPEG; // FIXME: this restriction should 
be lifted
+        fmt->range      = AVCOL_RANGE_JPEG; // FIXME: this restriction should 
be lifted
     }
 
+    if (desc->flags & AV_PIX_FMT_FLAG_FLOAT)
+        fmt->range = AVCOL_RANGE_UNSPECIFIED;
+
     switch (av_pix_fmt_desc_get_id(desc)) {
     case AV_PIX_FMT_YUVJ420P:
     case AV_PIX_FMT_YUVJ411P:
-- 
2.54.0


>From 9aa880397c7d712a78306d766cab336c9ffbe6ef Mon Sep 17 00:00:00 2001
From: Ramiro Polla <[email protected]>
Date: Wed, 4 Nov 2026 19:26:51 +0100
Subject: [PATCH 6/8] swscale/utils: keep float gray formats full range in
 sws_setColorspaceDetails()

sws_init_context() treats float gray formats as full range, but a later
call to sws_setColorspaceDetails() could set them to limited range,
enabling range conversion on float values. Force them to full range
there as well, as is already done with a fixed range for RGB formats.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
Signed-off-by: Ramiro Polla <[email protected]>
---
 libswscale/utils.c | 4 ++++
 1 file changed, 4 insertions(+)

diff --git a/libswscale/utils.c b/libswscale/utils.c
index 2361bb94c0e..eaa352a30c1 100644
--- a/libswscale/utils.c
+++ b/libswscale/utils.c
@@ -919,8 +919,12 @@ int sws_setColorspaceDetails(SwsContext *sws, const int 
inv_table[4],
 
     if(range_override_needed(sws->dst_format))
         dstRange = 0;
+    else if (isFloat(sws->dst_format))
+        dstRange = 1; /* float gray formats are always full range */
     if(range_override_needed(sws->src_format))
         srcRange = 0;
+    else if (isFloat(sws->src_format))
+        srcRange = 1;
 
     if (sws->src_range != srcRange ||
         sws->dst_range != dstRange ||
-- 
2.54.0


>From c97a7fbde1a1a5d9bc2d25a76c65459c599f7ecd Mon Sep 17 00:00:00 2001
From: Ramiro Polla <[email protected]>
Date: Wed, 4 Nov 2026 19:26:51 +0100
Subject: [PATCH 7/8] swscale/utils: remove the float exception from the
 unscaled range check

It allowed the gray8 <-> grayf32 unscaled converters to be used while
grayf32 was treated as limited range. Float gray formats are now always
full range, like gray8, so the range check passes on its own.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
Signed-off-by: Ramiro Polla <[email protected]>
---
 libswscale/utils.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/libswscale/utils.c b/libswscale/utils.c
index eaa352a30c1..6aabce39aba 100644
--- a/libswscale/utils.c
+++ b/libswscale/utils.c
@@ -1700,7 +1700,7 @@ av_cold int ff_sws_init_single_context(SwsContext *sws, 
SwsFilter *srcFilter,
     /* unscaled special cases */
     if (unscaled && !usesHFilter && !usesVFilter &&
         (sws->src_range == sws->dst_range || isAnyRGB(dstFormat) ||
-         isFloat(srcFormat) || isFloat(dstFormat) || isBayer(srcFormat))){
+         isBayer(srcFormat))){
 
         ff_get_unscaled_swscale(c);
 
-- 
2.54.0


>From 44322b7cd3f86d5e86a2cf030931fcbf17dec144 Mon Sep 17 00:00:00 2001
From: Ramiro Polla <[email protected]>
Date: Thu, 29 Oct 2026 18:13:35 +0100
Subject: [PATCH 8/8] swscale/output: add YAF32 output support

Reuse the YA16 templates, which already produce 16-bit Y and A values,
and store them as floats in [0, 1]. This gives the same precision as the
existing GRAYF32 output.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
Signed-off-by: Ramiro Polla <[email protected]>
---
 libswscale/format.c                      |  4 +--
 libswscale/output.c                      | 42 ++++++++++++++++++++----
 tests/ref/fate/filter-pixdesc-yaf32be    |  1 +
 tests/ref/fate/filter-pixdesc-yaf32le    |  1 +
 tests/ref/fate/filter-pixfmts-copy       |  2 ++
 tests/ref/fate/filter-pixfmts-crop       |  2 ++
 tests/ref/fate/filter-pixfmts-field      |  2 ++
 tests/ref/fate/filter-pixfmts-fieldorder |  2 ++
 tests/ref/fate/filter-pixfmts-hflip      |  2 ++
 tests/ref/fate/filter-pixfmts-il         |  2 ++
 tests/ref/fate/filter-pixfmts-null       |  2 ++
 tests/ref/fate/filter-pixfmts-scale      |  2 ++
 tests/ref/fate/filter-pixfmts-transpose  |  2 ++
 tests/ref/fate/filter-pixfmts-vflip      |  2 ++
 14 files changed, 60 insertions(+), 8 deletions(-)
 create mode 100644 tests/ref/fate/filter-pixdesc-yaf32be
 create mode 100644 tests/ref/fate/filter-pixdesc-yaf32le

diff --git a/libswscale/format.c b/libswscale/format.c
index 447f11a894f..c3d3a88968f 100644
--- a/libswscale/format.c
+++ b/libswscale/format.c
@@ -232,8 +232,8 @@ static const LegacyFormatEntry legacy_format_entries[] = {
     [AV_PIX_FMT_GRAYF32BE]      = { 1, 1 },
     [AV_PIX_FMT_GRAYF16LE]      = { 1, 0 },
     [AV_PIX_FMT_GRAYF16BE]      = { 1, 0 },
-    [AV_PIX_FMT_YAF32LE]        = { 1, 0 },
-    [AV_PIX_FMT_YAF32BE]        = { 1, 0 },
+    [AV_PIX_FMT_YAF32LE]        = { 1, 1 },
+    [AV_PIX_FMT_YAF32BE]        = { 1, 1 },
     [AV_PIX_FMT_YAF16LE]        = { 1, 0 },
     [AV_PIX_FMT_YAF16BE]        = { 1, 0 },
     [AV_PIX_FMT_YUVA422P12BE]   = { 1, 1 },
diff --git a/libswscale/output.c b/libswscale/output.c
index 5cc5cf026db..333536ec42d 100644
--- a/libswscale/output.c
+++ b/libswscale/output.c
@@ -1015,6 +1015,26 @@ YUV2PACKEDWRAPPER(yuv2, 422, uyvy422, AV_PIX_FMT_UYVY422)
     } else { \
         AV_WL16(pos, val); \
     }
+#define output_pixel32(pos, val) \
+    if (is_be) { \
+        AV_WB32(pos, val); \
+    } else { \
+        AV_WL32(pos, val); \
+    }
+
+static av_always_inline void
+output_pixel_ya(uint16_t *dest, int i, int Y, int A,
+                enum AVPixelFormat target, int is_be)
+{
+    if (target == AV_PIX_FMT_YAF32LE || target == AV_PIX_FMT_YAF32BE) {
+        static const float float_mult = 1.0f / 65535.0f;
+        output_pixel32(&dest[4 * i    ], av_float2int(float_mult * Y));
+        output_pixel32(&dest[4 * i + 2], av_float2int(float_mult * A));
+    } else {
+        output_pixel(&dest[2 * i    ], Y);
+        output_pixel(&dest[2 * i + 1], A);
+    }
+}
 
 static av_always_inline void
 yuv2ya16_X_c_template(SwsInternal *c, const int16_t *lumFilter,
@@ -1050,8 +1070,7 @@ yuv2ya16_X_c_template(SwsInternal *c, const int16_t 
*lumFilter,
             A = av_clip_uint16(A);
         }
 
-        output_pixel(&dest[2 * i    ], Y);
-        output_pixel(&dest[2 * i + 1], A);
+        output_pixel_ya(dest, i, Y, A, target, is_be);
     }
 }
 
@@ -1084,8 +1103,7 @@ yuv2ya16_2_c_template(SwsInternal *c, const int32_t 
*buf[2],
             A = av_clip_uint16(A);
         }
 
-        output_pixel(&dest[2 * i    ], Y);
-        output_pixel(&dest[2 * i + 1], hasAlpha ? A : 65535);
+        output_pixel_ya(dest, i, Y, hasAlpha ? A : 65535, target, is_be);
     }
 }
 
@@ -1111,8 +1129,7 @@ yuv2ya16_1_c_template(SwsInternal *c, const int32_t *buf0,
                 A = av_clip_uint16(A);
         }
 
-        output_pixel(&dest[2 * i    ], Y);
-        output_pixel(&dest[2 * i + 1], hasAlpha ? A : 65535);
+        output_pixel_ya(dest, i, Y, hasAlpha ? A : 65535, target, is_be);
     }
 }
 
@@ -1576,6 +1593,7 @@ yuv2rgba64_full_1_c_template(SwsInternal *c, const 
int32_t *buf0,
 }
 
 #undef output_pixel
+#undef output_pixel32
 #undef r_b
 #undef b_r
 
@@ -1641,6 +1659,8 @@ YUV2PACKED16WRAPPER(yuv2, rgba64, bgrx64be, 
AV_PIX_FMT_BGRA64, BE, 0, 1)
 YUV2PACKED16WRAPPER(yuv2, rgba64, bgrx64le, AV_PIX_FMT_BGRA64, LE, 0, 1)
 YUV2PACKED16WRAPPER(yuv2, ya16, ya16be, AV_PIX_FMT_YA16, BE, 1, 0)
 YUV2PACKED16WRAPPER(yuv2, ya16, ya16le, AV_PIX_FMT_YA16, LE, 1, 0)
+YUV2PACKED16WRAPPER(yuv2, ya16, yaf32be, AV_PIX_FMT_YAF32, BE, 1, 0)
+YUV2PACKED16WRAPPER(yuv2, ya16, yaf32le, AV_PIX_FMT_YAF32, LE, 1, 0)
 
 YUV2PACKED16WRAPPER(yuv2, rgba64_full, rgb48be_full, AV_PIX_FMT_RGB48, BE, 0, 
0)
 YUV2PACKED16WRAPPER(yuv2, rgba64_full, rgb48le_full, AV_PIX_FMT_RGB48, LE, 0, 
0)
@@ -3836,6 +3856,16 @@ av_cold void ff_sws_init_output_funcs(SwsInternal *c,
         *yuv2packed2 = yuv2ya16be_2_c;
         *yuv2packedX = yuv2ya16be_X_c;
         break;
+    case AV_PIX_FMT_YAF32LE:
+        *yuv2packed1 = yuv2yaf32le_1_c;
+        *yuv2packed2 = yuv2yaf32le_2_c;
+        *yuv2packedX = yuv2yaf32le_X_c;
+        break;
+    case AV_PIX_FMT_YAF32BE:
+        *yuv2packed1 = yuv2yaf32be_1_c;
+        *yuv2packed2 = yuv2yaf32be_2_c;
+        *yuv2packedX = yuv2yaf32be_X_c;
+        break;
     case AV_PIX_FMT_V30XLE:
         *yuv2packedX = yuv2v30xle_X_c;
         break;
diff --git a/tests/ref/fate/filter-pixdesc-yaf32be 
b/tests/ref/fate/filter-pixdesc-yaf32be
new file mode 100644
index 00000000000..31cfa195c8d
--- /dev/null
+++ b/tests/ref/fate/filter-pixdesc-yaf32be
@@ -0,0 +1 @@
+pixdesc-yaf32be     11ca5e3f990380a7d84bf505bee7cd60
diff --git a/tests/ref/fate/filter-pixdesc-yaf32le 
b/tests/ref/fate/filter-pixdesc-yaf32le
new file mode 100644
index 00000000000..1551983ae42
--- /dev/null
+++ b/tests/ref/fate/filter-pixdesc-yaf32le
@@ -0,0 +1 @@
+pixdesc-yaf32le     8a084fad1b4d5d74a1f4b4e4b7998387
diff --git a/tests/ref/fate/filter-pixfmts-copy 
b/tests/ref/fate/filter-pixfmts-copy
index 25e8a6c5863..5c02a638974 100644
--- a/tests/ref/fate/filter-pixfmts-copy
+++ b/tests/ref/fate/filter-pixfmts-copy
@@ -125,6 +125,8 @@ y216le              0e99aeddfee304e72d525d72998d9e9b
 ya16be              c7a868787e0f3d487dbc8af804d15d81
 ya16le              a5299b6c9cb1b5b1f5fb62546b9c6c4e
 ya8                 dbb99fbcdc204aaa1a7397ff561f1a67
+yaf32be             0f4f26673a6fe8ba9b74ad45611c8488
+yaf32le             eacd43d54c8127ee1b9f88d79545933f
 yuv410p             5d4d992a7728431aa4e0700f87fb7fd8
 yuv411p             7e1300e89f5bc07939e2c4a6acbdf267
 yuv420p             a014c7eb7a8385d1dd092b7a583f1bff
diff --git a/tests/ref/fate/filter-pixfmts-crop 
b/tests/ref/fate/filter-pixfmts-crop
index 53b74ffbfbb..261336f7cff 100644
--- a/tests/ref/fate/filter-pixfmts-crop
+++ b/tests/ref/fate/filter-pixfmts-crop
@@ -119,6 +119,8 @@ xyz12le             122fb7eea3575b4edbbd83219bc7af91
 ya16be              e2b490dc18f6ca3814fe9d68193ba263
 ya16le              33b0e26f3c2e89c651345970474f6703
 ya8                 51a8dd297e35d40b06d3ebe8f4717895
+yaf32be             6524649877583eac52f8076be68d1cf9
+yaf32le             0df188030b0d07a2c909103f95e12267
 yuv410p             3bb6c7b64f2c46bc5e8b77198ce4ea58
 yuv411p             693e4afe96998e6dd91734037d75d887
 yuv420p             510d36163e4d3710988c23c2240ca6dc
diff --git a/tests/ref/fate/filter-pixfmts-field 
b/tests/ref/fate/filter-pixfmts-field
index 9f30c636489..1e137f4b479 100644
--- a/tests/ref/fate/filter-pixfmts-field
+++ b/tests/ref/fate/filter-pixfmts-field
@@ -125,6 +125,8 @@ y216le              e65b5bfae1b40edbbed2012e9cd45e31
 ya16be              466e6864b69dc93be890d32e021f4ab1
 ya16le              bd151aacfa82c803983e5c7bdc23b58b
 ya8                 28cea4f98ed452bd3da9c752e5e3399c
+yaf32be             af630161f967366e657afb6d6a514caa
+yaf32le             2d8e57abc7ec69c4d5b12e4559336c66
 yuv410p             a85920d6bd26f51306e2ecbe71d1c554
 yuv411p             9106e283d5dbcfba01c611886d58871a
 yuv420p             9ea8ed3c22c31c0354b7face540bb280
diff --git a/tests/ref/fate/filter-pixfmts-fieldorder 
b/tests/ref/fate/filter-pixfmts-fieldorder
index 2245eebc9e3..93bea75fbbf 100644
--- a/tests/ref/fate/filter-pixfmts-fieldorder
+++ b/tests/ref/fate/filter-pixfmts-fieldorder
@@ -114,6 +114,8 @@ y216le              360cb98ac80b13d3a8ec61c9f1ff3bac
 ya16be              9462d3dded4802b9d9f96e8a40709067
 ya16le              f7eefa08ae0bfa77baf48c7064f59c13
 ya8                 055ac5ab5ff8533dd319edc17a398af1
+yaf32be             2f615d187b0ecf4cf383b72c3920f0e4
+yaf32le             7e0c94a67b37ce9fb102fc7e6aca01f6
 yuv411p             e4a040e0e786c4dae07d9d3f90a54905
 yuv422p             16ce67249c6ce7ef57a433646ad6dfc1
 yuv422p10be         62ae323dcc41aabf8ff6ecc53b119ce8
diff --git a/tests/ref/fate/filter-pixfmts-hflip 
b/tests/ref/fate/filter-pixfmts-hflip
index cfa86f776c8..05fc467a9df 100644
--- a/tests/ref/fate/filter-pixfmts-hflip
+++ b/tests/ref/fate/filter-pixfmts-hflip
@@ -119,6 +119,8 @@ xyz12le             a8273fe17f2a738f3fd7f457de5c1df4
 ya16be              e7665e62e476df4eb143420e57cc9ec2
 ya16le              3a23b71db418b74e1cc304d7cd3e1989
 ya8                 4ad5920716de3d2fbbc49f95adb60345
+yaf32be             a167b4fa890b06259d7a15296822b87e
+yaf32le             920d0367d5292dacadaf451221b5874d
 yuv410p             c49fd0c55c41185b1580aac77211992b
 yuv411p             c416371077dce13d31bf1dc706111ae7
 yuv420p             eb8d9f02db98e10400781428c43e9438
diff --git a/tests/ref/fate/filter-pixfmts-il b/tests/ref/fate/filter-pixfmts-il
index dde63f7dd65..b790105e364 100644
--- a/tests/ref/fate/filter-pixfmts-il
+++ b/tests/ref/fate/filter-pixfmts-il
@@ -124,6 +124,8 @@ y216le              9e44c6d76b09bcbe71738423b4b3d67a
 ya16be              d08393d66f14fb1e31a9e9cbcb3df664
 ya16le              372426fb917ea93365d775c3d1ef491a
 ya8                 a38d6e288f582f1a04310232ed764afc
+yaf32be             b761a322922f30c5b1d14e428b267a76
+yaf32le             986cbcc484546eda7fcf57da21eb1224
 yuv410p             dea1ab8843465adf5b8240b2d98fd85b
 yuv411p             8bf73777a5ff43c126be274245aceff1
 yuv420p             f1f4e7e94a76d5320049464bdeac24ed
diff --git a/tests/ref/fate/filter-pixfmts-null 
b/tests/ref/fate/filter-pixfmts-null
index 25e8a6c5863..5c02a638974 100644
--- a/tests/ref/fate/filter-pixfmts-null
+++ b/tests/ref/fate/filter-pixfmts-null
@@ -125,6 +125,8 @@ y216le              0e99aeddfee304e72d525d72998d9e9b
 ya16be              c7a868787e0f3d487dbc8af804d15d81
 ya16le              a5299b6c9cb1b5b1f5fb62546b9c6c4e
 ya8                 dbb99fbcdc204aaa1a7397ff561f1a67
+yaf32be             0f4f26673a6fe8ba9b74ad45611c8488
+yaf32le             eacd43d54c8127ee1b9f88d79545933f
 yuv410p             5d4d992a7728431aa4e0700f87fb7fd8
 yuv411p             7e1300e89f5bc07939e2c4a6acbdf267
 yuv420p             a014c7eb7a8385d1dd092b7a583f1bff
diff --git a/tests/ref/fate/filter-pixfmts-scale 
b/tests/ref/fate/filter-pixfmts-scale
index d6ea9496d37..54f0db1a76a 100644
--- a/tests/ref/fate/filter-pixfmts-scale
+++ b/tests/ref/fate/filter-pixfmts-scale
@@ -125,6 +125,8 @@ y216le              17be2999e97d36b8ed903f07ef428c09
 ya16be              2c473f0f4c9330c1ed61bcc80ee11022
 ya16le              76d4ff84d1014db24397f936dad9d0fa
 ya8                 0a9db5bb4b009de9197eede5e9d19e16
+yaf32be             485ab8e871268a1e1a441055fe07be8c
+yaf32le             075edf21cc05db2c98db56af25dd0b15
 yuv410p             e8f49b5fb9335b62c074f7f8bb0234fc
 yuv411p             5af32557c93beb482e26e7af693104c6
 yuv420p             5d3ac239c3712143560b1dfbd48a7ddd
diff --git a/tests/ref/fate/filter-pixfmts-transpose 
b/tests/ref/fate/filter-pixfmts-transpose
index e4f87841789..4b07f1bd79b 100644
--- a/tests/ref/fate/filter-pixfmts-transpose
+++ b/tests/ref/fate/filter-pixfmts-transpose
@@ -109,6 +109,8 @@ xyz12le             77912a89e6525f6809d8c31fed87a439
 ya16be              9bb39f9567d807be0fb8631dcfa8d5f8
 ya16le              b13453818b83c8dc2610975095393ac1
 ya8                 d4b7a62f80681fa44c977ff3a64f4ce4
+yaf32be             a117a36318e1bba2b5265d153fb0f045
+yaf32le             ba12f8a6a60b8d367ce73dabaa790164
 yuv410p             4c0143429edd30aa01493447c90132ea
 yuv420p             2fa5b2201c75034206cc20e2c6134aed
 yuv420p10be         0931660f930d9be8aea9d0c76b406055
diff --git a/tests/ref/fate/filter-pixfmts-vflip 
b/tests/ref/fate/filter-pixfmts-vflip
index 8e6ea439b4a..7f08bc9254d 100644
--- a/tests/ref/fate/filter-pixfmts-vflip
+++ b/tests/ref/fate/filter-pixfmts-vflip
@@ -125,6 +125,8 @@ y216le              985db498aedf3fb1c547ad07442b7258
 ya16be              633230e223ca00e8398e46514d35422d
 ya16le              9bee2882baafbfeba9adb8787c61f2f4
 ya8                 4299c6ca3b470a7d8a420e26eb485b1d
+yaf32be             782a52cad5a7ded8ca0b3e3069f50517
+yaf32le             5cdc04f5ab16d9780ac0e92857f72718
 yuv410p             c7adfe96c8e043a6cb9290c39bf8063c
 yuv411p             3fce29db403a25f81be39e01aaf6ff3a
 yuv420p             d64fae96fac22aefa8fbcf45a09f37c1
-- 
2.54.0

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

Reply via email to