From 321782b9b7f20864793fb7383075f8feb7817258 Mon Sep 17 00:00:00 2001 From: Ilya Lavrenov Date: Mon, 27 Jan 2014 12:32:26 +0400 Subject: [PATCH] added macro with ability of returning values --- .../include/opencv2/core/opencl/ocl_defs.hpp | 12 ++++++---- modules/core/src/stat.cpp | 24 +++++++++++-------- 2 files changed, 21 insertions(+), 15 deletions(-) diff --git a/modules/core/include/opencv2/core/opencl/ocl_defs.hpp b/modules/core/include/opencv2/core/opencl/ocl_defs.hpp index 6a4fd992cd..7a8aed4b88 100644 --- a/modules/core/include/opencv2/core/opencl/ocl_defs.hpp +++ b/modules/core/include/opencv2/core/opencl/ocl_defs.hpp @@ -8,13 +8,13 @@ #ifdef HAVE_OPENCL #ifdef CV_OPENCL_RUN_VERBOSE -#define CV_OCL_RUN(condition, func) \ +#define CV_OCL_RUN_(condition, func, ...) \ { \ if (cv::ocl::useOpenCL() && (condition) && func) \ { \ printf("%s: OpenCL implementation is running\n", CV_Func); \ fflush(stdout); \ - return; \ + return __VA_ARGS__; \ } \ else \ { \ @@ -23,11 +23,13 @@ } \ } #else -#define CV_OCL_RUN(condition, func) \ +#define CV_OCL_RUN_(condition, func, ...) \ if (cv::ocl::useOpenCL() && (condition) && func) \ - return; + return __VA_ARGS__; #endif #else -#define CV_OCL_RUN(condition, func) +#define CV_OCL_RUN_(condition, func, retval) #endif + +#define CV_OCL_RUN(condition, func) CV_OCL_RUN_(condition, func) diff --git a/modules/core/src/stat.cpp b/modules/core/src/stat.cpp index 4484bd5aab..63970c5448 100644 --- a/modules/core/src/stat.cpp +++ b/modules/core/src/stat.cpp @@ -475,7 +475,7 @@ static bool ocl_sum( InputArray _src, Scalar & res, int sum_op, InputArray _mask int type = _src.type(), depth = CV_MAT_DEPTH(type), cn = CV_MAT_CN(type); bool doubleSupport = ocl::Device::getDefault().doubleFPConfig() > 0; - if ( (!doubleSupport && depth == CV_64F) || cn > 4 || cn == 3 || _src.dims() > 2 ) + if ( (!doubleSupport && depth == CV_64F) || cn > 4 || cn == 3 ) return false; int dbsize = ocl::Device::getDefault().maxComputeUnits(); @@ -533,8 +533,9 @@ cv::Scalar cv::sum( InputArray _src ) { #ifdef HAVE_OPENCL Scalar _res; - if (ocl::useOpenCL() && _src.isUMat() && ocl_sum(_src, _res, OCL_OP_SUM)) - return _res; + CV_OCL_RUN_( _src.isUMat() && _src.dims() <= 2, + ocl_sum(_src, _res, OCL_OP_SUM), + _res) #endif Mat src = _src.getMat(); @@ -674,8 +675,9 @@ int cv::countNonZero( InputArray _src ) #ifdef HAVE_OPENCL int res = -1; - if (ocl::useOpenCL() && _src.isUMat() && ocl_countNonZero(_src, res)) - return res; + CV_OCL_RUN_(_src.isUMat() && _src.dims() <= 2, + ocl_countNonZero(_src, res), + res) #endif Mat src = _src.getMat(); @@ -1985,8 +1987,9 @@ double cv::norm( InputArray _src, int normType, InputArray _mask ) #ifdef HAVE_OPENCL double _result = 0; - if (ocl::useOpenCL() && _src.isUMat() && _src.dims() <= 2 && ocl_norm(_src, normType, _mask, _result)) - return _result; + CV_OCL_RUN_(_src.isUMat() && _src.dims() <= 2, + ocl_norm(_src, normType, _mask, _result), + _result) #endif Mat src = _src.getMat(), mask = _mask.getMat(); @@ -2320,9 +2323,10 @@ double cv::norm( InputArray _src1, InputArray _src2, int normType, InputArray _m #ifdef HAVE_OPENCL double _result = 0; - if (ocl::useOpenCL() && _mask.empty() && _src1.isUMat() && _src2.isUMat() && - _src1.dims() <= 2 && _src2.dims() <= 2 && ocl_norm(_src1, _src2, normType, _result)) - return _result; + CV_OCL_RUN_(_mask.empty() && _src1.isUMat() && _src2.isUMat() && + _src1.dims() <= 2 && _src2.dims() <= 2, + ocl_norm(_src1, _src2, normType, _result), + _result) #endif if( normType & CV_RELATIVE )