]> git.sesse.net Git - ffmpeg/commitdiff
avcodec/exr: preserve half-float NaN bits and add fate test
authorMark Reid <mindmark@gmail.com>
Mon, 23 Nov 2020 04:32:15 +0000 (20:32 -0800)
committerPaul B Mahol <onemda@gmail.com>
Wed, 9 Dec 2020 11:31:09 +0000 (12:31 +0100)
Handles NaNs more like the official implementation handles them, preserving
the original bits.

libavcodec/exr.c
tests/fate/image.mak
tests/ref/fate/exr-rgb-scanline-zip-half-0x0-0xFFFF [new file with mode: 0644]

index d233dd43fbd6b84a92a45a2aa4268aae48834f08..6e6ce4275cb0bb4844d041437c8d3c0cc219aac6 100644 (file)
@@ -193,8 +193,7 @@ static union av_intfloat32 exr_half2float(uint16_t hf)
         // half-float NaNs will be converted to a single precision NaN
         // half-float Infs will be converted to a single precision Inf
         exp = FLOAT_MAX_BIASED_EXP;
-        if (mantissa)
-            mantissa = (1 << 23) - 1;    // set all bits to indicate a NaN
+        mantissa <<= 13; // preserve half-float NaN bits if set
     } else if (exp == 0x0) {
         // convert half-float zero/denorm to single precision value
         if (mantissa) {
index 22072a62f1de0dececad1f83ac03439d80e12488..c453f0f79c95849f1db0e19ce44ca9a5fb59c406 100644 (file)
@@ -317,6 +317,8 @@ fate-exr-rgb-scanline-half-zip-dw-outside: CMD = framecrc -i $(TARGET_SAMPLES)/e
 FATE_EXR += fate-exr-rgb-tile-half-zip-dw-outside
 fate-exr-rgb-tile-half-zip-dw-outside: CMD = framecrc -i $(TARGET_SAMPLES)/exr/rgb_tile_half_zip_dw_outside.exr -pix_fmt gbrpf32le
 
+FATE_EXR += fate-exr-rgb-scanline-zip-half-0x0-0xFFFF
+fate-exr-rgb-scanline-zip-half-0x0-0xFFFF: CMD = framecrc -i $(TARGET_SAMPLES)/exr/rgb_scanline_zip_half_float_0x0_to_0xFFFF.exr -pix_fmt gbrpf32le
 
 FATE_EXR-$(call DEMDEC, IMAGE2, EXR) += $(FATE_EXR)
 
diff --git a/tests/ref/fate/exr-rgb-scanline-zip-half-0x0-0xFFFF b/tests/ref/fate/exr-rgb-scanline-zip-half-0x0-0xFFFF
new file mode 100644 (file)
index 0000000..b620111
--- /dev/null
@@ -0,0 +1,6 @@
+#tb 0: 1/25
+#media_type 0: video
+#codec_id 0: rawvideo
+#dimensions 0: 256x256
+#sar 0: 1/1
+0,          0,          0,        1,   786432, 0x1445e411