add HAL for BoxFilter

pull/10058/head
elenagvo 7 years ago
parent 800294ad4b
commit cb9e110adb
  1. 19
      modules/imgproc/src/hal_replacement.hpp
  2. 18
      modules/imgproc/src/smooth.cpp

@ -664,6 +664,25 @@ inline int hal_ni_threshold(const uchar* src_data, size_t src_step, uchar* dst_d
#define cv_hal_threshold hal_ni_threshold
//! @endcond
/**
@brief Calculate box filter
@param src_depth, dst_depth Depths of source and destination image
@param src_data, src_step Source image
@param dst_data, dst_step Destination image
@param ksize Size of kernel
@param anchor Anchor point
@param normalize If true then result is normalized
@param border_type Border type
@param margins Margins for source image
@param width, height Source image dimensions
@param cn Number of channels
*/
inline int hal_ni_boxFilter(int src_depth, int dst_depth, const uchar* src_data, size_t src_step, uchar* dst_data, size_t dst_step, CvSize ksize, CvPoint anchor, bool normalize, int border_type, CvRect margins, int width, int height, int cn) { return CV_HAL_ERROR_NOT_IMPLEMENTED; }
//! @cond IGNORED
#define cv_hal_boxFilter hal_ni_boxFilter
//! @endcond
//! @}
#if defined __GNUC__

@ -1552,12 +1552,6 @@ void cv::boxFilter( InputArray _src, OutputArray _dst, int ddepth,
if( src.cols == 1 )
ksize.width = 1;
}
#ifdef HAVE_TEGRA_OPTIMIZATION
if ( tegra::useTegra() && tegra::box(src, dst, ksize, anchor, normalize, borderType) )
return;
#endif
CV_IPP_RUN_FAST(ipp_boxfilter(src, dst, ksize, anchor, normalize, borderType));
Point ofs;
Size wsz(src.cols, src.rows);
@ -1565,6 +1559,18 @@ void cv::boxFilter( InputArray _src, OutputArray _dst, int ddepth,
src.locateROI( wsz, ofs );
borderType = (borderType&~BORDER_ISOLATED);
CvRect margin = cvRect(ofs.x, ofs.y, wsz.width - src.cols - ofs.x, wsz.height - src.rows - ofs.y);
CALL_HAL(boxFilter, cv_hal_boxFilter, sdepth, ddepth, src.ptr(), src.step, dst.ptr(), dst.step,
(CvSize)(ksize), (CvPoint)(anchor), normalize, borderType, margin, src.cols, src.rows, cn);
#ifdef HAVE_TEGRA_OPTIMIZATION
if ( tegra::useTegra() && tegra::box(src, dst, ksize, anchor, normalize, borderType) )
return;
#endif
CV_IPP_RUN_FAST(ipp_boxfilter(src, dst, ksize, anchor, normalize, borderType));
Ptr<FilterEngine> f = createBoxFilter( src.type(), dst.type(),
ksize, anchor, normalize, borderType );

Loading…
Cancel
Save