From patchwork Tue Sep 15 02:14:46 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Mark Reid X-Patchwork-Id: 22385 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 AF65A449D7E for ; Tue, 15 Sep 2020 05:15:03 +0300 (EEST) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 8CA2968B98E; Tue, 15 Sep 2020 05:15:03 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-pl1-f175.google.com (mail-pl1-f175.google.com [209.85.214.175]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 7022B68B811 for ; Tue, 15 Sep 2020 05:14:57 +0300 (EEST) Received: by mail-pl1-f175.google.com with SMTP id bh1so530001plb.12 for ; Mon, 14 Sep 2020 19:14:57 -0700 (PDT) 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=iMFK41Fp+eUJS5DkCH9q/n6TOZtFaha6WXp+Ut5OXCw=; b=mPlZji2oquQ1NvKXec+6AmCizJXgFg/vcMQqip4BJ8KYI28aV83oCP4xraBUQYr1f3 NDx+jinlNtJw1O10cxpVWMeKFSGLLH0M4lqHiSFE+uMkx7RkQwAy+fY95c6Acmz80p72 b/RUuc+XgDD2s0i8cT/W3THsN7ESFStB5jXatGFxQeCwk77SCF9lmO/HbG4vp6btXGbJ YvlqlMND2CnvSPREKvggR7GhykyBet+sdrW/+jV6XoZcpIcJLJn6ZZzf9dGltEjRmZi1 2eb8Tc2jB+fWmB5ZGV9ibKByeuCHLPFgK9vpnx6eDP1QiotIlmQ2yU7JUWBJrtfP6xF2 ulcQ== 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=iMFK41Fp+eUJS5DkCH9q/n6TOZtFaha6WXp+Ut5OXCw=; b=Y/gPEv50PgV2Uc4KAyDpdcIfi0Q0F5fzQC6vXXfaTPLWBdhvU6sKJ621jfb1umKJdL VRRdGFD7JHG1bnHi1DS3JBxlWikDyTaEcXgtDd1twjCCPBFdMCZUoGOBt5RtNeejEEFy hmkgbv5J7jD+U3Qf4GfcQpMEzfiEedjRv+Hbj4x9qlR6/SNOocNX6E4UWh6H0KV4pfr6 o8n2xg0/sBfVXBjdWDIawAcMMJ/HvOcYxrO6ZmSwGQWdtBUJSXmRvb9T1ka6PEYtmqwZ T1EYcUM6dibWkVeHx17t6EFDC/qlhn9lv6saK8HC1X/uxyGXHrZi+OP/Ti6Sq3uiYVSz MFwQ== X-Gm-Message-State: AOAM531Nf4NsCDstCl7R6ae+UFa5NoIC6oHBapY92G02Xw2/TV7FXMcM t0+8L6QFyrLrL+2rt3sucu3sl6efvH4= X-Google-Smtp-Source: ABdhPJw15aihTj4dK6be/JCCMfNrjf6sHkTOxPvOvg+Ww4QTd6lduT0r52s6dB9dIM/Pk0HQpc2S5A== X-Received: by 2002:a17:90a:ca98:: with SMTP id y24mr2046316pjt.98.1600136094741; Mon, 14 Sep 2020 19:14:54 -0700 (PDT) Received: from localhost.localdomain (S01069050ca607903.vc.shawcable.net. [174.7.236.190]) by smtp.gmail.com with ESMTPSA id gg19sm10061343pjb.49.2020.09.14.19.14.54 (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Mon, 14 Sep 2020 19:14:54 -0700 (PDT) From: mindmark@gmail.com To: ffmpeg-devel@ffmpeg.org Date: Mon, 14 Sep 2020 19:14:46 -0700 Message-Id: <20200915021446.48394-1-mindmark@gmail.com> X-Mailer: git-send-email 2.27.0 MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH] libavcodec/exr: fix incorrect translation of denorm mantissa 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 fixes a very subtle error thats hard notice until up unpremultiply a image. This loop is suppose to stop at first 1, instead was stoping at first 0 The comment is correct through! openexrs implementation is very similar. https://github.com/AcademySoftwareFoundation/openexr/blob/master/IlmBase/Half/toFloat.cpp#L85 not all the exr tests needed to be fixed because only some have denorm values --- libavcodec/exr.c | 2 +- tests/ref/fate/exr-rgba-multiscanline-half-b44 | 2 +- tests/ref/fate/exr-slice-raw | 2 +- tests/ref/fate/exr-slice-rle | 2 +- tests/ref/fate/exr-slice-zip1 | 2 +- tests/ref/fate/exr-slice-zip16 | 2 +- 6 files changed, 6 insertions(+), 6 deletions(-) diff --git a/libavcodec/exr.c b/libavcodec/exr.c index 829d38143d..216d216785 100644 --- a/libavcodec/exr.c +++ b/libavcodec/exr.c @@ -201,7 +201,7 @@ static union av_intfloat32 exr_half2float(uint16_t hf) mantissa <<= 1; exp = HALF_FLOAT_MIN_BIASED_EXP_AS_SINGLE_FP_EXP; // check for leading 1 in denorm mantissa - while ((mantissa & (1 << 10))) { + while (!(mantissa & (1 << 10))) { // for every leading 0, decrement single precision exponent by 1 // and shift half-float mantissa value to the left mantissa <<= 1; diff --git a/tests/ref/fate/exr-rgba-multiscanline-half-b44 b/tests/ref/fate/exr-rgba-multiscanline-half-b44 index 964bf2e65e..24525b92a7 100644 --- a/tests/ref/fate/exr-rgba-multiscanline-half-b44 +++ b/tests/ref/fate/exr-rgba-multiscanline-half-b44 @@ -3,4 +3,4 @@ #codec_id 0: rawvideo #dimensions 0: 935x251 #sar 0: 1/1 -0, 0, 0, 1, 3754960, 0x4d48a1b2 +0, 0, 0, 1, 3754960, 0x8d9af112 diff --git a/tests/ref/fate/exr-slice-raw b/tests/ref/fate/exr-slice-raw index c7096e4d2a..1e7d3825ea 100644 --- a/tests/ref/fate/exr-slice-raw +++ b/tests/ref/fate/exr-slice-raw @@ -3,4 +3,4 @@ #codec_id 0: rawvideo #dimensions 0: 587x675 #sar 0: 1/1 -0, 0, 0, 1, 6339600, 0x4f2b496b +0, 0, 0, 1, 6339600, 0xda3e31df diff --git a/tests/ref/fate/exr-slice-rle b/tests/ref/fate/exr-slice-rle index c7096e4d2a..1e7d3825ea 100644 --- a/tests/ref/fate/exr-slice-rle +++ b/tests/ref/fate/exr-slice-rle @@ -3,4 +3,4 @@ #codec_id 0: rawvideo #dimensions 0: 587x675 #sar 0: 1/1 -0, 0, 0, 1, 6339600, 0x4f2b496b +0, 0, 0, 1, 6339600, 0xda3e31df diff --git a/tests/ref/fate/exr-slice-zip1 b/tests/ref/fate/exr-slice-zip1 index c7096e4d2a..1e7d3825ea 100644 --- a/tests/ref/fate/exr-slice-zip1 +++ b/tests/ref/fate/exr-slice-zip1 @@ -3,4 +3,4 @@ #codec_id 0: rawvideo #dimensions 0: 587x675 #sar 0: 1/1 -0, 0, 0, 1, 6339600, 0x4f2b496b +0, 0, 0, 1, 6339600, 0xda3e31df diff --git a/tests/ref/fate/exr-slice-zip16 b/tests/ref/fate/exr-slice-zip16 index c7096e4d2a..1e7d3825ea 100644 --- a/tests/ref/fate/exr-slice-zip16 +++ b/tests/ref/fate/exr-slice-zip16 @@ -3,4 +3,4 @@ #codec_id 0: rawvideo #dimensions 0: 587x675 #sar 0: 1/1 -0, 0, 0, 1, 6339600, 0x4f2b496b +0, 0, 0, 1, 6339600, 0xda3e31df