Preview performance improvement when using monitor profile
see issue #964
This commit is contained in:
@@ -157,7 +157,7 @@ void ImProcFunctions::firstAnalysis (Imagefloat* original, const ProcParams* par
|
|||||||
cmsHPROFILE iprof = iccStore->getXYZProfile ();
|
cmsHPROFILE iprof = iccStore->getXYZProfile ();
|
||||||
lcmsMutex->lock ();
|
lcmsMutex->lock ();
|
||||||
monitorTransform = cmsCreateTransform (iprof, TYPE_RGB_FLT, monitor, TYPE_RGB_8, settings->colorimetricIntent,
|
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 ();
|
lcmsMutex->unlock ();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -62,7 +62,7 @@ void ImProcFunctions::lab2rgb (LabImage* lab, Image8* image) {
|
|||||||
if (monitorTransform) {
|
if (monitorTransform) {
|
||||||
|
|
||||||
// cmsDoTransform is relatively expensive
|
// cmsDoTransform is relatively expensive
|
||||||
#pragma omp parallel for if (multiThread)
|
#pragma omp parallel for
|
||||||
for (int i=0; i<lab->H; i++) {
|
for (int i=0; i<lab->H; i++) {
|
||||||
float buffer[3*lab->W];
|
float buffer[3*lab->W];
|
||||||
float g;
|
float g;
|
||||||
@@ -91,9 +91,7 @@ void ImProcFunctions::lab2rgb (LabImage* lab, Image8* image) {
|
|||||||
buffer[iy++] = CLIP01(z_);
|
buffer[iy++] = CLIP01(z_);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (settings->LCMSSafeMode) lcmsMutex->lock ();
|
|
||||||
cmsDoTransform (monitorTransform, buffer, image->data + ix, lab->W);
|
cmsDoTransform (monitorTransform, buffer, image->data + ix, lab->W);
|
||||||
if (settings->LCMSSafeMode) lcmsMutex->unlock ();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
@@ -153,11 +151,11 @@ Image8* ImProcFunctions::lab2rgb (LabImage* lab, int cx, int cy, int cw, int ch,
|
|||||||
cmsHPROFILE iprof = iccStore->getXYZProfile ();
|
cmsHPROFILE iprof = iccStore->getXYZProfile ();
|
||||||
lcmsMutex->lock ();
|
lcmsMutex->lock ();
|
||||||
cmsHTRANSFORM hTransform = cmsCreateTransform (iprof, TYPE_RGB_16, oprof, TYPE_RGB_8, settings->colorimetricIntent,
|
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 ();
|
lcmsMutex->unlock ();
|
||||||
|
|
||||||
// cmsDoTransform is relatively expensive
|
// cmsDoTransform is relatively expensive
|
||||||
#pragma omp parallel for if (multiThread)
|
#pragma omp parallel for
|
||||||
for (int i=cy; i<cy+ch; i++) {
|
for (int i=cy; i<cy+ch; i++) {
|
||||||
short buffer [3*cw];
|
short buffer [3*cw];
|
||||||
float g;
|
float g;
|
||||||
@@ -184,9 +182,7 @@ Image8* ImProcFunctions::lab2rgb (LabImage* lab, int cx, int cy, int cw, int ch,
|
|||||||
buffer[iy++] = CLIP((int)z_);
|
buffer[iy++] = CLIP((int)z_);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (settings->LCMSSafeMode) lcmsMutex->lock ();
|
|
||||||
cmsDoTransform (hTransform, buffer, image->data + ix, cw);
|
cmsDoTransform (hTransform, buffer, image->data + ix, cw);
|
||||||
if (settings->LCMSSafeMode) lcmsMutex->unlock ();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
cmsDeleteTransform(hTransform);
|
cmsDeleteTransform(hTransform);
|
||||||
|
Reference in New Issue
Block a user