diff --git a/rtengine/rt_algo.cc b/rtengine/rt_algo.cc index 975b08374..8472fb858 100644 --- a/rtengine/rt_algo.cc +++ b/rtengine/rt_algo.cc @@ -269,8 +269,10 @@ void buildBlendMask(float** luminance, float **blend, int W, int H, float &contr const int minY = tilesize * minI; const int minX = tilesize * minJ; +// std::cout << pass << ": minvar : " << minvar << std::endl; if (minvar <= 1.f || pass == 1) { // a variance <= 1 means we already found a flat region and can skip second pass + // in second pass we allow a variance of 2 JaggedArray Lum(tilesize, tilesize); JaggedArray Blend(tilesize, tilesize); for (int i = 0; i < tilesize; ++i) { @@ -278,8 +280,7 @@ void buildBlendMask(float** luminance, float **blend, int W, int H, float &contr Lum[i][j] = luminance[i + minY][j + minX]; } } - - contrastThreshold = std::min(contrastThreshold, calcContrastThreshold(Lum, Blend, tilesize, tilesize) / 100.f); + contrastThreshold = (pass == 0 || minvar <= 2.f) ? calcContrastThreshold(Lum, Blend, tilesize, tilesize) / 100.f : 0.f; break; } } diff --git a/rtgui/bayerprocess.cc b/rtgui/bayerprocess.cc index 9b5ffece2..f9b6ef9e5 100644 --- a/rtgui/bayerprocess.cc +++ b/rtgui/bayerprocess.cc @@ -312,6 +312,9 @@ void BayerProcess::read(const rtengine::procparams::ProcParams* pp, const Params lmmseIterations->setValue (pp->raw.bayersensor.lmmse_iterations); dualDemosaicAutoContrast->setValue (pp->raw.bayersensor.dualDemosaicAutoContrast); dualDemosaicContrast->setValue (pp->raw.bayersensor.dualDemosaicContrast); + if (!batchMode) { + dualDemosaicContrast->set_sensitive(!pp->raw.bayersensor.dualDemosaicAutoContrast); + } pixelShiftMotionMethod->set_active ((int)pp->raw.bayersensor.pixelShiftMotionCorrectionMethod); pixelShiftEperIso->setValue (pp->raw.bayersensor.pixelShiftEperIso); pixelShiftSigma->setValue (pp->raw.bayersensor.pixelShiftSigma); @@ -622,6 +625,9 @@ void BayerProcess::imageNumberChanged () void BayerProcess::checkBoxToggled (CheckBox* c, CheckValue newval) { if (c == dualDemosaicAutoContrast) { + if (!batchMode) { + dualDemosaicContrast->set_sensitive(newval == CheckValue::off); + } if (listener) { listener->panelChanged (EvDemosaicAutoContrast, dualDemosaicAutoContrast->getValueAsStr ()); }