From 1462d79270b51328ea2f72160b249cbc3f508478 Mon Sep 17 00:00:00 2001 From: natureh Date: Tue, 3 Jul 2012 10:45:02 +0200 Subject: [PATCH] Solving issue 1457: "Preview sometimes doesn't update, demozaicing occure too often" --- rtengine/dcrop.cc | 2 +- rtengine/improccoordinator.cc | 24 ++++++++++++++++-------- rtengine/improccoordinator.h | 2 +- 3 files changed, 18 insertions(+), 10 deletions(-) diff --git a/rtengine/dcrop.cc b/rtengine/dcrop.cc index 2b58b0c6a..84ea38cc8 100644 --- a/rtengine/dcrop.cc +++ b/rtengine/dcrop.cc @@ -79,7 +79,7 @@ void Crop::update (int todo) { else needsinitupdate = setCropSizes (wx, wy, ww, wh, ws, true); // this set skip=ws // it something has been reallocated, all processing steps have to be performed - if (needsinitupdate) + if (needsinitupdate || (todo & M_HIGHQUAL)) todo = ALL; baseCrop = origCrop; diff --git a/rtengine/improccoordinator.cc b/rtengine/improccoordinator.cc index 772b17e3a..742711782 100644 --- a/rtengine/improccoordinator.cc +++ b/rtengine/improccoordinator.cc @@ -28,7 +28,7 @@ namespace rtengine { extern const Settings* settings; ImProcCoordinator::ImProcCoordinator () - : workimg(NULL), awbComputed(false), ipf(¶ms, true), scale(10), lastHighDetail(false), allocated(false), + : workimg(NULL), awbComputed(false), ipf(¶ms, true), scale(10), highDetailComputed(false), allocated(false), pW(-1), pH(-1), plistener(NULL), imageListener(NULL), aeListener(NULL), hListener(NULL), resultValid(false), changeSinceLast(0), updaterRunning(false), destroying(false) { @@ -137,15 +137,23 @@ void ImProcCoordinator::updatePreviewImage (int todo, Crop* cropCall) { OR HLR gets disabled when Color method was selected */ // If high detail (=100%) is newly selected, do a demosaic update, since the last was just with FAST - if ((todo & M_RAW) - || (!lastHighDetail && highDetailNeeded) - || (params.hlrecovery.enabled && params.hlrecovery.method!="Color" && imgsrc->IsrgbSourceModified()) - || (!params.hlrecovery.enabled && params.hlrecovery.method=="Color" && imgsrc->IsrgbSourceModified())){ + if ( (todo & M_RAW) + || (!highDetailComputed && highDetailNeeded) + || ( params.hlrecovery.enabled && params.hlrecovery.method!="Color" && imgsrc->IsrgbSourceModified()) + || (!params.hlrecovery.enabled && params.hlrecovery.method=="Color" && imgsrc->IsrgbSourceModified())) + { - if (settings->verbose) printf("Demosaic %s\n",rp.dmethod.c_str()); - imgsrc->demosaic( rp ); + if (settings->verbose) printf("Demosaic %s\n",rp.dmethod.c_str()); + imgsrc->demosaic( rp ); + if (highDetailNeeded) { + highDetailComputed = true; + if (params.hlrecovery.enabled && params.hlrecovery.method=="Color") { + todo |= M_INIT; + } + } + else + highDetailComputed = false; } - lastHighDetail=highDetailNeeded; if (todo & M_INIT) { diff --git a/rtengine/improccoordinator.h b/rtengine/improccoordinator.h index de19ad737..872f27b6d 100644 --- a/rtengine/improccoordinator.h +++ b/rtengine/improccoordinator.h @@ -60,7 +60,7 @@ class ImProcCoordinator : public StagedImageProcessor { ImProcFunctions ipf; int scale; - bool lastHighDetail; // was the last update running in high detail? + bool highDetailComputed; bool allocated; void freeAll ();