Commit 1388826c authored by Andrey Kamaev's avatar Andrey Kamaev

Tegra optimization for calcOpticalFlowPyrLK

parent ebe2d03a
...@@ -459,7 +459,6 @@ bool CvCapture_Android::convertYUV420i2Grey(int width, int height, const unsigne ...@@ -459,7 +459,6 @@ bool CvCapture_Android::convertYUV420i2Grey(int width, int height, const unsigne
return !resmat.empty(); return !resmat.empty();
} }
#ifndef HAVE_TEGRA_OPTIMIZATION
template<int R> template<int R>
struct YUV420i2BGR888Invoker struct YUV420i2BGR888Invoker
{ {
...@@ -516,7 +515,6 @@ 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) 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 ...@@ -529,13 +527,15 @@ bool CvCapture_Android::convertYUV420i2BGR888(int width, int height, const unsig
unsigned char* uv = y1 + width * height; unsigned char* uv = y1 + width * height;
#ifdef HAVE_TEGRA_OPTIMIZATION #ifdef HAVE_TEGRA_OPTIMIZATION
cv::parallel_for(cv::BlockedRange(0, height, 2), tegra::YUV420i2BGR888Invoker(resmat, width, y1, uv, inRGBorder)); #warning "TEGRA OPTIMIZED YUV420i TO RGB888 CONVERSION IS USED"
#else if (!tegra::YUV420i2BGR888(width, height, y1, uv, resmat, inRGBorder))
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));
#endif #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(); return !resmat.empty();
} }
......
...@@ -50,6 +50,11 @@ void cv::calcOpticalFlowPyrLK( const InputArray& _prevImg, const InputArray& _ne ...@@ -50,6 +50,11 @@ void cv::calcOpticalFlowPyrLK( const InputArray& _prevImg, const InputArray& _ne
double derivLambda, double derivLambda,
int flags ) 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(); Mat prevImg = _prevImg.getMat(), nextImg = _nextImg.getMat(), prevPtsMat = _prevPts.getMat();
derivLambda = std::min(std::max(derivLambda, 0.), 1.); derivLambda = std::min(std::max(derivLambda, 0.), 1.);
double lambda1 = 1. - derivLambda, lambda2 = derivLambda; double lambda1 = 1. - derivLambda, lambda2 = derivLambda;
......
...@@ -56,4 +56,8 @@ ...@@ -56,4 +56,8 @@
#include "opencv2/imgproc/imgproc.hpp" #include "opencv2/imgproc/imgproc.hpp"
#include "opencv2/core/internal.hpp" #include "opencv2/core/internal.hpp"
#ifdef HAVE_TEGRA_OPTIMIZATION
#include "opencv2/video/video_tegra.hpp"
#endif
#endif #endif
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment