Added checking destination size for pyrUp, pyrDown.
authorAlexander Karsakov <alexander.karsakov@itseez.com>
Wed, 23 Apr 2014 07:47:15 +0000 (11:47 +0400)
committerAlexander Karsakov <alexander.karsakov@itseez.com>
Wed, 23 Apr 2014 07:47:15 +0000 (11:47 +0400)
modules/imgproc/src/pyramids.cpp

index 277a36a..cbbe66a 100644 (file)
@@ -511,7 +511,7 @@ void cv::pyrDown( InputArray _src, OutputArray _dst, const Size& _dsz, int borde
 #if (defined(HAVE_IPP) && !defined(HAVE_IPP_ICV_ONLY) && IPP_VERSION_X100 >= 801)
     bool isolated = (borderType & BORDER_ISOLATED) != 0;
     int borderTypeNI = borderType & ~BORDER_ISOLATED;
-    if (borderTypeNI == BORDER_DEFAULT && (!src.isSubmatrix() || isolated))
+    if (borderTypeNI == BORDER_DEFAULT && (!src.isSubmatrix() || isolated) && dsz == Size((src.cols + 1)/2, (src.rows + 1)/2))
     {
         typedef IppStatus (CV_STDCALL * ippiPyrDown)(const void* pSrc, int srcStep, void* pDst, int dstStep, IppiSize srcRoi, Ipp8u* buffer);
         int type = src.type();
@@ -580,7 +580,7 @@ void cv::pyrUp( InputArray _src, OutputArray _dst, const Size& _dsz, int borderT
 #if (defined(HAVE_IPP) && !defined(HAVE_IPP_ICV_ONLY) && IPP_VERSION_X100 >= 801)
     bool isolated = (borderType & BORDER_ISOLATED) != 0;
     int borderTypeNI = borderType & ~BORDER_ISOLATED;
-    if (borderTypeNI == BORDER_DEFAULT && (!src.isSubmatrix() || isolated))
+    if (borderTypeNI == BORDER_DEFAULT && (!src.isSubmatrix() || isolated) && dsz == Size(src.cols*2, src.rows*2))
     {
         typedef IppStatus (CV_STDCALL * ippiPyrUp)(const void* pSrc, int srcStep, void* pDst, int dstStep, IppiSize srcRoi, Ipp8u* buffer);
         int type = src.type();