Commit 5ddff235 authored by Ilya Lavrenov's avatar Ilya Lavrenov

cv::polarToCart

parent 46cb4e0c
...@@ -729,6 +729,22 @@ void polarToCart( InputArray src1, InputArray src2, ...@@ -729,6 +729,22 @@ void polarToCart( InputArray src1, InputArray src2,
dst2.create( Angle.dims, Angle.size, type ); dst2.create( Angle.dims, Angle.size, type );
Mat X = dst1.getMat(), Y = dst2.getMat(); Mat X = dst1.getMat(), Y = dst2.getMat();
#ifdef HAVE_IPP
if (Mag.isContinuous() && Angle.isContinuous() && X.isContinuous() && Y.isContinuous() && !angleInDegrees)
{
typedef IppStatus (CV_STDCALL * ippsPolarToCart)(const void * pSrcMagn, const void * pSrcPhase,
void * pDstRe, void * pDstIm, int len);
ippsPolarToCart ippFunc =
depth == CV_32F ? (ippsPolarToCart)ippsPolarToCart_32f :
depth == CV_64F ? (ippsPolarToCart)ippsPolarToCart_64f : 0;
CV_Assert(ippFunc != 0);
IppStatus status = ippFunc(Mag.data, Angle.data, X.data, Y.data, static_cast<int>(cn * X.total()));
if (status == ippStsNoErr)
return;
}
#endif
const Mat* arrays[] = {&Mag, &Angle, &X, &Y, 0}; const Mat* arrays[] = {&Mag, &Angle, &X, &Y, 0};
uchar* ptrs[4]; uchar* ptrs[4];
NAryMatIterator it(arrays, ptrs); NAryMatIterator it(arrays, ptrs);
......
...@@ -4016,54 +4016,54 @@ private: ...@@ -4016,54 +4016,54 @@ private:
/* /*
#if defined (HAVE_IPP) && IPP_VERSION_MAJOR >= 8 IPP_VERSION_MINOR >= 1 #if defined (HAVE_IPP) && IPP_VERSION_MAJOR >= 8 IPP_VERSION_MINOR >= 1
class IPPWarpAffineInvoker : class IPPWarpAffineInvoker :
public ParallelLoopBody public ParallelLoopBody
{ {
public: public:
IPPWarpAffineInvoker(Mat &_src, Mat &_dst, double (&_coeffs)[2][3], int &_interpolation, int _borderType, IPPWarpAffineInvoker(Mat &_src, Mat &_dst, double (&_coeffs)[2][3], int &_interpolation, int _borderType,
const Scalar &_borderValue, ippiWarpAffineBackFunc _func, bool *_ok) : const Scalar &_borderValue, ippiWarpAffineBackFunc _func, bool *_ok) :
ParallelLoopBody(), src(_src), dst(_dst), mode(_interpolation), coeffs(_coeffs), ParallelLoopBody(), src(_src), dst(_dst), mode(_interpolation), coeffs(_coeffs),
borderType(_borderType), borderValue(_borderValue), func(_func), ok(_ok) borderType(_borderType), borderValue(_borderValue), func(_func), ok(_ok)
{ {
*ok = true; *ok = true;
} }
virtual void operator() (const Range& range) const virtual void operator() (const Range& range) const
{ {
IppiSize srcsize = { src.cols, src.rows }; IppiSize srcsize = { src.cols, src.rows };
IppiRect srcroi = { 0, 0, src.cols, src.rows }; IppiRect srcroi = { 0, 0, src.cols, src.rows };
IppiRect dstroi = { 0, range.start, dst.cols, range.end - range.start }; IppiRect dstroi = { 0, range.start, dst.cols, range.end - range.start };
int cnn = src.channels(); int cnn = src.channels();
if( borderType == BORDER_CONSTANT ) if( borderType == BORDER_CONSTANT )
{ {
IppiSize setSize = { dst.cols, range.end - range.start }; IppiSize setSize = { dst.cols, range.end - range.start };
void *dataPointer = dst.data + dst.step[0] * range.start; void *dataPointer = dst.data + dst.step[0] * range.start;
if( !IPPSet( borderValue, dataPointer, (int)dst.step[0], setSize, cnn, src.depth() ) ) if( !IPPSet( borderValue, dataPointer, (int)dst.step[0], setSize, cnn, src.depth() ) )
{ {
*ok = false; *ok = false;
return; return;
} }
} }
////Aug 2013: problem in IPP 7.1, 8.0 : sometimes function return ippStsCoeffErr ////Aug 2013: problem in IPP 7.1, 8.0 : sometimes function return ippStsCoeffErr
IppStatus status = func( src.data, srcsize, (int)src.step[0], srcroi, dst.data, IppStatus status = func( src.data, srcsize, (int)src.step[0], srcroi, dst.data,
(int)dst.step[0], dstroi, coeffs, mode ); (int)dst.step[0], dstroi, coeffs, mode );
printf("%d\n", status); printf("%d\n", status);
if( status != ippStsNoErr) if( status != ippStsNoErr)
*ok = false; *ok = false;
} }
private: private:
Mat &src; Mat &src;
Mat &dst; Mat &dst;
int mode; int mode;
double (&coeffs)[2][3]; double (&coeffs)[2][3];
int borderType; int borderType;
Scalar borderValue; Scalar borderValue;
ippiWarpAffineBackFunc func; ippiWarpAffineBackFunc func;
bool *ok; bool *ok;
const IPPWarpAffineInvoker& operator= (const IPPWarpAffineInvoker&); const IPPWarpAffineInvoker& operator= (const IPPWarpAffineInvoker&);
}; };
#endif #endif
*/ */
#ifdef HAVE_OPENCL #ifdef HAVE_OPENCL
......
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