Tegra optimization for calcOpticalFlowPyrLK
authorAndrey Kamaev <no@email>
Fri, 20 May 2011 14:33:41 +0000 (14:33 +0000)
committerAndrey Kamaev <no@email>
Fri, 20 May 2011 14:33:41 +0000 (14:33 +0000)
modules/highgui/src/cap_android.cpp
modules/video/src/lkpyramid.cpp
modules/video/src/precomp.hpp

index 4a0fb77..2467d1b 100644 (file)
@@ -459,7 +459,6 @@ bool CvCapture_Android::convertYUV420i2Grey(int width, int height, const unsigne
     return !resmat.empty();
 }
 
-#ifndef HAVE_TEGRA_OPTIMIZATION
 template<int R>
 struct YUV420i2BGR888Invoker
 {
@@ -516,7 +515,6 @@ struct YUV420i2BGR888Invoker
                }
        }
 };
-#endif
 
 bool CvCapture_Android::convertYUV420i2BGR888(int width, int height, const unsigned char* yuv, cv::Mat& resmat, bool inRGBorder)
 {
@@ -529,13 +527,15 @@ bool CvCapture_Android::convertYUV420i2BGR888(int width, int height, const unsig
     unsigned char* uv = y1 + width * height;
 
 #ifdef HAVE_TEGRA_OPTIMIZATION
-    cv::parallel_for(cv::BlockedRange(0, height, 2), tegra::YUV420i2BGR888Invoker(resmat, width, y1, uv, inRGBorder));
-#else
-    if (inRGBorder)
-        cv::parallel_for(cv::BlockedRange(0, height, 2), YUV420i2BGR888Invoker<2>(resmat, width, y1, uv));
-    else
-        cv::parallel_for(cv::BlockedRange(0, height, 2), YUV420i2BGR888Invoker<0>(resmat, width, y1, uv));
+#warning "TEGRA OPTIMIZED YUV420i TO RGB888 CONVERSION IS USED"
+    if (!tegra::YUV420i2BGR888(width, height, y1, uv, resmat, inRGBorder))
 #endif
+    {
+        if (inRGBorder)
+            cv::parallel_for(cv::BlockedRange(0, height, 2), YUV420i2BGR888Invoker<2>(resmat, width, y1, uv));
+        else
+            cv::parallel_for(cv::BlockedRange(0, height, 2), YUV420i2BGR888Invoker<0>(resmat, width, y1, uv));
+    }
 
     return !resmat.empty();
 }
index 3d5d9a4..5ab9cd5 100644 (file)
@@ -50,6 +50,11 @@ void cv::calcOpticalFlowPyrLK( const InputArray& _prevImg, const InputArray& _ne
                            double derivLambda,
                            int flags )
 {
+#ifdef HAVE_TEGRA_OPTIMIZATION
+#warning "TEGRA OPTIMIZED calcOpticalFlowPyrLK IS USED"
+    if (tegra::calcOpticalFlowPyrLK(_prevImg, _nextImg, _prevPts, _nextPts, _status, _err, winSize, maxLevel, criteria, derivLambda, flags))
+       return;
+#endif
     Mat prevImg = _prevImg.getMat(), nextImg = _nextImg.getMat(), prevPtsMat = _prevPts.getMat();
     derivLambda = std::min(std::max(derivLambda, 0.), 1.);
     double lambda1 = 1. - derivLambda, lambda2 = derivLambda;
index 0e3ac9d..98c10e8 100644 (file)
@@ -56,4 +56,8 @@
 #include "opencv2/imgproc/imgproc.hpp"
 #include "opencv2/core/internal.hpp"
 
+#ifdef HAVE_TEGRA_OPTIMIZATION
+#include "opencv2/video/video_tegra.hpp"
+#endif
+
 #endif