{
int scn = (int)sc.total(), cn = CV_MAT_CN(buftype);
size_t esz = CV_ELEM_SIZE(buftype);
- getConvertFunc(sc.depth(), buftype)(sc.data, 0, 0, 0, scbuf, 0, Size(std::min(cn, scn), 1), 0);
+ getConvertFunc(sc.depth(), buftype)(sc.data, 1, 0, 1, scbuf, 1, Size(std::min(cn, scn), 1), 0);
// unroll the scalar
if( scn < cn )
{
uchar* dptr = ptrs[2];
if( cvtsrc1 )
{
- cvtsrc1( sptr1, 0, 0, 0, buf1, 0, bszn, 0 );
+ cvtsrc1( sptr1, 1, 0, 1, buf1, 1, bszn, 0 );
sptr1 = buf1;
}
if( ptrs[0] == ptrs[1] )
sptr2 = sptr1;
else if( cvtsrc2 )
{
- cvtsrc2( sptr2, 0, 0, 0, buf2, 0, bszn, 0 );
+ cvtsrc2( sptr2, 1, 0, 1, buf2, 1, bszn, 0 );
sptr2 = buf2;
}
if( !haveMask && !cvtdst )
- func( sptr1, 0, sptr2, 0, dptr, 0, bszn, usrdata );
+ func( sptr1, 1, sptr2, 1, dptr, 1, bszn, usrdata );
else
{
- func( sptr1, 0, sptr2, 0, wbuf, 0, bszn, usrdata );
+ func( sptr1, 1, sptr2, 1, wbuf, 0, bszn, usrdata );
if( !haveMask )
- cvtdst( wbuf, 0, 0, 0, dptr, 0, bszn, 0 );
+ cvtdst( wbuf, 1, 0, 1, dptr, 1, bszn, 0 );
else if( !cvtdst )
{
- copymask( wbuf, 0, ptrs[3], 0, dptr, 0, Size(bsz, 1), &dsz );
+ copymask( wbuf, 1, ptrs[3], 1, dptr, 1, Size(bsz, 1), &dsz );
ptrs[3] += bsz;
}
else
{
- cvtdst( wbuf, 0, 0, 0, maskbuf, 0, bszn, 0 );
- copymask( maskbuf, 0, ptrs[3], 0, dptr, 0, Size(bsz, 1), &dsz );
+ cvtdst( wbuf, 1, 0, 1, maskbuf, 1, bszn, 0 );
+ copymask( maskbuf, 1, ptrs[3], 1, dptr, 1, Size(bsz, 1), &dsz );
ptrs[3] += bsz;
}
}
if( cvtsrc1 )
{
- cvtsrc1( sptr1, 0, 0, 0, buf1, 0, bszn, 0 );
+ cvtsrc1( sptr1, 1, 0, 1, buf1, 1, bszn, 0 );
sptr1 = buf1;
}
std::swap(sptr1, sptr2);
if( !haveMask && !cvtdst )
- func( sptr1, 0, sptr2, 0, dptr, 0, bszn, usrdata );
+ func( sptr1, 1, sptr2, 1, dptr, 1, bszn, usrdata );
else
{
- func( sptr1, 0, sptr2, 0, wbuf, 0, bszn, usrdata );
+ func( sptr1, 1, sptr2, 1, wbuf, 1, bszn, usrdata );
if( !haveMask )
- cvtdst( wbuf, 0, 0, 0, dptr, 0, bszn, 0 );
+ cvtdst( wbuf, 1, 0, 1, dptr, 1, bszn, 0 );
else if( !cvtdst )
{
- copymask( wbuf, 0, ptrs[2], 0, dptr, 0, Size(bsz, 1), &dsz );
+ copymask( wbuf, 1, ptrs[2], 1, dptr, 1, Size(bsz, 1), &dsz );
ptrs[2] += bsz;
}
else
{
- cvtdst( wbuf, 0, 0, 0, maskbuf, 0, bszn, 0 );
- copymask( maskbuf, 0, ptrs[2], 0, dptr, 0, Size(bsz, 1), &dsz );
+ cvtdst( wbuf, 1, 0, 1, maskbuf, 1, bszn, 0 );
+ copymask( maskbuf, 1, ptrs[2], 1, dptr, 1, Size(bsz, 1), &dsz );
ptrs[2] += bsz;
}
}
else
{
double fval = 0;
- getConvertFunc(depth2, CV_64F)(src2.data, 0, 0, 0, (uchar *)&fval, 0, Size(1, 1), 0);
+ getConvertFunc(depth2, CV_64F)(src2.data, 1, 0, 1, (uchar *)&fval, 1, Size(1, 1), 0);
if( fval < getMinVal(depth1) )
return dst.setTo(Scalar::all(op == CMP_GT || op == CMP_GE || op == CMP_NE ? 255 : 0)), true;
else
{
double fval=0;
- getConvertFunc(depth2, CV_64F)(src2.data, 0, 0, 0, (uchar*)&fval, 0, Size(1,1), 0);
+ getConvertFunc(depth2, CV_64F)(src2.data, 1, 0, 1, (uchar*)&fval, 1, Size(1,1), 0);
if( fval < getMinVal(depth1) )
{
dst = Scalar::all(op == CMP_GT || op == CMP_GE || op == CMP_NE ? 255 : 0);
int* iubuf = ilbuf + cn;
BinaryFunc sccvtfunc = getConvertFunc(ldepth, CV_32S);
- sccvtfunc(lscalar.data, 0, 0, 0, (uchar*)ilbuf, 0, Size(cn, 1), 0);
- sccvtfunc(uscalar.data, 0, 0, 0, (uchar*)iubuf, 0, Size(cn, 1), 0);
+ sccvtfunc(lscalar.data, 1, 0, 1, (uchar*)ilbuf, 1, Size(cn, 1), 0);
+ sccvtfunc(uscalar.data, 1, 0, 1, (uchar*)iubuf, 1, Size(cn, 1), 0);
int minval = cvRound(getMinVal(sdepth)), maxval = cvRound(getMaxVal(sdepth));
for( int k = 0; k < cn; k++ )
int* iubuf = ilbuf + cn;
BinaryFunc sccvtfunc = getConvertFunc(scdepth, CV_32S);
- sccvtfunc(lb.data, 0, 0, 0, (uchar*)ilbuf, 0, Size(cn, 1), 0);
- sccvtfunc(ub.data, 0, 0, 0, (uchar*)iubuf, 0, Size(cn, 1), 0);
+ sccvtfunc(lb.data, 1, 0, 1, (uchar*)ilbuf, 1, Size(cn, 1), 0);
+ sccvtfunc(ub.data, 1, 0, 1, (uchar*)iubuf, 1, Size(cn, 1), 0);
int minval = cvRound(getMinVal(depth)), maxval = cvRound(getMaxVal(depth));
for( int k = 0; k < cn; k++ )
switch(src.type())
{
- case CV_8U:
+ case CV_8UC1:
{
if(scale != 1)
return false;
return false;
}
}
- case CV_32F:
+ case CV_32FC1:
#if defined(HAVE_IPP_ICV_ONLY) // N/A: ippiMulC_32f_C1R
return false;
#else
{
switch(dst.type())
{
- case CV_32F:
+ case CV_32FC1:
{
if ((dx == 1) && (dy == 0))
{
static bool IPPDeriv(const Mat& src, Mat& dst, int ddepth, int dx, int dy, int ksize, double scale)
{
- int bufSize = 0;
+ int stype = src.type(), dtype = dst.type(), bufSize = 0;
cv::AutoBuffer<char> buffer;
if (ksize == 3 || ksize == 5)
{
- if ( ddepth < 0 )
- ddepth = src.depth();
-
- if (src.type() == CV_8U && dst.type() == CV_16S && scale == 1)
+ if (stype == CV_8UC1 && dtype == CV_16SC1 && scale == 1)
{
- if ((dx == 1) && (dy == 0))
+ if (dx == 1 && dy == 0)
{
if (0 > ippiFilterSobelNegVertGetBufferSize_8u16s_C1R(ippiSize(src.cols, src.rows), (IppiMaskSize)(ksize*10+ksize),&bufSize))
return false;
buffer.allocate(bufSize);
- return (0 <= ippiFilterSobelNegVertBorder_8u16s_C1R((const Ipp8u*)src.data, (int)src.step,
+ return 0 <= ippiFilterSobelNegVertBorder_8u16s_C1R((const Ipp8u*)src.data, (int)src.step,
(Ipp16s*)dst.data, (int)dst.step, ippiSize(src.cols, src.rows), (IppiMaskSize)(ksize*10+ksize),
- ippBorderRepl, 0, (Ipp8u*)(char*)buffer));
+ ippBorderRepl, 0, (Ipp8u*)(char*)buffer);
}
- if ((dx == 0) && (dy == 1))
+ if (dx == 0 && dy == 1)
{
if (0 > ippiFilterSobelHorizGetBufferSize_8u16s_C1R(ippiSize(src.cols, src.rows), (IppiMaskSize)(ksize*10+ksize),&bufSize))
return false;
buffer.allocate(bufSize);
- return (0 <= ippiFilterSobelHorizBorder_8u16s_C1R((const Ipp8u*)src.data, (int)src.step,
+ return 0 <= ippiFilterSobelHorizBorder_8u16s_C1R((const Ipp8u*)src.data, (int)src.step,
(Ipp16s*)dst.data, (int)dst.step, ippiSize(src.cols, src.rows), (IppiMaskSize)(ksize*10+ksize),
- ippBorderRepl, 0, (Ipp8u*)(char*)buffer));
+ ippBorderRepl, 0, (Ipp8u*)(char*)buffer);
}
- if ((dx == 2) && (dy == 0))
+ if (dx == 2 && dy == 0)
{
if (0 > ippiFilterSobelVertSecondGetBufferSize_8u16s_C1R(ippiSize(src.cols, src.rows), (IppiMaskSize)(ksize*10+ksize),&bufSize))
return false;
buffer.allocate(bufSize);
- return (0 <= ippiFilterSobelVertSecondBorder_8u16s_C1R((const Ipp8u*)src.data, (int)src.step,
+ return 0 <= ippiFilterSobelVertSecondBorder_8u16s_C1R((const Ipp8u*)src.data, (int)src.step,
(Ipp16s*)dst.data, (int)dst.step, ippiSize(src.cols, src.rows), (IppiMaskSize)(ksize*10+ksize),
- ippBorderRepl, 0, (Ipp8u*)(char*)buffer));
+ ippBorderRepl, 0, (Ipp8u*)(char*)buffer);
}
- if ((dx == 0) && (dy == 2))
+ if (dx == 0 && dy == 2)
{
if (0 > ippiFilterSobelHorizSecondGetBufferSize_8u16s_C1R(ippiSize(src.cols, src.rows), (IppiMaskSize)(ksize*10+ksize),&bufSize))
return false;
buffer.allocate(bufSize);
- return (0 <= ippiFilterSobelHorizSecondBorder_8u16s_C1R((const Ipp8u*)src.data, (int)src.step,
+ return 0 <= ippiFilterSobelHorizSecondBorder_8u16s_C1R((const Ipp8u*)src.data, (int)src.step,
(Ipp16s*)dst.data, (int)dst.step, ippiSize(src.cols, src.rows), (IppiMaskSize)(ksize*10+ksize),
- ippBorderRepl, 0, (Ipp8u*)(char*)buffer));
+ ippBorderRepl, 0, (Ipp8u*)(char*)buffer);
}
}
- if (src.type() == CV_32F && dst.type() == CV_32F)
+ if (stype == CV_32FC1 && dtype == CV_32FC1)
{
#if defined(HAVE_IPP_ICV_ONLY) // N/A: ippiMulC_32f_C1R
return false;
#else
#if 0
- if ((dx == 1) && (dy == 0))
+ if (dx == 1 && dy == 0)
{
if (0 > ippiFilterSobelNegVertGetBufferSize_32f_C1R(ippiSize(src.cols, src.rows), (IppiMaskSize)(ksize*10+ksize), &bufSize))
return false;
return true;
}
- if ((dx == 0) && (dy == 1))
+ if (dx == 0 && dy == 1)
{
if (0 > ippiFilterSobelHorizGetBufferSize_32f_C1R(ippiSize(src.cols, src.rows), (IppiMaskSize)(ksize*10+ksize),&bufSize))
return false;
}
#endif
- if((dx == 2) && (dy == 0))
+ if(dx == 2 && dy == 0)
{
if (0 > ippiFilterSobelVertSecondGetBufferSize_32f_C1R(ippiSize(src.cols, src.rows), (IppiMaskSize)(ksize*10+ksize),&bufSize))
return false;
return true;
}
- if((dx == 0) && (dy == 2))
+ if(dx == 0 && dy == 2)
{
if (0 > ippiFilterSobelHorizSecondGetBufferSize_32f_C1R(ippiSize(src.cols, src.rows), (IppiMaskSize)(ksize*10+ksize),&bufSize))
return false;
}
}
- if(ksize <= 0)
+ if (ksize <= 0)
return IPPDerivScharr(src, dst, ddepth, dx, dy, scale);
return false;
}
int stype = _src.type(), sdepth = CV_MAT_DEPTH(stype), cn = CV_MAT_CN(stype);
if (ddepth < 0)
ddepth = sdepth;
- _dst.create( _src.size(), CV_MAKETYPE(ddepth, cn) );
+ int dtype = CV_MAKE_TYPE(ddepth, cn);
+ _dst.create( _src.size(), dtype );
#ifdef HAVE_TEGRA_OPTIMIZATION
if (scale == 1.0 && delta == 0)
#endif
#if defined (HAVE_IPP) && (IPP_VERSION_MAJOR >= 7)
- if(dx < 3 && dy < 3 && cn == 1 && borderType == BORDER_REPLICATE)
+ if (dx < 3 && dy < 3 && cn == 1 && borderType == BORDER_REPLICATE &&
+ ((stype == CV_8UC1 && dtype == CV_16SC1) || (stype == CV_32FC1 && dtype == CV_32FC1)))
{
Mat src = _src.getMat(), dst = _dst.getMat();
if (IPPDeriv(src, dst, ddepth, dx, dy, ksize,scale))
return;
- setIppErrorStatus();
}
#endif
int ktype = std::max(CV_32F, std::max(ddepth, sdepth));
int stype = _src.type(), sdepth = CV_MAT_DEPTH(stype), cn = CV_MAT_CN(stype);
if (ddepth < 0)
ddepth = sdepth;
- _dst.create( _src.size(), CV_MAKETYPE(ddepth, cn) );
+ int dtype = CV_MAKETYPE(ddepth, cn);
+ _dst.create( _src.size(), dtype );
#ifdef HAVE_TEGRA_OPTIMIZATION
if (scale == 1.0 && delta == 0)
#endif
#if defined (HAVE_IPP) && (IPP_VERSION_MAJOR >= 7)
- if(dx < 2 && dy < 2 && _src.channels() == 1 && borderType == 1)
+ if(dx < 2 && dy < 2 && borderType == BORDER_REPLICATE &&
+ ((stype == CV_8UC1 && dtype == CV_16SC1) || (stype == CV_32FC1 && dtype == CV_32FC1)))
{
Mat src = _src.getMat(), dst = _dst.getMat();
if(IPPDerivScharr(src, dst, ddepth, dx, dy, scale))