diff --git a/rtengine/boxblur.cc b/rtengine/boxblur.cc index 491ffae14..045c7ac3f 100644 --- a/rtengine/boxblur.cc +++ b/rtengine/boxblur.cc @@ -33,6 +33,7 @@ void boxblur(float** src, float** dst, int radius, int W, int H, bool multiThrea { //box blur using rowbuffers and linebuffers instead of a full size buffer + radius = rtengine::min(radius, W - 1, H - 1); if (radius == 0) { if (src != dst) { #ifdef _OPENMP diff --git a/rtengine/cplx_wavelet_level.h b/rtengine/cplx_wavelet_level.h index 8664606c6..09b4e4a88 100644 --- a/rtengine/cplx_wavelet_level.h +++ b/rtengine/cplx_wavelet_level.h @@ -272,7 +272,7 @@ template void wavelet_level::SynthesisFilterHaarVertical (const T #pragma omp for nowait #endif - for(int i = 0; i < skip; i++) + for(int i = 0; i < std::min(skip, height); i++) { for(int j = 0; j < width; j++) { dst[width * i + j] = (srcLo[i * width + j] + srcHi[i * width + j]); diff --git a/rtengine/ipwavelet.cc b/rtengine/ipwavelet.cc index 91c7d6c44..7c0dc368b 100644 --- a/rtengine/ipwavelet.cc +++ b/rtengine/ipwavelet.cc @@ -1195,7 +1195,7 @@ void ImProcFunctions::ip_wavelet(LabImage * lab, LabImage * dst, int kall, const b = 327.68f * Chprov * sincosv.x; //aply Munsell } else {//general case L = labco->L[i1][j1]; - const float Lin = labco->L[i1][j1]; + const float Lin = std::max(0.f, L); if(wavclCurve && cp.finena) { labco->L[i1][j1] = (0.5f * Lin + 1.5f * wavclCurve[Lin]) / 2.f; //apply contrast curve