From a0b8626b7d5e5014bf94603ae0885216647f42a6 Mon Sep 17 00:00:00 2001 From: Hombre Date: Thu, 31 May 2018 00:44:16 +0200 Subject: [PATCH] Adding ADD/SET mechanism to the raw processing tools see #4579 --- rtengine/procparams.cc | 2 -- rtgui/addsetids.h | 7 +++++ rtgui/batchtoolpanelcoord.cc | 11 ++++++++ rtgui/bayerprocess.cc | 52 +++++++++++++++++++----------------- rtgui/bayerprocess.h | 18 +++++++------ rtgui/ppversion.h | 4 ++- rtgui/preferences.cc | 13 +++++++++ rtgui/xtransprocess.cc | 5 ++++ rtgui/xtransprocess.h | 13 ++++----- 9 files changed, 83 insertions(+), 42 deletions(-) diff --git a/rtengine/procparams.cc b/rtengine/procparams.cc index eb47d29db..3a244f5e8 100644 --- a/rtengine/procparams.cc +++ b/rtengine/procparams.cc @@ -33,7 +33,6 @@ #include "../rtgui/version.h" using namespace std; -extern Options options; namespace { @@ -4625,7 +4624,6 @@ int ProcParams::load(const Glib::ustring& fname, ParamsEdited* pedited) assignFromKeyfile(keyFile, "RAW", "DCBIterations", pedited, raw.bayersensor.dcb_iterations, pedited->raw.bayersensor.dcbIterations); assignFromKeyfile(keyFile, "RAW", "DCBEnhance", pedited, raw.bayersensor.dcb_enhance, pedited->raw.bayersensor.dcbEnhance); assignFromKeyfile(keyFile, "RAW", "LMMSEIterations", pedited, raw.bayersensor.lmmse_iterations, pedited->raw.bayersensor.lmmseIterations); - assignFromKeyfile(keyFile, "RAW", "DualDemosaicContrast", pedited, raw.bayersensor.dualDemosaicContrast, pedited->raw.bayersensor.dualDemosaicContrast); assignFromKeyfile(keyFile, "RAW", "PreBlackzero", pedited, raw.bayersensor.black0, pedited->raw.bayersensor.exBlack0); assignFromKeyfile(keyFile, "RAW", "PreBlackone", pedited, raw.bayersensor.black1, pedited->raw.bayersensor.exBlack1); assignFromKeyfile(keyFile, "RAW", "PreBlacktwo", pedited, raw.bayersensor.black2, pedited->raw.bayersensor.exBlack2); diff --git a/rtgui/addsetids.h b/rtgui/addsetids.h index c5913a6e2..15c6ba078 100644 --- a/rtgui/addsetids.h +++ b/rtgui/addsetids.h @@ -136,6 +136,13 @@ enum { ADDSET_FATTAL_ANCHOR, ADDSET_SHARPENMICRO_CONTRAST, ADDSET_SHARP_CONTRAST, + ADDSET_BAYER_FALSE_COLOR_SUPPRESSION, + ADDSET_BAYER_ITER, + ADDSET_BAYER_PS_SMOOTH, + ADDSET_BAYER_PS_EPERISO, + ADDSET_BAYER_PS_SIGMA, + ADDSET_BAYER_DUALDEMOZCONTRAST, + ADDSET_XTRANS_FALSE_COLOR_SUPPRESSION, ADDSET_PARAM_NUM // THIS IS USED AS A DELIMITER!! }; diff --git a/rtgui/batchtoolpanelcoord.cc b/rtgui/batchtoolpanelcoord.cc index 856f3a112..81f61471e 100644 --- a/rtgui/batchtoolpanelcoord.cc +++ b/rtgui/batchtoolpanelcoord.cc @@ -164,6 +164,8 @@ void BatchToolPanelCoordinator::initSession () dirpyrequalizer->setAdjusterBehavior (false, false, false); wavelet->setAdjusterBehavior (false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false); dirpyrdenoise->setAdjusterBehavior (false, false, false, false, false, false, false); + bayerprocess->setAdjusterBehavior(false, false, false, false, false, false); + xtransprocess->setAdjusterBehavior(false); bayerpreprocess->setAdjusterBehavior (false, false); rawcacorrection->setAdjusterBehavior (false); flatfield->setAdjusterBehavior(false); @@ -209,6 +211,8 @@ void BatchToolPanelCoordinator::initSession () dirpyrequalizer->setAdjusterBehavior (options.baBehav[ADDSET_DIRPYREQ], options.baBehav[ADDSET_DIRPYREQ_THRESHOLD], options.baBehav[ADDSET_DIRPYREQ_SKINPROTECT]); wavelet->setAdjusterBehavior (options.baBehav[ADDSET_WA], options.baBehav[ADDSET_WA_THRESHOLD], options.baBehav[ADDSET_WA_THRESHOLD2], options.baBehav[ADDSET_WA_THRES], options.baBehav[ADDSET_WA_CHRO], options.baBehav[ADDSET_WA_CHROMA], options.baBehav[ADDSET_WA_CONTRAST], options.baBehav[ADDSET_WA_SKINPROTECT], options.baBehav[ADDSET_WA_RESCHRO], options.baBehav[ADDSET_WA_TMRS], options.baBehav[ADDSET_WA_RESCON], options.baBehav[ADDSET_WA_RESCONH], options.baBehav[ADDSET_WA_THRR], options.baBehav[ADDSET_WA_THRRH], options.baBehav[ADDSET_WA_SKYPROTECT], options.baBehav[ADDSET_WA_EDGRAD], options.baBehav[ADDSET_WA_EDGVAL], options.baBehav[ADDSET_WA_STRENGTH], options.baBehav[ADDSET_WA_GAMMA], options.baBehav[ADDSET_WA_EDGEDETECT], options.baBehav[ADDSET_WA_EDGEDETECTTHR], options.baBehav[ADDSET_WA_EDGEDETECTTHR2]); dirpyrdenoise->setAdjusterBehavior (options.baBehav[ADDSET_DIRPYRDN_LUMA], options.baBehav[ADDSET_DIRPYRDN_LUMDET], options.baBehav[ADDSET_DIRPYRDN_CHROMA], options.baBehav[ADDSET_DIRPYRDN_CHROMARED], options.baBehav[ADDSET_DIRPYRDN_CHROMABLUE], options.baBehav[ADDSET_DIRPYRDN_GAMMA], options.baBehav[ADDSET_DIRPYRDN_PASSES]); + bayerprocess->setAdjusterBehavior(options.baBehav[ADDSET_BAYER_FALSE_COLOR_SUPPRESSION], options.baBehav[ADDSET_BAYER_ITER], options.baBehav[ADDSET_BAYER_DUALDEMOZCONTRAST], options.baBehav[ADDSET_BAYER_PS_SIGMA], options.baBehav[ADDSET_BAYER_PS_SMOOTH], options.baBehav[ADDSET_BAYER_PS_EPERISO]); + xtransprocess->setAdjusterBehavior(options.baBehav[ADDSET_BAYER_FALSE_COLOR_SUPPRESSION]); bayerpreprocess->setAdjusterBehavior (options.baBehav[ADDSET_PREPROCESS_LINEDENOISE], options.baBehav[ADDSET_PREPROCESS_GREENEQUIL]); rawcacorrection->setAdjusterBehavior (options.baBehav[ADDSET_RAWCACORR]); flatfield->setAdjusterBehavior(options.baBehav[ADDSET_RAWFFCLIPCONTROL]); @@ -349,6 +353,13 @@ void BatchToolPanelCoordinator::initSession () pparams.raw.bayersensor.black0 = pparams.raw.bayersensor.black1 = pparams.raw.bayersensor.black2 = pparams.raw.bayersensor.black3 = pparams.raw.xtranssensor.blackred = pparams.raw.xtranssensor.blackgreen = pparams.raw.xtranssensor.blackblue = 0; } + if (options.baBehav[ADDSET_BAYER_FALSE_COLOR_SUPPRESSION]) { pparams.raw.bayersensor.ccSteps = 0; } + if (options.baBehav[ADDSET_BAYER_ITER]) { pparams.raw.bayersensor.dcb_iterations = 0; pparams.raw.bayersensor.lmmse_iterations = 0; } + if (options.baBehav[ADDSET_BAYER_PS_SMOOTH]) { pparams.raw.bayersensor.pixelShiftSmoothFactor = 0; } + if (options.baBehav[ADDSET_BAYER_PS_EPERISO]) { pparams.raw.bayersensor.pixelShiftEperIso = 0; } + if (options.baBehav[ADDSET_BAYER_PS_SIGMA]) { pparams.raw.bayersensor.pixelShiftSigma = 0; } + if (options.baBehav[ADDSET_BAYER_DUALDEMOZCONTRAST]) { pparams.raw.bayersensor.dualDemosaicContrast = 0; } + if (options.baBehav[ADDSET_XTRANS_FALSE_COLOR_SUPPRESSION]) { pparams.raw.xtranssensor.ccSteps = 0; } if (options.baBehav[ADDSET_RAWFFCLIPCONTROL]) { pparams.raw.ff_clipControl = 0; } if (options.baBehav[ADDSET_PREPROCESS_GREENEQUIL]) { pparams.raw.bayersensor.greenthresh = 0; } if (options.baBehav[ADDSET_PREPROCESS_LINEDENOISE]) { pparams.raw.bayersensor.linenoise = 0; } diff --git a/rtgui/bayerprocess.cc b/rtgui/bayerprocess.cc index d08ec0393..339666aa0 100644 --- a/rtgui/bayerprocess.cc +++ b/rtgui/bayerprocess.cc @@ -307,31 +307,11 @@ void BayerProcess::read(const rtengine::procparams::ProcParams* pp, const Params } if (!batchMode) { - if (pp->raw.bayersensor.method == procparams::RAWParams::BayerSensor::getMethodString(procparams::RAWParams::BayerSensor::Method::DCB) || - method->get_active_row_number() == std::numeric_limits::max()) { - dcbOptions->show(); - } else { - dcbOptions->hide(); - } - if (pp->raw.bayersensor.method == procparams::RAWParams::BayerSensor::getMethodString(procparams::RAWParams::BayerSensor::Method::LMMSE) || - method->get_active_row_number() == std::numeric_limits::max()) { - lmmseOptions->show(); - } else { - lmmseOptions->hide(); - } - if (pp->raw.bayersensor.method == procparams::RAWParams::BayerSensor::getMethodString(procparams::RAWParams::BayerSensor::Method::AMAZEVNG4) || - method->get_active_row_number() == std::numeric_limits::max()) { - dualDemosaicOptions->show(); - } else { - dualDemosaicOptions->hide(); - } - if (pp->raw.bayersensor.method == procparams::RAWParams::BayerSensor::getMethodString(procparams::RAWParams::BayerSensor::Method::PIXELSHIFT) || - method->get_active_row_number() == std::numeric_limits::max()) { - if(pp->raw.bayersensor.pixelShiftMotionCorrectionMethod == RAWParams::BayerSensor::PSMotionCorrectionMethod::CUSTOM) { - pixelShiftOptions->show(); - } else { - pixelShiftOptions->hide(); - } + dcbOptions->set_visible(pp->raw.bayersensor.method == procparams::RAWParams::BayerSensor::getMethodString(procparams::RAWParams::BayerSensor::Method::DCB)); + lmmseOptions->set_visible(pp->raw.bayersensor.method == procparams::RAWParams::BayerSensor::getMethodString(procparams::RAWParams::BayerSensor::Method::LMMSE)); + dualDemosaicOptions->set_visible(pp->raw.bayersensor.method == procparams::RAWParams::BayerSensor::getMethodString(procparams::RAWParams::BayerSensor::Method::AMAZEVNG4)); + if (pp->raw.bayersensor.method == procparams::RAWParams::BayerSensor::getMethodString(procparams::RAWParams::BayerSensor::Method::PIXELSHIFT)) { + pixelShiftOptions->set_visible(pp->raw.bayersensor.pixelShiftMotionCorrectionMethod == RAWParams::BayerSensor::PSMotionCorrectionMethod::CUSTOM); pixelShiftFrame->show(); } else { pixelShiftFrame->hide(); @@ -415,6 +395,28 @@ void BayerProcess::write( rtengine::procparams::ProcParams* pp, ParamsEdited* pe } } +void BayerProcess::setAdjusterBehavior (bool falsecoloradd, bool iteradd, bool dualdemozecontrastadd, bool pssigmaadd, bool pssmoothadd, bool pseperisoadd) +{ + ccSteps->setAddMode(falsecoloradd); + dcbIterations->setAddMode(iteradd); + lmmseIterations->setAddMode(iteradd); + pixelShiftSmooth->setAddMode(pssmoothadd); + pixelShiftEperIso->setAddMode(pseperisoadd); + pixelShiftSigma->setAddMode(pssigmaadd); + dualDemosaicContrast->setAddMode(dualdemozecontrastadd); +} + +void BayerProcess::trimValues (rtengine::procparams::ProcParams* pp) +{ + ccSteps->trimValue(pp->raw.bayersensor.ccSteps); + dcbIterations->trimValue(pp->raw.bayersensor.dcb_iterations); + lmmseIterations->trimValue(pp->raw.bayersensor.lmmse_iterations); + pixelShiftSmooth->trimValue(pp->raw.bayersensor.pixelShiftSmoothFactor); + pixelShiftEperIso->trimValue(pp->raw.bayersensor.pixelShiftEperIso); + pixelShiftSigma->trimValue(pp->raw.bayersensor.pixelShiftSigma); + dualDemosaicContrast->trimValue(pp->raw.bayersensor.dualDemosaicContrast); +} + void BayerProcess::setBatchMode(bool batchMode) { method->append (M("GENERAL_UNCHANGED")); diff --git a/rtgui/bayerprocess.h b/rtgui/bayerprocess.h index 84701a52e..ee532f27c 100644 --- a/rtgui/bayerprocess.h +++ b/rtgui/bayerprocess.h @@ -65,15 +65,17 @@ public: BayerProcess (); - void read (const rtengine::procparams::ProcParams* pp, const ParamsEdited* pedited = nullptr); - void write (rtengine::procparams::ProcParams* pp, ParamsEdited* pedited = nullptr); - void setBatchMode (bool batchMode); - void setDefaults (const rtengine::procparams::ProcParams* defParams, const ParamsEdited* pedited = nullptr); + void read(const rtengine::procparams::ProcParams* pp, const ParamsEdited* pedited = nullptr); + void write(rtengine::procparams::ProcParams* pp, ParamsEdited* pedited = nullptr); + void setAdjusterBehavior(bool falsecoloradd, bool iteradd, bool dualdemozecontrastadd, bool pssigmaadd, bool pssmoothadd, bool pseperisoadd); + void trimValues(rtengine::procparams::ProcParams* pp); + void setBatchMode(bool batchMode); + void setDefaults(const rtengine::procparams::ProcParams* defParams, const ParamsEdited* pedited = nullptr); - void methodChanged (); - void imageNumberChanged (); - void adjusterChanged (Adjuster* a, double newval); - void checkBoxToggled (CheckBox* c, CheckValue newval); + void methodChanged(); + void imageNumberChanged(); + void adjusterChanged(Adjuster* a, double newval); + void checkBoxToggled(CheckBox* c, CheckValue newval); void pixelShiftMotionMethodChanged(); void FrameCountChanged(int n, int frameNum); }; diff --git a/rtgui/ppversion.h b/rtgui/ppversion.h index e9f7ad60e..2b6bc49de 100644 --- a/rtgui/ppversion.h +++ b/rtgui/ppversion.h @@ -1,11 +1,13 @@ #pragma once // This number has to be incremented whenever the PP3 file format is modified or the behaviour of a tool changes -#define PPVERSION 334 +#define PPVERSION 335 #define PPVERSION_AEXP 301 //value of PPVERSION when auto exposure algorithm was modified /* Log of version changes + 335 2018-05-30 + new contrast adjuster in Bayer process tool 334 2018-05-13 new contrast threshold adjuster in Microcontrast tool 333 2018-04-26 diff --git a/rtgui/preferences.cc b/rtgui/preferences.cc index 79cc6fd4c..623cb25d5 100644 --- a/rtgui/preferences.cc +++ b/rtgui/preferences.cc @@ -387,6 +387,19 @@ Gtk::Widget* Preferences::getBatchProcPanel () appendBehavList (mi, M ("TP_WAVELET_EDGEDETECTTHR"), ADDSET_WA_EDGEDETECTTHR, true); appendBehavList (mi, M ("TP_WAVELET_EDGEDETECTTHR2"), ADDSET_WA_EDGEDETECTTHR2, true); + mi = behModel->append (); + mi->set_value (behavColumns.label, M ("TP_RAW_SENSOR_BAYER_LABEL")); + appendBehavList (mi, M ("TP_RAW_FALSECOLOR"), ADDSET_BAYER_FALSE_COLOR_SUPPRESSION, false); + appendBehavList (mi, M ("TP_RAW_DCBITERATIONS") + ", " + M("TP_RAW_LMMSEITERATIONS"), ADDSET_BAYER_ITER, false); + appendBehavList (mi, M ("TP_RAW_DUALDEMOSAICCONTRAST"), ADDSET_BAYER_DUALDEMOZCONTRAST, false); + appendBehavList (mi, M ("TP_RAW_PIXELSHIFTSIGMA"), ADDSET_BAYER_PS_SIGMA, false); + appendBehavList (mi, M ("TP_RAW_PIXELSHIFTSMOOTH"), ADDSET_BAYER_PS_SMOOTH, false); + appendBehavList (mi, M ("TP_RAW_PIXELSHIFTEPERISO"), ADDSET_BAYER_PS_EPERISO, false); + + mi = behModel->append (); + mi->set_value (behavColumns.label, M ("TP_RAW_SENSOR_XTRANS_LABEL")); + appendBehavList (mi, M ("TP_RAW_FALSECOLOR"), ADDSET_XTRANS_FALSE_COLOR_SUPPRESSION, false); + mi = behModel->append (); mi->set_value (behavColumns.label, M ("TP_PREPROCESS_LABEL")); appendBehavList (mi, M ("TP_PREPROCESS_GREENEQUIL"), ADDSET_PREPROCESS_GREENEQUIL, false); diff --git a/rtgui/xtransprocess.cc b/rtgui/xtransprocess.cc index 9e0c94ea0..a001758f9 100644 --- a/rtgui/xtransprocess.cc +++ b/rtgui/xtransprocess.cc @@ -123,6 +123,11 @@ void XTransProcess::write( rtengine::procparams::ProcParams* pp, ParamsEdited* p } } +void XTransProcess::setAdjusterBehavior (bool falsecoloradd) +{ + ccSteps->setAddMode(falsecoloradd); +} + void XTransProcess::setBatchMode(bool batchMode) { method->append (M("GENERAL_UNCHANGED")); diff --git a/rtgui/xtransprocess.h b/rtgui/xtransprocess.h index 44ed2e670..274b52c29 100644 --- a/rtgui/xtransprocess.h +++ b/rtgui/xtransprocess.h @@ -40,13 +40,14 @@ public: XTransProcess (); - void read (const rtengine::procparams::ProcParams* pp, const ParamsEdited* pedited = nullptr); - void write (rtengine::procparams::ProcParams* pp, ParamsEdited* pedited = nullptr); - void setBatchMode (bool batchMode); - void setDefaults (const rtengine::procparams::ProcParams* defParams, const ParamsEdited* pedited = nullptr); + void read(const rtengine::procparams::ProcParams* pp, const ParamsEdited* pedited = nullptr); + void write(rtengine::procparams::ProcParams* pp, ParamsEdited* pedited = nullptr); + void setAdjusterBehavior(bool falsecoloradd); + void setBatchMode(bool batchMode); + void setDefaults(const rtengine::procparams::ProcParams* defParams, const ParamsEdited* pedited = nullptr); - void methodChanged (); - void adjusterChanged (Adjuster* a, double newval); + void methodChanged(); + void adjusterChanged(Adjuster* a, double newval); }; #endif