int ddepth = CV_MAT_DEPTH(dtype);
int sdepth = CV_MAT_DEPTH(stype);
+#if IPP_VERSION_X100 >= 201700 && IPP_VERSION_X100 < 201702 // IPP bug with 1x1 kernel
+ if(kernel_width == 1 && kernel_height == 1)
+ return false;
+#endif
+
bool runIpp = true
&& (borderTypeNI == BORDER_CONSTANT || borderTypeNI == BORDER_REPLICATE)
&& (sdepth == ddepth)
}
#ifdef HAVE_IPP
- if (kernel_type == CV_32FC1) {
- IppFilter<CV_32F>* impl = new IppFilter<CV_32F>();
- if (impl->init(kernel_data, kernel_step, kernel_type, kernel_width, kernel_height,
- max_width, max_height, stype, dtype,
- borderType, delta, anchor_x, anchor_y, isSubmatrix, isInplace))
- {
- return Ptr<hal::Filter2D>(impl);
+ CV_IPP_CHECK()
+ {
+ if (kernel_type == CV_32FC1) {
+ IppFilter<CV_32F>* impl = new IppFilter<CV_32F>();
+ if (impl->init(kernel_data, kernel_step, kernel_type, kernel_width, kernel_height,
+ max_width, max_height, stype, dtype,
+ borderType, delta, anchor_x, anchor_y, isSubmatrix, isInplace))
+ {
+ return Ptr<hal::Filter2D>(impl);
+ }
+ delete impl;
}
- delete impl;
- }
- if (kernel_type == CV_16SC1) {
- IppFilter<CV_16S>* impl = new IppFilter<CV_16S>();
- if (impl->init(kernel_data, kernel_step, kernel_type, kernel_width, kernel_height,
- max_width, max_height, stype, dtype,
- borderType, delta, anchor_x, anchor_y, isSubmatrix, isInplace))
- {
- return Ptr<hal::Filter2D>(impl);
+ if (kernel_type == CV_16SC1) {
+ IppFilter<CV_16S>* impl = new IppFilter<CV_16S>();
+ if (impl->init(kernel_data, kernel_step, kernel_type, kernel_width, kernel_height,
+ max_width, max_height, stype, dtype,
+ borderType, delta, anchor_x, anchor_y, isSubmatrix, isInplace))
+ {
+ return Ptr<hal::Filter2D>(impl);
+ }
+ delete impl;
}
- delete impl;
}
#endif