From 9ac2163c70b102bb0053649c66737ca10f627bd2 Mon Sep 17 00:00:00 2001 From: Oliver Duis Date: Sat, 3 Sep 2011 14:05:57 +0200 Subject: [PATCH] Preview performance improvement when using monitor profile see issue #964 --- rtengine/improcfun.cc | 2 +- rtengine/iplab2rgb.cc | 10 +++------- 2 files changed, 4 insertions(+), 8 deletions(-) diff --git a/rtengine/improcfun.cc b/rtengine/improcfun.cc index 9e1265192..d4cbf6267 100644 --- a/rtengine/improcfun.cc +++ b/rtengine/improcfun.cc @@ -157,7 +157,7 @@ void ImProcFunctions::firstAnalysis (Imagefloat* original, const ProcParams* par cmsHPROFILE iprof = iccStore->getXYZProfile (); lcmsMutex->lock (); monitorTransform = cmsCreateTransform (iprof, TYPE_RGB_FLT, monitor, TYPE_RGB_8, settings->colorimetricIntent, - settings->LCMSSafeMode ? cmsFLAGS_NOOPTIMIZE : cmsFLAGS_NOOPTIMIZE | cmsFLAGS_NOCACHE ); // NOCACHE is important for thread safety + cmsFLAGS_NOOPTIMIZE | cmsFLAGS_NOCACHE ); // NOCACHE is important for thread safety lcmsMutex->unlock (); } diff --git a/rtengine/iplab2rgb.cc b/rtengine/iplab2rgb.cc index dc26e1b10..b8de3a8ff 100644 --- a/rtengine/iplab2rgb.cc +++ b/rtengine/iplab2rgb.cc @@ -62,7 +62,7 @@ void ImProcFunctions::lab2rgb (LabImage* lab, Image8* image) { if (monitorTransform) { // cmsDoTransform is relatively expensive - #pragma omp parallel for if (multiThread) + #pragma omp parallel for for (int i=0; iH; i++) { float buffer[3*lab->W]; float g; @@ -91,9 +91,7 @@ void ImProcFunctions::lab2rgb (LabImage* lab, Image8* image) { buffer[iy++] = CLIP01(z_); } - if (settings->LCMSSafeMode) lcmsMutex->lock (); cmsDoTransform (monitorTransform, buffer, image->data + ix, lab->W); - if (settings->LCMSSafeMode) lcmsMutex->unlock (); } } else { @@ -153,11 +151,11 @@ Image8* ImProcFunctions::lab2rgb (LabImage* lab, int cx, int cy, int cw, int ch, cmsHPROFILE iprof = iccStore->getXYZProfile (); lcmsMutex->lock (); cmsHTRANSFORM hTransform = cmsCreateTransform (iprof, TYPE_RGB_16, oprof, TYPE_RGB_8, settings->colorimetricIntent, - settings->LCMSSafeMode ? cmsFLAGS_NOOPTIMIZE : cmsFLAGS_NOOPTIMIZE | cmsFLAGS_NOCACHE ); // NOCACHE is important for thread safety + cmsFLAGS_NOOPTIMIZE | cmsFLAGS_NOCACHE ); // NOCACHE is important for thread safety lcmsMutex->unlock (); // cmsDoTransform is relatively expensive - #pragma omp parallel for if (multiThread) + #pragma omp parallel for for (int i=cy; iLCMSSafeMode) lcmsMutex->lock (); cmsDoTransform (hTransform, buffer, image->data + ix, cw); - if (settings->LCMSSafeMode) lcmsMutex->unlock (); } cmsDeleteTransform(hTransform);