Demosaicing method used for the preview at <100% zoom, issue 2664

This commit is contained in:
DrSlony 2015-02-15 19:47:03 +01:00
parent de22b61e98
commit ec2f378bbf
7 changed files with 84 additions and 75 deletions

View File

@ -778,8 +778,8 @@ PREFERENCES_CIEART_FRAME;CIECAM02-Specific Settings
PREFERENCES_CIEART_LABEL;Use float precision instead of double
PREFERENCES_CIEART_TOOLTIP;If enabled, CIECAM02 calculations are performed in the single-precision floating-point format instead of the double-precision one. This provides a small increase in speed at the expense of a negligible loss of quality.
PREFERENCES_CLIPPINGIND;Clipping Indication
PREFERENCES_CLUTSCACHE;HaldCLUT cache
PREFERENCES_CLUTSCACHE_LABEL;Max number of cached Cluts
PREFERENCES_CLUTSCACHE;HaldCLUT Cache
PREFERENCES_CLUTSCACHE_LABEL;Maximum number of cached CLUTs
PREFERENCES_CLUTSDIR;HaldCLUT directory
PREFERENCES_CMETRICINTENT;Colorimetric intent
PREFERENCES_CUSTPROFBUILDHINT;Executable (or script) file called when a new initial processing profile should be generated for an image.\n\nThe path of the communication file (*.ini style, a.k.a. "Keyfile") is added as a command line parameter. It contains various parameters required for the scripts and image Exif to allow a rules-based processing profile generation.\n\n<b>WARNING:</b> You are responsible for using double quotes where necessary if you're using paths containing spaces.
@ -801,6 +801,10 @@ PREFERENCES_DATEFORMATHINT;You can use the following formatting strings:\n<b>%y<
PREFERENCES_DATEFORMAT;Date format
PREFERENCES_DEFAULTLANG;Default Language
PREFERENCES_DEFAULTTHEME;Default Theme
PREFERENCES_PREVDEMO;Preview Demosaic Method
PREFERENCES_PREVDEMO_LABEL;Demosaicing method used for the preview at <100% zoom:
PREFERENCES_PREVDEMO_FAST;Fast
PREFERENCES_PREVDEMO_SIDECAR;As in PP3
PREFERENCES_DIRDARKFRAMES;Dark-frames directory
PREFERENCES_DIRHOME;Home directory
PREFERENCES_DIRLAST;Last visited directory
@ -847,7 +851,7 @@ PREFERENCES_ICCDIR;Directory containing color profiles
PREFERENCES_IMG_RELOAD_NEEDED;These changes require the image to be reloaded (or a new image to be opened) to take effect.
PREFERENCES_IMPROCPARAMS;Default Processing Profile
PREFERENCES_INSPECT_LABEL;Inspect
PREFERENCES_INSPECT_MAXBUFFERS_LABEL;Maximum number of buffers
PREFERENCES_INSPECT_MAXBUFFERS_LABEL;Maximum number of cached images
PREFERENCES_INSPECT_MAXBUFFERS_TOOLTIP;Set the maximum number of images stored in cache when hovering over them in the File Browser; systems with little RAM (2GB) should keep this value set to 1 or 2.
PREFERENCES_INTENT_ABSOLUTE;Absolute Colorimetric
PREFERENCES_INTENT_PERCEPTUAL;Perceptual

View File

