From 60f94e29a762d1f6304f32b9fbbd6bd44d8598d9 Mon Sep 17 00:00:00 2001 From: heckflosse Date: Sun, 24 Jun 2018 19:32:12 +0200 Subject: [PATCH] Dual demosaic: added xtrans 2-pass (combination of xtrans 1-pass and xtrans fast) --- rtdata/languages/default | 1 + rtengine/dual_demosaic_RT.cc | 12 ++++++++++-- rtengine/procparams.cc | 1 + rtengine/procparams.h | 1 + rtengine/rawimagesource.cc | 2 +- rtgui/xtransprocess.cc | 5 +++-- 6 files changed, 17 insertions(+), 5 deletions(-) diff --git a/rtdata/languages/default b/rtdata/languages/default index 0bd3e1538..7a74f9e9c 100644 --- a/rtdata/languages/default +++ b/rtdata/languages/default @@ -1763,6 +1763,7 @@ TP_RAWEXPOS_PRESER;Highlight preservation TP_RAWEXPOS_RGB;Red, Green, Blue TP_RAWEXPOS_TWOGREEN;Link greens TP_RAW_1PASSMEDIUM;1-Pass (Medium) +TP_RAW_2PASS;2-Pass TP_RAW_3PASSBEST;3-Pass (Best) TP_RAW_4PASS;4-Pass TP_RAW_AHD;AHD diff --git a/rtengine/dual_demosaic_RT.cc b/rtengine/dual_demosaic_RT.cc index 291cef94a..3eb24e296 100644 --- a/rtengine/dual_demosaic_RT.cc +++ b/rtengine/dual_demosaic_RT.cc @@ -51,7 +51,11 @@ void RawImageSource::dual_demosaic_RT(bool isBayer, const RAWParams &raw, int wi rcd_demosaic(); } } else { - xtrans_interpolate (3, true); + if (raw.xtranssensor.method == RAWParams::XTransSensor::getMethodString(RAWParams::XTransSensor::Method::FOUR_PASS) ) { + xtrans_interpolate (3, true); + } else { + xtrans_interpolate (1, false); + } } return; @@ -73,7 +77,11 @@ void RawImageSource::dual_demosaic_RT(bool isBayer, const RAWParams &raw, int wi rcd_demosaic(); } } else { - xtrans_interpolate (3, true); + if (raw.xtranssensor.method == RAWParams::XTransSensor::getMethodString(RAWParams::XTransSensor::Method::FOUR_PASS) ) { + xtrans_interpolate (3, true); + } else { + xtrans_interpolate (1, false); + } fast_xtrans_interpolate(rawData, redTmp, greenTmp, blueTmp); } diff --git a/rtengine/procparams.cc b/rtengine/procparams.cc index 5e609c0bb..2acc2a5a3 100644 --- a/rtengine/procparams.cc +++ b/rtengine/procparams.cc @@ -2509,6 +2509,7 @@ const std::vector& RAWParams::XTransSensor::getMethodStrings() static const std::vector method_strings { "4-pass", "3-pass (best)", + "2-pass", "1-pass (medium)", "fast", "mono", diff --git a/rtengine/procparams.h b/rtengine/procparams.h index 9ed6d9c5c..7e14a8255 100644 --- a/rtengine/procparams.h +++ b/rtengine/procparams.h @@ -1312,6 +1312,7 @@ struct RAWParams { enum class Method { FOUR_PASS, THREE_PASS, + TWO_PASS, ONE_PASS, FAST, MONO, diff --git a/rtengine/rawimagesource.cc b/rtengine/rawimagesource.cc index 2d8db2309..197d7df84 100644 --- a/rtengine/rawimagesource.cc +++ b/rtengine/rawimagesource.cc @@ -2120,7 +2120,7 @@ void RawImageSource::demosaic(const RAWParams &raw, bool autoContrast, double &c xtrans_interpolate(1, false); } else if (raw.xtranssensor.method == RAWParams::XTransSensor::getMethodString(RAWParams::XTransSensor::Method::THREE_PASS) ) { xtrans_interpolate(3, true); - } else if (raw.xtranssensor.method == RAWParams::XTransSensor::getMethodString(RAWParams::XTransSensor::Method::FOUR_PASS)) { + } else if (raw.xtranssensor.method == RAWParams::XTransSensor::getMethodString(RAWParams::XTransSensor::Method::FOUR_PASS) || raw.xtranssensor.method == RAWParams::XTransSensor::getMethodString(RAWParams::XTransSensor::Method::TWO_PASS)) { if (!autoContrast) { double threshold = raw.xtranssensor.dualDemosaicContrast; dual_demosaic_RT (false, raw, W, H, rawData, red, green, blue, threshold, false); diff --git a/rtgui/xtransprocess.cc b/rtgui/xtransprocess.cc index 1b2b4a40d..27b5810c4 100644 --- a/rtgui/xtransprocess.cc +++ b/rtgui/xtransprocess.cc @@ -118,7 +118,8 @@ void XTransProcess::read(const rtengine::procparams::ProcParams* pp, const Param dualDemosaicContrast->setValue (pp->raw.xtranssensor.dualDemosaicContrast); ccSteps->setValue (pp->raw.xtranssensor.ccSteps); if (!batchMode) { - dualDemosaicOptions->set_visible(pp->raw.xtranssensor.method == procparams::RAWParams::XTransSensor::getMethodString(procparams::RAWParams::XTransSensor::Method::FOUR_PASS)); + dualDemosaicOptions->set_visible(pp->raw.xtranssensor.method == procparams::RAWParams::XTransSensor::getMethodString(procparams::RAWParams::XTransSensor::Method::FOUR_PASS) + || pp->raw.xtranssensor.method == procparams::RAWParams::XTransSensor::getMethodString(procparams::RAWParams::XTransSensor::Method::TWO_PASS)); } methodconn.block (false); @@ -192,7 +193,7 @@ void XTransProcess::methodChanged () oldSelection = curSelection; if (!batchMode) { - if (currentMethod == procparams::RAWParams::XTransSensor::Method::FOUR_PASS) { + if (currentMethod == procparams::RAWParams::XTransSensor::Method::FOUR_PASS || currentMethod == procparams::RAWParams::XTransSensor::Method::TWO_PASS) { dualDemosaicOptions->show(); } else { dualDemosaicOptions->hide();