From a61546680b082bf6da1ff2648836d288c5e3a772 Mon Sep 17 00:00:00 2001 From: Tomoaki Teshima Date: Wed, 16 Sep 2020 15:45:03 +0900 Subject: [PATCH] use only even number for inplace flip --- modules/cudaarithm/src/core.cpp | 4 +++- modules/cudaarithm/test/test_core.cpp | 2 ++ 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/modules/cudaarithm/src/core.cpp b/modules/cudaarithm/src/core.cpp index ac01afc7f0..aefcfc5af2 100644 --- a/modules/cudaarithm/src/core.cpp +++ b/modules/cudaarithm/src/core.cpp @@ -163,8 +163,10 @@ void cv::cuda::flip(InputArray _src, OutputArray _dst, int flipCode, Stream& str _dst.create(src.size(), src.type()); GpuMat dst = getOutputMat(_dst, src.size(), src.type(), stream); + if (src.data == dst.data && ((src.cols & 1) == 1 || (src.rows & 1) == 1)) + CV_Error(Error::BadROISize, "In-place version of flip only accepts even width/height"); - if (src.refcount != dst.refcount) + if (src.data != dst.data) funcs[src.depth()][src.channels() - 1](src, dst, flipCode, StreamAccessor::getStream(stream)); else // in-place ifuncs[src.depth()][src.channels() - 1](src, flipCode, StreamAccessor::getStream(stream)); diff --git a/modules/cudaarithm/test/test_core.cpp b/modules/cudaarithm/test/test_core.cpp index bc8f3737e5..04b144ff37 100644 --- a/modules/cudaarithm/test/test_core.cpp +++ b/modules/cudaarithm/test/test_core.cpp @@ -281,6 +281,8 @@ CUDA_TEST_P(Flip, Accuracy) CUDA_TEST_P(Flip, AccuracyInplace) { + size.width = (size.width >> 1) << 1; // in-place version only accepts even number + size.height = (size.height >> 1) << 1; // in-place version only accepts even number cv::Mat src = randomMat(size, type); cv::cuda::GpuMat srcDst = loadMat(src, useRoi);