diff --git a/rtengine/cplx_wavelet_dec.h b/rtengine/cplx_wavelet_dec.h index 4fd92f7b8..31811ca9b 100644 --- a/rtengine/cplx_wavelet_dec.h +++ b/rtengine/cplx_wavelet_dec.h @@ -43,7 +43,7 @@ namespace rtengine { int lvltot, subsamp; int numThreads; - size_t m_w, m_h;//dimensions + int m_w, m_h;//dimensions int wavfilt_len, wavfilt_offset; float *wavfilt_anal; @@ -173,29 +173,15 @@ namespace rtengine { return; } - E *buffer[2]; - buffer[0] = coeff0; - buffer[1] = new (std::nothrow) E[(m_w/2+1)*(m_h/2+1)]; - if(buffer[1] == NULL) { - memoryAllocationFailed = true; - delete[] tmpHi; - delete[] tmpLo; - return; - } - - int bufferindex = 0; for (int lvl=lvltot; lvl>0; lvl--) { - wavelet_decomp[lvl]->reconstruct_level(tmpLo, tmpHi, buffer[bufferindex], buffer[bufferindex^1], wavfilt_synth, wavfilt_synth, wavfilt_len, wavfilt_offset); - bufferindex ^= 1; + wavelet_decomp[lvl]->reconstruct_level(tmpLo, tmpHi, coeff0, coeff0, wavfilt_synth, wavfilt_synth, wavfilt_len, wavfilt_offset); } - wavelet_decomp[0]->reconstruct_level(tmpLo, tmpHi, buffer[bufferindex], dst, wavfilt_synth, wavfilt_synth, wavfilt_len, wavfilt_offset); - delete[] buffer[0]; - delete[] buffer[1]; + wavelet_decomp[0]->reconstruct_level(tmpLo, tmpHi, coeff0, dst, wavfilt_synth, wavfilt_synth, wavfilt_len, wavfilt_offset); + delete[] coeff0; coeff0 = NULL; delete[] tmpLo; delete[] tmpHi; - } }; diff --git a/rtengine/cplx_wavelet_level.h b/rtengine/cplx_wavelet_level.h index 8d878dceb..bf1d7727b 100644 --- a/rtengine/cplx_wavelet_level.h +++ b/rtengine/cplx_wavelet_level.h @@ -45,7 +45,7 @@ namespace rtengine { bool bigBlockOfMemory; // allocation and destruction of data storage - T ** create(size_t n); + T ** create(int n); void destroy(T ** subbands); // load a row/column of input data, possibly with padding @@ -76,13 +76,13 @@ namespace rtengine { T ** wavcoeffs; // full size - size_t m_w, m_h; + int m_w, m_h; // size of low frequency part - size_t m_w2, m_h2; + int m_w2, m_h2; template - wavelet_level(E * src, E * dst, int level, int subsamp, size_t w, size_t h, float *filterV, float *filterH, int len, int offset, int skipcrop, int numThreads) + wavelet_level(E * src, E * dst, int level, int subsamp, int w, int h, float *filterV, float *filterH, int len, int offset, int skipcrop, int numThreads) : lvl(level), subsamp_out((subsamp>>level)&1), numThreads(numThreads), skip(1< - T ** wavelet_level::create(size_t n) { + T ** wavelet_level::create(int n) { T * data = new (std::nothrow) T[3*n]; if(data == NULL) { bigBlockOfMemory = false; } T ** subbands = new T*[4]; - for(size_t j = 1; j < 4; j++) { + for(int j = 1; j < 4; j++) { if(bigBlockOfMemory) subbands[j] = data + n * (j-1); else { @@ -167,7 +167,7 @@ namespace rtengine { if(bigBlockOfMemory) delete[] subbands[1]; else { - for(size_t j = 1; j < 4; j++) { + for(int j = 1; j < 4; j++) { if(subbands[j] != NULL) delete[] subbands[j]; } @@ -185,7 +185,7 @@ namespace rtengine { dstLo[row*width+i] = (srcbuffer[i] + srcbuffer[i+skip]); dstHi[row*width+i] = (srcbuffer[i] - srcbuffer[i+skip]); } - for(size_t i = max(width-skip,skip); i < (width); i++) { + for(int i = max(width-skip,skip); i < (width); i++) { dstLo[row*width+i] = (srcbuffer[i] + srcbuffer[i-skip]); dstHi[row*width+i] = (srcbuffer[i] - srcbuffer[i-skip]); } @@ -221,10 +221,10 @@ namespace rtengine { #pragma omp parallel for num_threads(numThreads) if(numThreads>1) #endif for (int k=0; k1) #endif - for(size_t i = 0; i < dstheight; i++) { + for(int i = 0; i < dstheight; i++) { int i_src = (i+shift)/2; int begin = (i+shift)%2; //TODO: this is correct only if skip=1; otherwise, want to work with cosets of length 'skip' @@ -511,7 +511,7 @@ namespace rtengine { #ifdef _OPENMP #pragma omp parallel for num_threads(numThreads) if(numThreads>1) #endif - for(size_t i = 0; i < dstheight; i++) { + for(int i = 0; i < dstheight; i++) { int i_src = (i+shift)/2; int begin = (i+shift)%2; //TODO: this is correct only if skip=1; otherwise, want to work with cosets of length 'skip'