From 2375e587056b2f44962c1afce4e1aa5f41ba6857 Mon Sep 17 00:00:00 2001 From: chacha21 Date: Mon, 6 Mar 2017 15:08:59 +0100 Subject: [PATCH] assert SrcDepth == DstDepth simplify code by requesting srcDepth == dstDepth --- modules/cudaarithm/src/cuda/absdiff_scalar.cu | 73 ++++--------------- 1 file changed, 15 insertions(+), 58 deletions(-) diff --git a/modules/cudaarithm/src/cuda/absdiff_scalar.cu b/modules/cudaarithm/src/cuda/absdiff_scalar.cu index 225298b291..be3046b3cb 100644 --- a/modules/cudaarithm/src/cuda/absdiff_scalar.cu +++ b/modules/cudaarithm/src/cuda/absdiff_scalar.cu @@ -56,14 +56,14 @@ void absDiffScalar(const GpuMat& src, cv::Scalar val, bool, GpuMat& dst, const G namespace { - template struct AbsDiffScalarOp : unary_function + template struct AbsDiffScalarOp : unary_function { ScalarType val; - __device__ __forceinline__ DstType operator ()(SrcType a) const + __device__ __forceinline__ SrcType operator ()(SrcType a) const { abs_func f; - return saturate_cast(f(saturate_cast(a) - val)); + return saturate_cast(f(saturate_cast(a) - val)); } }; @@ -77,14 +77,14 @@ namespace }; }; - template + template void absDiffScalarImpl(const GpuMat& src, cv::Scalar value, GpuMat& dst, Stream& stream) { typedef typename MakeVec::cn>::type ScalarType; cv::Scalar_ value_ = value; - AbsDiffScalarOp op; + AbsDiffScalarOp op; op.val = VecTraits::make(value_.val); gridTransformUnary_< TransformPolicy >(globPtr(src), globPtr(dst), op, stream); } @@ -93,70 +93,28 @@ namespace void absDiffScalar(const GpuMat& src, cv::Scalar val, bool, GpuMat& dst, const GpuMat&, double, Stream& stream, int) { typedef void (*func_t)(const GpuMat& src, cv::Scalar val, GpuMat& dst, Stream& stream); - static const func_t funcs[7][7][4] = + static const func_t funcs[7][4] = { { - {absDiffScalarImpl, absDiffScalarImpl, absDiffScalarImpl, absDiffScalarImpl}, - {absDiffScalarImpl, absDiffScalarImpl, absDiffScalarImpl, absDiffScalarImpl}, - {absDiffScalarImpl, absDiffScalarImpl, absDiffScalarImpl, absDiffScalarImpl}, - {absDiffScalarImpl, absDiffScalarImpl, absDiffScalarImpl, absDiffScalarImpl}, - {absDiffScalarImpl, absDiffScalarImpl, absDiffScalarImpl, absDiffScalarImpl}, - {absDiffScalarImpl, absDiffScalarImpl, absDiffScalarImpl, absDiffScalarImpl}, - {absDiffScalarImpl, absDiffScalarImpl, absDiffScalarImpl, absDiffScalarImpl} + absDiffScalarImpl, absDiffScalarImpl, absDiffScalarImpl, absDiffScalarImpl }, { - {absDiffScalarImpl, absDiffScalarImpl, absDiffScalarImpl, absDiffScalarImpl}, - {absDiffScalarImpl, absDiffScalarImpl, absDiffScalarImpl, absDiffScalarImpl}, - {absDiffScalarImpl, absDiffScalarImpl, absDiffScalarImpl, absDiffScalarImpl}, - {absDiffScalarImpl, absDiffScalarImpl, absDiffScalarImpl, absDiffScalarImpl}, - {absDiffScalarImpl, absDiffScalarImpl, absDiffScalarImpl, absDiffScalarImpl}, - {absDiffScalarImpl, absDiffScalarImpl, absDiffScalarImpl, absDiffScalarImpl}, - {absDiffScalarImpl, absDiffScalarImpl, absDiffScalarImpl, absDiffScalarImpl} + absDiffScalarImpl, absDiffScalarImpl, absDiffScalarImpl, absDiffScalarImpl }, { - {0 /*absDiffScalarImpl*/, 0 /*absDiffScalarImpl*/, 0 /*absDiffScalarImpl*/, 0 /*absDiffScalarImpl*/}, - {0 /*absDiffScalarImpl*/, 0 /*absDiffScalarImpl*/, 0 /*absDiffScalarImpl*/, 0 /*absDiffScalarImpl*/}, - {absDiffScalarImpl, absDiffScalarImpl, absDiffScalarImpl, absDiffScalarImpl}, - {absDiffScalarImpl, absDiffScalarImpl, absDiffScalarImpl, absDiffScalarImpl}, - {absDiffScalarImpl, absDiffScalarImpl, absDiffScalarImpl, absDiffScalarImpl}, - {absDiffScalarImpl, absDiffScalarImpl, absDiffScalarImpl, absDiffScalarImpl}, - {absDiffScalarImpl, absDiffScalarImpl, absDiffScalarImpl, absDiffScalarImpl} + absDiffScalarImpl, absDiffScalarImpl, absDiffScalarImpl, absDiffScalarImpl }, { - {0 /*absDiffScalarImpl*/, 0 /*absDiffScalarImpl*/, 0 /*absDiffScalarImpl*/, 0 /*absDiffScalarImpl*/}, - {0 /*absDiffScalarImpl*/, 0 /*absDiffScalarImpl*/, 0 /*absDiffScalarImpl*/, 0 /*absDiffScalarImpl*/}, - {absDiffScalarImpl, absDiffScalarImpl, absDiffScalarImpl, absDiffScalarImpl}, - {absDiffScalarImpl, absDiffScalarImpl, absDiffScalarImpl, absDiffScalarImpl}, - {absDiffScalarImpl, absDiffScalarImpl, absDiffScalarImpl, absDiffScalarImpl}, - {absDiffScalarImpl, absDiffScalarImpl, absDiffScalarImpl, absDiffScalarImpl}, - {absDiffScalarImpl, absDiffScalarImpl, absDiffScalarImpl, absDiffScalarImpl} + absDiffScalarImpl, absDiffScalarImpl, absDiffScalarImpl, absDiffScalarImpl }, { - {0 /*absDiffScalarImpl*/, 0 /*absDiffScalarImpl*/, 0 /*absDiffScalarImpl*/, 0 /*absDiffScalarImpl*/}, - {0 /*absDiffScalarImpl*/, 0 /*absDiffScalarImpl*/, 0 /*absDiffScalarImpl*/, 0 /*absDiffScalarImpl*/}, - {0 /*absDiffScalarImpl*/, 0 /*absDiffScalarImpl*/, 0 /*absDiffScalarImpl*/, 0 /*absDiffScalarImpl*/}, - {0 /*absDiffScalarImpl*/, 0 /*absDiffScalarImpl*/, 0 /*absDiffScalarImpl*/, 0 /*absDiffScalarImpl*/}, - {absDiffScalarImpl, absDiffScalarImpl, absDiffScalarImpl, absDiffScalarImpl}, - {absDiffScalarImpl, absDiffScalarImpl, absDiffScalarImpl, absDiffScalarImpl}, - {absDiffScalarImpl, absDiffScalarImpl, absDiffScalarImpl, absDiffScalarImpl} + absDiffScalarImpl, absDiffScalarImpl, absDiffScalarImpl, absDiffScalarImpl }, { - {0 /*absDiffScalarImpl*/, 0 /*absDiffScalarImpl*/, 0 /*absDiffScalarImpl*/, 0 /*absDiffScalarImpl*/}, - {0 /*absDiffScalarImpl*/, 0 /*absDiffScalarImpl*/, 0 /*absDiffScalarImpl*/, 0 /*absDiffScalarImpl*/}, - {0 /*absDiffScalarImpl*/, 0 /*absDiffScalarImpl*/, 0 /*absDiffScalarImpl*/, 0 /*absDiffScalarImpl*/}, - {0 /*absDiffScalarImpl*/, 0 /*absDiffScalarImpl*/, 0 /*absDiffScalarImpl*/, 0 /*absDiffScalarImpl*/}, - {0 /*absDiffScalarImpl*/, 0 /*absDiffScalarImpl*/, 0 /*absDiffScalarImpl*/, 0 /*absDiffScalarImpl*/}, - {absDiffScalarImpl, absDiffScalarImpl, absDiffScalarImpl, absDiffScalarImpl}, - {absDiffScalarImpl, absDiffScalarImpl, absDiffScalarImpl, absDiffScalarImpl} + absDiffScalarImpl, absDiffScalarImpl, absDiffScalarImpl, absDiffScalarImpl }, { - {0 /*absDiffScalarImpl*/, 0 /*absDiffScalarImpl*/, 0 /*absDiffScalarImpl*/, 0 /*absDiffScalarImpl*/}, - {0 /*absDiffScalarImpl*/, 0 /*absDiffScalarImpl*/, 0 /*absDiffScalarImpl*/, 0 /*absDiffScalarImpl*/}, - {0 /*absDiffScalarImpl*/, 0 /*absDiffScalarImpl*/, 0 /*absDiffScalarImpl*/, 0 /*absDiffScalarImpl*/}, - {0 /*absDiffScalarImpl*/, 0 /*absDiffScalarImpl*/, 0 /*absDiffScalarImpl*/, 0 /*absDiffScalarImpl*/}, - {0 /*absDiffScalarImpl*/, 0 /*absDiffScalarImpl*/, 0 /*absDiffScalarImpl*/, 0 /*absDiffScalarImpl*/}, - {0 /*absDiffScalarImpl*/, 0 /*absDiffScalarImpl*/, 0 /*absDiffScalarImpl*/, 0 /*absDiffScalarImpl*/}, - {absDiffScalarImpl, absDiffScalarImpl, absDiffScalarImpl, absDiffScalarImpl} + absDiffScalarImpl, absDiffScalarImpl, absDiffScalarImpl, absDiffScalarImpl } }; @@ -164,10 +122,9 @@ void absDiffScalar(const GpuMat& src, cv::Scalar val, bool, GpuMat& dst, const G const int ddepth = dst.depth(); const int cn = src.channels(); - CV_DbgAssert( sdepth <= CV_64F && ddepth <= CV_64F && cn <= 4 ); - - const func_t func = funcs[sdepth][ddepth][cn - 1]; + CV_DbgAssert( sdepth <= CV_64F && ddepth <= CV_64F && cn <= 4 && src.type() == dst.type()); + const func_t func = funcs[sdepth][cn - 1]; if (!func) CV_Error(cv::Error::StsUnsupportedFormat, "Unsupported combination of source and destination types");