better (local) caching of fattal results in dcrop

Use new M_HDR todo code instead of using M_RGBCURVE for fattal
(ported from Hombre's commit a9d02a7dca0b5dcd31f642046d94e1663b17c9ff)
This commit is contained in:
Alberto Griggio
2017-11-17 17:46:13 +01:00
parent 1467b858c5
commit 6212d6e0c6
4 changed files with 40 additions and 46 deletions

View File

@@ -168,7 +168,7 @@ void Crop::update (int todo)
bool needstransform = parent->ipf.needsTransform();
if (todo & (M_INIT | M_LINDENOISE)) {
if (todo & (M_INIT | M_LINDENOISE | M_HDR)) {
MyMutex::MyLock lock (parent->minit); // Also used in improccoord
int tr = getCoarseBitMask (params.coarse);
@@ -691,8 +691,8 @@ void Crop::update (int todo)
createBuffer (cropw, croph);
std::unique_ptr<Imagefloat> fattalCrop;
if ((todo & (M_TRANSFORM | M_RGBCURVE)) && params.fattal.enabled) {
Imagefloat *f = baseCrop;
if ((todo & M_HDR) && params.fattal.enabled) {
Imagefloat *f = origCrop;
int fw = skips(parent->fw, skip);
int fh = skips(parent->fh, skip);
bool need_cropping = false;
@@ -726,18 +726,14 @@ void Crop::update (int todo)
}
}
}
if (f == origCrop) {
fattalCrop.reset(baseCrop->copy());
f = fattalCrop.get();
}
parent->ipf.ToneMapFattal02(f);
// crop back to the size expected by the rest of the pipeline
if (need_cropping) {
Imagefloat *c = new Imagefloat(cropw, croph);
Imagefloat *c = origCrop;
int oy = cropy / skip;
int ox = cropx / skip;
int oy = trafy / skip;
int ox = trafx / skip;
#ifdef _OPENMP
#pragma omp parallel for
#endif
@@ -750,7 +746,6 @@ void Crop::update (int todo)
c->b(y, x) = f->b(cy, cx);
}
}
fattalCrop.reset(c);
baseCrop = c;
} else {
baseCrop = f;

View File

@@ -280,7 +280,7 @@ void ImProcCoordinator::updatePreviewImage (int todo, Crop* cropCall)
}
}
if (todo & (M_INIT | M_LINDENOISE)) {
if (todo & (M_INIT | M_LINDENOISE | M_HDR)) {
MyMutex::MyLock initLock (minit); // Also used in crop window
imgsrc->HLRecovery_Global ( params.toneCurve); // this handles Color HLRecovery
@@ -385,16 +385,13 @@ void ImProcCoordinator::updatePreviewImage (int todo, Crop* cropCall)
readyphase++;
if ((todo & (M_TRANSFORM | M_RGBCURVE)) && params.fattal.enabled) {
Imagefloat *fattalprev = orig_prev->copy();
ipf.ToneMapFattal02(fattalprev);
if ((todo & M_HDR) && params.fattal.enabled) {
ipf.ToneMapFattal02(orig_prev);
if (oprevi != orig_prev) {
delete oprevi;
}
oprevi = fattalprev;
} else {
oprevi = orig_prev;
}
oprevi = orig_prev;
progress ("Rotate / Distortion...", 100 * readyphase / numofphases);
// Remove transformation if unneeded

View File

@@ -514,9 +514,9 @@ int refreshmap[rtengine::NUMOFEVENTS] = {
DARKFRAME, // EvLensCorrMode
DARKFRAME, // EvLensCorrLensfunCamera
DARKFRAME, // EvLensCorrLensfunLens
RGBCURVE, // EvTMFattalEnabled
RGBCURVE, // EvTMFattalThreshold
RGBCURVE // EvTMFattalAmount
ALLNORAW, // EvTMFattalEnabled
HDR, // EvTMFattalThreshold
HDR // EvTMFattalAmount
};

View File

@@ -20,22 +20,23 @@
#define __REFRESHMAP__
// Use M_VOID if you wish to update the proc params without updating the preview at all !
#define M_VOID (1<<16)
#define M_VOID (1<<17)
// 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)
#define M_MINUPDATE (1<<15)
#define M_MINUPDATE (1<<16)
// Force high quality
#define M_HIGHQUAL (1<<14)
#define M_HIGHQUAL (1<<15)
// Elementary functions that can be done to
// the preview image when an event occurs
#define M_MONITOR (1<<13)
#define M_RETINEX (1<<12)
#define M_CROP (1<<11)
#define M_PREPROC (1<<10)
#define M_RAW (1<<9)
#define M_INIT (1<<8)
#define M_LINDENOISE (1<<7)
#define M_MONITOR (1<<14)
#define M_RETINEX (1<<13)
#define M_CROP (1<<12)
#define M_PREPROC (1<<11)
#define M_RAW (1<<10)
#define M_INIT (1<<9)
#define M_LINDENOISE (1<<8)
#define M_HDR (1<<7)
#define M_TRANSFORM (1<<6)
#define M_BLURMAP (1<<5)
#define M_AUTOEXP (1<<4)
@@ -46,12 +47,13 @@
// Bitfield of functions to do to the preview image when an event occurs
// Use those or create new ones for your new events
#define FIRST (M_PREPROC|M_RAW|M_INIT|M_LINDENOISE|M_TRANSFORM|M_BLURMAP|M_AUTOEXP|M_RGBCURVE|M_LUMACURVE|M_LUMINANCE|M_COLOR|M_MONITOR) // without HIGHQUAL
#define ALL (M_PREPROC|M_RAW|M_INIT|M_LINDENOISE|M_TRANSFORM|M_BLURMAP|M_AUTOEXP|M_RGBCURVE|M_LUMACURVE|M_LUMINANCE|M_COLOR) // without HIGHQUAL
#define DARKFRAME (M_PREPROC|M_RAW|M_INIT|M_LINDENOISE|M_TRANSFORM|M_BLURMAP|M_AUTOEXP|M_RGBCURVE|M_LUMACURVE|M_LUMINANCE|M_COLOR)
#define FLATFIELD (M_PREPROC|M_RAW|M_INIT|M_LINDENOISE|M_TRANSFORM|M_BLURMAP|M_AUTOEXP|M_RGBCURVE|M_LUMACURVE|M_LUMINANCE|M_COLOR)
#define DEMOSAIC (M_RAW|M_INIT|M_LINDENOISE|M_TRANSFORM|M_BLURMAP|M_AUTOEXP|M_RGBCURVE|M_LUMACURVE|M_LUMINANCE|M_COLOR)
#define ALLNORAW (M_INIT|M_LINDENOISE|M_TRANSFORM|M_BLURMAP|M_AUTOEXP|M_RGBCURVE|M_LUMACURVE|M_LUMINANCE|M_COLOR)
#define FIRST (M_PREPROC|M_RAW|M_INIT|M_LINDENOISE|M_HDR|M_TRANSFORM|M_BLURMAP|M_AUTOEXP|M_RGBCURVE|M_LUMACURVE|M_LUMINANCE|M_COLOR|M_MONITOR) // without HIGHQUAL
#define ALL (M_PREPROC|M_RAW|M_INIT|M_LINDENOISE|M_HDR|M_TRANSFORM|M_BLURMAP|M_AUTOEXP|M_RGBCURVE|M_LUMACURVE|M_LUMINANCE|M_COLOR) // without HIGHQUAL
#define DARKFRAME (M_PREPROC|M_RAW|M_INIT|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_LINDENOISE|M_HDR|M_TRANSFORM|M_BLURMAP|M_AUTOEXP|M_RGBCURVE|M_LUMACURVE|M_LUMINANCE|M_COLOR)
#define DEMOSAIC (M_RAW|M_INIT|M_LINDENOISE|M_HDR|M_TRANSFORM|M_BLURMAP|M_AUTOEXP|M_RGBCURVE|M_LUMACURVE|M_LUMINANCE|M_COLOR)
#define ALLNORAW (M_INIT|M_LINDENOISE|M_HDR|M_TRANSFORM|M_BLURMAP|M_AUTOEXP|M_RGBCURVE|M_LUMACURVE|M_LUMINANCE|M_COLOR)
#define HDR (M_HDR|M_TRANSFORM|M_BLURMAP|M_AUTOEXP|M_RGBCURVE|M_LUMACURVE|M_LUMINANCE|M_COLOR)
#define TRANSFORM (M_TRANSFORM|M_BLURMAP|M_AUTOEXP|M_RGBCURVE|M_LUMACURVE|M_LUMINANCE|M_COLOR)
#define AUTOEXP (M_AUTOEXP|M_RGBCURVE|M_LUMACURVE|M_LUMINANCE|M_COLOR)
#define RGBCURVE (M_RGBCURVE|M_LUMACURVE|M_LUMINANCE|M_COLOR)