diff --git a/rtdata/languages/default b/rtdata/languages/default
index a2acbba04..236d23aa8 100644
--- a/rtdata/languages/default
+++ b/rtdata/languages/default
@@ -79,6 +79,9 @@ FILEBROWSER_PROCESSINGSETTINGS;Settings
FILEBROWSER_PROCESSINGSETTINGSHINT;Set the file format and output directory
FILEBROWSER_RENAMEDLGLABEL;Rename file
FILEBROWSER_RENAMEDLGMSG;Rename file "%1" to:
+FILEBROWSER_AUTODARKFRAME;Auto dark frame
+FILEBROWSER_MOVETODARKFDIR;Move to dark frames directory
+FILEBROWSER_SELECTDARKFRAME;Select dark frame...
FILEBROWSER_SHOWDIRHINT;Show all images of the directory D
FILEBROWSER_SHOWEXIFINFO;Show EXIF info i
FILEBROWSER_SHOWQUEUEHINT;Show content of the processing queue
@@ -400,6 +403,7 @@ PREFERENCES_CLEARDLG_LINE2;This may take a few seconds.
PREFERENCES_CLEARDLG_TITLE;Please wait
PREFERENCES_CLIPPINGIND;Clipping indication
PREFERENCES_CMETRICINTENT;Colorimetric Intent
+PREFERENCES_DARKFRAME;Dark frame
PREFERENCES_DATEFORMAT;Date Format
PREFERENCES_DATEFORMATHINT;You can use the following formatting strings:\n%y : year\n%m : month\n%d : day\n\nFor example, the hungarian date format is:\n%y/%m/%d
PREFERENCES_DCBENHANCE;Apply DCB enhancement step
@@ -407,6 +411,7 @@ PREFERENCES_DCBITERATIONS;Number of DCB iterations
PREFERENCES_DEFAULTLANG;Default language
PREFERENCES_DEFAULTTHEME;Default theme
PREFERENCES_DEMOSAICINGALGO;Demosaicing Algorithm
+PREFERENCES_DIRDARKFRAMES;Dark frames directory
PREFERENCES_DIRHOME;Home directory
PREFERENCES_DIRLAST;Last visited directory
PREFERENCES_DIROTHER;Other
@@ -632,6 +637,8 @@ TP_LUMADENOISE_RADIUS;Radius
TP_PERSPECTIVE_HORIZONTAL;Horizontal
TP_PERSPECTIVE_LABEL;Perspective
TP_PERSPECTIVE_VERTICAL;Vertical
+TP_PREPROCESS_DARKFRAME;Dark frame
+TP_PREPROCESS_DFAUTOSELECT;Auto selection
TP_RESIZE_BICUBIC;Bicubic
TP_RESIZE_BICUBICSF;Bicubic (Softer)
TP_RESIZE_BICUBICSH;Bicubic (Sharper)
diff --git a/rtengine/dfmanager.cc b/rtengine/dfmanager.cc
index c5bd17ac5..c6b1a3902 100644
--- a/rtengine/dfmanager.cc
+++ b/rtengine/dfmanager.cc
@@ -225,13 +225,15 @@ void DFManager::init( Glib::ustring pathname )
i.pathNames.push_back( i.pathname );
i.pathname.clear();
}
- if( !i.pathname.empty() )
- printf( "%s: %s\n",i.key().c_str(),i.pathname.c_str());
- else{
- printf( "%s: MEAN of \n ",i.key().c_str());
- for( std::list::iterator iter = i.pathNames.begin(); iter != i.pathNames.end();iter++ )
- printf( "%s, ", iter->c_str() );
- printf("\n");
+ if( settings->verbose ){
+ if( !i.pathname.empty() )
+ printf( "%s: %s\n",i.key().c_str(),i.pathname.c_str());
+ else{
+ printf( "%s: MEAN of \n ",i.key().c_str());
+ for( std::list::iterator iter = i.pathNames.begin(); iter != i.pathNames.end();iter++ )
+ printf( "%s, ", iter->c_str() );
+ printf("\n");
+ }
}
}
currentPath = pathname;
diff --git a/rtengine/rawimagesource.cc b/rtengine/rawimagesource.cc
index 670a93fe3..fc09b7fc7 100644
--- a/rtengine/rawimagesource.cc
+++ b/rtengine/rawimagesource.cc
@@ -349,7 +349,7 @@ int RawImageSource::cfaCleanFromMap( BYTE* bitmapBads )
if (bitmapBads[ (row+dy) *bmpW + (col+dx)/8] & (1<<(col+dx)%8)) continue;
sum += rawData[row+dy][col+dx];
tot++;
- if (bitmapBads[ (row-dy) *bmpW + (col-dx)/8] & (1<<(col+dx)%8)) continue;
+ if (bitmapBads[ (row-dy) *bmpW + (col-dx)/8] & (1<<(col-dx)%8)) continue;
double dirwt = 1/( fabs( rawData[row+dy][col+dx]- rawData[row-dy][col-dx])+eps);
wtdsum += dirwt* rawData[row+dy][col+dx];
@@ -731,8 +731,9 @@ int RawImageSource::load (Glib::ustring fname) {
int res = ri->loadRaw ();
if (res)
return res;
-
- plistener=NULL; //\TODO must be reintroduced
+ if (plistener) {
+ plistener->setProgress (0.8);
+ }
/***** Copy once constant data extracted from raw *******/
W = ri->width;
H = ri->height;
@@ -764,19 +765,13 @@ int RawImageSource::load (Glib::ustring fname) {
int val, dark, sat;
double dsum[8], dmin, dmax;
float pre_mul[4];
- bool use_camera_wb=true;
- bool use_auto_wb=false;
- bool highlight=true;
-
for (int c = 0; c < 4; c++){
cblack[c] = ri->cblack[c] + ri->black_point;
pre_mul[c] = ri->pre_mul[c];
}
- /*
- if (user_mul[0])
- memcpy(pre_mul, user_mul, sizeof pre_mul);*/
- if (use_auto_wb || (use_camera_wb && ri->cam_mul[0] == -1)) {
+
+ if ( ri->cam_mul[0] == -1 ) {
memset(dsum, 0, sizeof dsum);
for (row = 0; row < H; row += 8)
for (col = 0; col < W; col += 8) {
@@ -806,7 +801,7 @@ skip_block: ;
if (dsum[c])
pre_mul[c] = dsum[c + 4] / dsum[c];
}
- if (use_camera_wb && ri->cam_mul[0] != -1) {
+ if ( ri->cam_mul[0] != -1) {
memset(sum, 0, sizeof sum);
for (row = 0; row < 8; row++)
for (col = 0; col < 8; col++) {
@@ -834,8 +829,7 @@ skip_block: ;
if (dmax < pre_mul[c])
dmax = pre_mul[c];
}
- if (!highlight)
- dmax = dmin;
+ dmax = dmin;
for (c = 0; c < 4; c++)
scale_mul[c] = (pre_mul[c] /= dmax) * 65535.0 / sat;
if (settings->verbose) {
@@ -873,6 +867,10 @@ skip_block: ;
blue = allocArray(W,H);
hpmap = allocArray(W, H);
+ if (plistener) {
+ plistener->setProgress (1.0);
+ }
+ plistener=NULL; // This must be reset, because only load() is called through progressConnector
return 0; // OK!
}
@@ -894,9 +892,10 @@ void RawImageSource::preprocess (const RAWParams &raw)
size_t dimBitmap = widthBitmap*ri->height;
BYTE *bitmapBads = new BYTE [ dimBitmap ];
+ int totBP=0; // Hold count of bad pixels to correct
std::list *bp = dfm.getBadPixels( ri->make, ri->model, std::string("") );
if( bp ){
- for(std::list::iterator iter = bp->begin(); iter != bp->end(); iter++)
+ for(std::list::iterator iter = bp->begin(); iter != bp->end(); iter++,totBP++)
bitmapBads[ widthBitmap * (iter->y) + (iter->x)/8] |= 1<<(iter->x%8);
if( settings->verbose ){
printf( "Correcting %u pixels from .badpixels\n",bp->size());
@@ -908,7 +907,7 @@ void RawImageSource::preprocess (const RAWParams &raw)
}else if( raw.dark_frame.size()>0 )
bp = dfm.getHotPixels( raw.dark_frame );
if(bp){
- for(std::list::iterator iter = bp->begin(); iter != bp->end(); iter++)
+ for(std::list::iterator iter = bp->begin(); iter != bp->end(); iter++,totBP++)
bitmapBads[ widthBitmap *iter->y + iter->x/8] |= 1<<(iter->x%8);
if( settings->verbose && bp->size()>0){
printf( "Correcting %u hotpixels from darkframe\n",bp->size());
@@ -925,11 +924,13 @@ void RawImageSource::preprocess (const RAWParams &raw)
plistener->setProgress (0.0);
}
int nFound =findHotDeadPixel( bitmapBads,0.1 );
+ totBP += nFound;
if( settings->verbose && nFound>0){
printf( "Correcting %d hot/dead pixels found inside image\n",nFound );
}
}
- cfaCleanFromMap( bitmapBads );
+ if( totBP )
+ cfaCleanFromMap( bitmapBads );
delete [] bitmapBads;
// check if it is an olympus E camera, if yes, compute G channel pre-compensation factors
diff --git a/rtgui/editorpanel.cc b/rtgui/editorpanel.cc
index 4eba917f3..9e66b2c35 100644
--- a/rtgui/editorpanel.cc
+++ b/rtgui/editorpanel.cc
@@ -23,6 +23,7 @@
#include
#include
#include
+#include
using namespace rtengine::procparams;
@@ -333,7 +334,8 @@ void EditorPanel::open (Thumbnail* tmb, rtengine::InitialImage* isrc) {
ldprof = new ProcParams ();
*ldprof = openThm->getProcParams ();
}
-
+ rtengine::ImageSource* is=isrc->getImageSource();
+ is->setProgressListener( this );
// initialize profile
if (openThm->getType()!=FT_Raw)
profilep->initProfile (options.defProfImg, ldprof, NULL);
@@ -426,6 +428,48 @@ void EditorPanel::setProgressState (int state) {
g_idle_add (setprocstate, p);
}
+struct spparams {
+ double val;
+ Glib::ustring str;
+ rtengine::ProgressListener* progListener;
+};
+
+int _setprogress( void *p )
+{
+ spparams *s= (spparams*)p;
+ gdk_threads_enter ();
+ s->progListener->setProgress( s->val );
+ gdk_threads_leave ();
+ delete s;
+ return 0;
+}
+
+int _setprogressStr( void *p )
+{
+ spparams *s= (spparams*)p;
+ gdk_threads_enter ();
+ s->progListener->setProgressStr( s->str );
+ gdk_threads_leave ();
+ delete s;
+ return 0;
+}
+
+void EditorPanel::setProgress (double p)
+{
+ spparams *s=new spparams;
+ s->val = p;
+ s->progListener = parent;
+ g_idle_add (_setprogress, s);
+}
+
+void EditorPanel::setProgressStr (Glib::ustring str)
+{
+ spparams *s=new spparams;
+ s->str = str;
+ s->progListener = parent;
+ g_idle_add (_setprogressStr, s);
+}
+
void EditorPanel::refreshProcessingState (bool state) {
// Set proc params of thumbnail. It saves it into the cache and updates the file browser.
diff --git a/rtgui/editorpanel.h b/rtgui/editorpanel.h
index d870a7c33..58a915006 100644
--- a/rtgui/editorpanel.h
+++ b/rtgui/editorpanel.h
@@ -112,6 +112,8 @@ class EditorPanel : public Gtk::VBox,
void setParent (RTWindow* p) { parent = p; }
// progresslistener interface
+ void setProgress (double p);
+ void setProgressStr (Glib::ustring str);
void setProgressState (int state);
void error (Glib::ustring descr);
void refreshProcessingState (bool state); // this is called by setProcessingState in the gtk thread
diff --git a/rtgui/filebrowser.cc b/rtgui/filebrowser.cc
index 70377281f..ecc3e0c13 100644
--- a/rtgui/filebrowser.cc
+++ b/rtgui/filebrowser.cc
@@ -59,9 +59,9 @@ FileBrowser::FileBrowser ()
pmenu->attach (*(new Gtk::SeparatorMenuItem ()), 0, 1, p, p+1); p++;
pmenu->attach (*(selall = new Gtk::MenuItem (M("FILEBROWSER_POPUPSELECTALL"))), 0, 1, p, p+1); p++;
pmenu->attach (*(new Gtk::SeparatorMenuItem ()), 0, 1, p, p+1); p++;
- pmenu->attach (*(selectDF = new Gtk::MenuItem ("Select Dark Frame...")), 0, 1, p, p+1); p++;
- pmenu->attach (*(autoDF = new Gtk::MenuItem ("Auto Dark Frame")), 0, 1, p, p+1); p++;
- pmenu->attach (*(thisIsDF = new Gtk::MenuItem ("Move to Dark Frames folder")), 0, 1, p, p+1); p++;
+ pmenu->attach (*(selectDF = new Gtk::MenuItem (M("FILEBROWSER_SELECTDARKFRAME"))), 0, 1, p, p+1); p++;
+ pmenu->attach (*(autoDF = new Gtk::MenuItem (M("FILEBROWSER_AUTODARKFRAME"))), 0, 1, p, p+1); p++;
+ pmenu->attach (*(thisIsDF = new Gtk::MenuItem (M("FILEBROWSER_MOVETODARKFDIR"))), 0, 1, p, p+1); p++;
pmenu->attach (*(new Gtk::SeparatorMenuItem ()), 0, 1, p, p+1); p++;
pmenu->attach (*(copyprof = new Gtk::MenuItem (M("FILEBROWSER_COPYPROFILE"))), 0, 1, p, p+1); p++;
pmenu->attach (*(pasteprof = new Gtk::MenuItem (M("FILEBROWSER_PASTEPROFILE"))), 0, 1, p, p+1); p++;
diff --git a/rtgui/preferences.cc b/rtgui/preferences.cc
index 3f2e60484..2cffee9ca 100644
--- a/rtgui/preferences.cc
+++ b/rtgui/preferences.cc
@@ -253,10 +253,10 @@ Gtk::Widget* Preferences::getProcParamsPanel () {
fdp->add (*vbdp);
mvbpp->pack_start (*fdp, Gtk::PACK_SHRINK, 4);
- Gtk::Frame* fdf = Gtk::manage (new Gtk::Frame ("Dark Frame") );
+ Gtk::Frame* fdf = Gtk::manage (new Gtk::Frame (M("PREFERENCES_DARKFRAME")) );
Gtk::HBox* hb42 = Gtk::manage (new Gtk::HBox ());
- darkFrameDir = Gtk::manage(new Gtk::FileChooserButton( "Dark frames directory", Gtk::FILE_CHOOSER_ACTION_SELECT_FOLDER));
- Gtk::Label *dfLab = Gtk::manage(new Gtk::Label("Dark Frames directory"));
+ darkFrameDir = Gtk::manage(new Gtk::FileChooserButton(M("PREFERENCES_DIRDARKFRAMES"), Gtk::FILE_CHOOSER_ACTION_SELECT_FOLDER));
+ Gtk::Label *dfLab = Gtk::manage(new Gtk::Label(M("PREFERENCES_DIRDARKFRAMES")));
hb42->pack_start(*dfLab , Gtk::PACK_SHRINK, 4 );
hb42->pack_start(*darkFrameDir);
dfLabel = Gtk::manage(new Gtk::Label("Found:"));
diff --git a/rtgui/preprocess.cc b/rtgui/preprocess.cc
index bf3326f08..3b3609370 100644
--- a/rtgui/preprocess.cc
+++ b/rtgui/preprocess.cc
@@ -25,14 +25,14 @@ using namespace rtengine::procparams;
PreProcess::PreProcess ()
{
hbdf = Gtk::manage(new Gtk::HBox());
- darkFrameFile = Gtk::manage(new Gtk::FileChooserButton(M("PREFERENCES_DARKFRAME"), Gtk::FILE_CHOOSER_ACTION_OPEN));
- dfLabel = Gtk::manage(new Gtk::Label("Dark Frame"));
+ darkFrameFile = Gtk::manage(new Gtk::FileChooserButton(M("TP_PREPROCESS_DARKFRAME"), Gtk::FILE_CHOOSER_ACTION_OPEN));
+ dfLabel = Gtk::manage(new Gtk::Label(M("TP_PREPROCESS_DARKFRAME")));
btnReset = Gtk::manage(new Gtk::Button());
btnReset->set_image (*Gtk::manage(new Gtk::Image (Gtk::StockID("gtk-cancel"), Gtk::ICON_SIZE_BUTTON)));
hbdf->pack_start(*dfLabel, Gtk::PACK_SHRINK, 4);
hbdf->pack_start(*darkFrameFile);
hbdf->pack_start(*btnReset, Gtk::PACK_SHRINK, 4);
- dfAuto = Gtk::manage(new Gtk::CheckButton(("Auto selection")));
+ dfAuto = Gtk::manage(new Gtk::CheckButton((M("TP_PREPROCESS_DFAUTOSELECT"))));
caAutocorrect = Gtk::manage(new Gtk::CheckButton((M("PREFERENCES_CACORRECTION"))));
hotDeadPixel = Gtk::manage(new Gtk::CheckButton((M("PREFERENCES_HOTDEADPIXFILT"))));
@@ -163,7 +163,7 @@ void PreProcess::caCorrectionChanged()
lastCA = caAutocorrect->get_active ();
}
if (listener)
- listener->panelChanged (EvPreProcess, Glib::ustring("CA autocorrection ")+ (caAutocorrect->get_active()?"ON":"OFF") );
+ listener->panelChanged (EvPreProcess, Glib::ustring(M("PREFERENCES_CACORRECTION"))+"="+(caAutocorrect->get_active()?"ON":"OFF") );
}
void PreProcess::dfAutoChanged()
@@ -182,7 +182,7 @@ void PreProcess::dfAutoChanged()
}
hbdf->set_sensitive( !dfAuto->get_active() );
if (listener)
- listener->panelChanged (EvPreProcess, Glib::ustring("Dark Frame autoselection")+ (dfAuto->get_active()?"ON":"OFF") );
+ listener->panelChanged (EvPreProcess, Glib::ustring(M("TP_PREPROCESS_DFAUTOSELECT"))+"="+(dfAuto->get_active()?"ON":"OFF") );
}
void PreProcess::hotDeadPixelChanged ()
@@ -200,13 +200,13 @@ void PreProcess::hotDeadPixelChanged ()
lastHot = hotDeadPixel->get_active ();
}
if (listener)
- listener->panelChanged (EvPreProcess, Glib::ustring("Hot Dead Pixel ")+(hotDeadPixel->get_active()?"ON":"OFF") );
+ listener->panelChanged (EvPreProcess, Glib::ustring(M("PREFERENCES_HOTDEADPIXFILT"))+"="+(hotDeadPixel->get_active()?"ON":"OFF") );
}
void PreProcess::darkFrameChanged()
{
dfChanged=true;
if (listener)
- listener->panelChanged (EvPreProcess, Glib::ustring("Dark Framet set to ")+darkFrameFile->get_filename());
+ listener->panelChanged (EvPreProcess, Glib::ustring(M("TP_PREPROCESS_DARKFRAME"))+"="+darkFrameFile->get_filename());
}
void PreProcess::darkFrameReset()
@@ -215,6 +215,6 @@ void PreProcess::darkFrameReset()
darkFrameFile->set_current_name("");
darkFrameFile->set_filename ("");
if (listener)
- listener->panelChanged (EvPreProcess, Glib::ustring("Dark Framet reset"));
+ listener->panelChanged (EvPreProcess, Glib::ustring(M("TP_PREPROCESS_DARKFRAME"))+"=0" );
}