cv::transpose
authorIlya Lavrenov <ilya.lavrenov@itseez.com>
Thu, 3 Apr 2014 19:41:13 +0000 (23:41 +0400)
committerIlya Lavrenov <ilya.lavrenov@itseez.com>
Tue, 8 Apr 2014 20:11:26 +0000 (00:11 +0400)
modules/core/src/matrix.cpp

index 45ae3d5..67a2b9a 100644 (file)
@@ -2967,6 +2967,30 @@ void cv::transpose( InputArray _src, OutputArray _dst )
         return;
     }
 
+#ifdef HAVE_IPP
+    typedef IppStatus (CV_STDCALL * ippiTranspose)(const void * pSrc, int srcStep, void * pDst, int dstStep, IppiSize roiSize);
+    ippiTranspose ippFunc =
+    type == CV_8UC1 ? (ippiTranspose)ippiTranspose_8u_C1R :
+    type == CV_8UC3 ? (ippiTranspose)ippiTranspose_8u_C3R :
+    type == CV_8UC4 ? (ippiTranspose)ippiTranspose_8u_C4R :
+    type == CV_16UC1 ? (ippiTranspose)ippiTranspose_16u_C1R :
+    type == CV_16UC3 ? (ippiTranspose)ippiTranspose_16u_C3R :
+    type == CV_16UC4 ? (ippiTranspose)ippiTranspose_16u_C4R :
+    type == CV_16SC1 ? (ippiTranspose)ippiTranspose_16s_C1R :
+    type == CV_16SC3 ? (ippiTranspose)ippiTranspose_16s_C3R :
+    type == CV_16SC4 ? (ippiTranspose)ippiTranspose_16s_C4R :
+    type == CV_32SC1 ? (ippiTranspose)ippiTranspose_32s_C1R :
+    type == CV_32SC3 ? (ippiTranspose)ippiTranspose_32s_C3R :
+    type == CV_32SC4 ? (ippiTranspose)ippiTranspose_32s_C4R :
+    type == CV_32FC1 ? (ippiTranspose)ippiTranspose_32f_C1R :
+    type == CV_32FC3 ? (ippiTranspose)ippiTranspose_32f_C3R :
+    type == CV_32FC4 ? (ippiTranspose)ippiTranspose_32f_C4R : 0;
+
+    IppiSize roiSize = { src.cols, src.rows };
+    if (ippFunc != 0 && ippFunc(src.data, (int)src.step, dst.data, (int)dst.step, roiSize) == ippStsNoErr)
+        return;
+#endif
+
     if( dst.data == src.data )
     {
         TransposeInplaceFunc func = transposeInplaceTab[esz];