diff --git a/rtengine/bilateral2.h b/rtengine/bilateral2.h index 0c59f9db5..0a7cb7bb8 100644 --- a/rtengine/bilateral2.h +++ b/rtengine/bilateral2.h @@ -26,7 +26,9 @@ #include #include #include +#ifdef _OPENMP #include +#endif // This seems ugly, but way faster than any other solutions I tried diff --git a/rtengine/gauss.h b/rtengine/gauss.h index c9e25a0b0..527274b02 100644 --- a/rtengine/gauss.h +++ b/rtengine/gauss.h @@ -23,7 +23,9 @@ #include #include #include +#ifdef _OPENMP #include +#endif // classical filtering if the support window is small: @@ -31,7 +33,11 @@ template void gaussHorizontal3 (T** src, T** dst, T* buffer, int W, int #pragma omp parallel for if (multiThread) for (int i=0; i void gaussVertical3 (T** src, T** dst, T* buffer, int W, int H #pragma omp parallel for if (multiThread) for (int i=0; i void gaussHorizontal (T** src, T** dst, AlignedBuffer* #pragma omp parallel for if (multiThread) for (int i=0; idata + omp_get_thread_num() * W; - +#else + double* temp2 = buffer->data; +#endif temp2[0] = B * src[i][0] + b1*src[i][0] + b2*src[i][0] + b3*src[i][0]; temp2[1] = B * src[i][1] + b1*temp2[0] + b2*src[i][0] + b3*src[i][0]; temp2[2] = B * src[i][2] + b1*temp2[1] + b2*temp2[0] + b3*src[i][0]; @@ -183,9 +195,11 @@ template void gaussVertical (T** src, T** dst, AlignedBuffer* b #pragma omp parallel for if (multiThread) for (int i=0; idata + omp_get_thread_num() * H; - +#else + double* temp2 = buffer->data; +#endif temp2[0] = B * src[0][i] + b1*src[0][i] + b2*src[0][i] + b3*src[0][i]; temp2[1] = B * src[1][i] + b1*temp2[0] + b2*src[0][i] + b3*src[0][i]; temp2[2] = B * src[2][i] + b1*temp2[1] + b2*temp2[0] + b3*src[0][i]; diff --git a/rtengine/improcfun.cc b/rtengine/improcfun.cc index afa99d020..d8ed0d8f0 100644 --- a/rtengine/improcfun.cc +++ b/rtengine/improcfun.cc @@ -27,7 +27,9 @@ #include #include #include +#ifdef _OPENMP #include +#endif namespace rtengine { @@ -192,7 +194,13 @@ void ImProcFunctions::firstAnalysis (Image16* original, const ProcParams* params } // calculate chroma radius and histogram of the y channel needed for exposure curve calculation + +#ifdef _OPENMP int T = omp_get_max_threads(); +#else + int T = 1; +#endif + int* cr = new int [T]; unsigned int** hist = new unsigned int* [T]; for (int i=0; iheight; +#ifdef _OPENMP #pragma omp parallel if (multiThread) { int tid = omp_get_thread_num(); @@ -213,7 +222,9 @@ void ImProcFunctions::firstAnalysis (Image16* original, const ProcParams* params else firstAnalysis_ (original, wprofile, hist[tid], &cr[tid], tid*blk, H); } - +#else + firstAnalysis_ (original, wprofile, hist[0], &cr[0], 0, original->height); +#endif chroma_radius = cr[0]; for (int i=0; ichroma_radius) @@ -421,9 +432,11 @@ void ImProcFunctions::lumadenoise (LabImage* lab, int** b2) { void ImProcFunctions::colordenoise (LabImage* lab, int** b2) { if (params->colorDenoise.enabled && lab->W>=8 && lab->H>=8) { - +#ifdef _OPENMP AlignedBuffer* buffer = new AlignedBuffer (MAX(lab->W,lab->H)*omp_get_max_threads()); - +#else + AlignedBuffer* buffer = new AlignedBuffer (MAX(lab->W,lab->H)); +#endif gaussHorizontal (lab->a, lab->a, buffer, lab->W, lab->H, params->colorDenoise.amount / 10.0 / scale, multiThread); gaussHorizontal (lab->b, lab->b, buffer, lab->W, lab->H, params->colorDenoise.amount / 10.0 / scale, multiThread); gaussVertical (lab->a, lab->a, buffer, lab->W, lab->H, params->colorDenoise.amount / 10.0 / scale, multiThread); diff --git a/rtengine/iplab2rgb.cc b/rtengine/iplab2rgb.cc index c7425e434..659d839a2 100644 --- a/rtengine/iplab2rgb.cc +++ b/rtengine/iplab2rgb.cc @@ -20,7 +20,9 @@ #include #include #include +#ifdef _OPENMP #include +#endif namespace rtengine { diff --git a/rtengine/ipresize.cc b/rtengine/ipresize.cc index c70479f57..c36d34a6b 100644 --- a/rtengine/ipresize.cc +++ b/rtengine/ipresize.cc @@ -19,7 +19,9 @@ #include #include #include +#ifdef _OPENMP #include +#endif namespace rtengine { diff --git a/rtengine/ipsharpen.cc b/rtengine/ipsharpen.cc index 7cc4ddfaa..98345d98f 100644 --- a/rtengine/ipsharpen.cc +++ b/rtengine/ipsharpen.cc @@ -18,7 +18,9 @@ */ #include #include +#ifdef _OPENMP #include +#endif #include #include #include @@ -66,9 +68,11 @@ void ImProcFunctions::deconvsharpening (LabImage* lab, unsigned short** b2) { } float** tmp = (float**)b2; - +#ifdef _OPENMP AlignedBuffer* buffer = new AlignedBuffer (MAX(W,H)*omp_get_max_threads()); - +#else + AlignedBuffer* buffer = new AlignedBuffer (MAX(W,H)); +#endif float damping = params->sharpening.deconvdamping / 5.0; bool needdamp = params->sharpening.deconvdamping > 0; for (int k=0; ksharpening.deconviter; k++) { @@ -118,9 +122,11 @@ void ImProcFunctions::sharpening (LabImage* lab, unsigned short** b2) { int W = lab->W, H = lab->H; unsigned short** b3; - +#ifdef _OPENMP AlignedBuffer* buffer = new AlignedBuffer (MAX(W,H)*omp_get_max_threads()); - +#else + AlignedBuffer* buffer = new AlignedBuffer (MAX(W,H)); +#endif if (params->sharpening.edgesonly==false) { gaussHorizontal (lab->L, b2, buffer, W, H, params->sharpening.radius / scale, multiThread); diff --git a/rtengine/iptransform.cc b/rtengine/iptransform.cc index 331f839aa..9a5d977fc 100644 --- a/rtengine/iptransform.cc +++ b/rtengine/iptransform.cc @@ -18,7 +18,9 @@ */ #include #include +#ifdef _OPENMP #include +#endif #include namespace rtengine { diff --git a/rtengine/rawimagesource.cc b/rtengine/rawimagesource.cc index 0e91184f0..af2c643f8 100644 --- a/rtengine/rawimagesource.cc +++ b/rtengine/rawimagesource.cc @@ -25,7 +25,9 @@ #include #include #include +#ifdef _OPENMP #include +#endif namespace rtengine { @@ -962,6 +964,7 @@ void RawImageSource::correction_YIQ_LQ (Image16* im, int times) { return; for (int t=0; theight - 1); } +#else + correction_YIQ_LQ_ (im, 1 , im->height - 1); +#endif } } @@ -1807,6 +1813,7 @@ void RawImageSource::hphd_demosaic () { memset(hpmap[i], 0, W*sizeof(float)); } +#ifdef _OPENMP #pragma omp parallel { int tid = omp_get_thread_num(); @@ -1818,7 +1825,9 @@ void RawImageSource::hphd_demosaic () { else hphd_vertical (hpmap, tid*blk, W); } - +#else + hphd_vertical (hpmap, 0, W); +#endif if (plistener) plistener->setProgress (0.33); @@ -1826,6 +1835,7 @@ void RawImageSource::hphd_demosaic () { for (int i=0; ihpmap[i], 0, W*sizeof(char)); +#ifdef _OPENMP #pragma omp parallel { int tid = omp_get_thread_num(); @@ -1837,7 +1847,9 @@ void RawImageSource::hphd_demosaic () { else hphd_horizontal (hpmap, tid*blk, H); } - +#else + hphd_horizontal (hpmap, 0, H); +#endif freeArray(hpmap, H); if (plistener) diff --git a/rtengine/rtthumbnail.cc b/rtengine/rtthumbnail.cc index d26a25e66..e967c08f3 100644 --- a/rtengine/rtthumbnail.cc +++ b/rtengine/rtthumbnail.cc @@ -794,6 +794,7 @@ bool Thumbnail::writeData (const Glib::ustring& fname) { SafeKeyFile keyFile; try { + if( Glib::file_test(fname,Glib::FILE_TEST_EXISTS) ) keyFile.load_from_file (fname); } catch (...) {} diff --git a/rtengine/shmap.cc b/rtengine/shmap.cc index 308bf0823..6bcb4dcbf 100644 --- a/rtengine/shmap.cc +++ b/rtengine/shmap.cc @@ -53,14 +53,18 @@ void SHMap::update (Image16* img, unsigned short** buffer, double radius, double } if (!hq) { +#ifdef _OPENMP AlignedBuffer* buffer = new AlignedBuffer (MAX(W,H)*omp_get_max_threads()); - +#else + AlignedBuffer* buffer = new AlignedBuffer (MAX(W,H)); +#endif gaussHorizontal (map, map, buffer, W, H, radius, multiThread); gaussVertical (map, map, buffer, W, H, radius, multiThread); delete buffer; } else { +#ifdef _OPENMP #pragma omp parallel if (multiThread) { int tid = omp_get_thread_num(); @@ -72,6 +76,9 @@ void SHMap::update (Image16* img, unsigned short** buffer, double radius, double else bilateral (map, buffer, W, H, 8000, radius, tid*blk, H); } +#else + bilateral (map, buffer, W, H, 8000, radius, 0, H); +#endif // anti-alias filtering the result for (int i=0; i