diff --git a/rtdata/languages/default b/rtdata/languages/default index de85e25a2..09ebab0b4 100644 --- a/rtdata/languages/default +++ b/rtdata/languages/default @@ -2548,6 +2548,7 @@ TP_LOCALLAB_SHARAMOUNT;Amount TP_LOCALLAB_SHARBLUR;Blur radius TP_LOCALLAB_SHARDAMPING;Damping TP_LOCALLAB_SHARITER;Iterations +TP_LOCALLAB_SHARFRAME;Modifications TP_LOCALLAB_SHARP;Sharpening TP_LOCALLAB_SHARRADIUS;Radius TP_LOCALLAB_SHORTC;Short Curves 'L' Mask diff --git a/rtengine/dcrop.cc b/rtengine/dcrop.cc index 221b5c2eb..3c6a55317 100644 --- a/rtengine/dcrop.cc +++ b/rtengine/dcrop.cc @@ -1131,7 +1131,7 @@ void Crop::update(int todo) locwavCurveden, locwavdenutili, LHutili, HHutili, cclocalcurve2, localcutili, rgblocalcurve2, localrgbutili, localexutili, exlocalcurve2, hltonecurveloc2, shtonecurveloc2, tonecurveloc2, lightCurveloc2, huerefblu, chromarefblu, lumarefblu, huere, chromare, lumare, sobelre, lastsav, - parent->locallColorMask, parent->locallColorMaskinv, parent->locallExpMask, parent->locallExpMaskinv, parent->locallSHMask, parent->locallSHMaskinv, parent->locallvibMask, parent->localllcMask, parent->locallcbMask, parent->locallretiMask, parent->locallsoftMask, parent->localltmMask, parent->locallblMask, + parent->locallColorMask, parent->locallColorMaskinv, parent->locallExpMask, parent->locallExpMaskinv, parent->locallSHMask, parent->locallSHMaskinv, parent->locallvibMask, parent->localllcMask, parent->locallsharMask, parent->locallcbMask, parent->locallretiMask, parent->locallsoftMask, parent->localltmMask, parent->locallblMask, minCD, maxCD, mini, maxi, Tmean, Tsigma, Tmin, Tmax); if (parent->locallListener) { parent->locallListener->minmaxChanged(maxCD, minCD, mini, maxi, Tmean, Tsigma, Tmin, Tmax); @@ -1168,7 +1168,7 @@ void Crop::update(int todo) loccomprewavCurve, loccomprewavutili, locwavCurveden, locwavdenutili, LHutili, HHutili, cclocalcurve2, localcutili, rgblocalcurve2, localrgbutili, localexutili, exlocalcurve2, hltonecurveloc2, shtonecurveloc2, tonecurveloc2, lightCurveloc2, - huerefblu, chromarefblu, lumarefblu, huere, chromare, lumare, sobelre, lastsav, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + huerefblu, chromarefblu, lumarefblu, huere, chromare, lumare, sobelre, lastsav, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, minCD, maxCD, mini, maxi, Tmean, Tsigma, Tmin, Tmax); } diff --git a/rtengine/improccoordinator.cc b/rtengine/improccoordinator.cc index b3fd182c5..eaabf4869 100644 --- a/rtengine/improccoordinator.cc +++ b/rtengine/improccoordinator.cc @@ -262,6 +262,7 @@ ImProcCoordinator::ImProcCoordinator() : locallcbMask(0), locallretiMask(0), locallsoftMask(0), + locallsharMask(0), retistrsav(nullptr) { @@ -1257,7 +1258,7 @@ void ImProcCoordinator::updatePreviewImage(int todo, bool panningRelatedChange) locwavCurveden, locwavdenutili, LHutili, HHutili, cclocalcurve, localcutili, rgblocalcurve, localrgbutili, localexutili, exlocalcurve, hltonecurveloc, shtonecurveloc, tonecurveloc, lightCurveloc, huerblu, chromarblu, lumarblu, huer, chromar, lumar, sobeler, lastsav, - locallColorMask, locallColorMaskinv, locallExpMask, locallExpMaskinv, locallSHMask, locallSHMaskinv, locallvibMask, localllcMask, locallcbMask, locallretiMask, locallsoftMask, localltmMask, locallblMask, + locallColorMask, locallColorMaskinv, locallExpMask, locallExpMaskinv, locallSHMask, locallSHMaskinv, locallvibMask, localllcMask, locallsharMask, locallcbMask, locallretiMask, locallsoftMask, localltmMask, locallblMask, minCD, maxCD, mini, maxi, Tmean, Tsigma, Tmin, Tmax); if (locallListener) { @@ -1299,7 +1300,7 @@ void ImProcCoordinator::updatePreviewImage(int todo, bool panningRelatedChange) loccomprewavCurve, loccomprewavutili, locwavCurveden, locwavdenutili, LHutili, HHutili, cclocalcurve, localcutili, rgblocalcurve, localrgbutili, localexutili, exlocalcurve, hltonecurveloc, shtonecurveloc, tonecurveloc, lightCurveloc, - huerblu, chromarblu, lumarblu, huer, chromar, lumar, sobeler, lastsav, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + huerblu, chromarblu, lumarblu, huer, chromar, lumar, sobeler, lastsav, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, minCD, maxCD, mini, maxi, Tmean, Tsigma, Tmin, Tmax); } diff --git a/rtengine/improccoordinator.h b/rtengine/improccoordinator.h index c4191dc0e..04e7c8718 100644 --- a/rtengine/improccoordinator.h +++ b/rtengine/improccoordinator.h @@ -373,6 +373,7 @@ protected: int locallsoftMask; int localltmMask; int locallblMask; + int locallsharMask; public: @@ -442,7 +443,7 @@ public: updaterThreadStart.unlock(); } - void setLocallabMaskVisibility (int locallColorMask, int locallColorMaskinv, int locallExpMask, int locallExpMaskinv, int locallSHMask, int locallSHMaskinv, int locallvibMask, int localllcMask, int locallcbMask, int locallretiMask, int locallsoftMask, int localltmMask, int locallblMask) override + void setLocallabMaskVisibility (int locallColorMask, int locallColorMaskinv, int locallExpMask, int locallExpMaskinv, int locallSHMask, int locallSHMaskinv, int locallvibMask, int localllcMask, int locallsharMask, int locallcbMask, int locallretiMask, int locallsoftMask, int localltmMask, int locallblMask) override { this->locallColorMask = locallColorMask; this->locallColorMaskinv = locallColorMaskinv; @@ -452,6 +453,7 @@ public: this->locallvibMask = locallvibMask; this->locallSHMaskinv = locallSHMaskinv; this->localllcMask = localllcMask; + this->locallsharMask = locallsharMask; this->locallcbMask = locallcbMask; this->locallretiMask = locallretiMask; this->locallsoftMask = locallsoftMask; diff --git a/rtengine/improcfun.h b/rtengine/improcfun.h index 9a48670e8..b6068fbca 100644 --- a/rtengine/improcfun.h +++ b/rtengine/improcfun.h @@ -308,7 +308,7 @@ public: const LocwavCurve & locwavCurveden, bool & locwavdenutili, bool &LHutili, bool &HHutili, LUTf & cclocalcurve, bool & localcutili, LUTf & rgblocalcurve, bool & localrgbutili, bool & localexutili, LUTf & exlocalcurve, LUTf & hltonecurveloc, LUTf & shtonecurveloc, LUTf & tonecurveloc, LUTf & lightCurveloc, double & huerefblur, double &chromarefblur, double & lumarefblur, double &hueref, double &chromaref, double &lumaref, double &sobelref, int &lastsav, - int llColorMask, int llColorMaskinv, int llExpMask, int llExpMaskinv, int llSHMask, int llSHMaskinv, int llvibMask, int lllcMask, int llcbMask, int llretiMask, int llsoftMask, int lltmMask, int llblMask, + int llColorMask, int llColorMaskinv, int llExpMask, int llExpMaskinv, int llSHMask, int llSHMaskinv, int llvibMask, int lllcMask, int llsharMask, int llcbMask, int llretiMask, int llsoftMask, int lltmMask, int llblMask, float &minCD, float &maxCD, float &mini, float &maxi, float &Tmean, float &Tsigma, float &Tmin, float &Tmax); void addGaNoise(LabImage *lab, LabImage *dst, const float mean, const float variance, const int sk); @@ -350,7 +350,7 @@ public: void ColorLight_Local(float moddE, float powdE, int call, LabImage * bufcolorig, LabImage * originalmask, float **buflight, float **bufchro, float **bufchroslid, float ** bufhh, float ** buflightslid, bool &LHutili, bool &HHutili, const float hueplus, const float huemoins, const float hueref, const float dhue, const float chromaref, const float lumaref, float sobelref, float ** blend2, LUTf & lllocalcurve, const LocLHCurve & loclhCurve, const LocHHCurve & lochhCurve, LUTf & lightCurveloc, const local_params& lp, LabImage* original, LabImage* transformed, int cx, int cy, int sk); void InverseColorLight_Local(bool tonequ, bool tonecurv, int sp, int senstype, struct local_params& lp, LabImage * originalmask, LUTf & lightCurveloc, LUTf & hltonecurveloc, LUTf & shtonecurveloc, LUTf & tonecurveloc, LUTf & exlocalcurve, LUTf & cclocalcurve, float adjustr, bool localcutili, LUTf & lllocalcurve, bool locallutili, LabImage* original, LabImage* transformed, int cx, int cy, const float hueref, const float chromaref, const float lumaref, int sk); - void Sharp_Local(int call, float **loctemp, int senstype, const float hueref, const float chromaref, const float lumaref, const local_params & lp, LabImage * original, LabImage * transformed, int cx, int cy, int sk); + void Sharp_Local(int call, float **loctemp, int senstype, const float hueref, const float chromaref, const float lumaref, local_params & lp, LabImage * original, LabImage * transformed, int cx, int cy, int sk); // void Sharp_Local(int call, float **loctemp, int senstype, const float hueplus, const float huemoins, const float hueref, const float dhue, const float chromaref, const local_params& lp, LabImage* original, LabImage* transformed, int cx, int cy, int sk); void InverseSharp_Local(float **loctemp, const float hueref, const float lumaref, const float chromaref, const local_params& lp, LabImage* original, LabImage* transformed, int cx, int cy, int sk); diff --git a/rtengine/iplocallab.cc b/rtengine/iplocallab.cc index 87be6cd48..abc9b071a 100644 --- a/rtengine/iplocallab.cc +++ b/rtengine/iplocallab.cc @@ -323,6 +323,7 @@ struct local_params { int showmaskSHmetinv; int showmaskvibmet; int showmasklcmet; + int showmasksharmet; int showmaskcbmet; int showmaskretimet; int showmasksoftmet; @@ -401,6 +402,7 @@ struct local_params { bool enaSHMaskinv; bool enavibMask; bool enalcMask; + bool enasharMask; bool enacbMask; bool enaretiMask; bool enaretiMasktmap; @@ -510,7 +512,7 @@ static void SobelCannyLuma(float **sobelL, float **luma, int bfw, int bfh, float -static void calcLocalParams(int sp, int oW, int oH, const LocallabParams& locallab, struct local_params& lp, int llColorMask, int llColorMaskinv, int llExpMask, int llExpMaskinv, int llSHMask, int llSHMaskinv, int llvibMask, int lllcMask, int llcbMask, int llretiMask, int llsoftMask, int lltmMask, int llblMask, const LocwavCurve & locwavCurveden, bool & locwavdenutili) +static void calcLocalParams(int sp, int oW, int oH, const LocallabParams& locallab, struct local_params& lp, int llColorMask, int llColorMaskinv, int llExpMask, int llExpMaskinv, int llSHMask, int llSHMaskinv, int llvibMask, int lllcMask, int llsharMask, int llcbMask, int llretiMask, int llsoftMask, int lltmMask, int llblMask, const LocwavCurve & locwavCurveden, bool & locwavdenutili) { int w = oW; int h = oH; @@ -524,7 +526,6 @@ static void calcLocalParams(int sp, int oW, int oH, const LocallabParams& locall float strlight = ((float)locallab.spots.at(sp).streng); float strucc = locallab.spots.at(sp).struc; float laplac = ((float)locallab.spots.at(sp).laplace); - float thre = locallab.spots.at(sp).thresh; if (thre > 8.f || thre < 0.f) {//to avoid artifacts if user does not clear cache with new settings. Can be suppressed after @@ -599,23 +600,25 @@ static void calcLocalParams(int sp, int oW, int oH, const LocallabParams& locall lp.showmaskSHmetinv = llSHMaskinv; lp.showmaskvibmet = llvibMask; lp.showmasklcmet = lllcMask; + lp.showmasksharmet = llsharMask; lp.showmaskcbmet = llcbMask; lp.showmaskretimet = llretiMask; lp.showmasksoftmet = llsoftMask; lp.showmasktmmet = lltmMask; lp.showmaskblmet = llblMask; - lp.enaColorMask = locallab.spots.at(sp).enaColorMask && llColorMask == 0 && lllcMask == 0 && llExpMask == 0 && llSHMask == 0 && llcbMask == 0 && llretiMask == 0 && lltmMask == 0 && llblMask == 0 && llvibMask == 0;// Exposure mask is deactivated if Color & Light mask is visible - lp.enaColorMaskinv = locallab.spots.at(sp).enaColorMask && llColorMaskinv == 0 && lllcMask == 0 && llExpMask == 0 && llSHMask == 0 && llcbMask == 0 && llretiMask == 0 && lltmMask == 0 && llblMask == 0 && llvibMask == 0;// Exposure mask is deactivated if Color & Light mask is visible - lp.enaExpMask = locallab.spots.at(sp).enaExpMask && llExpMask == 0 && llColorMask == 0 && lllcMask == 0 && llSHMask == 0 && llcbMask == 0 && llretiMask == 0 && lltmMask == 0 && llblMask == 0 && llvibMask == 0;// Exposure mask is deactivated if Color & Light mask is visible - lp.enaExpMaskinv = locallab.spots.at(sp).enaExpMask && llExpMaskinv == 0 && llColorMask == 0 && lllcMask == 0 && llSHMask == 0 && llcbMask == 0 && llretiMask == 0 && lltmMask == 0 && llblMask == 0 && llvibMask == 0;// Exposure mask is deactivated if Color & Light mask is visible - lp.enaSHMask = locallab.spots.at(sp).enaSHMask && llSHMask == 0 && llColorMask == 0 && lllcMask == 0 && llExpMask == 0 && llcbMask == 0 && llretiMask == 0 && lltmMask == 0 && llblMask == 0 && llvibMask == 0; - lp.enaSHMaskinv = locallab.spots.at(sp).enaSHMask && llSHMaskinv == 0 && lllcMask == 0 && llColorMask == 0 && llExpMask == 0 && llcbMask == 0 && llretiMask == 0 && lltmMask == 0 && llblMask == 0 && llvibMask == 0; - lp.enacbMask = locallab.spots.at(sp).enacbMask && llcbMask == 0 && lllcMask == 0 && llColorMask == 0 && llExpMask == 0 && llSHMask == 0 && llretiMask == 0 && lltmMask == 0 && llblMask == 0 && llvibMask == 0; - lp.enaretiMask = locallab.spots.at(sp).enaretiMask && lllcMask == 0 && llretiMask == 0 && llColorMask == 0 && llExpMask == 0 && llSHMask == 0 && llcbMask == 0 && lltmMask == 0 && llblMask == 0 && llvibMask == 0; - lp.enatmMask = locallab.spots.at(sp).enatmMask && lltmMask == 0 && lllcMask == 0 && llColorMask == 0 && llExpMask == 0 && llSHMask == 0 && llcbMask == 0 && llretiMask == 0 && llblMask == 0 && llvibMask == 0; - lp.enablMask = locallab.spots.at(sp).enablMask && llblMask == 0 && lllcMask == 0 && llColorMask == 0 && llExpMask == 0 && llSHMask == 0 && llcbMask == 0 && llretiMask == 0 && lltmMask == 0 && llvibMask == 0; - lp.enavibMask = locallab.spots.at(sp).enavibMask && llvibMask == 0 && lllcMask == 0 && llColorMask == 0 && llExpMask == 0 && llcbMask == 0 && llretiMask == 0 && lltmMask == 0 && llblMask == 0 && llSHMask == 0; - lp.enalcMask = locallab.spots.at(sp).enalcMask && lllcMask == 0 && llcbMask == 0 && llColorMask == 0 && llExpMask == 0 && llSHMask == 0 && llretiMask == 0 && lltmMask == 0 && llblMask == 0 && llvibMask == 0; + lp.enaColorMask = locallab.spots.at(sp).enaColorMask && llColorMask == 0 && lllcMask == 0 && llsharMask == 0 && llExpMask == 0 && llSHMask == 0 && llcbMask == 0 && llretiMask == 0 && lltmMask == 0 && llblMask == 0 && llvibMask == 0;// Exposure mask is deactivated if Color & Light mask is visible + lp.enaColorMaskinv = locallab.spots.at(sp).enaColorMask && llColorMaskinv == 0 && lllcMask == 0 && llsharMask == 0 && llExpMask == 0 && llSHMask == 0 && llcbMask == 0 && llretiMask == 0 && lltmMask == 0 && llblMask == 0 && llvibMask == 0;// Exposure mask is deactivated if Color & Light mask is visible + lp.enaExpMask = locallab.spots.at(sp).enaExpMask && llExpMask == 0 && llColorMask == 0 && lllcMask == 0 && llsharMask == 0 && llSHMask == 0 && llcbMask == 0 && llretiMask == 0 && lltmMask == 0 && llblMask == 0 && llvibMask == 0;// Exposure mask is deactivated if Color & Light mask is visible + lp.enaExpMaskinv = locallab.spots.at(sp).enaExpMask && llExpMaskinv == 0 && llColorMask == 0 && lllcMask == 0 && llsharMask == 0 && llSHMask == 0 && llcbMask == 0 && llretiMask == 0 && lltmMask == 0 && llblMask == 0 && llvibMask == 0;// Exposure mask is deactivated if Color & Light mask is visible + lp.enaSHMask = locallab.spots.at(sp).enaSHMask && llSHMask == 0 && llColorMask == 0 && lllcMask == 0 && llsharMask == 0 && llExpMask == 0 && llcbMask == 0 && llretiMask == 0 && lltmMask == 0 && llblMask == 0 && llvibMask == 0; + lp.enaSHMaskinv = locallab.spots.at(sp).enaSHMask && llSHMaskinv == 0 && lllcMask == 0 && llsharMask == 0 && llColorMask == 0 && llExpMask == 0 && llcbMask == 0 && llretiMask == 0 && lltmMask == 0 && llblMask == 0 && llvibMask == 0; + lp.enacbMask = locallab.spots.at(sp).enacbMask && llcbMask == 0 && lllcMask == 0 && llsharMask == 0 && llColorMask == 0 && llExpMask == 0 && llSHMask == 0 && llretiMask == 0 && lltmMask == 0 && llblMask == 0 && llvibMask == 0; + lp.enaretiMask = locallab.spots.at(sp).enaretiMask && lllcMask == 0 && llsharMask == 0 && llretiMask == 0 && llColorMask == 0 && llExpMask == 0 && llSHMask == 0 && llcbMask == 0 && lltmMask == 0 && llblMask == 0 && llvibMask == 0; + lp.enatmMask = locallab.spots.at(sp).enatmMask && lltmMask == 0 && lllcMask == 0 && llsharMask == 0 && llColorMask == 0 && llExpMask == 0 && llSHMask == 0 && llcbMask == 0 && llretiMask == 0 && llblMask == 0 && llvibMask == 0; + lp.enablMask = locallab.spots.at(sp).enablMask && llblMask == 0 && lllcMask == 0 && llsharMask == 0 && llColorMask == 0 && llExpMask == 0 && llSHMask == 0 && llcbMask == 0 && llretiMask == 0 && lltmMask == 0 && llvibMask == 0; + lp.enavibMask = locallab.spots.at(sp).enavibMask && llvibMask == 0 && lllcMask == 0 && llsharMask == 0 && llColorMask == 0 && llExpMask == 0 && llcbMask == 0 && llretiMask == 0 && lltmMask == 0 && llblMask == 0 && llSHMask == 0; + lp.enalcMask = locallab.spots.at(sp).enalcMask && lllcMask == 0 && llcbMask == 0 && llsharMask == 0 && llColorMask == 0 && llExpMask == 0 && llSHMask == 0 && llretiMask == 0 && lltmMask == 0 && llblMask == 0 && llvibMask == 0; + lp.enasharMask = lllcMask == 0 && llcbMask == 0 && llsharMask == 0 && llColorMask == 0 && llExpMask == 0 && llSHMask == 0 && llretiMask == 0 && lltmMask == 0 && llblMask == 0 && llvibMask == 0; // printf("llColorMask=%i lllcMask=%i llExpMask=%i llSHMask=%i llcbMask=%i llretiMask=%i lltmMask=%i llblMask=%i llvibMask=%i\n", llColorMask, lllcMask, llExpMask, llSHMask, llcbMask, llretiMask, lltmMask, llblMask, llvibMask); if (locallab.spots.at(sp).softMethod == "soft") { @@ -1124,16 +1127,16 @@ static void calcLocalParams(int sp, int oW, int oH, const LocallabParams& locall lp.chromacb = chromcbdl; lp.sfena = locallab.spots.at(sp).expsoft; lp.expvib = locallab.spots.at(sp).expvibrance; - lp.colorena = locallab.spots.at(sp).expcolor && llExpMask == 0 && llSHMask == 0 && llcbMask == 0 && lllcMask == 0 && llretiMask == 0 && lltmMask == 0 && llvibMask == 0; // Color & Light tool is deactivated if Exposure mask is visible or SHMask - lp.blurena = locallab.spots.at(sp).expblur && llExpMask == 0 && llSHMask == 0 && llcbMask == 0 && lllcMask == 0 && llretiMask == 0 && llColorMask == 0 && lltmMask == 0 && llvibMask == 0; - lp.tonemapena = locallab.spots.at(sp).exptonemap && llExpMask == 0 && llSHMask == 0 && llcbMask == 0 && lllcMask == 0 && llretiMask == 0 && llColorMask == 0 && llvibMask == 0; - lp.retiena = locallab.spots.at(sp).expreti && llExpMask == 0 && llSHMask == 0 && llcbMask == 0 && lllcMask == 0 && llColorMask == 0 && lltmMask == 0 && llvibMask == 0 && llSHMask == 0; - lp.lcena = locallab.spots.at(sp).expcontrast && llExpMask == 0 && llSHMask == 0 && llcbMask == 0 && llColorMask == 0 && lltmMask == 0 && llvibMask == 0 && llSHMask == 0; - lp.cbdlena = locallab.spots.at(sp).expcbdl && llExpMask == 0 && llSHMask == 0 && llretiMask == 0 && lllcMask == 0 && lllcMask == 0 && llColorMask == 0 && lltmMask == 0 && llvibMask == 0; - lp.exposena = locallab.spots.at(sp).expexpose && llColorMask == 0 && llSHMask == 0 && lllcMask == 0 && llcbMask == 0 && llretiMask == 0 && lltmMask == 0 && llvibMask == 0; // Exposure tool is deactivated if Color & Light mask SHmask is visible - lp.hsena = locallab.spots.at(sp).expshadhigh && llColorMask == 0 && llExpMask == 0 && llcbMask == 0 && lllcMask == 0 && llretiMask == 0 && lltmMask == 0 && llvibMask == 0;// Shadow Highlight tool is deactivated if Color & Light mask or SHmask is visible - lp.vibena = locallab.spots.at(sp).expvibrance && llColorMask == 0 && llExpMask == 0 && llcbMask == 0 && lllcMask == 0 && llretiMask == 0 && llcbMask == 0 && lltmMask == 0 && llSHMask == 0;// vibrance tool is deactivated if Color & Light mask or SHmask is visible - lp.sharpena = locallab.spots.at(sp).expsharp; + lp.colorena = locallab.spots.at(sp).expcolor && llExpMask == 0 && llSHMask == 0 && llcbMask == 0 && lllcMask == 0 && llsharMask == 0 && llretiMask == 0 && lltmMask == 0 && llvibMask == 0; // Color & Light tool is deactivated if Exposure mask is visible or SHMask + lp.blurena = locallab.spots.at(sp).expblur && llExpMask == 0 && llSHMask == 0 && llcbMask == 0 && lllcMask == 0 && llsharMask == 0 && llretiMask == 0 && llColorMask == 0 && lltmMask == 0 && llvibMask == 0; + lp.tonemapena = locallab.spots.at(sp).exptonemap && llExpMask == 0 && llSHMask == 0 && llcbMask == 0 && lllcMask == 0 && llsharMask == 0 && llretiMask == 0 && llColorMask == 0 && llvibMask == 0; + lp.retiena = locallab.spots.at(sp).expreti && llExpMask == 0 && llSHMask == 0 && llcbMask == 0 && lllcMask == 0 && llsharMask == 0 && llColorMask == 0 && lltmMask == 0 && llvibMask == 0 && llSHMask == 0; + lp.lcena = locallab.spots.at(sp).expcontrast && llExpMask == 0 && llSHMask == 0 && llcbMask == 0 && llsharMask == 0 && llColorMask == 0 && lltmMask == 0 && llvibMask == 0 && llSHMask == 0; + lp.cbdlena = locallab.spots.at(sp).expcbdl && llExpMask == 0 && llSHMask == 0 && llretiMask == 0 && lllcMask == 0 && llsharMask == 0 && lllcMask == 0 && llColorMask == 0 && lltmMask == 0 && llvibMask == 0; + lp.exposena = locallab.spots.at(sp).expexpose && llColorMask == 0 && llSHMask == 0 && lllcMask == 0 && llsharMask == 0 && llcbMask == 0 && llretiMask == 0 && lltmMask == 0 && llvibMask == 0; // Exposure tool is deactivated if Color & Light mask SHmask is visible + lp.hsena = locallab.spots.at(sp).expshadhigh && llColorMask == 0 && llExpMask == 0 && llcbMask == 0 && lllcMask == 0 && llsharMask == 0 && llretiMask == 0 && lltmMask == 0 && llvibMask == 0;// Shadow Highlight tool is deactivated if Color & Light mask or SHmask is visible + lp.vibena = locallab.spots.at(sp).expvibrance && llColorMask == 0 && llExpMask == 0 && llcbMask == 0 && lllcMask == 0 && llsharMask == 0 && llretiMask == 0 && llcbMask == 0 && lltmMask == 0 && llSHMask == 0;// vibrance tool is deactivated if Color & Light mask or SHmask is visible + lp.sharpena = locallab.spots.at(sp).expsharp && llColorMask == 0 && llExpMask == 0 && llcbMask == 0 && lllcMask == 0 && llretiMask == 0 && llcbMask == 0 && lltmMask == 0 && llSHMask == 0; lp.sensv = local_sensiv; lp.past = chromaPastel; lp.satur = chromaSatur; @@ -4407,11 +4410,13 @@ void ImProcFunctions::InverseSharp_Local(float **loctemp, const float hueref, co } -void ImProcFunctions::Sharp_Local(int call, float **loctemp, int senstype, const float hueref, const float chromaref, const float lumaref, const local_params & lp, LabImage * original, LabImage * transformed, int cx, int cy, int sk) +void ImProcFunctions::Sharp_Local(int call, float **loctemp, int senstype, const float hueref, const float chromaref, const float lumaref, local_params & lp, LabImage * original, LabImage * transformed, int cx, int cy, int sk) { BENCHFUN const float ach = lp.trans / 100.f; const float varsens = senstype == 1 ? lp.senslc : lp.senssha; + const bool sharshow = (lp.showmasksharmet == 1); + const bool previewshar = (lp.showmasksharmet == 2); //balance deltaE //balance deltaE @@ -4425,6 +4430,17 @@ void ImProcFunctions::Sharp_Local(int call, float **loctemp, int senstype, const kab /= SQR(327.68f); kL /= SQR(327.68f); + if (lp.colorde == 0) { + lp.colorde = -1;//to avoid black + } + + float ampli = 1.f + fabs(lp.colorde); + ampli = 2.f + 0.5f * (ampli - 2.f); + + float darklim = 5000.f; + float aadark = -1.f; + float bbdark = darklim; + const int GW = transformed->W; const int GH = transformed->H; @@ -4491,7 +4507,9 @@ void ImProcFunctions::Sharp_Local(int call, float **loctemp, int senstype, const float reducdE = 0.f; + float reducview = 0.f; calcreducdE(dE, maxdE, mindE, maxdElim, mindElim, lp.iterat, limscope, varsens, reducdE); + reducview = reducdE; reducdE *= localFactor; float difL; @@ -4503,6 +4521,25 @@ void ImProcFunctions::Sharp_Local(int call, float **loctemp, int senstype, const } transformed->L[y][x] = CLIP(original->L[y][x] + difL * reducdE); + if(sharshow) { + transformed->a[y][x] = 0.f; + transformed->b[y][x] = 20.f * difL * reducdE; + } else if(previewshar) { + float difbdisp = reducdE * 10000.f * lp.colorde; + if (transformed->L[y][x] < darklim) { //enhance dark luminance as user can see! + float dark = transformed->L[y][x]; + transformed->L[y][x] = dark * aadark + bbdark; + } + + if (lp.colorde <= 0) { + transformed->a[y][x] = 0.f; + transformed->b[y][x] = difbdisp; + } else { + transformed->a[y][x] = -difbdisp; + transformed->b[y][x] = 0.f; + } + + } } } } @@ -5673,7 +5710,7 @@ void ImProcFunctions::calc_ref(int sp, LabImage * original, LabImage * transform if (params->locallab.enabled) { //always calculate hueref, chromaref, lumaref before others operations use in normal mode for all modules exceprt denoise struct local_params lp; - calcLocalParams(sp, oW, oH, params->locallab, lp, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, locwavCurveden, locwavdenutili); + calcLocalParams(sp, oW, oH, params->locallab, lp, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, locwavCurveden, locwavdenutili); int begy = lp.yc - lp.lyT; int begx = lp.xc - lp.lxL; int yEn = lp.yc + lp.ly; @@ -9499,7 +9536,7 @@ void ImProcFunctions::Lab_Local(int call, int sp, float** shbuffer, LabImage * o const LocwavCurve & locwavCurveden, bool & locwavdenutili, bool & LHutili, bool & HHutili, LUTf & cclocalcurve, bool & localcutili, LUTf & rgblocalcurve, bool & localrgbutili, bool & localexutili, LUTf & exlocalcurve, LUTf & hltonecurveloc, LUTf & shtonecurveloc, LUTf & tonecurveloc, LUTf & lightCurveloc, double & huerefblur, double & chromarefblur, double & lumarefblur, double & hueref, double & chromaref, double & lumaref, double & sobelref, int &lastsav, - int llColorMask, int llColorMaskinv, int llExpMask, int llExpMaskinv, int llSHMask, int llSHMaskinv, int llvibMask, int lllcMask, int llcbMask, int llretiMask, int llsoftMask, int lltmMask, int llblMask, + int llColorMask, int llColorMaskinv, int llExpMask, int llExpMaskinv, int llSHMask, int llSHMaskinv, int llvibMask, int lllcMask, int llsharMask, int llcbMask, int llretiMask, int llsoftMask, int lltmMask, int llblMask, float & minCD, float & maxCD, float & mini, float & maxi, float & Tmean, float & Tsigma, float & Tmin, float & Tmax) { //general call of others functions : important return hueref, chromaref, lumaref @@ -9514,7 +9551,7 @@ void ImProcFunctions::Lab_Local(int call, int sp, float** shbuffer, LabImage * o int del = 3; // to avoid crash with [loy - begy] and [lox - begx] and bfh bfw // with gtk2 [loy - begy-1] [lox - begx -1 ] and del = 1 int delxy = 0; struct local_params lp; - calcLocalParams(sp, oW, oH, params->locallab, lp, llColorMask, llColorMaskinv, llExpMask, llExpMaskinv, llSHMask, llSHMaskinv, llvibMask, lllcMask, llcbMask, llretiMask, llsoftMask, lltmMask, llblMask, locwavCurveden, locwavdenutili); + calcLocalParams(sp, oW, oH, params->locallab, lp, llColorMask, llColorMaskinv, llExpMask, llExpMaskinv, llSHMask, llSHMaskinv, llvibMask, lllcMask, llsharMask, llcbMask, llretiMask, llsoftMask, lltmMask, llblMask, locwavCurveden, locwavdenutili); const float radius = lp.rad / (sk * 1.4f); //0 to 70 ==> see skip int strred = 1;//(lp.strucc - 1); diff --git a/rtengine/procevents.h b/rtengine/procevents.h index 3344c19d8..e4498903b 100644 --- a/rtengine/procevents.h +++ b/rtengine/procevents.h @@ -920,6 +920,7 @@ enum ProcEventCode { Evlocallabstrlog = 891, Evlocallabanglog = 892, EvLocallabSpotcolorde = 893, + EvlocallabshowmasksharMethod = 894, NUMOFEVENTS }; diff --git a/rtengine/refreshmap.cc b/rtengine/refreshmap.cc index 9bf0ebb3f..2e01fba0b 100644 --- a/rtengine/refreshmap.cc +++ b/rtengine/refreshmap.cc @@ -923,7 +923,8 @@ int refreshmap[rtengine::NUMOFEVENTS] = { LUMINANCECURVE, //Evlocallabwavgradl LUMINANCECURVE, //Evlocallabstrlog LUMINANCECURVE, //Evlocallabanglog - LUMINANCECURVE //EvLocallabSpotcolorde + LUMINANCECURVE, //EvLocallabSpotcolorde + LUMINANCECURVE // EvlocallabshowmasksharMethod }; diff --git a/rtengine/rtengine.h b/rtengine/rtengine.h index cbfcf63bb..be623ce57 100644 --- a/rtengine/rtengine.h +++ b/rtengine/rtengine.h @@ -524,7 +524,7 @@ public: virtual void updateUnLock() = 0; - virtual void setLocallabMaskVisibility(int locallColorMask, int locallColorMaskinv, int locallExpMask, int locallExpMaskinv, int locallvibMask, int locallSHMask, int locallSHMaskinv, int localllcMask, int locallcbMask, int locallretiMask, int locallsoftMask, int localltmMask, int locallblMask) = 0; + virtual void setLocallabMaskVisibility(int locallColorMask, int locallColorMaskinv, int locallExpMask, int locallExpMaskinv, int locallvibMask, int locallSHMask, int locallSHMaskinv, int localllcMask, int locallsharMask, int locallcbMask, int locallretiMask, int locallsoftMask, int localltmMask, int locallblMask) = 0; /** Creates and returns a Crop instance that acts as a window on the image * @param editDataProvider pointer to the EditDataProvider that communicates with the EditSubscriber diff --git a/rtengine/simpleprocess.cc b/rtengine/simpleprocess.cc index 6e16c0adf..5314c9a71 100644 --- a/rtengine/simpleprocess.cc +++ b/rtengine/simpleprocess.cc @@ -1328,7 +1328,7 @@ private: loccomprewavCurve, loccomprewavutili, locwavCurveden, locwavdenutili, LHutili, HHutili, cclocalcurve, localcutili, rgblocalcurve, localrgbutili, localexutili, exlocalcurve, hltonecurveloc, shtonecurveloc, tonecurveloc, lightCurveloc, - huerefblu, chromarefblu, lumarefblu, huere, chromare, lumare, sobelre, lastsav, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + huerefblu, chromarefblu, lumarefblu, huere, chromare, lumare, sobelre, lastsav, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, minCD, maxCD, mini, maxi, Tmean, Tsigma, Tmin, Tmax); lastorigView->CopyFrom(labView); diff --git a/rtgui/locallab.cc b/rtgui/locallab.cc index 96eb25307..b0fb075ae 100644 --- a/rtgui/locallab.cc +++ b/rtgui/locallab.cc @@ -744,6 +744,9 @@ showmasktmMethod(Gtk::manage(new MyComboBoxText())), // Retinex retinexMethod(Gtk::manage(new MyComboBoxText())), showmaskretiMethod(Gtk::manage(new MyComboBoxText())), +//sharp +showmasksharMethod(Gtk::manage(new MyComboBoxText())), + //Local contrast localcontMethod(Gtk::manage(new MyComboBoxText())), csThreshold(Gtk::manage(new ThresholdAdjuster(M("TP_LOCALLAB_CSTHRESHOLD"), 0, 9, 0, 0, 6, 6, 0, false))), @@ -779,6 +782,7 @@ dehaFrame(Gtk::manage(new Gtk::Frame(M("TP_LOCALLAB_DEHAFRA")))), retiFrame(Gtk::manage(new Gtk::Frame(M("TP_LOCALLAB_RETIFRA")))), retitoolFrame(Gtk::manage(new Gtk::Frame(M("TP_LOCALLAB_RETITOOLFRA")))), residFrame(Gtk::manage(new Gtk::Frame(M("TP_LOCALLAB_RESID")))), +sharFrame(Gtk::manage(new Gtk::Frame(M("TP_LOCALLAB_SHARFRAME")))), clariFrame(Gtk::manage(new Gtk::Frame(M("TP_LOCALLAB_CLARIFRA")))), gradwavFrame(Gtk::manage(new Gtk::Frame(M("TP_LOCALLAB_GRADWAVFRA")))), blurlevelFrame(Gtk::manage(new Gtk::Frame(M("TP_LOCALLAB_BLURLEVELFRA")))), @@ -2802,6 +2806,21 @@ pe(nullptr) inversshaConn = inverssha->signal_toggled().connect(sigc::mem_fun(*this, &Locallab::inversshaChanged)); + showmasksharMethod->append(M("TP_LOCALLAB_SHOWMNONE")); + showmasksharMethod->append(M("TP_LOCALLAB_SHOWMODIF")); + showmasksharMethod->append(M("TP_LOCALLAB_PREVIEWSEL")); + showmasksharMethod->set_active(0); + + if (showtooltip) { + showmasksharMethod->set_tooltip_markup(M("TP_LOCALLAB_SHOWMASKCOL_TOOLTIP")); + } + + showmasksharMethodConn = showmasksharMethod->signal_changed().connect(sigc::mem_fun(*this, &Locallab::showmasksharMethodChanged)); + sharFrame->set_label_align(0.025, 0.5); + ToolParamBlock* const sharfBox = Gtk::manage(new ToolParamBlock()); + sharfBox->pack_start(*showmasksharMethod); + sharFrame->add(*sharfBox); + ToolParamBlock* const sharpBox = Gtk::manage(new ToolParamBlock()); sharpBox->pack_start(*sharcontrast); sharpBox->pack_start(*sharradius); @@ -2821,6 +2840,7 @@ pe(nullptr) sharpBox->pack_start(*sensisha); sharpBox->pack_start(*inverssha); + sharpBox->pack_start(*sharFrame); expsharp->add(*sharpBox, false); expsharp->setLevel(2); @@ -7164,6 +7184,7 @@ void Locallab::showmaskcolMethodChanged() showmaskblMethod->set_active(0); showmasklcMethod->set_active(0); showmaskcbMethod->set_active(0); + showmasksharMethod->set_active(0); enableListener(); @@ -7190,6 +7211,7 @@ void Locallab::showmaskcolMethodChangedinv() showmasksoftMethod->set_active(0); showmasktmMethod->set_active(0); showmaskblMethod->set_active(0); + showmasksharMethod->set_active(0); enableListener(); if (listener) { @@ -7215,6 +7237,7 @@ void Locallab::showmaskexpMethodChangedinv() showmasksoftMethod->set_active(0); showmasktmMethod->set_active(0); showmaskblMethod->set_active(0); + showmasksharMethod->set_active(0); enableListener(); if (listener) { @@ -7222,6 +7245,32 @@ void Locallab::showmaskexpMethodChangedinv() } } +void Locallab::showmasksharMethodChanged() +{ + // printf("showmasksharMethodChanged\n"); + + // When one mask state is changed, other masks are deactivated + disableListener(); + showmaskcolMethodinv->set_active(0); + showmaskcolMethod->set_active(0); + showmaskexpMethod->set_active(0); + showmaskSHMethod->set_active(0); + showmaskSHMethodinv->set_active(0); + showmasklcMethod->set_active(0); + showmaskcbMethod->set_active(0); + showmaskvibMethod->set_active(0); + showmaskretiMethod->set_active(0); + showmasksoftMethod->set_active(0); + showmasktmMethod->set_active(0); + showmaskblMethod->set_active(0); + showmaskexpMethodinv->set_active(0); + enableListener(); + + if (listener) { + listener->panelChanged(EvlocallabshowmasksharMethod, ""); + } +} + void Locallab::showmaskexpMethodChanged() { // printf("showmaskexpMethodChanged\n"); @@ -7240,6 +7289,7 @@ void Locallab::showmaskexpMethodChanged() showmasksoftMethod->set_active(0); showmasktmMethod->set_active(0); showmaskblMethod->set_active(0); + showmasksharMethod->set_active(0); enableListener(); if (listener) { @@ -7360,6 +7410,7 @@ void Locallab::showmaskSHMethodChanged() showmasksoftMethod->set_active(0); showmasktmMethod->set_active(0); showmaskblMethod->set_active(0); + showmasksharMethod->set_active(0); enableListener(); if (listener) { @@ -7385,6 +7436,7 @@ void Locallab::showmaskvibMethodChanged() showmasksoftMethod->set_active(0); showmasktmMethod->set_active(0); showmaskblMethod->set_active(0); + showmasksharMethod->set_active(0); enableListener(); if (listener) { @@ -7410,6 +7462,7 @@ void Locallab::showmaskSHMethodChangedinv() showmasksoftMethod->set_active(0); showmasktmMethod->set_active(0); showmaskblMethod->set_active(0); + showmasksharMethod->set_active(0); enableListener(); if (listener) { @@ -7435,6 +7488,7 @@ void Locallab::showmasklcMethodChanged() showmasktmMethod->set_active(0); showmaskblMethod->set_active(0); showmaskcbMethod->set_active(0); + showmasksharMethod->set_active(0); enableListener(); if (listener) { @@ -7461,6 +7515,7 @@ void Locallab::showmaskcbMethodChanged() showmasktmMethod->set_active(0); showmasklcMethod->set_active(0); showmaskblMethod->set_active(0); + showmasksharMethod->set_active(0); enableListener(); if (listener) { @@ -7486,6 +7541,7 @@ void Locallab::showmaskblMethodChanged() showmaskretiMethod->set_active(0); showmasksoftMethod->set_active(0); showmasktmMethod->set_active(0); + showmasksharMethod->set_active(0); enableListener(); if (listener) { @@ -7513,6 +7569,7 @@ void Locallab::showmasktmMethodChanged() showmaskretiMethod->set_active(0); showmasksoftMethod->set_active(0); showmaskblMethod->set_active(0); + showmasksharMethod->set_active(0); enableListener(); if (listener) { @@ -7539,6 +7596,7 @@ void Locallab::showmaskretiMethodChanged() showmasksoftMethod->set_active(0); showmasktmMethod->set_active(0); showmaskblMethod->set_active(0); + showmasksharMethod->set_active(0); enableListener(); if (listener) { @@ -7564,6 +7622,7 @@ void Locallab::showmasksoftMethodChanged() showmaskretiMethod->set_active(0); showmasktmMethod->set_active(0); showmaskblMethod->set_active(0); + showmasksharMethod->set_active(0); enableListener(); if (listener) { @@ -7589,6 +7648,7 @@ void Locallab::resetMaskVisibility() showmasksoftMethod->set_active(0); showmasktmMethod->set_active(0); showmaskblMethod->set_active(0); + showmasksharMethod->set_active(0); enableListener(); } @@ -7608,6 +7668,7 @@ Locallab::llMaskVisibility* Locallab::getMaskVisibility() maskStruct->softMask = showmasksoftMethod->get_active_row_number(); maskStruct->tmMask = showmasktmMethod->get_active_row_number(); maskStruct->blMask = showmaskblMethod->get_active_row_number(); + maskStruct->sharMask = showmasksharMethod->get_active_row_number(); return maskStruct; } @@ -11415,6 +11476,7 @@ void Locallab::setBatchMode(bool batchMode) showmaskretiMethod->hide(); showmasktmMethod->hide(); showmaskblMethod->hide(); + showmasksharMethod->hide(); } std::vector Locallab::getCurvePoints(ThresholdSelector* tAdjuster) const @@ -11640,6 +11702,8 @@ void Locallab::enableListener() enablecbdlConn.block(false); enacbMaskConn.block(false); showmaskcbMethodConn.block(false); + //sharp + showmasksharMethodConn.block(false); // Denoise enabledenoiConn.block(false); //encoding log @@ -11743,6 +11807,8 @@ void Locallab::disableListener() enablecbdlConn.block(true); enacbMaskConn.block(true); showmaskcbMethodConn.block(true); + //sharp + showmasksharMethodConn.block(true); // Denoise enabledenoiConn.block(true); //encoding log diff --git a/rtgui/locallab.h b/rtgui/locallab.h index a701b2a5e..927067ded 100644 --- a/rtgui/locallab.h +++ b/rtgui/locallab.h @@ -581,6 +581,10 @@ private: sigc::connection retinexMethodConn; MyComboBoxText* const showmaskretiMethod; sigc::connection showmaskretiMethodConn; + //Sharpening + MyComboBoxText* const showmasksharMethod; + sigc::connection showmasksharMethodConn; + //local contrast MyComboBoxText* const localcontMethod; sigc::connection localcontMethodConn; @@ -621,6 +625,7 @@ private: Gtk::Frame* const retiFrame; Gtk::Frame* const retitoolFrame; Gtk::Frame* const residFrame; + Gtk::Frame* const sharFrame; Gtk::Frame* const clariFrame; Gtk::Frame* const gradwavFrame; Gtk::Frame* const blurlevelFrame; @@ -759,6 +764,9 @@ private: // Retinex void retinexMethodChanged(); void showmaskretiMethodChanged(); + //sharp + void showmasksharMethodChanged(); + //Local contrast void localcontMethodChanged(); void showmasklcMethodChanged(); @@ -817,6 +825,7 @@ public: int softMask; int tmMask; int blMask; + int sharMask; }; void resetMaskVisibility(); diff --git a/rtgui/toolpanelcoord.cc b/rtgui/toolpanelcoord.cc index dda5dfbdd..ab74db51e 100644 --- a/rtgui/toolpanelcoord.cc +++ b/rtgui/toolpanelcoord.cc @@ -509,9 +509,9 @@ void ToolPanelCoordinator::panelChanged(const rtengine::ProcEvent& event, const // Manage Locallab mask visibility if (event == rtengine::EvlocallabshowmaskcolMethod || event == rtengine::EvlocallabshowmaskcolMethodinv ||event == rtengine::EvlocallabshowmaskexpMethod ||event == rtengine::EvlocallabshowmaskexpMethodinv || event == rtengine::EvlocallabshowmaskSHMethod || event == rtengine::EvlocallabshowmaskSHMethodinv || event == rtengine::EvlocallabshowmaskvibMethod || event == rtengine::EvlocallabshowmasksoftMethod - || event == rtengine::EvlocallabshowmaskcbMethod || event == rtengine::EvlocallabshowmasklcMethod || event == rtengine::EvlocallabshowmaskretiMethod || event == rtengine::EvlocallabshowmasktmMethod || event == rtengine::EvlocallabshowmaskblMethod) { + || event == rtengine::EvlocallabshowmaskcbMethod || event == rtengine::EvlocallabshowmasklcMethod || event == rtengine::EvlocallabshowmasksharMethod || event == rtengine::EvlocallabshowmaskretiMethod || event == rtengine::EvlocallabshowmasktmMethod || event == rtengine::EvlocallabshowmaskblMethod) { Locallab::llMaskVisibility* maskStruc = locallab->getMaskVisibility(); - ipc->setLocallabMaskVisibility(maskStruc->colorMask, maskStruc->colorMaskinv, maskStruc->expMask, maskStruc->expMaskinv, maskStruc->SHMask, maskStruc->SHMaskinv, maskStruc->vibMask, maskStruc->lcMask, maskStruc->cbMask, maskStruc->retiMask, maskStruc->softMask, maskStruc->tmMask, maskStruc->blMask); + ipc->setLocallabMaskVisibility(maskStruc->colorMask, maskStruc->colorMaskinv, maskStruc->expMask, maskStruc->expMaskinv, maskStruc->SHMask, maskStruc->SHMaskinv, maskStruc->vibMask, maskStruc->lcMask, maskStruc->sharMask, maskStruc->cbMask, maskStruc->retiMask, maskStruc->softMask, maskStruc->tmMask, maskStruc->blMask); } ipc->endUpdateParams(changeFlags); // starts the IPC processing @@ -619,7 +619,7 @@ void ToolPanelCoordinator::profileChange( // Reset Locallab mask visibility when a picture is loaded if (event == rtengine::EvPhotoLoaded) { locallab->resetMaskVisibility(); - ipc->setLocallabMaskVisibility(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0); + ipc->setLocallabMaskVisibility(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0); } // start the IPC processing