From 3a90374d599c56a19155488d0ff312b776f77e7e Mon Sep 17 00:00:00 2001 From: Alberto Griggio Date: Sun, 2 Apr 2017 10:35:19 +0200 Subject: [PATCH] Fixed handling of shadows/highlights in simpleprocess.cc (broken by the fast export refactoring) See issue #3793 --- rtengine/simpleprocess.cc | 19 +++++++++++++------ 1 file changed, 13 insertions(+), 6 deletions(-) diff --git a/rtengine/simpleprocess.cc b/rtengine/simpleprocess.cc index c49535a3c..2124ffb4d 100644 --- a/rtengine/simpleprocess.cc +++ b/rtengine/simpleprocess.cc @@ -55,6 +55,7 @@ public: tunnelMetaData(tunnelMetaData), flush(flush), // internal state + ipf_p(nullptr), ii(nullptr), imgsrc(nullptr), fw(-1), @@ -160,10 +161,11 @@ private: // MyTime t1,t2; // t1.set(); - ImProcFunctions ipf (¶ms, true); + ipf_p.reset(new ImProcFunctions(¶ms, true)); + ImProcFunctions &ipf = *(ipf_p.get()); pp = PreviewProps(0, 0, fw, fh, 1); - imgsrc->setCurrentFrame(params.raw.bayersensor.imageNum); + imgsrc->setCurrentFrame(params.raw.bayersensor.imageNum); imgsrc->preprocess( params.raw, params.lensProf, params.coarse, params.dirpyrDenoise.enabled); if (params.toneCurve.autoexp) {// this enabled HLRecovery @@ -733,7 +735,8 @@ private: void stage_denoise() { procparams::ProcParams& params = job->pparams; - ImProcFunctions ipf (¶ms, true); + //ImProcFunctions ipf (¶ms, true); + ImProcFunctions &ipf = *(ipf_p.get()); // perform luma/chroma denoise // CieImage *cieView; @@ -797,7 +800,8 @@ private: void stage_transform() { procparams::ProcParams& params = job->pparams; - ImProcFunctions ipf (¶ms, true); + //ImProcFunctions ipf (¶ms, true); + ImProcFunctions &ipf = *(ipf_p.get()); imgsrc->convertColorSpace(baseImg, params.icm, currWB); @@ -819,7 +823,8 @@ private: Image16 *stage_finish() { procparams::ProcParams& params = job->pparams; - ImProcFunctions ipf (¶ms, true); + //ImProcFunctions ipf (¶ms, true); + ImProcFunctions &ipf = *(ipf_p.get()); if (params.dirpyrequalizer.cbdlMethod == "bef" && params.dirpyrequalizer.enabled && !params.colorappearance.enabled) { const int W = baseImg->getWidth(); @@ -1344,7 +1349,8 @@ private: void stage_early_resize() { procparams::ProcParams& params = job->pparams; - ImProcFunctions ipf (¶ms, true); + //ImProcFunctions ipf (¶ms, true); + ImProcFunctions &ipf = *(ipf_p.get()); int imw, imh; double scale_factor = ipf.resizeScale(¶ms, fw, fh, imw, imh); @@ -1445,6 +1451,7 @@ private: bool flush; // internal state + std::unique_ptr ipf_p; InitialImage *ii; ImageSource *imgsrc; int fw;