From patchwork Mon Nov 23 04:32:15 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Mark Reid X-Patchwork-Id: 23969 Return-Path: X-Original-To: patchwork@ffaux-bg.ffmpeg.org Delivered-To: patchwork@ffaux-bg.ffmpeg.org Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org [79.124.17.100]) by ffaux.localdomain (Postfix) with ESMTP id 67567449EBF for ; Mon, 23 Nov 2020 06:32:29 +0200 (EET) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 286A268BB52; Mon, 23 Nov 2020 06:32:29 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-pg1-f194.google.com (mail-pg1-f194.google.com [209.85.215.194]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id B741C68BA0F for ; Mon, 23 Nov 2020 06:32:21 +0200 (EET) Received: by mail-pg1-f194.google.com with SMTP id s63so3198664pgc.8 for ; Sun, 22 Nov 2020 20:32:21 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:mime-version :content-transfer-encoding; bh=GEOefSGruKe3+7MT7jzC0rGunsZ1KYGey+tkWuEu72s=; b=ro5cPjO1/MeGoEge09Bd9cHgsVPCtb39XjbxwG3jMolPrtc3SlP+tnZ60mIW2fDNou PGGBypHH2rcXdl/YH0FX35rTDjYrpJMwBxLXF1j0XoF0AvhpiiH2oY5PQw1cyVwqmCrC fFUdtrFK6xVoO5m9jJWsakXHeD4ExO5bg4JKh9pVEKIFOU+MzUVPP1wUTbsIlFbhq8aS osV+s+Arwr9k28mx2fi+TgbjTDBOqoWw5rXHsxo8AY6VWsiE8joykopUllxwtQttiORI kJBg3b6LibFyv3IpyHTh7b5WfEybaEuU6n36umCdZ8Tf8+yu426yRyvEnJ6HRhDltHy0 jFfw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:mime-version :content-transfer-encoding; bh=GEOefSGruKe3+7MT7jzC0rGunsZ1KYGey+tkWuEu72s=; b=n4yL0zrs/6OJ5GSGvNpTO/cOUSIZ7XQeD3RfH4Lcx21DGy9dsSvoQf4YpVLJsGPyVH 3hyZJzrymZbRpFtYys2wNSjjbQhgeVDFlijp7f1aISV6f63ai4y8p9Ggg1pg52wf5WVg JjbNsYDOWnJrM8oXvXpQd0zcWdQ9/UkROC/iDDCmNq/7HIEAiqKGfk70FmNnrw4M3JHV PEAViMudMadmLVZ5QSOvdT+Pzc6nPpRmDuroE77OKIJDar1+142UkaPW3SKpg4jhdJzI fs4ZNoJ+ejB6snv3teUg1jTP4ex9eIOandZwZzovga6i14PU5zLyDUoHAOyKWQPfkT0p GWNQ== X-Gm-Message-State: AOAM530o5MaANHZNu+uRCLXk6ueatQncWAAy+mWV5kbpklCbz4EOM+xD bknAc6IxyrQI7R1qmL8IMbFuHnJ/Hko= X-Google-Smtp-Source: ABdhPJz0oQxjYF+2RLPXXVlDxidt2xF8gjUSKKcDM+nocl9aIddEMwdSyY9MxwDUH0aFUOA0mltCGA== X-Received: by 2002:a63:d50a:: with SMTP id c10mr25428458pgg.217.1606105938984; Sun, 22 Nov 2020 20:32:18 -0800 (PST) Received: from localhost.localdomain (S0106bc4dfba470f3.vc.shawcable.net. [174.7.244.175]) by smtp.gmail.com with ESMTPSA id l190sm10093248pfl.205.2020.11.22.20.32.17 (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Sun, 22 Nov 2020 20:32:18 -0800 (PST) From: mindmark@gmail.com To: ffmpeg-devel@ffmpeg.org Date: Sun, 22 Nov 2020 20:32:15 -0800 Message-Id: <20201123043215.3278-1-mindmark@gmail.com> X-Mailer: git-send-email 2.29.2 MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH] avcodec/exr: preserve half-float NaN bits and add fate test X-BeenThere: ffmpeg-devel@ffmpeg.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: FFmpeg development discussions and patches List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-To: FFmpeg development discussions and patches Cc: Mark Reid Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" From: Mark Reid Hi, This patch handles NaNs more like the offical implentation handles them, preserving the original bits. https://github.com/AcademySoftwareFoundation/openexr/blob/RB-2.5/IlmBase/Half/toFloat.cpp#L111 It also adds a fate test that is a 256x256 exr containing all possible 16bit half-float values. Here is a link to download the fate test file, if someone could add it to fate me https://www.dropbox.com/s/2q4jg8w489aunsf/rgb_scanline_zip_half_float_0x0_to_0xFFFF.exr --- libavcodec/exr.c | 3 +-- tests/fate/image.mak | 2 ++ tests/ref/fate/exr-rgb-scanline-zip-half-0x0-0xFFFF | 6 ++++++ 3 files changed, 9 insertions(+), 2 deletions(-) create mode 100644 tests/ref/fate/exr-rgb-scanline-zip-half-0x0-0xFFFF diff --git a/libavcodec/exr.c b/libavcodec/exr.c index d233dd43fb..6e6ce4275c 100644 --- a/libavcodec/exr.c +++ b/libavcodec/exr.c @@ -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) { diff --git a/tests/fate/image.mak b/tests/fate/image.mak index 22072a62f1..c453f0f79c 100644 --- a/tests/fate/image.mak +++ b/tests/fate/image.mak @@ -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 index 0000000000..b6201116fe --- /dev/null +++ b/tests/ref/fate/exr-rgb-scanline-zip-half-0x0-0xFFFF @@ -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