continuing with my experiments on an alternative "fast export"
This commit is contained in:
parent
200e6dd882
commit
93296cff17
@ -21,16 +21,16 @@
|
|||||||
namespace rtengine
|
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)
|
void ProcessingJob::destroy (ProcessingJob* job)
|
||||||
|
@ -32,12 +32,13 @@ public:
|
|||||||
bool isRaw;
|
bool isRaw;
|
||||||
InitialImage* initialImage;
|
InitialImage* initialImage;
|
||||||
procparams::ProcParams pparams;
|
procparams::ProcParams pparams;
|
||||||
|
bool fast;
|
||||||
|
|
||||||
ProcessingJobImpl (const Glib::ustring& fn, bool iR, const procparams::ProcParams& pp)
|
ProcessingJobImpl (const Glib::ustring& fn, bool iR, const procparams::ProcParams& pp, bool ff)
|
||||||
: fname(fn), isRaw(iR), initialImage(nullptr), pparams(pp) {}
|
: fname(fn), isRaw(iR), initialImage(nullptr), pparams(pp), fast(ff) {}
|
||||||
|
|
||||||
ProcessingJobImpl (InitialImage* iImage, const procparams::ProcParams& pp)
|
ProcessingJobImpl (InitialImage* iImage, const procparams::ProcParams& pp, bool ff)
|
||||||
: fname(""), isRaw(true), initialImage(iImage), pparams(pp)
|
: fname(""), isRaw(true), initialImage(iImage), pparams(pp), fast(ff)
|
||||||
{
|
{
|
||||||
iImage->increaseRef();
|
iImage->increaseRef();
|
||||||
}
|
}
|
||||||
|
@ -468,7 +468,7 @@ public:
|
|||||||
* @param isRaw shall be true if it is a raw file
|
* @param isRaw shall be true if it is a raw file
|
||||||
* @param pparams is a struct containing the processing parameters
|
* @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. */
|
* @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
|
/** 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
|
* the image thus it returns immediately. This function increases the reference count of the initialImage. If you decide not the process the image you
|
||||||
@ -477,7 +477,7 @@ public:
|
|||||||
* @param initialImage is a loaded and pre-processed initial image
|
* @param initialImage is a loaded and pre-processed initial image
|
||||||
* @param pparams is a struct containing the processing parameters
|
* @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. */
|
* @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
|
/** 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.
|
* gets invalid, you must not use it any more. Dont call this function while the job is being processed.
|
||||||
|
@ -41,7 +41,7 @@ class ImageProcessor {
|
|||||||
public:
|
public:
|
||||||
ImageProcessor(ProcessingJob* pjob, int& errorCode,
|
ImageProcessor(ProcessingJob* pjob, int& errorCode,
|
||||||
ProgressListener* pl, bool tunnelMetaData, bool flush):
|
ProgressListener* pl, bool tunnelMetaData, bool flush):
|
||||||
pjob(pjob),
|
job(static_cast<ProcessingJobImpl*>(pjob)),
|
||||||
errorCode(errorCode),
|
errorCode(errorCode),
|
||||||
pl(pl),
|
pl(pl),
|
||||||
tunnelMetaData(tunnelMetaData),
|
tunnelMetaData(tunnelMetaData),
|
||||||
@ -55,9 +55,9 @@ public:
|
|||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
Image16 *operator()(bool fast)
|
Image16 *operator()()
|
||||||
{
|
{
|
||||||
if (!fast) {
|
if (!job->fast) {
|
||||||
return normal_pipeline();
|
return normal_pipeline();
|
||||||
} else {
|
} else {
|
||||||
return fast_pipeline();
|
return fast_pipeline();
|
||||||
@ -81,21 +81,28 @@ private:
|
|||||||
|
|
||||||
Image16 *fast_pipeline()
|
Image16 *fast_pipeline()
|
||||||
{
|
{
|
||||||
ProcessingJobImpl* job = static_cast<ProcessingJobImpl*>(pjob);
|
|
||||||
if (!job->pparams.resize.enabled) {
|
if (!job->pparams.resize.enabled) {
|
||||||
return normal_pipeline();
|
return normal_pipeline();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pl = nullptr;
|
||||||
|
|
||||||
if (!stage_1()) {
|
if (!stage_1()) {
|
||||||
return nullptr;
|
return nullptr;
|
||||||
}
|
}
|
||||||
|
stage_calc_denoise();
|
||||||
|
printf("after calc denoise\n"); fflush(stdout);
|
||||||
stage_2();
|
stage_2();
|
||||||
stage_4();
|
stage_4();
|
||||||
|
printf("after 4\n"); fflush(stdout);
|
||||||
stage_early_resize();
|
stage_early_resize();
|
||||||
stage_calc_denoise();
|
printf("after early resize\n"); fflush(stdout);
|
||||||
stage_3();
|
stage_3();
|
||||||
|
printf("after 3\n"); fflush(stdout);
|
||||||
stage_5();
|
stage_5();
|
||||||
|
printf("after 5\n"); fflush(stdout);
|
||||||
stage_6();
|
stage_6();
|
||||||
|
printf("after 6\n"); fflush(stdout);
|
||||||
return stage_7();
|
return stage_7();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -103,8 +110,6 @@ private:
|
|||||||
{
|
{
|
||||||
errorCode = 0;
|
errorCode = 0;
|
||||||
|
|
||||||
ProcessingJobImpl* job = static_cast<ProcessingJobImpl*>(pjob);
|
|
||||||
|
|
||||||
if (pl) {
|
if (pl) {
|
||||||
pl->setProgressStr ("PROGRESSBAR_PROCESSING");
|
pl->setProgressStr ("PROGRESSBAR_PROCESSING");
|
||||||
pl->setProgress (0.0);
|
pl->setProgress (0.0);
|
||||||
@ -235,7 +240,6 @@ private:
|
|||||||
|
|
||||||
void stage_calc_denoise()
|
void stage_calc_denoise()
|
||||||
{
|
{
|
||||||
ProcessingJobImpl* job = static_cast<ProcessingJobImpl*>(pjob);
|
|
||||||
procparams::ProcParams& params = job->pparams;
|
procparams::ProcParams& params = job->pparams;
|
||||||
ImProcFunctions ipf (¶ms, true);
|
ImProcFunctions ipf (¶ms, true);
|
||||||
|
|
||||||
@ -714,7 +718,6 @@ private:
|
|||||||
|
|
||||||
void stage_2()
|
void stage_2()
|
||||||
{
|
{
|
||||||
ProcessingJobImpl* job = static_cast<ProcessingJobImpl*>(pjob);
|
|
||||||
procparams::ProcParams& params = job->pparams;
|
procparams::ProcParams& params = job->pparams;
|
||||||
ImProcFunctions ipf (¶ms, true);
|
ImProcFunctions ipf (¶ms, true);
|
||||||
|
|
||||||
@ -753,7 +756,6 @@ private:
|
|||||||
|
|
||||||
void stage_3()
|
void stage_3()
|
||||||
{
|
{
|
||||||
ProcessingJobImpl* job = static_cast<ProcessingJobImpl*>(pjob);
|
|
||||||
procparams::ProcParams& params = job->pparams;
|
procparams::ProcParams& params = job->pparams;
|
||||||
ImProcFunctions ipf (¶ms, true);
|
ImProcFunctions ipf (¶ms, true);
|
||||||
|
|
||||||
@ -826,7 +828,6 @@ private:
|
|||||||
|
|
||||||
void stage_4()
|
void stage_4()
|
||||||
{
|
{
|
||||||
ProcessingJobImpl* job = static_cast<ProcessingJobImpl*>(pjob);
|
|
||||||
procparams::ProcParams& params = job->pparams;
|
procparams::ProcParams& params = job->pparams;
|
||||||
ImProcFunctions ipf (¶ms, true);
|
ImProcFunctions ipf (¶ms, true);
|
||||||
|
|
||||||
@ -849,7 +850,6 @@ private:
|
|||||||
|
|
||||||
void stage_5()
|
void stage_5()
|
||||||
{
|
{
|
||||||
ProcessingJobImpl* job = static_cast<ProcessingJobImpl*>(pjob);
|
|
||||||
procparams::ProcParams& params = job->pparams;
|
procparams::ProcParams& params = job->pparams;
|
||||||
ImProcFunctions ipf (¶ms, true);
|
ImProcFunctions ipf (¶ms, true);
|
||||||
|
|
||||||
@ -994,7 +994,6 @@ private:
|
|||||||
|
|
||||||
void stage_6()
|
void stage_6()
|
||||||
{
|
{
|
||||||
ProcessingJobImpl* job = static_cast<ProcessingJobImpl*>(pjob);
|
|
||||||
procparams::ProcParams& params = job->pparams;
|
procparams::ProcParams& params = job->pparams;
|
||||||
ImProcFunctions ipf (¶ms, true);
|
ImProcFunctions ipf (¶ms, true);
|
||||||
|
|
||||||
@ -1192,7 +1191,6 @@ private:
|
|||||||
|
|
||||||
Image16 *stage_7()
|
Image16 *stage_7()
|
||||||
{
|
{
|
||||||
ProcessingJobImpl* job = static_cast<ProcessingJobImpl*>(pjob);
|
|
||||||
procparams::ProcParams& params = job->pparams;
|
procparams::ProcParams& params = job->pparams;
|
||||||
ImProcFunctions ipf (¶ms, true);
|
ImProcFunctions ipf (¶ms, true);
|
||||||
|
|
||||||
@ -1389,7 +1387,6 @@ private:
|
|||||||
|
|
||||||
void stage_early_resize()
|
void stage_early_resize()
|
||||||
{
|
{
|
||||||
ProcessingJobImpl* job = static_cast<ProcessingJobImpl*>(pjob);
|
|
||||||
procparams::ProcParams& params = job->pparams;
|
procparams::ProcParams& params = job->pparams;
|
||||||
ImProcFunctions ipf (¶ms, true);
|
ImProcFunctions ipf (¶ms, true);
|
||||||
|
|
||||||
@ -1435,14 +1432,16 @@ private:
|
|||||||
tmplab = resized;
|
tmplab = resized;
|
||||||
params.resize.enabled = false;
|
params.resize.enabled = false;
|
||||||
|
|
||||||
if (params.prsharpening.enabled) {
|
|
||||||
params.sharpening = params.prsharpening;
|
params.sharpening = params.prsharpening;
|
||||||
}
|
|
||||||
|
|
||||||
params.wavelet.strength =
|
params.wavelet.strength =
|
||||||
int(float(params.wavelet.strength) * tmpScale);
|
int(float(params.wavelet.strength) * tmpScale);
|
||||||
params.dirpyrDenoise.luma *= tmpScale;
|
params.dirpyrDenoise.luma *= tmpScale;
|
||||||
// params.dirpyrDenoise.smethod = "shal";
|
params.dirpyrDenoise.smethod = "shal";
|
||||||
|
|
||||||
|
for (int i = 0; i < 6; ++i) {
|
||||||
|
auto &n = params.dirpyrequalizer.mult[i];
|
||||||
|
n = 1.0 + (n - 1.0) * tmpScale;
|
||||||
|
}
|
||||||
|
|
||||||
fw = imw;
|
fw = imw;
|
||||||
fh = imh;
|
fh = imh;
|
||||||
@ -1455,7 +1454,7 @@ private:
|
|||||||
}
|
}
|
||||||
|
|
||||||
private:
|
private:
|
||||||
ProcessingJob* pjob;
|
ProcessingJobImpl* job;
|
||||||
int& errorCode;
|
int& errorCode;
|
||||||
ProgressListener* pl;
|
ProgressListener* pl;
|
||||||
bool tunnelMetaData;
|
bool tunnelMetaData;
|
||||||
@ -1534,7 +1533,7 @@ private:
|
|||||||
IImage16* processImage (ProcessingJob* pjob, int& errorCode, ProgressListener* pl, bool tunnelMetaData, bool flush)
|
IImage16* processImage (ProcessingJob* pjob, int& errorCode, ProgressListener* pl, bool tunnelMetaData, bool flush)
|
||||||
{
|
{
|
||||||
ImageProcessor proc(pjob, errorCode, pl, tunnelMetaData, flush);
|
ImageProcessor proc(pjob, errorCode, pl, tunnelMetaData, flush);
|
||||||
return proc(true);
|
return proc();
|
||||||
}
|
}
|
||||||
|
|
||||||
void batchProcessingThread (ProcessingJob* job, BatchProcessingListener* bpl, bool tunnelMetaData)
|
void batchProcessingThread (ProcessingJob* job, BatchProcessingListener* bpl, bool tunnelMetaData)
|
||||||
|
@ -34,6 +34,9 @@
|
|||||||
#include "guiutils.h"
|
#include "guiutils.h"
|
||||||
#include "rtimage.h"
|
#include "rtimage.h"
|
||||||
#include <sys/time.h>
|
#include <sys/time.h>
|
||||||
|
|
||||||
|
#include "../rtengine/processingjob.h"
|
||||||
|
|
||||||
using namespace std;
|
using namespace std;
|
||||||
using namespace rtengine;
|
using namespace rtengine;
|
||||||
|
|
||||||
@ -227,7 +230,7 @@ bool BatchQueue::saveBatchQueue ()
|
|||||||
|
|
||||||
// The column's header is mandatory (the first line will be skipped when loaded)
|
// 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|"
|
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;
|
<< std::endl;
|
||||||
|
|
||||||
// method is already running with entryLock, so no need to lock again
|
// method is already running with entryLock, so no need to lock again
|
||||||
@ -242,6 +245,7 @@ bool BatchQueue::saveBatchQueue ()
|
|||||||
<< saveFormat.pngBits << '|' << saveFormat.pngCompression << '|'
|
<< saveFormat.pngBits << '|' << saveFormat.pngCompression << '|'
|
||||||
<< saveFormat.tiffBits << '|' << saveFormat.tiffUncompressed << '|'
|
<< saveFormat.tiffBits << '|' << saveFormat.tiffUncompressed << '|'
|
||||||
<< saveFormat.saveParams << '|' << entry->forceFormatOpts << '|'
|
<< saveFormat.saveParams << '|' << entry->forceFormatOpts << '|'
|
||||||
|
<< static_cast<ProcessingJobImpl *>(entry->job)->fast << '|'
|
||||||
<< std::endl;
|
<< std::endl;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -308,6 +312,7 @@ bool BatchQueue::loadBatchQueue ()
|
|||||||
const auto tiffUncompressed = nextIntOr (options.saveFormat.tiffUncompressed);
|
const auto tiffUncompressed = nextIntOr (options.saveFormat.tiffUncompressed);
|
||||||
const auto saveParams = nextIntOr (options.saveFormat.saveParams);
|
const auto saveParams = nextIntOr (options.saveFormat.saveParams);
|
||||||
const auto forceFormatOpts = nextIntOr (options.forceFormatOpts);
|
const auto forceFormatOpts = nextIntOr (options.forceFormatOpts);
|
||||||
|
const auto fast = nextIntOr(false);
|
||||||
|
|
||||||
rtengine::procparams::ProcParams pparams;
|
rtengine::procparams::ProcParams pparams;
|
||||||
|
|
||||||
@ -319,7 +324,7 @@ bool BatchQueue::loadBatchQueue ()
|
|||||||
if (!thumb)
|
if (!thumb)
|
||||||
continue;
|
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 prevh = getMaxThumbnailHeight ();
|
||||||
auto prevw = prevh;
|
auto prevw = prevh;
|
||||||
|
@ -389,6 +389,7 @@ FileBrowser::FileBrowser ()
|
|||||||
untrash->add_accelerator ("activate", pmenu->get_accel_group(), GDK_KEY_Delete, Gdk::SHIFT_MASK, Gtk::ACCEL_VISIBLE);
|
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);
|
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);
|
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);
|
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);
|
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);
|
partpasteprof->add_accelerator ("activate", pmenu->get_accel_group(), GDK_KEY_V, Gdk::CONTROL_MASK | Gdk::SHIFT_MASK, Gtk::ACCEL_VISIBLE);
|
||||||
@ -1139,9 +1140,12 @@ bool FileBrowser::keyPressed (GdkEventKey* event)
|
|||||||
} else if (event->keyval == GDK_KEY_Delete && shift) {
|
} else if (event->keyval == GDK_KEY_Delete && shift) {
|
||||||
menuItemActivated (untrash);
|
menuItemActivated (untrash);
|
||||||
return true;
|
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);
|
menuItemActivated (develop);
|
||||||
return true;
|
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) {
|
} else if ((event->keyval == GDK_KEY_A || event->keyval == GDK_KEY_a) && ctrl) {
|
||||||
menuItemActivated (selall);
|
menuItemActivated (selall);
|
||||||
return true;
|
return true;
|
||||||
|
@ -1094,7 +1094,7 @@ void FileCatalog::developRequested (std::vector<FileBrowserEntry*> tbe, bool fas
|
|||||||
// controlling time and resource consuming tasks
|
// controlling time and resource consuming tasks
|
||||||
// and also those which effect is not pronounced after reducing the image size
|
// and also those which effect is not pronounced after reducing the image size
|
||||||
// TODO!!! could expose selections below via preferences
|
// TODO!!! could expose selections below via preferences
|
||||||
if (fastmode) {
|
if (fastmode && false) {
|
||||||
if (options.fastexport_bypass_sharpening ) {
|
if (options.fastexport_bypass_sharpening ) {
|
||||||
params.sharpening.enabled = false;
|
params.sharpening.enabled = false;
|
||||||
}
|
}
|
||||||
@ -1187,7 +1187,7 @@ void FileCatalog::developRequested (std::vector<FileBrowserEntry*> tbe, bool fas
|
|||||||
params.resize.height = options.fastexport_resize_height ;
|
params.resize.height = options.fastexport_resize_height ;
|
||||||
}
|
}
|
||||||
|
|
||||||
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);
|
||||||
|
|
||||||
int pw;
|
int pw;
|
||||||
int ph = BatchQueue::calcMaxThumbnailHeight();
|
int ph = BatchQueue::calcMaxThumbnailHeight();
|
||||||
|
@ -83,6 +83,8 @@ Glib::ustring fname_to_utf8 (const char* fname)
|
|||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool fast_export = false;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// This recursive mutex will be used by gdk_threads_enter/leave instead of a simple mutex
|
// This recursive mutex will be used by gdk_threads_enter/leave instead of a simple mutex
|
||||||
@ -537,6 +539,10 @@ int processLineParams( int argc, char **argv )
|
|||||||
compression = -1;
|
compression = -1;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case 'f':
|
||||||
|
fast_export = true;
|
||||||
|
break;
|
||||||
|
|
||||||
case 'c': // MUST be last option
|
case 'c': // MUST be last option
|
||||||
while (iArg + 1 < argc) {
|
while (iArg + 1 < argc) {
|
||||||
iArg++;
|
iArg++;
|
||||||
@ -845,7 +851,7 @@ int processLineParams( int argc, char **argv )
|
|||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
job = rtengine::ProcessingJob::create (ii, currentParams);
|
job = rtengine::ProcessingJob::create (ii, currentParams, fast_export);
|
||||||
|
|
||||||
if( !job ) {
|
if( !job ) {
|
||||||
errors++;
|
errors++;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user