Commit bb122932 authored by vbystricky's avatar vbystricky

Convert opencv border type to ipp border. Check supported border before call ipp function

parent 82c67abb
...@@ -1177,25 +1177,29 @@ void cv::GaussianBlur( InputArray _src, OutputArray _dst, Size ksize, ...@@ -1177,25 +1177,29 @@ void cv::GaussianBlur( InputArray _src, OutputArray _dst, Size ksize,
#if IPP_VERSION_X100 >= 801 #if IPP_VERSION_X100 >= 801
if( type == CV_32FC1 && sigma1 == sigma2 && ksize.width == ksize.height && sigma1 != 0.0 ) if( type == CV_32FC1 && sigma1 == sigma2 && ksize.width == ksize.height && sigma1 != 0.0 )
{ {
Mat src = _src.getMat(), dst = _dst.getMat(); IppiBorderType ippBorder = ippiGetBorderType(borderType);
IppiSize roi = { src.cols, src.rows }; if ((ippBorderConst == ippBorder) || (ippBorderRepl == ippBorder))
int specSize = 0, bufferSize = 0;
if (0 <= ippiFilterGaussianGetBufferSize(roi, (Ipp32u)ksize.width, ipp32f, 1, &specSize, &bufferSize))
{ {
IppFilterGaussianSpec *pSpec = (IppFilterGaussianSpec*)ippMalloc(specSize); Mat src = _src.getMat(), dst = _dst.getMat();
Ipp8u *pBuffer = (Ipp8u*)ippMalloc(bufferSize); IppiSize roi = { src.cols, src.rows };
if (0 <= ippiFilterGaussianInit(roi, (Ipp32u)ksize.width, (Ipp32f)sigma1, (IppiBorderType)borderType, ipp32f, 1, pSpec, pBuffer)) int specSize = 0, bufferSize = 0;
if (0 <= ippiFilterGaussianGetBufferSize(roi, (Ipp32u)ksize.width, ipp32f, 1, &specSize, &bufferSize))
{ {
IppStatus sts = ippiFilterGaussianBorder_32f_C1R( (const Ipp32f *)src.data, (int)src.step, IppFilterGaussianSpec *pSpec = (IppFilterGaussianSpec*)ippMalloc(specSize);
(Ipp32f *)dst.data, (int)dst.step, Ipp8u *pBuffer = (Ipp8u*)ippMalloc(bufferSize);
roi, 0.0, pSpec, pBuffer); if (0 <= ippiFilterGaussianInit(roi, (Ipp32u)ksize.width, (Ipp32f)sigma1, ippBorder, ipp32f, 1, pSpec, pBuffer))
ippFree(pBuffer); {
ippFree(pSpec); IppStatus sts = ippiFilterGaussianBorder_32f_C1R( (const Ipp32f *)src.data, (int)src.step,
if (0 <= sts) (Ipp32f *)dst.data, (int)dst.step,
return; roi, 0.0, pSpec, pBuffer);
ippFree(pBuffer);
ippFree(pSpec);
if (0 <= sts)
return;
}
} }
setIppErrorStatus();
} }
setIppErrorStatus();
} }
#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