Tegra optimization for calcOpticalFlowPyrLK
This commit is contained in:
@@ -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
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
#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
|
|||||||
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
|
|||||||
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 @@
|
|||||||
#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
|
||||||
|
|||||||
Reference in New Issue
Block a user