From 6486c491f8aafcb0e17b9c06172dbdaaf6b25cfa Mon Sep 17 00:00:00 2001 From: heckflosse Date: Wed, 5 Jun 2019 12:55:08 +0200 Subject: [PATCH] Vibrance causes RT to freeze, fixes #5346 --- rtengine/ipvibrance.cc | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/rtengine/ipvibrance.cc b/rtengine/ipvibrance.cc index 9bb4bc087..ca938fbbe 100644 --- a/rtengine/ipvibrance.cc +++ b/rtengine/ipvibrance.cc @@ -612,6 +612,7 @@ void ImProcFunctions::vibrance (LabImage* lab) const float fyy = Color::c1By116 * Lprov + Color::c16By116; const float yy_ = (Lprov > Color::epskap) ? fyy * fyy*fyy : Lprov / Color::kappaf; + float ChprovOld = std::numeric_limits::min(); do { inGamut = true; @@ -625,10 +626,15 @@ void ImProcFunctions::vibrance (LabImage* lab) hhModified = false; } } - aprovn = Chprov * sincosval.y; bprovn = Chprov * sincosval.x; + if (Chprov == ChprovOld) { // avoid endless loop + break; + } else { + ChprovOld = Chprov; + } + float fxx = 0.002f * aprovn + fyy; float fzz = fyy - 0.005f * bprovn; float xx_ = Color::f2xyz(fxx) * Color::D50x;