merge 'simpleprocess-fast-export-test' into dev
This commit is contained in:
commit
518d51e839
@ -89,6 +89,11 @@ EXPORT_BYPASS_SHARPENEDGE;Bypass Edge Sharpening
|
||||
EXPORT_BYPASS_SHARPENING;Bypass Sharpening
|
||||
EXPORT_BYPASS_SHARPENMICRO;Bypass Microcontrast
|
||||
EXPORT_BYPASS_SH_HQ;Bypass Sharp Mask Shadows/Highlights
|
||||
EXPORT_PIPELINE;Processing pipeline
|
||||
EXPORT_BYPASS;Processing steps to bypass
|
||||
EXPORT_USE_NORMAL_PIPELINE;Standard (bypass some steps, resize at the end)
|
||||
EXPORT_USE_FAST_PIPELINE;Dedicated (full processing on resized image)
|
||||
EXPORT_USE_FAST_PIPELINE_TIP;Use a dedicated processing pipeline for images in Fast Export mode, that trades speed for quality. Resizing of the image is done as early as possible, instead of doing it at the end like in the normal pipeline. The speedup can be significant, but be prepared to see artifacts and a general degradation of output quality.
|
||||
EXPORT_FASTEXPORTOPTIONS;<b>Fast Export Options</b>
|
||||
EXPORT_INSTRUCTIONS;Fast Export options provide overrides to bypass time and resource consuming development settings and to run queue processing using the fast export settings instead. This method is recommended for quicker generation of lower resolution images when speed is a priority or when resized output is desired for one or many images without making modifications to their saved development parameters.
|
||||
EXPORT_MAXHEIGHT;Maximum height:
|
||||
|
@ -21,16 +21,16 @@
|
||||
namespace rtengine
|
||||
{
|
||||
|
||||
ProcessingJob* ProcessingJob::create (const Glib::ustring& fname, bool isRaw, const procparams::ProcParams& pparams)
|
||||
ProcessingJob* ProcessingJob::create (const Glib::ustring& fname, bool isRaw, const procparams::ProcParams& pparams, bool fast)
|
||||
{
|
||||
|
||||
return new ProcessingJobImpl (fname, isRaw, pparams);
|
||||
return new ProcessingJobImpl (fname, isRaw, pparams, fast);
|
||||
}
|
||||
|
||||
ProcessingJob* ProcessingJob::create (InitialImage* initialImage, const procparams::ProcParams& pparams)
|
||||
ProcessingJob* ProcessingJob::create (InitialImage* initialImage, const procparams::ProcParams& pparams, bool fast)
|
||||
{
|
||||
|
||||
return new ProcessingJobImpl (initialImage, pparams);
|
||||
return new ProcessingJobImpl (initialImage, pparams, fast);
|
||||
}
|
||||
|
||||
void ProcessingJob::destroy (ProcessingJob* job)
|
||||
|
@ -32,12 +32,13 @@ public:
|
||||
bool isRaw;
|
||||
InitialImage* initialImage;
|
||||
procparams::ProcParams pparams;
|
||||
bool fast;
|
||||
|
||||
ProcessingJobImpl (const Glib::ustring& fn, bool iR, const procparams::ProcParams& pp)
|
||||
: fname(fn), isRaw(iR), initialImage(nullptr), pparams(pp) {}
|
||||
ProcessingJobImpl (const Glib::ustring& fn, bool iR, const procparams::ProcParams& pp, bool ff)
|
||||
: fname(fn), isRaw(iR), initialImage(nullptr), pparams(pp), fast(ff) {}
|
||||
|
||||
ProcessingJobImpl (InitialImage* iImage, const procparams::ProcParams& pp)
|
||||
: fname(""), isRaw(true), initialImage(iImage), pparams(pp)
|
||||
ProcessingJobImpl (InitialImage* iImage, const procparams::ProcParams& pp, bool ff)
|
||||
: fname(""), isRaw(true), initialImage(iImage), pparams(pp), fast(ff)
|
||||
{
|
||||
iImage->increaseRef();
|
||||
}
|
||||
@ -48,6 +49,8 @@ public:
|
||||
initialImage->decreaseRef();
|
||||
}
|
||||
}
|
||||
|
||||
bool fastPipeline() const { return fast; }
|
||||
};
|
||||
|
||||
}
|
||||
|
@ -471,6 +471,7 @@ class ProcessingJob
|
||||
{
|
||||
|
||||
public:
|
||||
virtual ~ProcessingJob() {}
|
||||
|
||||
/** Creates a processing job from a file name. This function always succeeds. It only stores the data into the ProcessingJob class, it does not load
|
||||
* the image thus it returns immediately.
|
||||
@ -478,7 +479,7 @@ public:
|
||||
* @param isRaw shall be true if it is a raw file
|
||||
* @param pparams is a struct containing the processing parameters
|
||||
* @return an object containing the data above. It can be passed to the functions that do the actual image processing. */
|
||||
static ProcessingJob* create (const Glib::ustring& fname, bool isRaw, const procparams::ProcParams& pparams);
|
||||
static ProcessingJob* create (const Glib::ustring& fname, bool isRaw, const procparams::ProcParams& pparams, bool fast=false);
|
||||
|
||||
/** Creates a processing job from a file name. This function always succeeds. It only stores the data into the ProcessingJob class, it does not load
|
||||
* the image thus it returns immediately. This function increases the reference count of the initialImage. If you decide not the process the image you
|
||||
@ -487,12 +488,14 @@ public:
|
||||
* @param initialImage is a loaded and pre-processed initial image
|
||||
* @param pparams is a struct containing the processing parameters
|
||||
* @return an object containing the data above. It can be passed to the functions that do the actual image processing. */
|
||||
static ProcessingJob* create (InitialImage* initialImage, const procparams::ProcParams& pparams);
|
||||
static ProcessingJob* create (InitialImage* initialImage, const procparams::ProcParams& pparams, bool fast=false);
|
||||
|
||||
/** Cancels and destroys a processing job. The reference count of the corresponding initialImage (if any) is decreased. After the call of this function the ProcessingJob instance
|
||||
* gets invalid, you must not use it any more. Dont call this function while the job is being processed.
|
||||
* @param job is the job to destroy */
|
||||
static void destroy (ProcessingJob* job);
|
||||
|
||||
virtual bool fastPipeline() const = 0;
|
||||
};
|
||||
|
||||
/** This function performs all the image processinf steps corresponding to the given ProcessingJob. It returns when it is ready, so it can be slow.
|
||||
|
File diff suppressed because it is too large
Load Diff
@ -34,6 +34,7 @@
|
||||
#include "guiutils.h"
|
||||
#include "rtimage.h"
|
||||
#include <sys/time.h>
|
||||
|
||||
using namespace std;
|
||||
using namespace rtengine;
|
||||
|
||||
@ -227,7 +228,7 @@ bool BatchQueue::saveBatchQueue ()
|
||||
|
||||
// The column's header is mandatory (the first line will be skipped when loaded)
|
||||
file << "input image full path|param file full path|output image full path|file format|jpeg quality|jpeg subsampling|"
|
||||
<< "png bit depth|png compression|tiff bit depth|uncompressed tiff|save output params|force format options|<end of line>"
|
||||
<< "png bit depth|png compression|tiff bit depth|uncompressed tiff|save output params|force format options|fast export|<end of line>"
|
||||
<< std::endl;
|
||||
|
||||
// method is already running with entryLock, so no need to lock again
|
||||
@ -242,6 +243,7 @@ bool BatchQueue::saveBatchQueue ()
|
||||
<< saveFormat.pngBits << '|' << saveFormat.pngCompression << '|'
|
||||
<< saveFormat.tiffBits << '|' << saveFormat.tiffUncompressed << '|'
|
||||
<< saveFormat.saveParams << '|' << entry->forceFormatOpts << '|'
|
||||
<< entry->job->fastPipeline() << '|'
|
||||
<< std::endl;
|
||||
}
|
||||
}
|
||||
@ -308,6 +310,7 @@ bool BatchQueue::loadBatchQueue ()
|
||||
const auto tiffUncompressed = nextIntOr (options.saveFormat.tiffUncompressed);
|
||||
const auto saveParams = nextIntOr (options.saveFormat.saveParams);
|
||||
const auto forceFormatOpts = nextIntOr (options.forceFormatOpts);
|
||||
const auto fast = nextIntOr(false);
|
||||
|
||||
rtengine::procparams::ProcParams pparams;
|
||||
|
||||
@ -319,7 +322,7 @@ bool BatchQueue::loadBatchQueue ()
|
||||
if (!thumb)
|
||||
continue;
|
||||
|
||||
auto job = rtengine::ProcessingJob::create (source, thumb->getType () == FT_Raw, pparams);
|
||||
auto job = rtengine::ProcessingJob::create (source, thumb->getType () == FT_Raw, pparams, fast);
|
||||
|
||||
auto prevh = getMaxThumbnailHeight ();
|
||||
auto prevw = prevh;
|
||||
|
@ -38,7 +38,12 @@ ExportPanel::ExportPanel () : listener (nullptr)
|
||||
labExportTitle->set_alignment(Gtk::ALIGN_START);
|
||||
pack_start(*labExportTitle, Gtk::PACK_SHRINK, 4);
|
||||
|
||||
Gtk::RadioButton::Group pipeline_group;
|
||||
use_fast_pipeline = Gtk::manage ( new Gtk::RadioButton (pipeline_group, M("EXPORT_USE_FAST_PIPELINE")));
|
||||
use_normal_pipeline = Gtk::manage ( new Gtk::RadioButton (pipeline_group, M("EXPORT_USE_NORMAL_PIPELINE")));
|
||||
bypass_box = Gtk::manage(new Gtk::VBox());
|
||||
bypass_ALL = Gtk::manage ( new Gtk::CheckButton (M("EXPORT_BYPASS_ALL")));
|
||||
use_fast_pipeline->set_tooltip_text(M("EXPORT_USE_FAST_PIPELINE_TIP"));
|
||||
bypass_sharpening = Gtk::manage ( new Gtk::CheckButton (M("EXPORT_BYPASS_SHARPENING")));
|
||||
bypass_sharpenEdge = Gtk::manage ( new Gtk::CheckButton (M("EXPORT_BYPASS_SHARPENEDGE")));
|
||||
bypass_sharpenMicro = Gtk::manage ( new Gtk::CheckButton (M("EXPORT_BYPASS_SHARPENMICRO")));
|
||||
@ -96,18 +101,28 @@ ExportPanel::ExportPanel () : listener (nullptr)
|
||||
// ----------------------------------------------------------------
|
||||
|
||||
// start global packing
|
||||
pack_start(*bypass_ALL , Gtk::PACK_SHRINK, 4);
|
||||
pack_start(*Gtk::manage(new Gtk::HSeparator ()), Gtk::PACK_SHRINK, 4);
|
||||
pack_start(*bypass_sharpening , Gtk::PACK_SHRINK, 4);
|
||||
pack_start(*bypass_sharpenEdge , Gtk::PACK_SHRINK, 4);
|
||||
pack_start(*bypass_sharpenMicro , Gtk::PACK_SHRINK, 4);
|
||||
Gtk::HBox* lblbox = Gtk::manage (new Gtk::HBox ());
|
||||
lblbox->pack_start (*Gtk::manage (new Gtk::Label (M("EXPORT_PIPELINE"))), Gtk::PACK_SHRINK, 4);
|
||||
pack_start (*lblbox, Gtk::PACK_SHRINK, 4);
|
||||
pack_start(*use_fast_pipeline , Gtk::PACK_SHRINK, 4);
|
||||
pack_start(*use_normal_pipeline , Gtk::PACK_SHRINK, 4);
|
||||
|
||||
bypass_box->pack_start(*Gtk::manage(new Gtk::HSeparator ()), Gtk::PACK_SHRINK, 4);
|
||||
lblbox = Gtk::manage (new Gtk::HBox ());
|
||||
lblbox->pack_start (*Gtk::manage (new Gtk::Label (M("EXPORT_BYPASS"))), Gtk::PACK_SHRINK, 4);
|
||||
bypass_box->pack_start (*lblbox, Gtk::PACK_SHRINK, 4);
|
||||
bypass_box->pack_start(*bypass_ALL , Gtk::PACK_SHRINK, 4);
|
||||
// bypass_box->pack_start(*Gtk::manage(new Gtk::HSeparator ()), Gtk::PACK_SHRINK, 4);
|
||||
bypass_box->pack_start(*bypass_sharpening , Gtk::PACK_SHRINK, 4);
|
||||
bypass_box->pack_start(*bypass_sharpenEdge , Gtk::PACK_SHRINK, 4);
|
||||
bypass_box->pack_start(*bypass_sharpenMicro , Gtk::PACK_SHRINK, 4);
|
||||
//pack_start(*bypass_lumaDenoise , Gtk::PACK_SHRINK, 4);
|
||||
//pack_start(*bypass_colorDenoise , Gtk::PACK_SHRINK, 4);
|
||||
pack_start(*bypass_defringe , Gtk::PACK_SHRINK, 4);
|
||||
pack_start(*bypass_dirpyrDenoise, Gtk::PACK_SHRINK, 4);
|
||||
pack_start(*bypass_sh_hq , Gtk::PACK_SHRINK, 4);
|
||||
pack_start(*bypass_dirpyrequalizer , Gtk::PACK_SHRINK, 4);
|
||||
pack_start(*bypass_wavelet , Gtk::PACK_SHRINK, 4);
|
||||
bypass_box->pack_start(*bypass_defringe , Gtk::PACK_SHRINK, 4);
|
||||
bypass_box->pack_start(*bypass_dirpyrDenoise, Gtk::PACK_SHRINK, 4);
|
||||
bypass_box->pack_start(*bypass_sh_hq , Gtk::PACK_SHRINK, 4);
|
||||
bypass_box->pack_start(*bypass_dirpyrequalizer , Gtk::PACK_SHRINK, 4);
|
||||
bypass_box->pack_start(*bypass_wavelet , Gtk::PACK_SHRINK, 4);
|
||||
|
||||
bayerFrameVBox->pack_start(*hb_raw_bayer_method, Gtk::PACK_SHRINK, 4);
|
||||
//bayerFrameVBox->pack_start(*bypass_raw_all_enhance , Gtk::PACK_SHRINK, 4);
|
||||
@ -121,11 +136,13 @@ ExportPanel::ExportPanel () : listener (nullptr)
|
||||
xtransFrameVBox->pack_start(*hb_raw_xtrans_method, Gtk::PACK_SHRINK, 4);
|
||||
xtransFrame->add(*xtransFrameVBox);
|
||||
|
||||
pack_start(*bypass_raw_ccSteps , Gtk::PACK_SHRINK, 4);
|
||||
pack_start(*bypass_raw_ca , Gtk::PACK_SHRINK, 4);
|
||||
bypass_box->pack_start(*bypass_raw_ccSteps , Gtk::PACK_SHRINK, 4);
|
||||
bypass_box->pack_start(*bypass_raw_ca , Gtk::PACK_SHRINK, 4);
|
||||
|
||||
pack_start(*bypass_raw_df , Gtk::PACK_SHRINK, 4);
|
||||
pack_start(*bypass_raw_ff , Gtk::PACK_SHRINK, 4);
|
||||
bypass_box->pack_start(*bypass_raw_df , Gtk::PACK_SHRINK, 4);
|
||||
bypass_box->pack_start(*bypass_raw_ff , Gtk::PACK_SHRINK, 4);
|
||||
|
||||
pack_start(*bypass_box, Gtk::PACK_SHRINK);
|
||||
|
||||
pack_start (*Gtk::manage(new Gtk::HSeparator ()), Gtk::PACK_SHRINK, 2);
|
||||
|
||||
@ -176,6 +193,7 @@ ExportPanel::ExportPanel () : listener (nullptr)
|
||||
pack_start(*vboxpe, Gtk::PACK_SHRINK, 0);
|
||||
|
||||
|
||||
use_fast_pipeline->signal_toggled().connect(sigc::mem_fun(*this, &ExportPanel::use_fast_pipeline_toggled));
|
||||
btnFastExport->signal_clicked().connect( sigc::mem_fun(*this, &ExportPanel::FastExportPressed) );
|
||||
//btnExportLoadSettings->signal_clicked().connect( sigc::mem_fun(*this, &ExportPanel::LoadSettings) );
|
||||
//btnExportSaveSettings->signal_clicked().connect( sigc::mem_fun(*this, &ExportPanel::SaveSettings) );
|
||||
@ -224,40 +242,48 @@ void ExportPanel::FastExportPressed ()
|
||||
|
||||
void ExportPanel::SaveSettingsAsDefault()
|
||||
{
|
||||
bool changed = false;
|
||||
#define FE_OPT_STORE_(n, v) \
|
||||
do { \
|
||||
if (n != v) { \
|
||||
n = v; \
|
||||
changed = true; \
|
||||
} \
|
||||
} while (false)
|
||||
// Save fast export settings to options
|
||||
options.fastexport_bypass_sharpening = bypass_sharpening->get_active ();
|
||||
options.fastexport_bypass_sharpenEdge = bypass_sharpenEdge->get_active ();
|
||||
options.fastexport_bypass_sharpenMicro = bypass_sharpenMicro->get_active ();
|
||||
FE_OPT_STORE_(options.fastexport_bypass_sharpening, bypass_sharpening->get_active ());
|
||||
FE_OPT_STORE_(options.fastexport_bypass_sharpenEdge, bypass_sharpenEdge->get_active ());
|
||||
FE_OPT_STORE_(options.fastexport_bypass_sharpenMicro, bypass_sharpenMicro->get_active ());
|
||||
//options.fastexport_bypass_lumaDenoise = bypass_lumaDenoise->get_active ();
|
||||
//options.fastexport_bypass_colorDenoise = bypass_colorDenoise->get_active ();
|
||||
options.fastexport_bypass_defringe = bypass_defringe->get_active ();
|
||||
options.fastexport_bypass_dirpyrDenoise = bypass_dirpyrDenoise->get_active ();
|
||||
options.fastexport_bypass_sh_hq = bypass_sh_hq->get_active ();
|
||||
options.fastexport_bypass_dirpyrequalizer = bypass_dirpyrequalizer->get_active ();
|
||||
options.fastexport_bypass_wavelet = bypass_wavelet->get_active ();
|
||||
FE_OPT_STORE_(options.fastexport_bypass_defringe, bypass_defringe->get_active ());
|
||||
FE_OPT_STORE_(options.fastexport_bypass_dirpyrDenoise, bypass_dirpyrDenoise->get_active ());
|
||||
FE_OPT_STORE_(options.fastexport_bypass_sh_hq, bypass_sh_hq->get_active ());
|
||||
FE_OPT_STORE_(options.fastexport_bypass_dirpyrequalizer, bypass_dirpyrequalizer->get_active ());
|
||||
FE_OPT_STORE_(options.fastexport_bypass_wavelet, bypass_wavelet->get_active ());
|
||||
//options.fastexport_bypass_raw_bayer_all_enhance = bypass_raw_all_enhance->get_active ();
|
||||
options.fastexport_bypass_raw_bayer_dcb_iterations = bypass_raw_bayer_dcb_iterations->get_active ();
|
||||
options.fastexport_bypass_raw_bayer_dcb_enhance = bypass_raw_bayer_dcb_enhance->get_active ();
|
||||
options.fastexport_bypass_raw_bayer_lmmse_iterations = bypass_raw_bayer_lmmse_iterations->get_active();
|
||||
options.fastexport_bypass_raw_bayer_linenoise = bypass_raw_bayer_linenoise->get_active ();
|
||||
options.fastexport_bypass_raw_bayer_greenthresh = bypass_raw_bayer_greenthresh->get_active ();
|
||||
options.fastexport_bypass_raw_ccSteps = bypass_raw_ccSteps->get_active ();
|
||||
options.fastexport_bypass_raw_ca = bypass_raw_ca->get_active ();
|
||||
options.fastexport_bypass_raw_df = bypass_raw_df->get_active ();
|
||||
options.fastexport_bypass_raw_ff = bypass_raw_ff->get_active ();
|
||||
FE_OPT_STORE_(options.fastexport_bypass_raw_bayer_dcb_iterations, bypass_raw_bayer_dcb_iterations->get_active ());
|
||||
FE_OPT_STORE_(options.fastexport_bypass_raw_bayer_dcb_enhance, bypass_raw_bayer_dcb_enhance->get_active ());
|
||||
FE_OPT_STORE_(options.fastexport_bypass_raw_bayer_lmmse_iterations, bypass_raw_bayer_lmmse_iterations->get_active());
|
||||
FE_OPT_STORE_(options.fastexport_bypass_raw_bayer_linenoise, bypass_raw_bayer_linenoise->get_active ());
|
||||
FE_OPT_STORE_(options.fastexport_bypass_raw_bayer_greenthresh, bypass_raw_bayer_greenthresh->get_active ());
|
||||
FE_OPT_STORE_(options.fastexport_bypass_raw_ccSteps, bypass_raw_ccSteps->get_active ());
|
||||
FE_OPT_STORE_(options.fastexport_bypass_raw_ca, bypass_raw_ca->get_active ());
|
||||
FE_OPT_STORE_(options.fastexport_bypass_raw_df, bypass_raw_df->get_active ());
|
||||
FE_OPT_STORE_(options.fastexport_bypass_raw_ff, bypass_raw_ff->get_active ());
|
||||
|
||||
//saving Bayer demosaic_method
|
||||
int currentRow = raw_bayer_method->get_active_row_number();
|
||||
|
||||
if( currentRow >= 0 && currentRow < procparams::RAWParams::BayerSensor::numMethods) {
|
||||
options.fastexport_raw_bayer_method = procparams::RAWParams::BayerSensor::methodstring[currentRow];
|
||||
FE_OPT_STORE_(options.fastexport_raw_bayer_method, procparams::RAWParams::BayerSensor::methodstring[currentRow]);
|
||||
}
|
||||
|
||||
//saving X-Trans demosaic_method
|
||||
currentRow = raw_xtrans_method->get_active_row_number();
|
||||
|
||||
if( currentRow >= 0 && currentRow < procparams::RAWParams::XTransSensor::numMethods) {
|
||||
options.fastexport_raw_xtrans_method = procparams::RAWParams::XTransSensor::methodstring[currentRow];
|
||||
FE_OPT_STORE_(options.fastexport_raw_xtrans_method, procparams::RAWParams::XTransSensor::methodstring[currentRow]);
|
||||
}
|
||||
|
||||
// options.fastexport_icm_input = icm_input ;
|
||||
@ -269,9 +295,16 @@ void ExportPanel::SaveSettingsAsDefault()
|
||||
// options.fastexport_resize_appliesTo = resize_appliesTo;
|
||||
// options.fastexport_resize_dataspec = resize_dataspec ;
|
||||
|
||||
options.fastexport_resize_method = "Lanczos";
|
||||
options.fastexport_resize_width = MaxWidth->get_value_as_int ();
|
||||
options.fastexport_resize_height = MaxHeight->get_value_as_int ();
|
||||
FE_OPT_STORE_(options.fastexport_resize_method, "Lanczos");
|
||||
FE_OPT_STORE_(options.fastexport_resize_width, MaxWidth->get_value_as_int ());
|
||||
FE_OPT_STORE_(options.fastexport_resize_height, MaxHeight->get_value_as_int ());
|
||||
|
||||
FE_OPT_STORE_(options.fastexport_use_fast_pipeline, use_fast_pipeline->get_active());
|
||||
#undef FE_OPT_STORE_
|
||||
|
||||
if (changed) {
|
||||
Options::save();
|
||||
}
|
||||
}
|
||||
|
||||
void ExportPanel::LoadDefaultSettings()
|
||||
@ -327,6 +360,13 @@ void ExportPanel::LoadDefaultSettings()
|
||||
|
||||
MaxWidth->set_value(options.fastexport_resize_width);
|
||||
MaxHeight->set_value(options.fastexport_resize_height);
|
||||
|
||||
if (options.fastexport_use_fast_pipeline) {
|
||||
use_fast_pipeline->set_active(true);
|
||||
bypass_box->set_sensitive(false);
|
||||
} else {
|
||||
use_normal_pipeline->set_active(true);
|
||||
}
|
||||
}
|
||||
|
||||
void ExportPanel::LoadSettings()
|
||||
@ -408,6 +448,11 @@ void ExportPanel::bypassALL_Toggled()
|
||||
bypass_raw_ffConn.block (false);
|
||||
}
|
||||
|
||||
void ExportPanel::use_fast_pipeline_toggled()
|
||||
{
|
||||
bypass_box->set_sensitive(!use_fast_pipeline->get_active());
|
||||
}
|
||||
|
||||
/*
|
||||
fastexport_bypass_sharpening
|
||||
fastexport_bypass_sharpenEdge
|
||||
|
@ -36,7 +36,10 @@ class ExportPanel : public Gtk::VBox
|
||||
|
||||
protected:
|
||||
|
||||
Gtk::VBox *bypass_box;
|
||||
//Gtk::CheckButton* enabled;
|
||||
Gtk::RadioButton* use_fast_pipeline;
|
||||
Gtk::RadioButton* use_normal_pipeline;
|
||||
Gtk::CheckButton* bypass_ALL;
|
||||
Gtk::CheckButton* bypass_sharpenEdge;
|
||||
Gtk::CheckButton* bypass_sharpenMicro;
|
||||
@ -105,6 +108,7 @@ protected:
|
||||
ExportPanelListener* listener;
|
||||
|
||||
void bypassALL_Toggled();
|
||||
void use_fast_pipeline_toggled();
|
||||
void SaveSettingsAsDefault();
|
||||
void LoadDefaultSettings();
|
||||
void LoadSettings();
|
||||
|
@ -389,6 +389,7 @@ FileBrowser::FileBrowser ()
|
||||
untrash->add_accelerator ("activate", pmenu->get_accel_group(), GDK_KEY_Delete, Gdk::SHIFT_MASK, Gtk::ACCEL_VISIBLE);
|
||||
open->add_accelerator ("activate", pmenu->get_accel_group(), GDK_KEY_Return, (Gdk::ModifierType)0, Gtk::ACCEL_VISIBLE);
|
||||
develop->add_accelerator ("activate", pmenu->get_accel_group(), GDK_KEY_B, Gdk::CONTROL_MASK, Gtk::ACCEL_VISIBLE);
|
||||
developfast->add_accelerator ("activate", pmenu->get_accel_group(), GDK_KEY_B, Gdk::CONTROL_MASK | Gdk::SHIFT_MASK, Gtk::ACCEL_VISIBLE);
|
||||
copyprof->add_accelerator ("activate", pmenu->get_accel_group(), GDK_KEY_C, Gdk::CONTROL_MASK, Gtk::ACCEL_VISIBLE);
|
||||
pasteprof->add_accelerator ("activate", pmenu->get_accel_group(), GDK_KEY_V, Gdk::CONTROL_MASK, Gtk::ACCEL_VISIBLE);
|
||||
partpasteprof->add_accelerator ("activate", pmenu->get_accel_group(), GDK_KEY_V, Gdk::CONTROL_MASK | Gdk::SHIFT_MASK, Gtk::ACCEL_VISIBLE);
|
||||
@ -767,6 +768,12 @@ void FileBrowser::menuItemActivated (Gtk::MenuItem* m)
|
||||
else if (m == develop) {
|
||||
tbl->developRequested (mselected, false);
|
||||
} else if (m == developfast) {
|
||||
if (exportPanel) {
|
||||
// force saving export panel settings
|
||||
exportPanel->setExportPanelListener(nullptr);
|
||||
exportPanel->FastExportPressed();
|
||||
exportPanel->setExportPanelListener(this);
|
||||
}
|
||||
tbl->developRequested (mselected, true);
|
||||
}
|
||||
|
||||
@ -1139,9 +1146,12 @@ bool FileBrowser::keyPressed (GdkEventKey* event)
|
||||
} else if (event->keyval == GDK_KEY_Delete && shift) {
|
||||
menuItemActivated (untrash);
|
||||
return true;
|
||||
} else if ((event->keyval == GDK_KEY_B || event->keyval == GDK_KEY_b) && ctrl) {
|
||||
} else if ((event->keyval == GDK_KEY_B || event->keyval == GDK_KEY_b) && ctrl && !shift) {
|
||||
menuItemActivated (develop);
|
||||
return true;
|
||||
} else if ((event->keyval == GDK_KEY_B || event->keyval == GDK_KEY_b) && ctrl && shift) {
|
||||
menuItemActivated (developfast);
|
||||
return true;
|
||||
} else if ((event->keyval == GDK_KEY_A || event->keyval == GDK_KEY_a) && ctrl) {
|
||||
menuItemActivated (selall);
|
||||
return true;
|
||||
|
@ -1095,99 +1095,108 @@ void FileCatalog::developRequested (std::vector<FileBrowserEntry*> tbe, bool fas
|
||||
// and also those which effect is not pronounced after reducing the image size
|
||||
// TODO!!! could expose selections below via preferences
|
||||
if (fastmode) {
|
||||
if (options.fastexport_bypass_sharpening ) {
|
||||
params.sharpening.enabled = false;
|
||||
if (!options.fastexport_use_fast_pipeline) {
|
||||
if (options.fastexport_bypass_sharpening) {
|
||||
params.sharpening.enabled = false;
|
||||
}
|
||||
|
||||
if (options.fastexport_bypass_sharpenEdge) {
|
||||
params.sharpenEdge.enabled = false;
|
||||
}
|
||||
|
||||
if (options.fastexport_bypass_sharpenMicro) {
|
||||
params.sharpenMicro.enabled = false;
|
||||
}
|
||||
|
||||
//if (options.fastexport_bypass_lumaDenoise) params.lumaDenoise.enabled = false;
|
||||
//if (options.fastexport_bypass_colorDenoise) params.colorDenoise.enabled = false;
|
||||
if (options.fastexport_bypass_defringe) {
|
||||
params.defringe.enabled = false;
|
||||
}
|
||||
|
||||
if (options.fastexport_bypass_dirpyrDenoise) {
|
||||
params.dirpyrDenoise.enabled = false;
|
||||
}
|
||||
|
||||
if (options.fastexport_bypass_sh_hq) {
|
||||
params.sh.hq = false;
|
||||
}
|
||||
|
||||
if (options.fastexport_bypass_dirpyrequalizer) {
|
||||
params.dirpyrequalizer.enabled = false;
|
||||
}
|
||||
|
||||
if (options.fastexport_bypass_wavelet) {
|
||||
params.wavelet.enabled = false;
|
||||
}
|
||||
|
||||
//if (options.fastexport_bypass_raw_bayer_all_enhance) params.raw.bayersensor.all_enhance = false;
|
||||
if (options.fastexport_bypass_raw_bayer_dcb_iterations) {
|
||||
params.raw.bayersensor.dcb_iterations = 0;
|
||||
}
|
||||
|
||||
if (options.fastexport_bypass_raw_bayer_dcb_enhance) {
|
||||
params.raw.bayersensor.dcb_enhance = false;
|
||||
}
|
||||
|
||||
if (options.fastexport_bypass_raw_bayer_lmmse_iterations) {
|
||||
params.raw.bayersensor.lmmse_iterations = 0;
|
||||
}
|
||||
|
||||
if (options.fastexport_bypass_raw_bayer_linenoise) {
|
||||
params.raw.bayersensor.linenoise = 0;
|
||||
}
|
||||
|
||||
if (options.fastexport_bypass_raw_bayer_greenthresh) {
|
||||
params.raw.bayersensor.greenthresh = 0;
|
||||
}
|
||||
|
||||
if (options.fastexport_bypass_raw_ccSteps) {
|
||||
params.raw.bayersensor.ccSteps = params.raw.xtranssensor.ccSteps = 0;
|
||||
}
|
||||
|
||||
if (options.fastexport_bypass_raw_ca) {
|
||||
params.raw.ca_autocorrect = false;
|
||||
params.raw.cared = 0;
|
||||
params.raw.cablue = 0;
|
||||
}
|
||||
|
||||
if (options.fastexport_bypass_raw_df) {
|
||||
params.raw.df_autoselect = false;
|
||||
params.raw.dark_frame = "";
|
||||
}
|
||||
|
||||
if (options.fastexport_bypass_raw_ff) {
|
||||
params.raw.ff_AutoSelect = false;
|
||||
params.raw.ff_file = "";
|
||||
}
|
||||
|
||||
params.raw.bayersensor.method = options.fastexport_raw_bayer_method;
|
||||
params.raw.xtranssensor.method = options.fastexport_raw_xtrans_method;
|
||||
params.icm.input = options.fastexport_icm_input;
|
||||
params.icm.working = options.fastexport_icm_working;
|
||||
params.icm.output = options.fastexport_icm_output;
|
||||
params.icm.outputIntent = options.fastexport_icm_outputIntent;
|
||||
params.icm.outputBPC = options.fastexport_icm_outputBPC;
|
||||
params.icm.gamma = options.fastexport_icm_gamma;
|
||||
}
|
||||
|
||||
if (options.fastexport_bypass_sharpenEdge ) {
|
||||
params.sharpenEdge.enabled = false;
|
||||
if (params.resize.enabled) {
|
||||
params.resize.width = rtengine::min(params.resize.width, options.fastexport_resize_width);
|
||||
params.resize.height = rtengine::min(params.resize.height, options.fastexport_resize_height);
|
||||
} else {
|
||||
params.resize.width = options.fastexport_resize_width;
|
||||
params.resize.height = options.fastexport_resize_height;
|
||||
}
|
||||
|
||||
if (options.fastexport_bypass_sharpenMicro ) {
|
||||
params.sharpenMicro.enabled = false;
|
||||
}
|
||||
|
||||
//if (options.fastexport_bypass_lumaDenoise ) params.lumaDenoise.enabled = false;
|
||||
//if (options.fastexport_bypass_colorDenoise ) params.colorDenoise.enabled = false;
|
||||
if (options.fastexport_bypass_defringe ) {
|
||||
params.defringe.enabled = false;
|
||||
}
|
||||
|
||||
if (options.fastexport_bypass_dirpyrDenoise ) {
|
||||
params.dirpyrDenoise.enabled = false;
|
||||
}
|
||||
|
||||
if (options.fastexport_bypass_sh_hq ) {
|
||||
params.sh.hq = false;
|
||||
}
|
||||
|
||||
if (options.fastexport_bypass_dirpyrequalizer ) {
|
||||
params.dirpyrequalizer.enabled = false;
|
||||
}
|
||||
|
||||
if (options.fastexport_bypass_wavelet ) {
|
||||
params.wavelet.enabled = false;
|
||||
}
|
||||
|
||||
//if (options.fastexport_bypass_raw_bayer_all_enhance ) params.raw.bayersensor.all_enhance = false;
|
||||
if (options.fastexport_bypass_raw_bayer_dcb_iterations ) {
|
||||
params.raw.bayersensor.dcb_iterations = 0;
|
||||
}
|
||||
|
||||
if (options.fastexport_bypass_raw_bayer_dcb_enhance ) {
|
||||
params.raw.bayersensor.dcb_enhance = false;
|
||||
}
|
||||
|
||||
if (options.fastexport_bypass_raw_bayer_lmmse_iterations) {
|
||||
params.raw.bayersensor.lmmse_iterations = 0;
|
||||
}
|
||||
|
||||
if (options.fastexport_bypass_raw_bayer_linenoise ) {
|
||||
params.raw.bayersensor.linenoise = 0;
|
||||
}
|
||||
|
||||
if (options.fastexport_bypass_raw_bayer_greenthresh ) {
|
||||
params.raw.bayersensor.greenthresh = 0;
|
||||
}
|
||||
|
||||
if (options.fastexport_bypass_raw_ccSteps ) {
|
||||
params.raw.bayersensor.ccSteps = params.raw.xtranssensor.ccSteps = 0;
|
||||
}
|
||||
|
||||
if (options.fastexport_bypass_raw_ca ) {
|
||||
params.raw.ca_autocorrect = false;
|
||||
params.raw.cared = 0;
|
||||
params.raw.cablue = 0;
|
||||
}
|
||||
|
||||
if (options.fastexport_bypass_raw_df ) {
|
||||
params.raw.df_autoselect = false;
|
||||
params.raw.dark_frame = "";
|
||||
}
|
||||
|
||||
if (options.fastexport_bypass_raw_ff ) {
|
||||
params.raw.ff_AutoSelect = false;
|
||||
params.raw.ff_file = "";
|
||||
}
|
||||
|
||||
params.raw.bayersensor.method = options.fastexport_raw_bayer_method ;
|
||||
params.raw.xtranssensor.method = options.fastexport_raw_xtrans_method;
|
||||
params.icm.input = options.fastexport_icm_input ;
|
||||
params.icm.working = options.fastexport_icm_working ;
|
||||
params.icm.output = options.fastexport_icm_output ;
|
||||
params.icm.outputIntent = options.fastexport_icm_outputIntent ;
|
||||
params.icm.outputBPC = options.fastexport_icm_outputBPC ;
|
||||
params.icm.gamma = options.fastexport_icm_gamma ;
|
||||
params.resize.enabled = options.fastexport_resize_enabled ;
|
||||
params.resize.scale = options.fastexport_resize_scale ;
|
||||
params.resize.appliesTo = options.fastexport_resize_appliesTo ;
|
||||
params.resize.method = options.fastexport_resize_method ;
|
||||
params.resize.dataspec = options.fastexport_resize_dataspec ;
|
||||
params.resize.width = options.fastexport_resize_width ;
|
||||
params.resize.height = options.fastexport_resize_height ;
|
||||
params.resize.enabled = options.fastexport_resize_enabled;
|
||||
params.resize.scale = options.fastexport_resize_scale;
|
||||
params.resize.appliesTo = options.fastexport_resize_appliesTo;
|
||||
params.resize.method = options.fastexport_resize_method;
|
||||
params.resize.dataspec = options.fastexport_resize_dataspec;
|
||||
}
|
||||
|
||||
rtengine::ProcessingJob* pjob = rtengine::ProcessingJob::create (fbe->filename, th->getType() == FT_Raw, params);
|
||||
rtengine::ProcessingJob* pjob = rtengine::ProcessingJob::create (fbe->filename, th->getType() == FT_Raw, params, fastmode && options.fastexport_use_fast_pipeline);
|
||||
|
||||
int pw;
|
||||
int ph = BatchQueue::calcMaxThumbnailHeight();
|
||||
|
@ -81,6 +81,8 @@ Glib::ustring fname_to_utf8 (const char* fname)
|
||||
#endif
|
||||
}
|
||||
|
||||
bool fast_export = false;
|
||||
|
||||
}
|
||||
|
||||
/* Process line command options
|
||||
@ -407,6 +409,10 @@ int processLineParams( int argc, char **argv )
|
||||
compression = -1;
|
||||
break;
|
||||
|
||||
case 'f':
|
||||
fast_export = true;
|
||||
break;
|
||||
|
||||
case 'c': // MUST be last option
|
||||
while (iArg + 1 < argc) {
|
||||
iArg++;
|
||||
@ -491,7 +497,7 @@ int processLineParams( int argc, char **argv )
|
||||
std::cout << std::endl;
|
||||
#endif
|
||||
std::cout << "Options:" << std::endl;
|
||||
std::cout << " " << Glib::path_get_basename(argv[0]) << " [-o <output>|-O <output>] [-s|-S] [-p <one.pp3> [-p <two.pp3> ...] ] [-d] [ -j[1-100] [-js<1-3>] | [-b<8|16>] [-t[z] | [-n]] ] [-Y] -c <input>" << std::endl;
|
||||
std::cout << " " << Glib::path_get_basename(argv[0]) << " [-o <output>|-O <output>] [-s|-S] [-p <one.pp3> [-p <two.pp3> ...] ] [-d] [ -j[1-100] [-js<1-3>] | [-b<8|16>] [-t[z] | [-n]] ] [-Y] [-f] -c <input>" << std::endl;
|
||||
std::cout << std::endl;
|
||||
std::cout << " -q Quick Start mode : do not load cached files to speedup start time." << std::endl;
|
||||
std::cout << " -c <files> Specify one or more input files." << std::endl;
|
||||
@ -525,6 +531,7 @@ int processLineParams( int argc, char **argv )
|
||||
std::cout << " -n Specify output to be compressed PNG." << std::endl;
|
||||
std::cout << " Compression is hard-coded to 6." << std::endl;
|
||||
std::cout << " -Y Overwrite output if present." << std::endl;
|
||||
std::cout << " -f Use the custom fast-export processing pipeline." << std::endl;
|
||||
std::cout << std::endl;
|
||||
std::cout << "Your " << pparamsExt << " files can be incomplete, RawTherapee will build the final values as follows:" << std::endl;
|
||||
std::cout << " 1- A new processing profile is created using neutral values," << std::endl;
|
||||
@ -714,7 +721,7 @@ int processLineParams( int argc, char **argv )
|
||||
continue;
|
||||
}
|
||||
|
||||
job = rtengine::ProcessingJob::create (ii, currentParams);
|
||||
job = rtengine::ProcessingJob::create (ii, currentParams, fast_export);
|
||||
|
||||
if( !job ) {
|
||||
errors++;
|
||||
|
@ -480,6 +480,7 @@ void Options::setDefaults ()
|
||||
fastexport_resize_dataspec = 3;
|
||||
fastexport_resize_width = 900;
|
||||
fastexport_resize_height = 900;
|
||||
fastexport_use_fast_pipeline = true;
|
||||
|
||||
clutsDir = "./cluts";
|
||||
|
||||
@ -1784,6 +1785,9 @@ int Options::readFromFile (Glib::ustring fname)
|
||||
if (keyFile.has_key ("Fast Export", "fastexport_resize_height" )) {
|
||||
fastexport_resize_height = keyFile.get_integer ("Fast Export", "fastexport_resize_height" );
|
||||
}
|
||||
if (keyFile.has_key ("Fast Export", "fastexport_use_fast_pipeline" )) {
|
||||
fastexport_use_fast_pipeline = keyFile.get_integer ("Fast Export", "fastexport_use_fast_pipeline" );
|
||||
}
|
||||
}
|
||||
|
||||
if (keyFile.has_group ("Dialogs")) {
|
||||
@ -2142,6 +2146,7 @@ int Options::saveToFile (Glib::ustring fname)
|
||||
keyFile.set_integer ("Fast Export", "fastexport_resize_dataspec", fastexport_resize_dataspec );
|
||||
keyFile.set_integer ("Fast Export", "fastexport_resize_width", fastexport_resize_width );
|
||||
keyFile.set_integer ("Fast Export", "fastexport_resize_height", fastexport_resize_height );
|
||||
keyFile.set_integer ("Fast Export", "fastexport_use_fast_pipeline", fastexport_use_fast_pipeline );
|
||||
|
||||
keyFile.set_string ("Dialogs", "LastIccDir", lastIccDir);
|
||||
keyFile.set_string ("Dialogs", "LastDarkframeDir", lastDarkframeDir);
|
||||
|
@ -288,6 +288,7 @@ public:
|
||||
int fastexport_resize_dataspec;
|
||||
int fastexport_resize_width;
|
||||
int fastexport_resize_height;
|
||||
bool fastexport_use_fast_pipeline;
|
||||
|
||||
// Dialog settings
|
||||
Glib::ustring lastIccDir;
|
||||
|
Loading…
x
Reference in New Issue
Block a user