Fix setIppErrorStatus placement
authorvbystricky <user@user-pc.(none)>
Mon, 21 Apr 2014 10:19:25 +0000 (14:19 +0400)
committervbystricky <user@user-pc.(none)>
Mon, 21 Apr 2014 10:19:25 +0000 (14:19 +0400)
modules/imgproc/src/deriv.cpp

index f752fac..8dd7f4c 100644 (file)
@@ -185,6 +185,8 @@ cv::Ptr<cv::FilterEngine> cv::createDerivFilter(int srcType, int dstType,
 
 #if defined (HAVE_IPP) && (IPP_VERSION_MAJOR >= 7)
 
+#define IPP_RETURN_ERROR    {setIppErrorStatus(); return false;}
+
 namespace cv
 {
 #if (IPP_VERSION_X100 >= 801)
@@ -224,84 +226,82 @@ static bool IPPDerivScharr(InputArray _src, OutputArray _dst, int ddepth, int dx
 
     _dst.create( _src.size(), dtype);
     Mat dst = _dst.getMat();
+    IppStatus sts = ippStsErr;
     if ((CV_8U == stype) && (CV_16S == dtype))
     {
-        int bufferSize = 0; Ipp8u *pBuffer; IppStatus sts;
+        int bufferSize = 0; Ipp8u *pBuffer;
         if (horz)
         {
             if (0 > ippiFilterScharrHorizMaskBorderGetBufferSize(roiSize, ippMskSize3x3, ipp8u, ipp16s, 1, &bufferSize))
-                return false;
+                IPP_RETURN_ERROR
             pBuffer = ippsMalloc_8u(bufferSize);
             if (NULL == pBuffer)
-                return false;
+                IPP_RETURN_ERROR
             sts = ippiFilterScharrHorizMaskBorder_8u16s_C1R(src.data, (int)src.step, (Ipp16s *)dst.data, (int)dst.step, roiSize, ippMskSize3x3, ippiBorderType, 0, pBuffer);
         }
         else
         {
             if (0 > ippiFilterScharrVertMaskBorderGetBufferSize(roiSize, ippMskSize3x3, ipp8u, ipp16s, 1, &bufferSize))
-                return false;
+                IPP_RETURN_ERROR
             pBuffer = ippsMalloc_8u(bufferSize);
             if (NULL == pBuffer)
-                return false;
+                IPP_RETURN_ERROR
             sts = ippiFilterScharrVertMaskBorder_8u16s_C1R(src.data, (int)src.step, (Ipp16s *)dst.data, (int)dst.step, roiSize, ippMskSize3x3, ippiBorderType, 0, pBuffer);
         }
         ippsFree(pBuffer);
-        return (0 <= sts);
     }
     else if ((CV_16S == stype) && (CV_16S == dtype))
     {
-        int bufferSize = 0; Ipp8u *pBuffer; IppStatus sts;
+        int bufferSize = 0; Ipp8u *pBuffer;
         if (horz)
         {
             if (0 > ippiFilterScharrHorizMaskBorderGetBufferSize(roiSize, ippMskSize3x3, ipp16s, ipp16s, 1, &bufferSize))
-                return false;
+                IPP_RETURN_ERROR
             pBuffer = ippsMalloc_8u(bufferSize);
             if (NULL == pBuffer)
-                return false;
+                IPP_RETURN_ERROR
             sts = ippiFilterScharrHorizMaskBorder_16s_C1R((Ipp16s *)src.data, (int)src.step, (Ipp16s *)dst.data, (int)dst.step, roiSize, ippMskSize3x3, ippiBorderType, 0, pBuffer);
         }
         else
         {
             if (0 > ippiFilterScharrVertMaskBorderGetBufferSize(roiSize, ippMskSize3x3, ipp16s, ipp16s, 1, &bufferSize))
-                return false;
+                IPP_RETURN_ERROR
             pBuffer = ippsMalloc_8u(bufferSize);
             if (NULL == pBuffer)
-                return false;
+                IPP_RETURN_ERROR
             sts = ippiFilterScharrVertMaskBorder_16s_C1R((Ipp16s *)src.data, (int)src.step, (Ipp16s *)dst.data, (int)dst.step, roiSize, ippMskSize3x3, ippiBorderType, 0, pBuffer);
         }
         ippsFree(pBuffer);
-        return (0 <= sts);
     }
     else if ((CV_32F == stype) && (CV_32F == dtype))
     {
-        int bufferSize = 0; Ipp8u *pBuffer; IppStatus sts;
+        int bufferSize = 0; Ipp8u *pBuffer;
         if (horz)
         {
             if (0 > ippiFilterScharrHorizMaskBorderGetBufferSize(roiSize, ippMskSize3x3, ipp32f, ipp32f, 1, &bufferSize))
-                return false;
+                IPP_RETURN_ERROR
             pBuffer = ippsMalloc_8u(bufferSize);
             if (NULL == pBuffer)
-                return false;
+                IPP_RETURN_ERROR
             sts = ippiFilterScharrHorizMaskBorder_32f_C1R((Ipp32f *)src.data, (int)src.step, (Ipp32f *)dst.data, (int)dst.step, roiSize, ippMskSize3x3, ippiBorderType, 0, pBuffer);
         }
         else
         {
             if (0 > ippiFilterScharrVertMaskBorderGetBufferSize(roiSize, ippMskSize3x3, ipp32f, ipp32f, 1, &bufferSize))
-                return false;
+                IPP_RETURN_ERROR
             pBuffer = ippsMalloc_8u(bufferSize);
             if (NULL == pBuffer)
-                return false;
+                IPP_RETURN_ERROR
             sts = ippiFilterScharrVertMaskBorder_32f_C1R((Ipp32f *)src.data, (int)src.step, (Ipp32f *)dst.data, (int)dst.step, roiSize, ippMskSize3x3, ippiBorderType, 0, pBuffer);
         }
         ippsFree(pBuffer);
         if (sts < 0)
-            return false;
+            IPP_RETURN_ERROR;
 
         if (FLT_EPSILON < fabs(scale - 1.0))
-            ippiMulC_32f_C1R((Ipp32f *)dst.data, (int)dst.step, (Ipp32f)scale, (Ipp32f *)dst.data, (int)dst.step, roiSize);
-        return true;
+            sts = ippiMulC_32f_C1R((Ipp32f *)dst.data, (int)dst.step, (Ipp32f)scale, (Ipp32f *)dst.data, (int)dst.step, roiSize);
     }
-    return false;
+    return (0 <= sts);
 }
 #elif (IPP_VERSION_MAJOR >= 7)
 static bool IPPDerivScharr(InputArray _src, OutputArray _dst, int ddepth, int dx, int dy, double scale, double delta, int borderType)
@@ -432,45 +432,53 @@ static bool IPPDerivSobel(InputArray _src, OutputArray _dst, int ddepth, int dx,
         if ((dx == 1) && (dy == 0))
         {
             if (0 > ippiFilterSobelNegVertGetBufferSize_8u16s_C1R(ippiSize(src.cols, src.rows), (IppiMaskSize)(ksize*10+ksize),&bufSize))
-                return false;
+                IPP_RETURN_ERROR
             buffer.allocate(bufSize);
 
-            return (0 <= ippiFilterSobelNegVertBorder_8u16s_C1R((const Ipp8u*)src.data, (int)src.step,
+            if (0 > ippiFilterSobelNegVertBorder_8u16s_C1R((const Ipp8u*)src.data, (int)src.step,
                                 (Ipp16s*)dst.data, (int)dst.step, ippiSize(src.cols, src.rows), (IppiMaskSize)(ksize*10+ksize),
-                                ippBorderRepl, 0, (Ipp8u*)(char*)buffer));
+                                ippBorderRepl, 0, (Ipp8u*)(char*)buffer))
+                IPP_RETURN_ERROR
+            return true;
         }
 
         if ((dx == 0) && (dy == 1))
         {
             if (0 > ippiFilterSobelHorizGetBufferSize_8u16s_C1R(ippiSize(src.cols, src.rows), (IppiMaskSize)(ksize*10+ksize),&bufSize))
-                return false;
+                IPP_RETURN_ERROR
             buffer.allocate(bufSize);
 
-            return (0 <= ippiFilterSobelHorizBorder_8u16s_C1R((const Ipp8u*)src.data, (int)src.step,
+            if (0 > ippiFilterSobelHorizBorder_8u16s_C1R((const Ipp8u*)src.data, (int)src.step,
                                 (Ipp16s*)dst.data, (int)dst.step, ippiSize(src.cols, src.rows), (IppiMaskSize)(ksize*10+ksize),
-                                ippBorderRepl, 0, (Ipp8u*)(char*)buffer));
+                                ippBorderRepl, 0, (Ipp8u*)(char*)buffer))
+                IPP_RETURN_ERROR
+            return true;
         }
 
         if ((dx == 2) && (dy == 0))
         {
             if (0 > ippiFilterSobelVertSecondGetBufferSize_8u16s_C1R(ippiSize(src.cols, src.rows), (IppiMaskSize)(ksize*10+ksize),&bufSize))
-                return false;
+                IPP_RETURN_ERROR
             buffer.allocate(bufSize);
 
-            return (0 <= ippiFilterSobelVertSecondBorder_8u16s_C1R((const Ipp8u*)src.data, (int)src.step,
+            if (0 > ippiFilterSobelVertSecondBorder_8u16s_C1R((const Ipp8u*)src.data, (int)src.step,
                                 (Ipp16s*)dst.data, (int)dst.step, ippiSize(src.cols, src.rows), (IppiMaskSize)(ksize*10+ksize),
-                                ippBorderRepl, 0, (Ipp8u*)(char*)buffer));
+                                ippBorderRepl, 0, (Ipp8u*)(char*)buffer))
+                IPP_RETURN_ERROR
+            return true;
         }
 
         if ((dx == 0) && (dy == 2))
         {
             if (0 > ippiFilterSobelHorizSecondGetBufferSize_8u16s_C1R(ippiSize(src.cols, src.rows), (IppiMaskSize)(ksize*10+ksize),&bufSize))
-                return false;
+                IPP_RETURN_ERROR
             buffer.allocate(bufSize);
 
-            return (0 <= ippiFilterSobelHorizSecondBorder_8u16s_C1R((const Ipp8u*)src.data, (int)src.step,
+            if (0 > ippiFilterSobelHorizSecondBorder_8u16s_C1R((const Ipp8u*)src.data, (int)src.step,
                                 (Ipp16s*)dst.data, (int)dst.step, ippiSize(src.cols, src.rows), (IppiMaskSize)(ksize*10+ksize),
-                                ippBorderRepl, 0, (Ipp8u*)(char*)buffer));
+                                ippBorderRepl, 0, (Ipp8u*)(char*)buffer))
+                IPP_RETURN_ERROR
+            return true;
         }
     }
 
@@ -483,15 +491,13 @@ static bool IPPDerivSobel(InputArray _src, OutputArray _dst, int ddepth, int dx,
         if ((dx == 1) && (dy == 0))
         {
             if (0 > ippiFilterSobelNegVertGetBufferSize_32f_C1R(ippiSize(src.cols, src.rows), (IppiMaskSize)(ksize*10+ksize), &bufSize))
-                return false;
+                IPP_RETURN_ERROR
             buffer.allocate(bufSize);
 
             if (0 > ippiFilterSobelNegVertBorder_32f_C1R((const Ipp32f*)src.data, (int)src.step,
                             (Ipp32f*)dst.data, (int)dst.step, ippiSize(src.cols, src.rows), (IppiMaskSize)(ksize*10+ksize),
                             ippBorderRepl, 0, (Ipp8u*)(char*)buffer))
-            {
-                return false;
-            }
+                IPP_RETURN_ERROR
             if(scale != 1)
                 ippiMulC_32f_C1R((Ipp32f *)dst.data, (int)dst.step, (Ipp32f)scale, (Ipp32f *)dst.data, (int)dst.step, ippiSize(dst.cols*dst.channels(), dst.rows));
             return true;
@@ -500,14 +506,12 @@ static bool IPPDerivSobel(InputArray _src, OutputArray _dst, int ddepth, int dx,
         if ((dx == 0) && (dy == 1))
         {
             if (0 > ippiFilterSobelHorizGetBufferSize_32f_C1R(ippiSize(src.cols, src.rows), (IppiMaskSize)(ksize*10+ksize),&bufSize))
-                return false;
+                IPP_RETURN_ERROR
             buffer.allocate(bufSize);
             if (0 > ippiFilterSobelHorizBorder_32f_C1R((const Ipp32f*)src.data, (int)src.step,
                             (Ipp32f*)dst.data, (int)dst.step, ippiSize(src.cols, src.rows), (IppiMaskSize)(ksize*10+ksize),
                             ippBorderRepl, 0, (Ipp8u*)(char*)buffer))
-            {
-                return false;
-            }
+                IPP_RETURN_ERROR
             if(scale != 1)
                 ippiMulC_32f_C1R((Ipp32f *)dst.data, (int)dst.step, (Ipp32f)scale, (Ipp32f *)dst.data, (int)dst.step, ippiSize(dst.cols*dst.channels(), dst.rows));
             return true;
@@ -516,15 +520,13 @@ static bool IPPDerivSobel(InputArray _src, OutputArray _dst, int ddepth, int dx,
         if((dx == 2) && (dy == 0))
         {
             if (0 > ippiFilterSobelVertSecondGetBufferSize_32f_C1R(ippiSize(src.cols, src.rows), (IppiMaskSize)(ksize*10+ksize),&bufSize))
-                return false;
+                IPP_RETURN_ERROR
             buffer.allocate(bufSize);
 
             if (0 > ippiFilterSobelVertSecondBorder_32f_C1R((const Ipp32f*)src.data, (int)src.step,
                             (Ipp32f*)dst.data, (int)dst.step, ippiSize(src.cols, src.rows), (IppiMaskSize)(ksize*10+ksize),
                             ippBorderRepl, 0, (Ipp8u*)(char*)buffer))
-            {
-                return false;
-            }
+                IPP_RETURN_ERROR
             if(scale != 1)
                 ippiMulC_32f_C1R((Ipp32f *)dst.data, (int)dst.step, (Ipp32f)scale, (Ipp32f *)dst.data, (int)dst.step, ippiSize(dst.cols*dst.channels(), dst.rows));
             return true;
@@ -533,15 +535,13 @@ static bool IPPDerivSobel(InputArray _src, OutputArray _dst, int ddepth, int dx,
         if((dx == 0) && (dy == 2))
         {
             if (0 > ippiFilterSobelHorizSecondGetBufferSize_32f_C1R(ippiSize(src.cols, src.rows), (IppiMaskSize)(ksize*10+ksize),&bufSize))
-                return false;
+                IPP_RETURN_ERROR
             buffer.allocate(bufSize);
 
             if (0 > ippiFilterSobelHorizSecondBorder_32f_C1R((const Ipp32f*)src.data, (int)src.step,
                             (Ipp32f*)dst.data, (int)dst.step, ippiSize(src.cols, src.rows), (IppiMaskSize)(ksize*10+ksize),
                             ippBorderRepl, 0, (Ipp8u*)(char*)buffer))
-            {
-                return false;
-            }
+                IPP_RETURN_ERROR
 
             if(scale != 1)
                 ippiMulC_32f_C1R((Ipp32f *)dst.data, (int)dst.step, (Ipp32f)scale, (Ipp32f *)dst.data, (int)dst.step, ippiSize(dst.cols*dst.channels(), dst.rows));
@@ -581,13 +581,11 @@ void cv::Sobel( InputArray _src, OutputArray _dst, int ddepth, int dx, int dy,
     {
         if (IPPDerivScharr(_src, _dst, ddepth, dx, dy, scale, delta, borderType))
             return;
-        setIppErrorStatus();
     }
     else if (0 < ksize)
     {
         if (IPPDerivSobel(_src, _dst, ddepth, dx, dy, ksize, scale, delta, borderType))
             return;
-        setIppErrorStatus();
     }
 #endif
     int ktype = std::max(CV_32F, std::max(ddepth, sdepth));
@@ -628,7 +626,6 @@ void cv::Scharr( InputArray _src, OutputArray _dst, int ddepth, int dx, int dy,
 #if defined (HAVE_IPP) && (IPP_VERSION_MAJOR >= 7)
     if (IPPDerivScharr(_src, _dst, ddepth, dx, dy, scale, delta, borderType))
         return;
-    setIppErrorStatus();
 #endif
     int ktype = std::max(CV_32F, std::max(ddepth, sdepth));