workaround for ocl::absSum (eliminated error: unreachable executed)

This commit is contained in:
Ilya Lavrenov 2013-11-18 18:50:40 +04:00
parent cdf4e4e0b5
commit c0456df611

View File

@ -394,12 +394,16 @@ Scalar cv::ocl::sum(const oclMat &src)
Scalar cv::ocl::absSum(const oclMat &src)
{
if (!src.clCxt->supportsFeature(FEATURE_CL_DOUBLE) && src.depth() == CV_64F)
int sdepth = src.depth();
if (!src.clCxt->supportsFeature(FEATURE_CL_DOUBLE) && sdepth == CV_64F)
{
CV_Error(CV_OpenCLDoubleNotSupported, "Selected device doesn't support double");
return cv::Scalar::all(0);
}
if (sdepth == CV_8U || sdepth == CV_16U)
return sum(src);
static sumFunc functab[3] =
{
arithmetic_sum<int>,
@ -407,7 +411,7 @@ Scalar cv::ocl::absSum(const oclMat &src)
arithmetic_sum<double>
};
int ddepth = std::max(src.depth(), CV_32S);
int ddepth = std::max(sdepth, CV_32S);
sumFunc func = functab[ddepth - CV_32S];
return func(src, ABS_SUM, ddepth);
}