diff --git a/modules/gpu/src/opencv2/gpu/device/common.hpp b/modules/gpu/src/opencv2/gpu/device/common.hpp index a513bccb5cdaf55b629c1044401836144c4a0e03..24a447b818c3e1dcbdb69bb4ba7ca7348f2500ac 100644 --- a/modules/gpu/src/opencv2/gpu/device/common.hpp +++ b/modules/gpu/src/opencv2/gpu/device/common.hpp @@ -72,6 +72,11 @@ namespace cv { namespace gpu { return reinterpret_cast(ptr) % size == 0; } + + static inline bool isAligned(size_t step, size_t size) + { + return step % size == 0; + } }} static inline void ___cudaSafeCall(cudaError_t err, const char *file, const int line, const char *func = "") diff --git a/modules/gpu/src/opencv2/gpu/device/detail/transform_detail.hpp b/modules/gpu/src/opencv2/gpu/device/detail/transform_detail.hpp index dfa33ff411945213cde61f140db38d261f5e4272..c5163fa8c16444d8bf261abdf10ba271e78dfd49 100644 --- a/modules/gpu/src/opencv2/gpu/device/detail/transform_detail.hpp +++ b/modules/gpu/src/opencv2/gpu/device/detail/transform_detail.hpp @@ -347,7 +347,8 @@ namespace cv { namespace gpu { namespace device StaticAssert::check(); - if (!isAligned(src.data, ft::smart_shift * sizeof(T)) || !isAligned(dst.data, ft::smart_shift * sizeof(D))) + if (!isAligned(src.data, ft::smart_shift * sizeof(T)) || !isAligned(src.step, ft::smart_shift * sizeof(T)) || + !isAligned(dst.data, ft::smart_shift * sizeof(D)) || !isAligned(dst.step, ft::smart_shift * sizeof(D))) { TransformDispatcher::call(src, dst, op, mask, stream); return; @@ -370,7 +371,9 @@ namespace cv { namespace gpu { namespace device StaticAssert::check(); - if (!isAligned(src1.data, ft::smart_shift * sizeof(T1)) || !isAligned(src2.data, ft::smart_shift * sizeof(T2)) || !isAligned(dst.data, ft::smart_shift * sizeof(D))) + if (!isAligned(src1.data, ft::smart_shift * sizeof(T1)) || !isAligned(src1.step, ft::smart_shift * sizeof(T1)) || + !isAligned(src2.data, ft::smart_shift * sizeof(T2)) || !isAligned(src2.step, ft::smart_shift * sizeof(T2)) || + !isAligned(dst.data, ft::smart_shift * sizeof(D)) || !isAligned(dst.step, ft::smart_shift * sizeof(D))) { TransformDispatcher::call(src1, src2, dst, op, mask, stream); return;