Better use of cache with inpaint opposed highight reconstruction (#6822)

* Speed up preview when inpaint opposed enabled

Only reprocess from raw if the white balance is changed. Otherwise, a
cache from later in the pipeline can be used.

* Remove unused code

* Fix refresh map bit positions

* Make WB & inpaint opposed refresh less brittle

Co-authored-by: Hombre57 <natureh.510@gmail.com>

---------

Co-authored-by: Hombre57 <natureh.510@gmail.com>
This commit is contained in:
Lawrence37 2023-08-15 07:52:38 -07:00 committed by GitHub
parent 9ae8c79c3a
commit ac48cc55d8
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
18 changed files with 47 additions and 47 deletions

View File

@ -57,7 +57,7 @@ bool loadFile(
rtengine::procparams::ColorManagementParams icm; rtengine::procparams::ColorManagementParams icm;
icm.workingProfile = working_color_space; icm.workingProfile = working_color_space;
img_src.getImage(curr_wb, TR_NONE, img_float.get(), pp, rtengine::procparams::ToneCurveParams(), rtengine::procparams::RAWParams(), 0); img_src.getImage(curr_wb, TR_NONE, img_float.get(), pp, rtengine::procparams::ToneCurveParams(), rtengine::procparams::RAWParams());
if (!working_color_space.empty()) { if (!working_color_space.empty()) {
img_src.convertColorSpace(img_float.get(), icm, curr_wb); img_src.convertColorSpace(img_float.get(), icm, curr_wb);

View File

@ -231,18 +231,18 @@ void Crop::update(int todo)
if (settings->leveldnautsimpl == 1) { if (settings->leveldnautsimpl == 1) {
if (params.dirpyrDenoise.Cmethod == "MAN" || params.dirpyrDenoise.Cmethod == "PON") { if (params.dirpyrDenoise.Cmethod == "MAN" || params.dirpyrDenoise.Cmethod == "PON") {
PreviewProps pp(trafx, trafy, trafw * skip, trafh * skip, skip); PreviewProps pp(trafx, trafy, trafw * skip, trafh * skip, skip);
parent->imgsrc->getImage(parent->currWB, tr, origCrop, pp, params.toneCurve, params.raw, 0); parent->imgsrc->getImage(parent->currWB, tr, origCrop, pp, params.toneCurve, params.raw);
} }
} else { } else {
if (params.dirpyrDenoise.C2method == "MANU") { if (params.dirpyrDenoise.C2method == "MANU") {
PreviewProps pp(trafx, trafy, trafw * skip, trafh * skip, skip); PreviewProps pp(trafx, trafy, trafw * skip, trafh * skip, skip);
parent->imgsrc->getImage(parent->currWB, tr, origCrop, pp, params.toneCurve, params.raw, 0); parent->imgsrc->getImage(parent->currWB, tr, origCrop, pp, params.toneCurve, params.raw);
} }
} }
if ((settings->leveldnautsimpl == 1 && params.dirpyrDenoise.Cmethod == "PRE") || (settings->leveldnautsimpl == 0 && params.dirpyrDenoise.C2method == "PREV")) { if ((settings->leveldnautsimpl == 1 && params.dirpyrDenoise.Cmethod == "PRE") || (settings->leveldnautsimpl == 0 && params.dirpyrDenoise.C2method == "PREV")) {
PreviewProps pp(trafx, trafy, trafw * skip, trafh * skip, skip); PreviewProps pp(trafx, trafy, trafw * skip, trafh * skip, skip);
parent->imgsrc->getImage(parent->currWB, tr, origCrop, pp, params.toneCurve, params.raw, 0); parent->imgsrc->getImage(parent->currWB, tr, origCrop, pp, params.toneCurve, params.raw);
if ((!isDetailWindow) && parent->adnListener && skip == 1 && params.dirpyrDenoise.enabled) { if ((!isDetailWindow) && parent->adnListener && skip == 1 && params.dirpyrDenoise.enabled) {
float lowdenoise = 1.f; float lowdenoise = 1.f;
@ -454,7 +454,7 @@ void Crop::update(int todo)
for (int wcr = 0; wcr <= 2; wcr++) { for (int wcr = 0; wcr <= 2; wcr++) {
for (int hcr = 0; hcr <= 2; hcr++) { for (int hcr = 0; hcr <= 2; hcr++) {
PreviewProps ppP(coordW[wcr], coordH[hcr], crW, crH, 1); PreviewProps ppP(coordW[wcr], coordH[hcr], crW, crH, 1);
parent->imgsrc->getImage(parent->currWB, tr, origCropPart, ppP, params.toneCurve, params.raw, 0); parent->imgsrc->getImage(parent->currWB, tr, origCropPart, ppP, params.toneCurve, params.raw);
// we only need image reduced to 1/4 here // we only need image reduced to 1/4 here
for (int ii = 0; ii < crH; ii += 2) { for (int ii = 0; ii < crH; ii += 2) {
@ -615,7 +615,7 @@ void Crop::update(int todo)
// if (params.dirpyrDenoise.Cmethod=="AUT" || params.dirpyrDenoise.Cmethod=="PON") {//reinit origCrop after Auto // if (params.dirpyrDenoise.Cmethod=="AUT" || params.dirpyrDenoise.Cmethod=="PON") {//reinit origCrop after Auto
if ((settings->leveldnautsimpl == 1 && params.dirpyrDenoise.Cmethod == "AUT") || (settings->leveldnautsimpl == 0 && params.dirpyrDenoise.C2method == "AUTO")) { //reinit origCrop after Auto if ((settings->leveldnautsimpl == 1 && params.dirpyrDenoise.Cmethod == "AUT") || (settings->leveldnautsimpl == 0 && params.dirpyrDenoise.C2method == "AUTO")) { //reinit origCrop after Auto
PreviewProps pp(trafx, trafy, trafw * skip, trafh * skip, skip); PreviewProps pp(trafx, trafy, trafw * skip, trafh * skip, skip);
parent->imgsrc->getImage(parent->currWB, tr, origCrop, pp, params.toneCurve, params.raw, 0); parent->imgsrc->getImage(parent->currWB, tr, origCrop, pp, params.toneCurve, params.raw);
} }
if ((todo & M_SPOT) && params.spot.enabled && !params.spot.entries.empty()) { if ((todo & M_SPOT) && params.spot.enabled && !params.spot.entries.empty()) {
@ -751,7 +751,7 @@ void Crop::update(int todo)
fattalCrop.reset(f); fattalCrop.reset(f);
PreviewProps pp(0, 0, parent->fw, parent->fh, skip); PreviewProps pp(0, 0, parent->fw, parent->fh, skip);
int tr = getCoarseBitMask(params.coarse); int tr = getCoarseBitMask(params.coarse);
parent->imgsrc->getImage(parent->currWB, tr, f, pp, params.toneCurve, params.raw, 0); parent->imgsrc->getImage(parent->currWB, tr, f, pp, params.toneCurve, params.raw);
parent->imgsrc->convertColorSpace(f, params.icm, parent->currWB); parent->imgsrc->convertColorSpace(f, params.icm, parent->currWB);
if (params.dirpyrDenoise.enabled || params.filmNegative.enabled || params.spot.enabled) { if (params.dirpyrDenoise.enabled || params.filmNegative.enabled || params.spot.enabled) {

View File

@ -84,7 +84,7 @@ void getSpotAvgMax(ImageSource *imgsrc, ColorTemp currWB, const std::unique_ptr<
} }
rtengine::Imagefloat spotImg(spotSize, spotSize); rtengine::Imagefloat spotImg(spotSize, spotSize);
imgsrc->getImage(currWB, tr, &spotImg, pp, params->toneCurve, params->raw, 0); imgsrc->getImage(currWB, tr, &spotImg, pp, params->toneCurve, params->raw);
auto avgMax = [spotSize, &spotImg](RGB & avg, RGB & max) -> void { auto avgMax = [spotSize, &spotImg](RGB & avg, RGB & max) -> void {
avg = {}; avg = {};

View File

@ -109,7 +109,7 @@ public:
virtual void getWBMults (const ColorTemp &ctemp, const procparams::RAWParams &raw, std::array<float, 4>& scale_mul, float &autoGainComp, float &rm, float &gm, float &bm) const = 0; virtual void getWBMults (const ColorTemp &ctemp, const procparams::RAWParams &raw, std::array<float, 4>& scale_mul, float &autoGainComp, float &rm, float &gm, float &bm) const = 0;
// use right after demosaicing image, add coarse transformation and put the result in the provided Imagefloat* // use right after demosaicing image, add coarse transformation and put the result in the provided Imagefloat*
virtual void getImage (const ColorTemp &ctemp, int tran, Imagefloat* image, const PreviewProps &pp, const procparams::ToneCurveParams &hlp, const procparams::RAWParams &raw, int opposed) = 0; virtual void getImage (const ColorTemp &ctemp, int tran, Imagefloat* image, const PreviewProps &pp, const procparams::ToneCurveParams &hlp, const procparams::RAWParams &raw) = 0;
virtual eSensorType getSensorType () const = 0; virtual eSensorType getSensorType () const = 0;
virtual bool isMono () const = 0; virtual bool isMono () const = 0;
// true is ready to provide the AutoWB, i.e. when the image has been demosaiced for RawImageSource // true is ready to provide the AutoWB, i.e. when the image has been demosaiced for RawImageSource

View File

@ -407,6 +407,7 @@ void ImProcCoordinator::updatePreviewImage(int todo, bool panningRelatedChange)
Color HLR alters rgb output of demosaic, so re-demosaic is needed when Color HLR is being turned off; Color HLR alters rgb output of demosaic, so re-demosaic is needed when Color HLR is being turned off;
if HLR is enabled and changing method *from* Color to any other method if HLR is enabled and changing method *from* Color to any other method
OR HLR gets disabled when Color method was selected OR HLR gets disabled when Color method was selected
If white balance changed with inpaint opposed, because inpaint opposed depends on the white balance
*/ */
// If high detail (=100%) is newly selected, do a demosaic update, since the last was just with FAST // If high detail (=100%) is newly selected, do a demosaic update, since the last was just with FAST
@ -414,7 +415,10 @@ void ImProcCoordinator::updatePreviewImage(int todo, bool panningRelatedChange)
imageTypeListener->imageTypeChanged(imgsrc->isRAW(), imgsrc->getSensorType() == ST_BAYER, imgsrc->getSensorType() == ST_FUJI_XTRANS, imgsrc->isMono(), imgsrc->isGainMapSupported()); imageTypeListener->imageTypeChanged(imgsrc->isRAW(), imgsrc->getSensorType() == ST_BAYER, imgsrc->getSensorType() == ST_FUJI_XTRANS, imgsrc->isMono(), imgsrc->isGainMapSupported());
} }
bool iscolor = (params->toneCurve.method == "Color");// || params->toneCurve.method == "Coloropp"); bool iscolor = (params->toneCurve.method == "Color" || params->toneCurve.method == "Coloropp");
if ((todo & M_WB) && params->toneCurve.hrenabled && params->toneCurve.method == "Coloropp") {
todo |= DEMOSAIC;
}
if ((todo & M_RAW) if ((todo & M_RAW)
|| (!highDetailRawComputed && highDetailNeeded) || (!highDetailRawComputed && highDetailNeeded)
@ -872,8 +876,7 @@ void ImProcCoordinator::updatePreviewImage(int todo, bool panningRelatedChange)
PreviewProps pp(0, 0, fw, fh, scale); PreviewProps pp(0, 0, fw, fh, scale);
// Tells to the ImProcFunctions' tools what is the preview scale, which may lead to some simplifications // Tells to the ImProcFunctions' tools what is the preview scale, which may lead to some simplifications
ipf.setScale(scale); ipf.setScale(scale);
int inpaintopposed = 1;//force getimage to use inpaint-opposed if enable, only once imgsrc->getImage(currWB, tr, orig_prev, pp, params->toneCurve, params->raw);
imgsrc->getImage(currWB, tr, orig_prev, pp, params->toneCurve, params->raw, inpaintopposed);
if ((todo & M_SPOT) && params->spot.enabled && !params->spot.entries.empty()) { if ((todo & M_SPOT) && params->spot.enabled && !params->spot.entries.empty()) {
spotsDone = true; spotsDone = true;
@ -2967,7 +2970,7 @@ void ImProcCoordinator::saveInputICCReference(const Glib::ustring& fname, bool a
currWB = ColorTemp(); // = no white balance currWB = ColorTemp(); // = no white balance
} }
imgsrc->getImage(currWB, tr, im, pp, ppar.toneCurve, ppar.raw, 0); imgsrc->getImage(currWB, tr, im, pp, ppar.toneCurve, ppar.raw);
ImProcFunctions ipf(&ppar, true); ImProcFunctions ipf(&ppar, true);
if (ipf.needsTransform(fW, fH, imgsrc->getRotateDegree(), imgsrc->getMetaData())) { if (ipf.needsTransform(fW, fH, imgsrc->getRotateDegree(), imgsrc->getMetaData())) {
@ -3144,7 +3147,7 @@ void ImProcCoordinator::process()
paramsUpdateMutex.unlock(); paramsUpdateMutex.unlock();
// M_VOID means no update, and is a bit higher that the rest // M_VOID means no update, and is a bit higher that the rest
if (change & (M_VOID - 1)) { if (change & (~M_VOID)) {
updatePreviewImage(change, panningRelatedChange); updatePreviewImage(change, panningRelatedChange);
} }

View File

@ -2130,7 +2130,7 @@ void ImProcFunctions::getAutoLogloc(int sp, ImageSource *imgsrc, float *sourceg,
Imagefloat img(int(fw / SCALE + 0.5), int(fh / SCALE + 0.5)); Imagefloat img(int(fw / SCALE + 0.5), int(fh / SCALE + 0.5));
const ProcParams neutral; const ProcParams neutral;
imgsrc->getImage(imgsrc->getWB(), TR_NONE, &img, pp, params->toneCurve, neutral.raw, 0); imgsrc->getImage(imgsrc->getWB(), TR_NONE, &img, pp, params->toneCurve, neutral.raw);
imgsrc->convertColorSpace(&img, params->icm, imgsrc->getWB()); imgsrc->convertColorSpace(&img, params->icm, imgsrc->getWB());
float minVal = RT_INFINITY; float minVal = RT_INFINITY;
float maxVal = -RT_INFINITY; float maxVal = -RT_INFINITY;

View File

@ -297,7 +297,7 @@ PerspectiveCorrection::Params PerspectiveCorrection::autocompute(ImageSource *sr
neutral.raw.bayersensor.method = RAWParams::BayerSensor::getMethodString(RAWParams::BayerSensor::Method::FAST); neutral.raw.bayersensor.method = RAWParams::BayerSensor::getMethodString(RAWParams::BayerSensor::Method::FAST);
neutral.raw.xtranssensor.method = RAWParams::XTransSensor::getMethodString(RAWParams::XTransSensor::Method::FAST); neutral.raw.xtranssensor.method = RAWParams::XTransSensor::getMethodString(RAWParams::XTransSensor::Method::FAST);
neutral.icm.outputProfile = ColorManagementParams::NoICMString; neutral.icm.outputProfile = ColorManagementParams::NoICMString;
src->getImage(src->getWB(), tr, img.get(), pp, neutral.toneCurve, neutral.raw, 0); src->getImage(src->getWB(), tr, img.get(), pp, neutral.toneCurve, neutral.raw);
src->convertColorSpace(img.get(), pparams->icm, src->getWB()); src->convertColorSpace(img.get(), pparams->icm, src->getWB());
neutral.commonTrans.autofill = false; // Ensures crop factor is correct. neutral.commonTrans.autofill = false; // Ensures crop factor is correct.

View File

@ -120,7 +120,7 @@ PreviewImage::PreviewImage (const Glib::ustring &fname, const Glib::ustring &ext
double contrastThresholdDummy = 0.0; double contrastThresholdDummy = 0.0;
rawImage.demosaic(params.raw, false, contrastThresholdDummy); rawImage.demosaic(params.raw, false, contrastThresholdDummy);
Imagefloat image(fw, fh); Imagefloat image(fw, fh);
rawImage.getImage (wb, TR_NONE, &image, pp, params.toneCurve, params.raw, 0); rawImage.getImage (wb, TR_NONE, &image, pp, params.toneCurve, params.raw);
rtengine::Image8 output(fw, fh); rtengine::Image8 output(fw, fh);
rawImage.convertColorSpace(&image, params.icm, wb); rawImage.convertColorSpace(&image, params.icm, wb);
#ifdef _OPENMP #ifdef _OPENMP

View File

@ -741,9 +741,8 @@ void RawImageSource::getWBMults(const ColorTemp &ctemp, const RAWParams &raw, st
autoGainComp = camInitialGain / initialGain; autoGainComp = camInitialGain / initialGain;
} }
void RawImageSource::getImage(const ColorTemp &ctemp, int tran, Imagefloat* image, const PreviewProps &pp, const ToneCurveParams &hrp, const RAWParams &raw, int opposed) void RawImageSource::getImage(const ColorTemp &ctemp, int tran, Imagefloat* image, const PreviewProps &pp, const ToneCurveParams &hrp, const RAWParams &raw)
{ {
// added int opposed to force getimage to use inpaint-opposed if enable, only once
MyMutex::MyLock lock(getImageMutex); MyMutex::MyLock lock(getImageMutex);
tran = defTransform(ri, tran); tran = defTransform(ri, tran);
@ -850,10 +849,6 @@ void RawImageSource::getImage(const ColorTemp &ctemp, int tran, Imagefloat* imag
bool doHr = (hrp.hrenabled && !iscolor); bool doHr = (hrp.hrenabled && !iscolor);
if (hrp.hrenabled && iscolor) { if (hrp.hrenabled && iscolor) {
if(hrp.method == "Coloropp" && opposed == 1) {//force Inpaint opposed if WB change, and opposed limited the number to 1
rgbSourceModified = false;
}
if (!rgbSourceModified) { if (!rgbSourceModified) {
if (hrp.method == "Color") { if (hrp.method == "Color") {
if (settings->verbose) { if (settings->verbose) {

View File

@ -146,7 +146,7 @@ public:
void getrgbloc(int begx, int begy, int yEn, int xEn, int cx, int cy, int bf_h, int bf_w, const procparams::WBParams & wbpar) override; void getrgbloc(int begx, int begy, int yEn, int xEn, int cx, int cy, int bf_h, int bf_w, const procparams::WBParams & wbpar) override;
void getWBMults (const ColorTemp &ctemp, const procparams::RAWParams &raw, std::array<float, 4>& scale_mul, float &autoGainComp, float &rm, float &gm, float &bm) const override; void getWBMults (const ColorTemp &ctemp, const procparams::RAWParams &raw, std::array<float, 4>& scale_mul, float &autoGainComp, float &rm, float &gm, float &bm) const override;
void getImage (const ColorTemp &ctemp, int tran, Imagefloat* image, const PreviewProps &pp, const procparams::ToneCurveParams &hrp, const procparams::RAWParams &raw, int opposed) override; void getImage (const ColorTemp &ctemp, int tran, Imagefloat* image, const PreviewProps &pp, const procparams::ToneCurveParams &hrp, const procparams::RAWParams &raw) override;
eSensorType getSensorType () const override; eSensorType getSensorType () const override;
bool isMono () const override; bool isMono () const override;
ColorTemp getWB () const override ColorTemp getWB () const override

View File

@ -64,9 +64,9 @@ int refreshmap[rtengine::NUMOFEVENTS] = {
DARKFRAME, // EvLCPUseVign, DARKFRAME, // EvLCPUseVign,
HDR, // EvLCPUseCA, HDR, // EvLCPUseCA,
M_VOID, // EvFixedExp M_VOID, // EvFixedExp
ALLNORAW, // EvWBMethod, WB, // EvWBMethod,
ALLNORAW, // EvWBTemp, WB, // EvWBTemp,
ALLNORAW, // EvWBGreen, WB, // EvWBGreen,
AUTOEXP, // EvToneCurveMode1, AUTOEXP, // EvToneCurveMode1,
AUTOEXP, // EvToneCurve2, AUTOEXP, // EvToneCurve2,
AUTOEXP, // EvToneCurveMode2, AUTOEXP, // EvToneCurveMode2,
@ -234,7 +234,7 @@ int refreshmap[rtengine::NUMOFEVENTS] = {
LUMINANCECURVE, // EvCATbadpix LUMINANCECURVE, // EvCATbadpix
LUMINANCECURVE, // EvCATAutoadap LUMINANCECURVE, // EvCATAutoadap
DEFRINGE, // EvPFCurve DEFRINGE, // EvPFCurve
ALLNORAW, // EvWBequal WB, // EvWBequal
0, // EvWBequalbo : obsolete 0, // EvWBequalbo : obsolete
HDR, // EvGradientDegree HDR, // EvGradientDegree
HDR, // EvGradientEnabled HDR, // EvGradientEnabled
@ -470,7 +470,7 @@ int refreshmap[rtengine::NUMOFEVENTS] = {
RETINEX, // EvRetinexgaintransmission RETINEX, // EvRetinexgaintransmission
RETINEX, // EvLskal RETINEX, // EvLskal
OUTPUTPROFILE, // EvOBPCompens OUTPUTPROFILE, // EvOBPCompens
ALLNORAW, // EvWBtempBias WB, // EvWBtempBias
DARKFRAME, // EvRawImageNum DARKFRAME, // EvRawImageNum
0, // unused 0, // unused
0, // unused 0, // unused
@ -517,7 +517,7 @@ int refreshmap[rtengine::NUMOFEVENTS] = {
ALLNORAW, // EvTMFattalEnabled ALLNORAW, // EvTMFattalEnabled
HDR, // EvTMFattalThreshold HDR, // EvTMFattalThreshold
HDR, // EvTMFattalAmount HDR, // EvTMFattalAmount
ALLNORAW, // EvWBEnabled WB, // EvWBEnabled
AUTOEXP, // EvRGBEnabled AUTOEXP, // EvRGBEnabled
LUMINANCECURVE, // EvLEnabled LUMINANCECURVE, // EvLEnabled
DEMOSAIC, // EvPdShrEnabled DEMOSAIC, // EvPdShrEnabled

View File

@ -23,17 +23,18 @@
#include "procevents.h" #include "procevents.h"
// Use M_VOID if you wish to update the proc params without updating the preview at all ! // Use M_VOID if you wish to update the proc params without updating the preview at all !
#define M_VOID (1<<17) #define M_VOID (1<<20)
// Use M_MINUPDATE if you wish to update the preview without modifying the image (think about it like a "refreshPreview") // Use M_MINUPDATE if you wish to update the preview without modifying the image (think about it like a "refreshPreview")
// Must NOT be used with other event (i.e. will be used for MINUPDATE only) // Must NOT be used with other event (i.e. will be used for MINUPDATE only)
#define M_MINUPDATE (1<<16) #define M_MINUPDATE (1<<19)
// Force high quality // Force high quality
#define M_HIGHQUAL (1<<15) #define M_HIGHQUAL (1<<18)
// Elementary functions that can be done to // Elementary functions that can be done to
// the preview image when an event occurs // the preview image when an event occurs
#define M_SPOT (1<<19) #define M_WB (1<<17)
#define M_CSHARP (1<<18) #define M_SPOT (1<<16)
#define M_CSHARP (1<<15)
#define M_MONITOR (1<<14) #define M_MONITOR (1<<14)
#define M_RETINEX (1<<13) #define M_RETINEX (1<<13)
#define M_CROP (1<<12) #define M_CROP (1<<12)
@ -57,6 +58,7 @@
#define DARKFRAME (M_PREPROC|M_RAW|M_INIT|M_SPOT|M_LINDENOISE|M_HDR|M_TRANSFORM|M_BLURMAP|M_AUTOEXP|M_RGBCURVE|M_LUMACURVE|M_LUMINANCE|M_COLOR) #define DARKFRAME (M_PREPROC|M_RAW|M_INIT|M_SPOT|M_LINDENOISE|M_HDR|M_TRANSFORM|M_BLURMAP|M_AUTOEXP|M_RGBCURVE|M_LUMACURVE|M_LUMINANCE|M_COLOR)
#define FLATFIELD (M_PREPROC|M_RAW|M_INIT|M_SPOT|M_LINDENOISE|M_HDR|M_TRANSFORM|M_BLURMAP|M_AUTOEXP|M_RGBCURVE|M_LUMACURVE|M_LUMINANCE|M_COLOR) #define FLATFIELD (M_PREPROC|M_RAW|M_INIT|M_SPOT|M_LINDENOISE|M_HDR|M_TRANSFORM|M_BLURMAP|M_AUTOEXP|M_RGBCURVE|M_LUMACURVE|M_LUMINANCE|M_COLOR)
#define DEMOSAIC (M_RAW|M_INIT|M_SPOT|M_LINDENOISE|M_HDR|M_TRANSFORM|M_BLURMAP|M_AUTOEXP|M_RGBCURVE|M_LUMACURVE|M_LUMINANCE|M_COLOR) #define DEMOSAIC (M_RAW|M_INIT|M_SPOT|M_LINDENOISE|M_HDR|M_TRANSFORM|M_BLURMAP|M_AUTOEXP|M_RGBCURVE|M_LUMACURVE|M_LUMINANCE|M_COLOR)
#define WB (M_WB|M_INIT|M_SPOT|M_LINDENOISE|M_HDR|M_TRANSFORM|M_BLURMAP|M_AUTOEXP|M_RGBCURVE|M_LUMACURVE|M_LUMINANCE|M_COLOR)
#define ALLNORAW (M_INIT|M_SPOT|M_LINDENOISE|M_HDR|M_TRANSFORM|M_BLURMAP|M_AUTOEXP|M_RGBCURVE|M_LUMACURVE|M_LUMINANCE|M_COLOR) #define ALLNORAW (M_INIT|M_SPOT|M_LINDENOISE|M_HDR|M_TRANSFORM|M_BLURMAP|M_AUTOEXP|M_RGBCURVE|M_LUMACURVE|M_LUMINANCE|M_COLOR)
#define CAPTURESHARPEN (M_INIT|M_SPOT|M_LINDENOISE|M_HDR|M_TRANSFORM|M_BLURMAP|M_AUTOEXP|M_RGBCURVE|M_LUMACURVE|M_LUMINANCE|M_COLOR|M_CSHARP) #define CAPTURESHARPEN (M_INIT|M_SPOT|M_LINDENOISE|M_HDR|M_TRANSFORM|M_BLURMAP|M_AUTOEXP|M_RGBCURVE|M_LUMACURVE|M_LUMINANCE|M_COLOR|M_CSHARP)
#define HDR (M_SPOT|M_LINDENOISE|M_HDR|M_TRANSFORM|M_BLURMAP|M_AUTOEXP|M_RGBCURVE|M_LUMACURVE|M_LUMINANCE|M_COLOR) #define HDR (M_SPOT|M_LINDENOISE|M_HDR|M_TRANSFORM|M_BLURMAP|M_AUTOEXP|M_RGBCURVE|M_LUMACURVE|M_LUMINANCE|M_COLOR)

View File

@ -350,7 +350,7 @@ Image8 *load_inspector_mode(const Glib::ustring &fname, eSensorType &sensorType,
PreviewProps pp(0, 0, w, h, 1); PreviewProps pp(0, 0, w, h, 1);
Imagefloat tmp(w, h); Imagefloat tmp(w, h);
src.getImage(src.getWB(), TR_NONE, &tmp, pp, neutral.toneCurve, neutral.raw, 0); src.getImage(src.getWB(), TR_NONE, &tmp, pp, neutral.toneCurve, neutral.raw);
src.convertColorSpace(&tmp, neutral.icm, src.getWB()); src.convertColorSpace(&tmp, neutral.icm, src.getWB());
Image8 *img = new Image8(w, h); Image8 *img = new Image8(w, h);

View File

@ -373,7 +373,7 @@ private:
int beg_tileW = wcr * tileWskip + tileWskip / 2.f - crW / 2.f; int beg_tileW = wcr * tileWskip + tileWskip / 2.f - crW / 2.f;
int beg_tileH = hcr * tileHskip + tileHskip / 2.f - crH / 2.f; int beg_tileH = hcr * tileHskip + tileHskip / 2.f - crH / 2.f;
PreviewProps ppP(beg_tileW, beg_tileH, crW, crH, skipP); PreviewProps ppP(beg_tileW, beg_tileH, crW, crH, skipP);
imgsrc->getImage(currWB, tr, origCropPart, ppP, params.toneCurve, params.raw, 0); imgsrc->getImage(currWB, tr, origCropPart, ppP, params.toneCurve, params.raw);
//baseImg->getStdImage(currWB, tr, origCropPart, ppP, true, params.toneCurve); //baseImg->getStdImage(currWB, tr, origCropPart, ppP, true, params.toneCurve);
// we only need image reduced to 1/4 here // we only need image reduced to 1/4 here
@ -597,7 +597,7 @@ private:
for (int wcr = 0; wcr <= 2; wcr++) { for (int wcr = 0; wcr <= 2; wcr++) {
for (int hcr = 0; hcr <= 2; hcr++) { for (int hcr = 0; hcr <= 2; hcr++) {
PreviewProps ppP(coordW[wcr], coordH[hcr], crW, crH, 1); PreviewProps ppP(coordW[wcr], coordH[hcr], crW, crH, 1);
imgsrc->getImage(currWB, tr, origCropPart, ppP, params.toneCurve, params.raw, 0); imgsrc->getImage(currWB, tr, origCropPart, ppP, params.toneCurve, params.raw);
//baseImg->getStdImage(currWB, tr, origCropPart, ppP, true, params.toneCurve); //baseImg->getStdImage(currWB, tr, origCropPart, ppP, true, params.toneCurve);
@ -757,7 +757,7 @@ private:
} }
baseImg = new Imagefloat(fw, fh); baseImg = new Imagefloat(fw, fh);
imgsrc->getImage(currWB, tr, baseImg, pp, params.toneCurve, params.raw, 1); imgsrc->getImage(currWB, tr, baseImg, pp, params.toneCurve, params.raw);
if (pl) { if (pl) {
pl->setProgress(0.50); pl->setProgress(0.50);

View File

@ -459,7 +459,7 @@ void ImProcFunctions::removeSpots (Imagefloat* img, ImageSource* imgsrc, const s
} }
} }
imgsrc->getImage(currWB, tr, srcSpotBox->getImage(), spp, params->toneCurve, params->raw, 0); imgsrc->getImage(currWB, tr, srcSpotBox->getImage(), spp, params->toneCurve, params->raw);
if (cmp) { if (cmp) {
imgsrc->convertColorSpace(srcImage, *cmp, currWB); imgsrc->convertColorSpace(srcImage, *cmp, currWB);
} }
@ -479,7 +479,7 @@ void ImProcFunctions::removeSpots (Imagefloat* img, ImageSource* imgsrc, const s
dstImage->b(y, x) = 60000.f; dstImage->b(y, x) = 60000.f;
} }
} }
imgsrc->getImage(currWB, tr, dstSpotBox->getImage(), spp, params->toneCurve, params->raw, 0); imgsrc->getImage(currWB, tr, dstSpotBox->getImage(), spp, params->toneCurve, params->raw);
if (cmp) { if (cmp) {
imgsrc->convertColorSpace(dstImage, *cmp, currWB); imgsrc->convertColorSpace(dstImage, *cmp, currWB);
} }

View File

@ -193,7 +193,7 @@ int StdImageSource::load (const Glib::ustring &fname)
return 0; return 0;
} }
void StdImageSource::getImage (const ColorTemp &ctemp, int tran, Imagefloat* image, const PreviewProps &pp, const ToneCurveParams &hrp, const RAWParams &raw, int opposed) void StdImageSource::getImage (const ColorTemp &ctemp, int tran, Imagefloat* image, const PreviewProps &pp, const ToneCurveParams &hrp, const RAWParams &raw)
{ {
// the code will use OpenMP as of now. // the code will use OpenMP as of now.

View File

@ -58,7 +58,7 @@ public:
int load (const Glib::ustring &fname) override; int load (const Glib::ustring &fname) override;
void getWBMults (const ColorTemp &ctemp, const procparams::RAWParams &raw, std::array<float, 4>& scale_mul, float &autoGainComp, float &rm, float &gm, float &bm) const override {}; void getWBMults (const ColorTemp &ctemp, const procparams::RAWParams &raw, std::array<float, 4>& scale_mul, float &autoGainComp, float &rm, float &gm, float &bm) const override {};
void getImage (const ColorTemp &ctemp, int tran, Imagefloat* image, const PreviewProps &pp, const procparams::ToneCurveParams &hrp, const procparams::RAWParams &raw, int opposed) override; void getImage (const ColorTemp &ctemp, int tran, Imagefloat* image, const PreviewProps &pp, const procparams::ToneCurveParams &hrp, const procparams::RAWParams &raw) override;
void getrgbloc (int begx, int begy, int yEn, int xEn, int cx, int cy, int bf_h, int bf_w, const procparams::WBParams & wbpar) override {}; void getrgbloc (int begx, int begy, int yEn, int xEn, int cx, int cy, int bf_h, int bf_w, const procparams::WBParams & wbpar) override {};
ColorTemp getWB () const override ColorTemp getWB () const override
{ {

View File

@ -246,10 +246,10 @@ WhiteBalance::WhiteBalance () : FoldableToolPanel(this, TOOL_NAME, M("TP_WBALANC
} }
auto m = ProcEventMapper::getInstance(); auto m = ProcEventMapper::getInstance();
EvWBObserver10 = m->newEvent(ALLNORAW, "HISTORY_MSG_WBALANCE_OBSERVER10"); EvWBObserver10 = m->newEvent(WB, "HISTORY_MSG_WBALANCE_OBSERVER10");
EvWBitcwbprim = m->newEvent(ALLNORAW, "HISTORY_MSG_WBITC_PRIM"); EvWBitcwbprim = m->newEvent(WB, "HISTORY_MSG_WBITC_PRIM");
EvWBitcwbalg = m->newEvent(ALLNORAW, "HISTORY_MSG_WBITC_OBS"); EvWBitcwbalg = m->newEvent(WB, "HISTORY_MSG_WBITC_OBS");
EvWBitcwgreen = m->newEvent(ALLNORAW, "HISTORY_MSG_WBITC_GREEN"); EvWBitcwgreen = m->newEvent(WB, "HISTORY_MSG_WBITC_GREEN");
//Add the model columns to the Combo (which is a kind of view), //Add the model columns to the Combo (which is a kind of view),