diff --git a/rtengine/ipwavelet.cc b/rtengine/ipwavelet.cc index 2e4d8499f..9e2dffb25 100644 --- a/rtengine/ipwavelet.cc +++ b/rtengine/ipwavelet.cc @@ -149,6 +149,7 @@ struct cont_params { bool finena; bool toningena; bool noiseena; + int maxilev; }; @@ -223,6 +224,7 @@ SSEFUNCTION void ImProcFunctions::ip_wavelet(LabImage * lab, LabImage * dst, int cp.eddetthrHi=(float) params->wavelet.edgedetectthr2; int N=imheight*imwidth; int maxmul=params->wavelet.thres; + cp.maxilev=maxmul; static const float scales[10] = {1.f,2.f,4.f,8.f,16.f,32.f,64.f,128.f,256.f,512.f}; float scaleskip[10]; for(int sc=0;sc<10;sc++) @@ -2067,20 +2069,33 @@ void ImProcFunctions::calckoe(float ** WavCoeffs_LL, struct cont_params cp, floa } } if(choiceClevel==0) { // Only one level - if(level != choicelevel){ // zero all for the levels != choicelevel - for (int dir=1; dir<4; dir++) { - for (int i=0; i= cp.maxilev) { + for (int dir=1; dir<4; dir++) { + for (int i=0; i= choicelevel) { + if(level > choicelevel) { for (int dir=1; dir<4; dir++) { for (int i=0; i= choicelevel - if(level >= choicelevel) { + if(level > choicelevel) { for (int i=0; i= choicelevel - if(level <= choicelevel) { + if(choicelevel >= cp.maxilev) { + for (int dir=1; dir<4; dir++) { + for (int i=0; i= cp.maxilev) { + for (int dir=1; dir<4; dir++) { + for (int i=0; i= choicelevel) { + if(level > choicelevel) { for (int dir=1; dir<4; dir++) { for (int i=0; i= choicelevel - if(level >= choicelevel) { + if(level > choicelevel) { for (int i=0; i= choicelevel - if(level <= choicelevel) { + if(choicelevel >= cp.maxilev) { + for (int dir=1; dir<4; dir++) { + for (int i=0; i