From f0ddd42d6d44daf2eb9e487bc20a43a7ddd29d22 Mon Sep 17 00:00:00 2001 From: Ingo Weyrich Date: Sat, 13 Jun 2020 19:13:41 +0200 Subject: [PATCH] Crash caused by Tone Mapping, fixes #5171 --- rtengine/EdgePreservingDecomposition.cc | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/rtengine/EdgePreservingDecomposition.cc b/rtengine/EdgePreservingDecomposition.cc index 04459e88a..82e486438 100644 --- a/rtengine/EdgePreservingDecomposition.cc +++ b/rtengine/EdgePreservingDecomposition.cc @@ -939,7 +939,7 @@ void EdgePreservingDecomposition::CompressDynamicRange(float *Source, float Scal cev = xexpf(LVFU(Source[i]) + LVFU(u[i]) * (tempv)) - epsv; uev = xexpf(LVFU(u[i])) - epsv; sourcev = xexpf(LVFU(Source[i])) - epsv; - _mm_storeu_ps( &Source[i], cev + DetailBoostv * (sourcev - uev) ); + _mm_storeu_ps( &Source[i], vmaxf(cev + DetailBoostv * (sourcev - uev), ZEROV)); } } @@ -947,7 +947,7 @@ void EdgePreservingDecomposition::CompressDynamicRange(float *Source, float Scal float ce = xexpf(Source[i] + u[i] * (temp)) - eps; float ue = xexpf(u[i]) - eps; Source[i] = xexpf(Source[i]) - eps; - Source[i] = ce + DetailBoost * (Source[i] - ue); + Source[i] = std::max(ce + DetailBoost * (Source[i] - ue), 0.f); } #else @@ -959,7 +959,7 @@ void EdgePreservingDecomposition::CompressDynamicRange(float *Source, float Scal float ce = xexpf(Source[i] + u[i] * (temp)) - eps; float ue = xexpf(u[i]) - eps; Source[i] = xexpf(Source[i]) - eps; - Source[i] = ce + DetailBoost * (Source[i] - ue); + Source[i] = std::max(ce + DetailBoost * (Source[i] - ue), 0.f); } #endif