Demosaicing method used for the preview at <100% zoom, issue 2664
This commit is contained in:
parent
de22b61e98
commit
ec2f378bbf
@ -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
|
||||
|
@ -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);
|
||||
|
@ -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
|
||||
|
||||
|
@ -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);
|
||||
|
@ -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;
|
||||
|
@ -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);
|
||||
|
@ -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;
|
||||
|
Loading…
x
Reference in New Issue
Block a user