From a4ecae03b5531e9452e374da4c2e0a1ab92ae23a Mon Sep 17 00:00:00 2001 From: heckflosse Date: Mon, 18 Sep 2017 01:50:17 +0200 Subject: [PATCH] Use in place tranformations when using only luminance transformations. Fixes #4037 --- rtengine/improcfun.h | 2 +- rtengine/simpleprocess.cc | 14 ++++++++++---- 2 files changed, 11 insertions(+), 5 deletions(-) diff --git a/rtengine/improcfun.h b/rtengine/improcfun.h index e48ec3c7f..4f748a0c1 100644 --- a/rtengine/improcfun.h +++ b/rtengine/improcfun.h @@ -203,7 +203,7 @@ public: ImProcFunctions (const ProcParams* iparams, bool imultiThread = true) : monitorTransform (nullptr), lab2outputTransform (nullptr), output2monitorTransform (nullptr), params (iparams), scale (1), multiThread (imultiThread), lumimul{} {} ~ImProcFunctions (); - + bool needsLuminanceOnly() { return !(needsCA() || needsDistortion() || needsRotation() || needsPerspective() || needsLCP() || needsLensfun()) && (needsVignetting() || needsPCVignetting() || needsGradient());} void setScale (double iscale); bool needsTransform (); diff --git a/rtengine/simpleprocess.cc b/rtengine/simpleprocess.cc index fd0a67411..f128c145e 100644 --- a/rtengine/simpleprocess.cc +++ b/rtengine/simpleprocess.cc @@ -812,11 +812,17 @@ private: // perform transform (excepted resizing) if (ipf.needsTransform()) { - Imagefloat* trImg = new Imagefloat (fw, fh); - ipf.transform (baseImg, trImg, 0, 0, 0, 0, fw, fh, fw, fh, + Imagefloat* trImg = nullptr; + if (ipf.needsLuminanceOnly()) { + trImg = baseImg; + } else { + trImg = new Imagefloat (fw, fh); + } ipf.transform (baseImg, trImg, 0, 0, 0, 0, fw, fh, fw, fh, imgsrc->getMetaData(), imgsrc->getRotateDegree(), true); - delete baseImg; - baseImg = trImg; + if(trImg != baseImg) { + delete baseImg; + baseImg = trImg; + } } }