diff --git a/rtengine/curves.cc b/rtengine/curves.cc index 257b3d0ac..fc2799edd 100644 --- a/rtengine/curves.cc +++ b/rtengine/curves.cc @@ -2765,12 +2765,13 @@ void LocwavCurve::Set(const Curve &pCurve) //lutLocCurve.dump("wav"); } -void LocwavCurve::Set(const std::vector &curvePoints) +void LocwavCurve::Set(const std::vector &curvePoints, bool & lcwavutili) { if (!curvePoints.empty() && curvePoints[0] > FCT_Linear && curvePoints[0] < FCT_Unchanged) { FlatCurve tcurve(curvePoints, false, CURVES_MIN_POLY_POINTS / 2); tcurve.setIdentityValue(0.); + lcwavutili = true; Set(tcurve); } else { Reset(); diff --git a/rtengine/curves.h b/rtengine/curves.h index 6863fd4b4..2d4932014 100644 --- a/rtengine/curves.h +++ b/rtengine/curves.h @@ -1329,7 +1329,7 @@ public: virtual ~LocwavCurve() {}; LocwavCurve(); void Reset(); - void Set(const std::vector &curvePoints); + void Set(const std::vector &curvePoints, bool &lcwavutili); float getSum() const { return sum; diff --git a/rtengine/dcrop.cc b/rtengine/dcrop.cc index 86e3e36b3..98b76e88c 100644 --- a/rtengine/dcrop.cc +++ b/rtengine/dcrop.cc @@ -913,6 +913,7 @@ void Crop::update(int todo) bool lhmasblutili = parent->lhmasblutili; bool lcmasblutili = parent->lcmasblutili; bool llmasblutili = parent->llmasblutili; + bool locwavutili = parent->locwavutili; // float avg = parent->avg; LUTu dummy; @@ -976,7 +977,7 @@ void Crop::update(int todo) locccmasblCurve.Set(params.locallab.spots.at(sp).CCmaskblcurve, lcmasblutili); locllmasblCurve.Set(params.locallab.spots.at(sp).LLmaskblcurve, llmasblutili); lochhmasblCurve.Set(params.locallab.spots.at(sp).HHmaskblcurve, lhmastmutili); - locwavCurve.Set(params.locallab.spots.at(sp).locwavcurve); + locwavCurve.Set(params.locallab.spots.at(sp).locwavcurve, locwavutili); locallutili = false; CurveFactory::curveLocal(locallutili, params.locallab.spots.at(sp).llcurve, lllocalcurve2, sca); localcutili = false; @@ -1014,7 +1015,7 @@ void Crop::update(int todo) locccmasretiCurve, lcmasretiutili, locllmasretiCurve, llmasretiutili, lochhmasretiCurve, lhmasretiutili, locccmastmCurve, lcmastmutili, locllmastmCurve, llmastmutili, lochhmastmCurve, lhmastmutili, locccmasblCurve, lcmasblutili, locllmasblCurve, llmasblutili, lochhmasblCurve, lhmasblutili, - locwavCurve, + locwavCurve, locwavutili, LHutili, HHutili, cclocalcurve2, localcutili, localexutili, exlocalcurve2, hltonecurveloc2, shtonecurveloc2, tonecurveloc2, lightCurveloc2, huerefblu, chromarefblu, lumarefblu, huere, chromare, lumare, sobelre, parent->locallColorMask, parent->locallColorMaskinv, parent->locallExpMask, parent->locallExpMaskinv, parent->locallSHMask, parent->locallSHMaskinv, parent->locallcbMask, parent->locallretiMask, parent->locallsoftMask, parent->localltmMask, parent->locallblMask); } else { @@ -1025,7 +1026,7 @@ void Crop::update(int todo) locccmasretiCurve, lcmasretiutili, locllmasretiCurve, llmasretiutili, lochhmasretiCurve, lhmasretiutili, locccmastmCurve, lcmastmutili, locllmastmCurve, llmastmutili, lochhmastmCurve, lhmastmutili, locccmasblCurve, lcmasblutili, locllmasblCurve, llmasblutili, lochhmasblCurve, lhmasblutili, - locwavCurve, + locwavCurve, locwavutili, LHutili, HHutili, cclocalcurve2, localcutili, localexutili, exlocalcurve2, hltonecurveloc2, shtonecurveloc2, tonecurveloc2, lightCurveloc2, huerefblu, chromarefblu, lumarefblu, huere, chromare, lumare, sobelre, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0); } lllocalcurve2.clear(); diff --git a/rtengine/improccoordinator.cc b/rtengine/improccoordinator.cc index 6ffb54008..f0f2fe91b 100644 --- a/rtengine/improccoordinator.cc +++ b/rtengine/improccoordinator.cc @@ -912,6 +912,7 @@ void ImProcCoordinator::updatePreviewImage(int todo, bool panningRelatedChange) llmasblutili = false; lhmasutili = false; lcmasutili = false; + locwavutili = false; locRETgainCurve.Set(params->locallab.spots.at(sp).localTgaincurve); loclhCurve.Set(params->locallab.spots.at(sp).LHcurve, LHutili); lochhCurve.Set(params->locallab.spots.at(sp).HHcurve, HHutili); @@ -936,7 +937,7 @@ void ImProcCoordinator::updatePreviewImage(int todo, bool panningRelatedChange) locllmasblCurve.Set(params->locallab.spots.at(sp).LLmaskblcurve, llmasblutili); locccmasblCurve.Set(params->locallab.spots.at(sp).CCmaskblcurve, lcmasblutili); lochhmasblCurve.Set(params->locallab.spots.at(sp).HHmaskblcurve, lhmasblutili); - locwavCurve.Set(params->locallab.spots.at(sp).locwavcurve); + locwavCurve.Set(params->locallab.spots.at(sp).locwavcurve, locwavutili); CurveFactory::curveLocal(locallutili, params->locallab.spots.at(sp).llcurve, lllocalcurve, sca); CurveFactory::curveCCLocal(localcutili, params->locallab.spots.at(sp).cccurve, cclocalcurve, sca); CurveFactory::curveexLocal(localexutili, params->locallab.spots.at(sp).excurve, exlocalcurve, sca); @@ -987,7 +988,7 @@ void ImProcCoordinator::updatePreviewImage(int todo, bool panningRelatedChange) locccmasretiCurve, lcmasretiutili, locllmasretiCurve, llmasretiutili, lochhmasretiCurve, lhmasretiutili, locccmastmCurve, lcmastmutili, locllmastmCurve, llmastmutili, lochhmastmCurve, lhmastmutili, locccmasblCurve, lcmasblutili, locllmasblCurve, llmasblutili, lochhmasblCurve, lhmasblutili, - locwavCurve, + locwavCurve, locwavutili, LHutili, HHutili, cclocalcurve, localcutili, localexutili, exlocalcurve, hltonecurveloc, shtonecurveloc, tonecurveloc, lightCurveloc, huerblu, chromarblu, lumarblu, huer, chromar, lumar, sobeler, locallColorMask, locallColorMaskinv, locallExpMask, locallExpMaskinv, locallSHMask, locallSHMaskinv, locallcbMask, locallretiMask, locallsoftMask, localltmMask, locallblMask); } else { @@ -997,7 +998,7 @@ void ImProcCoordinator::updatePreviewImage(int todo, bool panningRelatedChange) locccmasretiCurve, lcmasretiutili, locllmasretiCurve, llmasretiutili, lochhmasretiCurve, lhmasretiutili, locccmastmCurve, lcmastmutili, locllmastmCurve, llmastmutili, lochhmastmCurve, lhmastmutili, locccmasblCurve, lcmasblutili, locllmasblCurve, llmasblutili, lochhmasblCurve, lhmasblutili, - locwavCurve, + locwavCurve, locwavutili, LHutili, HHutili, cclocalcurve, localcutili, localexutili, exlocalcurve, hltonecurveloc, shtonecurveloc, tonecurveloc, lightCurveloc, huerblu, chromarblu, lumarblu, huer, chromar, lumar, sobeler, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0); } //recalculate references after diff --git a/rtengine/improccoordinator.h b/rtengine/improccoordinator.h index ec2b9aae5..357483718 100644 --- a/rtengine/improccoordinator.h +++ b/rtengine/improccoordinator.h @@ -283,6 +283,7 @@ protected: bool lcmasblutili; bool lhmasblutili; bool llmasblutili; + bool locwavutili; bool LHutili; bool HHutili; LUTf huerefs; diff --git a/rtengine/improcfun.h b/rtengine/improcfun.h index a0b2a53d0..3be4e0eac 100644 --- a/rtengine/improcfun.h +++ b/rtengine/improcfun.h @@ -317,7 +317,7 @@ public: const LocCCmaskCurve & locccmasretiCurve, bool &lcmasretiutili, const LocLLmaskCurve & locllmasretiCurve, bool &llmasretiutili, const LocHHmaskCurve & lochhmasretiCurve, bool & lhmasretiutili, const LocCCmaskCurve & locccmastmCurve, bool &lcmastmutili, const LocLLmaskCurve & locllmastmCurve, bool &llmastmutili, const LocHHmaskCurve & lochhmastmCurve, bool & lhmastmutili, const LocCCmaskCurve & locccmasblCurve, bool &lcmasblutili, const LocLLmaskCurve & locllmasblCurve, bool &llmasblutili, const LocHHmaskCurve & lochhmasblCurve, bool & lhmasblutili, - const LocwavCurve & locwavCurve, + const LocwavCurve & locwavCurve, bool & locwavutili, bool &LHutili, bool &HHutili, LUTf & cclocalcurve, bool & localcutili, 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 llColorMask, int llColorMaskinv, int llExpMask, int llExpMaskinv, int llSHMask, int llSHMaskinv, int llcbMask, int llretiMask, int llsoftMask, int lltmMask, int llblMask); void addGaNoise(LabImage *lab, LabImage *dst, const float mean, const float variance, const int sk); diff --git a/rtengine/iplocallab.cc b/rtengine/iplocallab.cc index b9c697ff2..b694865d9 100644 --- a/rtengine/iplocallab.cc +++ b/rtengine/iplocallab.cc @@ -5373,7 +5373,7 @@ void ImProcFunctions::Lab_Local(int call, int sp, float** shbuffer, LabImage * o const LocCCmaskCurve & locccmasretiCurve, bool & lcmasretiutili, const LocLLmaskCurve & locllmasretiCurve, bool & llmasretiutili, const LocHHmaskCurve & lochhmasretiCurve, bool & lhmasretiutili, const LocCCmaskCurve & locccmastmCurve, bool & lcmastmutili, const LocLLmaskCurve & locllmastmCurve, bool & llmastmutili, const LocHHmaskCurve & lochhmastmCurve, bool & lhmastmutili, const LocCCmaskCurve & locccmasblCurve, bool & lcmasblutili, const LocLLmaskCurve & locllmasblCurve, bool & llmasblutili, const LocHHmaskCurve & lochhmasblCurve, bool & lhmasblutili, - const LocwavCurve & locwavCurve, + const LocwavCurve & locwavCurve, bool & locwavutili, bool & LHutili, bool & HHutili, LUTf & cclocalcurve, bool & localcutili, 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 llColorMask, int llColorMaskinv, int llExpMask, int llExpMaskinv, int llSHMask, int llSHMaskinv, int llcbMask, int llretiMask, int llsoftMask, int lltmMask, int llblMask) { @@ -7725,11 +7725,12 @@ void ImProcFunctions::Lab_Local(int call, int sp, float** shbuffer, LabImage * o //local contrast bool wavcurve = false; - - if (lp.locmet == 1) { - for (int i = 0; i < 500; i++) { - if (locwavCurve[i] != 0.5) { - wavcurve = true; + if(locwavCurve && locwavutili) { + if (lp.locmet == 1) { + for (int i = 0; i < 500; i++) { + if (locwavCurve[i] != 0.5) { + wavcurve = true; + } } } } @@ -7886,7 +7887,6 @@ void ImProcFunctions::Lab_Local(int call, int sp, float** shbuffer, LabImage * o } } else if (lp.locmet == 1) { //wavelet - int wavelet_level = params->locallab.spots.at(sp).levelwav; float mL = (float)(params->locallab.spots.at(sp).clarilres / 100.f); float mC = (float)(params->locallab.spots.at(sp).claricres / 100.f); @@ -8130,7 +8130,7 @@ void ImProcFunctions::Lab_Local(int call, int sp, float** shbuffer, LabImage * o float MaxP[10]; float MaxN[10]; Evaluate2(*wdspot, mean, meanN, sigma, sigmaN, MaxP, MaxN); - + if(locwavCurve && locwavutili) { for (int dir = 1; dir < 4; dir++) { for (int level = 0; level < maxlvl; ++level) { int W_L = wdspot->level_W(level); @@ -8153,6 +8153,7 @@ void ImProcFunctions::Lab_Local(int call, int sp, float** shbuffer, LabImage * o #endif for (int i = 0; i < W_L * H_L; i++) { + if (locwavCurve && locwavutili) { float absciss; float &val = wav_L[dir][i]; @@ -8174,10 +8175,12 @@ void ImProcFunctions::Lab_Local(int call, int sp, float** shbuffer, LabImage * o kinterm = kinterm <= 0.f ? 0.01f : kinterm; val *= kinterm; + } } } } } + } wdspot->reconstruct(tmp1->L[0], 1.f); delete wdspot; diff --git a/rtengine/simpleprocess.cc b/rtengine/simpleprocess.cc index c3bac50eb..21271f387 100644 --- a/rtengine/simpleprocess.cc +++ b/rtengine/simpleprocess.cc @@ -1158,6 +1158,7 @@ private: bool lcmasblutili = false; bool lhmasblutili = false; bool llmasblutili = false; + bool locwavutili = false; bool lcmasutili = false; bool lhmasutili = false; locRETgainCurve.Set(params.locallab.spots.at(sp).localTgaincurve); @@ -1184,7 +1185,7 @@ private: locccmasblCurve.Set(params.locallab.spots.at(sp).CCmaskblcurve, lcmasblutili); locllmasblCurve.Set(params.locallab.spots.at(sp).LLmaskblcurve, llmasblutili); lochhmasblCurve.Set(params.locallab.spots.at(sp).HHmaskblcurve, lhmasblutili); - locwavCurve.Set(params.locallab.spots.at(sp).locwavcurve); + locwavCurve.Set(params.locallab.spots.at(sp).locwavcurve, locwavutili); CurveFactory::curveLocal(locallutili, params.locallab.spots.at(sp).llcurve, lllocalcurve, 1); CurveFactory::curveCCLocal(localcutili, params.locallab.spots.at(sp).cccurve, cclocalcurve, 1); CurveFactory::curveexLocal(localexutili, params.locallab.spots.at(sp).excurve, exlocalcurve, 1); @@ -1216,7 +1217,7 @@ private: locccmasretiCurve, lcmasretiutili, locllmasretiCurve, llmasretiutili, lochhmasretiCurve, lhmasretiutili, locccmastmCurve, lcmastmutili, locllmastmCurve, llmastmutili, lochhmastmCurve, lhmastmutili, locccmasblCurve, lcmasblutili, locllmasblCurve, llmasblutili, lochhmasblCurve, lhmasblutili, - locwavCurve, + locwavCurve, locwavutili, LHutili, HHutili, cclocalcurve, localcutili, localexutili, exlocalcurve, hltonecurveloc, shtonecurveloc, tonecurveloc, lightCurveloc, huerefblu, chromarefblu, lumarefblu, huere, chromare, lumare, sobelre, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0); diff --git a/rtgui/locallab.cc b/rtgui/locallab.cc index 12ca73403..f7617e1ad 100644 --- a/rtgui/locallab.cc +++ b/rtgui/locallab.cc @@ -1473,7 +1473,7 @@ Locallab::Locallab(): wavshape->setResetCurve(FlatCurveType(defSpot.locwavcurve.at(0)), defSpot.locwavcurve); if (showtooltip) { - wavshape->setTooltip(M("TP_RETINEX_WAV_TOOLTIP")); +// wavshape->setTooltip(M("TP_RETINEX_WAV_TOOLTIP")); } LocalcurveEditorwav->curveListComplete();