From a6989bb63bf256cd5d9a9c51adc41c417ee45586 Mon Sep 17 00:00:00 2001 From: Oliver Duis Date: Fri, 24 Jun 2011 23:12:41 +0200 Subject: [PATCH] Fixed crash on OSX wit OMP see issue 757 --- rtengine/expo_before_b.cc | 2 +- rtengine/fast_demo.cc | 24 ++++++++++++++---------- rtengine/rawimagesource.cc | 2 +- rtengine/rawimagesource.h | 6 +++++- 4 files changed, 21 insertions(+), 13 deletions(-) diff --git a/rtengine/expo_before_b.cc b/rtengine/expo_before_b.cc index 151909e93..cab685114 100644 --- a/rtengine/expo_before_b.cc +++ b/rtengine/expo_before_b.cc @@ -51,7 +51,7 @@ void RawImageSource::processRawWhitepoint(float expos, float preser) { for (int i=0; i>2]; - wtd=dirwt[(abs(rawData[i-1][j]-rawData[i+1][j])+abs(rawData[i][j]-rawData[i+2][j])+abs(rawData[i+1][j]-rawData[i+3][j])) >>2]; - wtl=dirwt[(abs(rawData[i][j+1]-rawData[i][j-1])+abs(rawData[i][j]-rawData[i][j-2])+abs(rawData[i][j-1]-rawData[i][j-3])) >>2]; - wtr=dirwt[(abs(rawData[i][j-1]-rawData[i][j+1])+abs(rawData[i][j]-rawData[i][j+2])+abs(rawData[i][j+1]-rawData[i][j+3])) >>2]; + wtu=invGrad[(abs(rawData[i+1][j]-rawData[i-1][j])+abs(rawData[i][j]-rawData[i-2][j])+abs(rawData[i-1][j]-rawData[i-3][j])) >>2]; + wtd=invGrad[(abs(rawData[i-1][j]-rawData[i+1][j])+abs(rawData[i][j]-rawData[i+2][j])+abs(rawData[i+1][j]-rawData[i+3][j])) >>2]; + wtl=invGrad[(abs(rawData[i][j+1]-rawData[i][j-1])+abs(rawData[i][j]-rawData[i][j-2])+abs(rawData[i][j-1]-rawData[i][j-3])) >>2]; + wtr=invGrad[(abs(rawData[i][j-1]-rawData[i][j+1])+abs(rawData[i][j]-rawData[i][j+2])+abs(rawData[i][j+1]-rawData[i][j+3])) >>2]; //store in rgb array the interpolated G value at R/B grid points using directional weighted average green[i][j]=(int)((wtu*rawData[i-1][j]+wtd*rawData[i+1][j]+wtl*rawData[i][j-1]+wtr*rawData[i][j+1])/(wtu+wtd+wtl+wtr)); diff --git a/rtengine/rawimagesource.cc b/rtengine/rawimagesource.cc index 1e86493b5..4a350d8db 100644 --- a/rtengine/rawimagesource.cc +++ b/rtengine/rawimagesource.cc @@ -1110,7 +1110,7 @@ void RawImageSource::demosaic(const RAWParams &raw) else if (raw.dmethod == RAWParams::methodstring[RAWParams::eahd]) eahd_demosaic (); else if (raw.dmethod == RAWParams::methodstring[RAWParams::fast] ) - fast_demo (0,0,W,H); + fast_demosaic (0,0,W,H); //nodemosaic();//for testing else nodemosaic(); diff --git a/rtengine/rawimagesource.h b/rtengine/rawimagesource.h index 9a2d199fb..52a04a71d 100644 --- a/rtengine/rawimagesource.h +++ b/rtengine/rawimagesource.h @@ -54,6 +54,10 @@ template void freeArray2 (T** a, int H) { class RawImageSource : public ImageSource { + private: + static LUTf invGrad; // for fast_demosaic + static LUTf initInvGrad (); + protected: Glib::Mutex getImageMutex; // locks getImage @@ -184,7 +188,7 @@ class RawImageSource : public ImageSource { void vng4_demosaic(); void ppg_demosaic(); void amaze_demosaic_RT(int winx, int winy, int winw, int winh);//Emil's code for AMaZE - void fast_demo(int winx, int winy, int winw, int winh);//Emil's code for fast demosaicing + void fast_demosaic(int winx, int winy, int winw, int winh);//Emil's code for fast demosaicing void dcb_demosaic(int iterations, int dcb_enhance); void ahd_demosaic(int winx, int winy, int winw, int winh); void border_interpolate(int border, float (*image)[4], int start = 0, int end = 0);