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(); 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 MyMutex::MyLock lock (parent->minit); // Also used in improccoord
int tr = getCoarseBitMask (params.coarse); int tr = getCoarseBitMask (params.coarse);
@@ -691,8 +691,8 @@ void Crop::update (int todo)
createBuffer (cropw, croph); createBuffer (cropw, croph);
std::unique_ptr<Imagefloat> fattalCrop; std::unique_ptr<Imagefloat> fattalCrop;
if ((todo & (M_TRANSFORM | M_RGBCURVE)) && params.fattal.enabled) { if ((todo & M_HDR) && params.fattal.enabled) {
Imagefloat *f = baseCrop; Imagefloat *f = origCrop;
int fw = skips(parent->fw, skip); int fw = skips(parent->fw, skip);
int fh = skips(parent->fh, skip); int fh = skips(parent->fh, skip);
bool need_cropping = false; 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); parent->ipf.ToneMapFattal02(f);
// crop back to the size expected by the rest of the pipeline // crop back to the size expected by the rest of the pipeline
if (need_cropping) { if (need_cropping) {
Imagefloat *c = new Imagefloat(cropw, croph); Imagefloat *c = origCrop;
int oy = cropy / skip; int oy = trafy / skip;
int ox = cropx / skip; int ox = trafx / skip;
#ifdef _OPENMP #ifdef _OPENMP
#pragma omp parallel for #pragma omp parallel for
#endif #endif
@@ -750,7 +746,6 @@ void Crop::update (int todo)
c->b(y, x) = f->b(cy, cx); c->b(y, x) = f->b(cy, cx);
} }
} }
fattalCrop.reset(c);
baseCrop = c; baseCrop = c;
} else { } else {
baseCrop = f; 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 MyMutex::MyLock initLock (minit); // Also used in crop window
imgsrc->HLRecovery_Global ( params.toneCurve); // this handles Color HLRecovery imgsrc->HLRecovery_Global ( params.toneCurve); // this handles Color HLRecovery
@@ -385,16 +385,13 @@ void ImProcCoordinator::updatePreviewImage (int todo, Crop* cropCall)
readyphase++; readyphase++;
if ((todo & (M_TRANSFORM | M_RGBCURVE)) && params.fattal.enabled) { if ((todo & M_HDR) && params.fattal.enabled) {
Imagefloat *fattalprev = orig_prev->copy(); ipf.ToneMapFattal02(orig_prev);
ipf.ToneMapFattal02(fattalprev);
if (oprevi != orig_prev) { if (oprevi != orig_prev) {
delete oprevi; delete oprevi;
} }
oprevi = fattalprev;
} else {
oprevi = orig_prev;
} }
oprevi = orig_prev;
progress ("Rotate / Distortion...", 100 * readyphase / numofphases); progress ("Rotate / Distortion...", 100 * readyphase / numofphases);
// Remove transformation if unneeded // Remove transformation if unneeded

View File

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

View File

@@ -20,22 +20,23 @@
#define __REFRESHMAP__ #define __REFRESHMAP__
// 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<<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") // 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<<15) #define M_MINUPDATE (1<<16)
// Force high quality // Force high quality
#define M_HIGHQUAL (1<<14) #define M_HIGHQUAL (1<<15)
// 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_MONITOR (1<<13) #define M_MONITOR (1<<14)
#define M_RETINEX (1<<12) #define M_RETINEX (1<<13)
#define M_CROP (1<<11) #define M_CROP (1<<12)
#define M_PREPROC (1<<10) #define M_PREPROC (1<<11)
#define M_RAW (1<<9) #define M_RAW (1<<10)
#define M_INIT (1<<8) #define M_INIT (1<<9)
#define M_LINDENOISE (1<<7) #define M_LINDENOISE (1<<8)
#define M_HDR (1<<7)
#define M_TRANSFORM (1<<6) #define M_TRANSFORM (1<<6)
#define M_BLURMAP (1<<5) #define M_BLURMAP (1<<5)
#define M_AUTOEXP (1<<4) #define M_AUTOEXP (1<<4)
@@ -46,21 +47,22 @@
// Bitfield of functions to do to the preview image when an event occurs // Bitfield of functions to do to the preview image when an event occurs
// Use those or create new ones for your new events // 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 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_TRANSFORM|M_BLURMAP|M_AUTOEXP|M_RGBCURVE|M_LUMACURVE|M_LUMINANCE|M_COLOR) // 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_TRANSFORM|M_BLURMAP|M_AUTOEXP|M_RGBCURVE|M_LUMACURVE|M_LUMINANCE|M_COLOR) #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_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_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_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 TRANSFORM (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 AUTOEXP (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 RGBCURVE (M_RGBCURVE|M_LUMACURVE|M_LUMINANCE|M_COLOR) #define AUTOEXP (M_AUTOEXP|M_RGBCURVE|M_LUMACURVE|M_LUMINANCE|M_COLOR)
#define LUMINANCECURVE (M_LUMACURVE|M_LUMINANCE|M_COLOR) #define RGBCURVE (M_RGBCURVE|M_LUMACURVE|M_LUMINANCE|M_COLOR)
#define SHARPENING (M_LUMINANCE|M_COLOR) #define LUMINANCECURVE (M_LUMACURVE|M_LUMINANCE|M_COLOR)
#define IMPULSEDENOISE (M_LUMINANCE|M_COLOR) #define SHARPENING (M_LUMINANCE|M_COLOR)
#define DEFRINGE (M_LUMINANCE|M_COLOR) #define IMPULSEDENOISE (M_LUMINANCE|M_COLOR)
#define DIRPYRDENOISE (M_LUMINANCE|M_COLOR) #define DEFRINGE (M_LUMINANCE|M_COLOR)
#define DIRPYREQUALIZER (M_LUMINANCE|M_COLOR) #define DIRPYRDENOISE (M_LUMINANCE|M_COLOR)
#define DIRPYREQUALIZER (M_LUMINANCE|M_COLOR)
#define GAMMA M_MONITOR #define GAMMA M_MONITOR
#define CROP M_CROP #define CROP M_CROP
#define RESIZE M_VOID #define RESIZE M_VOID