diff --git a/rtengine/array2D.h b/rtengine/array2D.h index 8d1351cbb..f4e5ac596 100644 --- a/rtengine/array2D.h +++ b/rtengine/array2D.h @@ -67,10 +67,10 @@ class array2D : { private: - ssize_t width, height; + size_t width, height; T** rows; T* data; - void ar_realloc(ssize_t w, ssize_t h, int offset = 0) + void ar_realloc(size_t w, size_t h, int offset = 0) { if (rows && (h > height || 4 * h < height)) { delete[] rows; @@ -92,7 +92,7 @@ private: data = new T[height * width + offset]; } - for (ssize_t i = 0; i < height; i++) { + for (size_t i = 0; i < height; i++) { rows[i] = data + offset + width * i; } } @@ -105,13 +105,13 @@ public: { } // creator type1 - array2D(int w, int h, unsigned int flags = 0) : + array2D(size_t w, size_t h, unsigned int flags = 0) : width(w), height(h) { data = new T[height * width]; rows = new T*[height]; - for (ssize_t i = 0; i < height; ++i) { + for (size_t i = 0; i < height; ++i) { rows[i] = data + i * width; } @@ -121,7 +121,7 @@ public: } // creator type 2 - array2D(int w, int h, T ** source, unsigned int flags = 0) : + array2D(size_t w, size_t h, T ** source, unsigned int flags = 0) : width(w), height(h) { const bool owner = !(flags & ARRAY2D_BYREFERENCE); @@ -133,10 +133,10 @@ public: rows = new T*[height]; - for (ssize_t i = 0; i < height; ++i) { + for (size_t i = 0; i < height; ++i) { if (owner) { rows[i] = data + i * width; - for (ssize_t j = 0; j < width; ++j) { + for (size_t j = 0; j < width; ++j) { rows[i][j] = source[i][j]; } } else { @@ -157,7 +157,7 @@ public: #ifdef _OPENMP #pragma omp parallel for if(multiThread) #endif - for (ssize_t i = 0; i < width * height; ++i) { + for (size_t i = 0; i < width * height; ++i) { data[i] = val; } } @@ -172,13 +172,13 @@ public: } // use with indices - T * operator[](int index) + T * operator[](size_t index) { assert((index >= 0) && (index < height)); return rows[index]; } - const T * operator[](int index) const + const T * operator[](size_t index) const { assert((index >= 0) && (index < height)); return rows[index]; @@ -212,7 +212,7 @@ public: // useful within init of parent object // or use as resize of 2D array - void operator()(int w, int h, unsigned int flags = 0, int offset = 0) + void operator()(size_t w, size_t h, unsigned int flags = 0, int offset = 0) { ar_realloc(w, h, offset); @@ -221,11 +221,11 @@ public: } } - int getWidth() const + size_t getWidth() const { return width; } - int getHeight() const + size_t getHeight() const { return height; } @@ -243,7 +243,7 @@ private: array2D list[num]; public: - multi_array2D(int width, int height, int flags = 0, int offset = 0) + multi_array2D(size_t width, size_t height, int flags = 0, int offset = 0) { for (size_t i = 0; i < num; ++i) { list[i](width, height, flags, (i + 1) * offset); diff --git a/rtengine/guidedfilter.cc b/rtengine/guidedfilter.cc index 3f5e00e05..8429655dd 100644 --- a/rtengine/guidedfilter.cc +++ b/rtengine/guidedfilter.cc @@ -146,8 +146,8 @@ void guidedFilter(const array2D &guide, const array2D &src, array2 #ifdef _OPENMP # pragma omp parallel for if (multithread) #endif - for (int y = 0; y < s.getHeight(); ++y) { - for (int x = 0; x < s.getWidth(); ++x) { + for (size_t y = 0; y < s.getHeight(); ++y) { + for (size_t x = 0; x < s.getWidth(); ++x) { d[y][x] = s[y][x]; } } @@ -164,9 +164,10 @@ void guidedFilter(const array2D &guide, const array2D &src, array2 const auto f_mean = [multithread](array2D &d, array2D &s, int rad) -> void { - rad = LIM(rad, 0, (min(s.getWidth(), s.getHeight()) - 1) / 2 - 1); - // boxblur(s, d, rad, s.getWidth(), s.getHeight(), multithread); - boxblur(static_cast(s), static_cast(d), rad, s.getWidth(), s.getHeight(), multithread); + if (rtengine::min(s.getWidth(), s.getHeight()) > 1) { + rad = LIM(rad, 0, (rtengine::min(s.getWidth(), s.getHeight()) - 1) / 2 - 1); + boxblur(static_cast(s), static_cast(d), rad, s.getWidth(), s.getHeight(), multithread); + } }; array2D I1(w, h); @@ -249,8 +250,8 @@ void guidedFilterLog(const array2D &guide, float base, array2D &ch #ifdef _OPENMP # pragma omp parallel for if (multithread) #endif - for (int y = 0; y < chan.getHeight(); ++y) { - for (int x = 0; x < chan.getWidth(); ++x) { + for (size_t y = 0; y < chan.getHeight(); ++y) { + for (size_t x = 0; x < chan.getWidth(); ++x) { chan[y][x] = xlin2log(max(chan[y][x], 0.f), base); } } @@ -260,8 +261,8 @@ void guidedFilterLog(const array2D &guide, float base, array2D &ch #ifdef _OPENMP # pragma omp parallel for if (multithread) #endif - for (int y = 0; y < chan.getHeight(); ++y) { - for (int x = 0; x < chan.getWidth(); ++x) { + for (size_t y = 0; y < chan.getHeight(); ++y) { + for (size_t x = 0; x < chan.getWidth(); ++x) { chan[y][x] = xlog2lin(max(chan[y][x], 0.f), base); } }