@ -136,8 +136,12 @@ void ImProcCoordinator::updatePreviewImage (int todo, Crop* cropCall) {
// Tells to the ImProcFunctions' tools what is the preview scale, which may lead to some simplifications
ipf.setScale (scale);
bool highDetailNeeded = false;
if (options.prevdemo==PD_Sidecar) highDetailNeeded = true; //i#2664
else highDetailNeeded = (todo & M_HIGHQUAL);
// Check if any detail crops need high detail. If not, take a fast path short cut
bool highDetailNeeded = (todo & M_HIGHQUAL);
if (!highDetailNeeded) {
for (size_t i=0; i<crops.size(); i++)
if (crops[i]->get_skip() == 1 ) { // skip=1 -> full resolution
@ -158,9 +162,7 @@ void ImProcCoordinator::updatePreviewImage (int todo, Crop* cropCall) {
rp.bayersensor.ccSteps = 0;
rp.xtranssensor.ccSteps = 0;
/* Commented out the following line so that the hot pixel filter works at <100% zoom levels too, to fix issue 2535.
* rp.deadPixelFilter = rp.hotPixelFilter = false;
*/
//rp.deadPixelFilter = rp.hotPixelFilter = false;
}
progress ("Applying white balance, color correction & sRGB conversion...",100*readyphase/numofphases);

View File

@ -562,10 +562,10 @@ omp_set_nested(oldNested);
delete dsttmp;
}
// if (settings->verbose) {
if (settings->verbose) {
t2e.set();
printf("Wavelet performed in %d usec:\n", t2e.etime(t1e));
// }
}
}//end o

View File

@ -361,7 +361,7 @@ void Options::setDefaults () {
histogramPosition = 1;
histogramBar = true;
histogramFullMode = false;
prevdemo = PD_Sidecar;
rgbDenoiseThreadLimit = 0;
#if defined( _OPENMP ) && defined( __x86_64__ )
clutCacheSize = omp_get_num_procs();
@ -769,6 +769,7 @@ if (keyFile.has_group ("Performance")) {
if (keyFile.has_key ("Performance", "SIMPLNRAUT")) rtSettings.leveldnautsimpl = keyFile.get_integer ("Performance", "SIMPLNRAUT");
if (keyFile.has_key ("Performance", "ClutCacheSize")) clutCacheSize = keyFile.get_integer ("Performance", "ClutCacheSize");
if (keyFile.has_key ("Performance", "MaxInspectorBuffers")) maxInspectorBuffers = keyFile.get_integer ("Performance", "MaxInspectorBuffers");
if (keyFile.has_key ("Performance", "PreviewDemosaicFromSidecar")) prevdemo = (prevdemo_t)keyFile.get_integer ("Performance", "PreviewDemosaicFromSidecar");
}
if (keyFile.has_group ("GUI")) {
@ -1054,6 +1055,7 @@ int Options::saveToFile (Glib::ustring fname) {
keyFile.set_integer ("Performance", "SIMPLNRAUT", rtSettings.leveldnautsimpl);
keyFile.set_integer ("Performance", "ClutCacheSize", clutCacheSize);
keyFile.set_integer ("Performance", "MaxInspectorBuffers", maxInspectorBuffers);
keyFile.set_integer ("Performance", "PreviewDemosaicFromSidecar", prevdemo);
keyFile.set_string ("Output", "Format", saveFormat.format);
keyFile.set_integer ("Output", "JpegQuality", saveFormat.jpegQuality);

View File

@ -55,6 +55,7 @@ class SaveFormat {
enum ThFileType {FT_Invalid=-1, FT_None=0, FT_Raw=1, FT_Jpeg=2, FT_Tiff=3, FT_Png=4, FT_Custom=5, FT_Tiff16=6, FT_Png16=7, FT_Custom16=8};
enum PPLoadLocation {PLL_Cache=0, PLL_Input=1};
enum CPBKeyType {CPBKT_TID=0, CPBKT_NAME=1, CPBKT_TID_NAME=2};
enum prevdemo_t {PD_Sidecar=1, PD_Fast=0};
namespace rtengine {
class SafeKeyFile;
@ -204,7 +205,7 @@ class Options {
bool tunnelMetaData; // Pass through IPTC and XMP unchanged
int histogramPosition; // 0=disabled, 1=left pane, 2=right pane
// int histogramWorking; // 0=disabled, 1=left pane, 2=right pane
//int histogramWorking; // 0=disabled, 1=left pane, 2=right pane
bool histogramBar;
bool histogramFullMode;
bool showProfileSelector;
@ -215,13 +216,13 @@ class Options {
bool showFilmStripToolBar;
Glib::ustring clutsDir;
// Performance options
Glib::ustring clutsDir;
int rgbDenoiseThreadLimit; // maximum number of threads for the denoising tool ; 0 = use the maximum available
int maxInspectorBuffers; // maximum number of buffers (i.e. images) for the Inspector feature
int clutCacheSize;
bool filledProfile; // Used as reminder for the ProfilePanel "mode"
prevdemo_t prevdemo; // Demosaicing method used for the <100% preview
bool menuGroupRank;
bool menuGroupLabel;

View File

@ -513,6 +513,55 @@ Gtk::Widget* Preferences::getPerformancePanel () {
Gtk::VBox* mainContainer = Gtk::manage( new Gtk::VBox () );
mainContainer->set_border_width (4);
mainContainer->set_spacing(4);
Gtk::Frame* fprevdemo = Gtk::manage (new Gtk::Frame (M("PREFERENCES_PREVDEMO")));
Gtk::HBox* hbprevdemo = Gtk::manage (new Gtk::HBox (false, 4));
Gtk::Label* lprevdemo = Gtk::manage (new Gtk::Label (M("PREFERENCES_PREVDEMO_LABEL")));
cprevdemo = Gtk::manage (new Gtk::ComboBoxText ());
cprevdemo->append_text (M("PREFERENCES_PREVDEMO_FAST"));
cprevdemo->append_text (M("PREFERENCES_PREVDEMO_SIDECAR"));
cprevdemo->set_active (1);
hbprevdemo->pack_start (*lprevdemo, Gtk::PACK_SHRINK);
hbprevdemo->pack_start (*cprevdemo);
fprevdemo->add (*hbprevdemo);
hbprevdemo->set_border_width(4);
mainContainer->pack_start (*fprevdemo, Gtk::PACK_SHRINK, 4);
Gtk::Frame* fclut = Gtk::manage( new Gtk::Frame (M("PREFERENCES_CLUTSCACHE")) );
Gtk::HBox* clutCacheSizeHB = Gtk::manage( new Gtk::HBox () );
clutCacheSizeHB->set_border_width(4);
clutCacheSizeHB->set_spacing(4);
Gtk::Label* CLUTLl = Gtk::manage( new Gtk::Label (M("PREFERENCES_CLUTSCACHE_LABEL") + ":", Gtk::ALIGN_LEFT));
clutCacheSizeSB = Gtk::manage( new Gtk::SpinButton () );
clutCacheSizeSB->set_digits (0);
clutCacheSizeSB->set_increments (1, 5);
clutCacheSizeSB->set_max_length(2); // Will this be sufficient? :)
#ifdef _OPENMP
clutCacheSizeSB->set_range (1, 2*omp_get_num_procs());
#else
clutCacheSizeSB->set_range (1, 8);
#endif
clutCacheSizeHB->pack_start (*CLUTLl, Gtk::PACK_SHRINK, 0);
clutCacheSizeHB->pack_end (*clutCacheSizeSB, Gtk::PACK_SHRINK, 0);
fclut->add (*clutCacheSizeHB);
mainContainer->pack_start (*fclut, Gtk::PACK_SHRINK, 4);
Gtk::Frame* finspect = Gtk::manage( new Gtk::Frame (M("PREFERENCES_INSPECT_LABEL")) );
Gtk::HBox* maxIBuffersHB = Gtk::manage( new Gtk::HBox () );
maxIBuffersHB->set_border_width(4);
maxIBuffersHB->set_spacing(4);
maxIBuffersHB->set_tooltip_text(M("PREFERENCES_INSPECT_MAXBUFFERS_TOOLTIP"));
Gtk::Label* maxIBufferLbl = Gtk::manage( new Gtk::Label (M("PREFERENCES_INSPECT_MAXBUFFERS_LABEL") + ":", Gtk::ALIGN_LEFT));
maxInspectorBuffersSB = Gtk::manage( new Gtk::SpinButton () );
maxInspectorBuffersSB->set_digits (0);
maxInspectorBuffersSB->set_increments (1, 5);
maxInspectorBuffersSB->set_max_length(2);
maxInspectorBuffersSB->set_range (1, 12); // ... we have to set a limit, 12 seem to be enough even for systems with tons of RAM
maxIBuffersHB->pack_start (*maxIBufferLbl, Gtk::PACK_SHRINK, 0);
maxIBuffersHB->pack_end (*maxInspectorBuffersSB, Gtk::PACK_SHRINK, 0);
finspect->add(*maxIBuffersHB);
mainContainer->pack_start(*finspect, Gtk::PACK_SHRINK, 4);
Gtk::Frame* fdenoise = Gtk::manage( new Gtk::Frame (M("PREFERENCES_NOISE")) );
Gtk::VBox* vbdenoise = Gtk::manage( new Gtk::VBox () );
vbdenoise->set_border_width (4);
@ -590,59 +639,6 @@ Gtk::Widget* Preferences::getPerformancePanel () {
fdenoise->add (*vbdenoise);
mainContainer->pack_start (*fdenoise, Gtk::PACK_SHRINK, 4);
/* Gtk::Label* dntilab = Gtk::manage (new Gtk::Label (M("PREFERENCES_TINB")+":", Gtk::ALIGN_LEFT));
dnti = Gtk::manage (new Gtk::ComboBoxText ());
dnti->append_text (M("PREFERENCES_TISTD"));
dnti->append_text (M("PREFERENCES_TIMAX"));
Gtk::Table* colon2 = Gtk::manage (new Gtk::Table (1, 3));
colon2->attach (*dntilab, 0, 1, 0, 1, Gtk::FILL, Gtk::SHRINK, 2, 2);
colon2->attach (*dnti, 1, 2, 0, 1, Gtk::EXPAND | Gtk::FILL | Gtk::SHRINK, Gtk::SHRINK, 2, 2);
colon2->attach (*restartNeeded4, 2, 3, 0, 1, Gtk::FILL, Gtk::SHRINK, 2, 2);
vbdenoise->pack_start (*colon2, Gtk::PACK_SHRINK, 4);
*/
Gtk::Frame* fclut = Gtk::manage( new Gtk::Frame (M("PREFERENCES_CLUTSCACHE")) );
Gtk::HBox* clutCacheSizeHB = Gtk::manage( new Gtk::HBox () );
clutCacheSizeHB->set_border_width(4);
clutCacheSizeHB->set_spacing(4);
Gtk::Label* CLUTLl = Gtk::manage( new Gtk::Label (M("PREFERENCES_CLUTSCACHE_LABEL") + ":", Gtk::ALIGN_LEFT));
clutCacheSizeSB = Gtk::manage( new Gtk::SpinButton () );
clutCacheSizeSB->set_digits (0);
clutCacheSizeSB->set_increments (1, 5);
clutCacheSizeSB->set_max_length(2); // Will this be sufficient? :)
#ifdef _OPENMP
clutCacheSizeSB->set_range (1, 2*omp_get_num_procs());
#else
clutCacheSizeSB->set_range (1, 8);
#endif
clutCacheSizeHB->pack_start (*CLUTLl, Gtk::PACK_SHRINK, 0);
clutCacheSizeHB->pack_end (*clutCacheSizeSB, Gtk::PACK_SHRINK, 0);
fclut->add (*clutCacheSizeHB);
mainContainer->pack_start (*fclut, Gtk::PACK_SHRINK, 4);
Gtk::Frame* finspect = Gtk::manage( new Gtk::Frame (M("PREFERENCES_INSPECT_LABEL")) );
Gtk::HBox* maxIBuffersHB = Gtk::manage( new Gtk::HBox () );
maxIBuffersHB->set_border_width(4);
maxIBuffersHB->set_spacing(4);
maxIBuffersHB->set_tooltip_text(M("PREFERENCES_INSPECT_MAXBUFFERS_TOOLTIP"));
Gtk::Label* maxIBufferLbl = Gtk::manage( new Gtk::Label (M("PREFERENCES_INSPECT_MAXBUFFERS_LABEL") + ":", Gtk::ALIGN_LEFT));
maxInspectorBuffersSB = Gtk::manage( new Gtk::SpinButton () );
maxInspectorBuffersSB->set_digits (0);
maxInspectorBuffersSB->set_increments (1, 5);
maxInspectorBuffersSB->set_max_length(2);
maxInspectorBuffersSB->set_range (1, 12); // ... we have to set a limit, 12 seem to be enough even for systems with tons of RAM
maxIBuffersHB->pack_start (*maxIBufferLbl, Gtk::PACK_SHRINK, 0);
maxIBuffersHB->pack_end (*maxInspectorBuffersSB, Gtk::PACK_SHRINK, 0);
finspect->add(*maxIBuffersHB);
mainContainer->pack_start(*finspect, Gtk::PACK_SHRINK, 4);
return mainContainer;
}
@ -1285,7 +1281,6 @@ void Preferences::storePreferences () {
moptions.defProfImg = iprofiles->getFullPathFromActiveRow();
if (moptions.defProfImg.empty()) moptions.defProfImg = DEFPROFILE_INTERNAL;
moptions.dateFormat = dateformat->get_text();
moptions.panAccelFactor = (int)panFactor->get_value();
moptions.fbShowDateTime = showDateTime->get_active ();
@ -1358,6 +1353,8 @@ void Preferences::storePreferences () {
moptions.rtSettings.nrwavlevel = dnwavlev->get_active_row_number ();
moptions.rtSettings.leveldnautsimpl = dnautsimpl->get_active_row_number ();
moptions.prevdemo = (prevdemo_t)cprevdemo->get_active_row_number ();
if (sdcurrent->get_active ())
moptions.startupDir = STARTUPDIR_CURRENT;
else if (sdhome->get_active ())
@ -1464,6 +1461,7 @@ void Preferences::fillPreferences () {
dnaut->set_active (moptions.rtSettings.leveldnaut);
dnautsimpl->set_active (moptions.rtSettings.leveldnautsimpl);
dnwavlev->set_active (moptions.rtSettings.nrwavlevel);
cprevdemo->set_active (moptions.prevdemo);
// cbAutocielab->set_active (moptions.rtSettings.autocielab);
cbciecamfloat->set_active (moptions.rtSettings.ciecamfloat);

View File

@ -102,6 +102,8 @@ class Preferences : public Gtk::Dialog, public ProfileStoreListener {
Gtk::ComboBoxText* dnwavlev;
Gtk::ComboBoxText* dnliss;
Gtk::ComboBoxText* cprevdemo;
Gtk::ComboBoxText* theme;
Gtk::CheckButton* slimUI;
Gtk::HBox* hbtheme;