Commit df9c75b2 authored by mletavin's avatar mletavin

Moved new kernels under conditional compilation to disable their build for…

Moved new kernels under conditional compilation to disable their build for 3-channel images; added condition to use new kernels only for images that are big enough
parent 4a37ac30
...@@ -39,6 +39,10 @@ ...@@ -39,6 +39,10 @@
#define TSIZE (int)sizeof(T1) * cn #define TSIZE (int)sizeof(T1) * cn
#endif #endif
#define OP(a,b) { mid=a; a=min(a,b); b=max(mid,b);}
#ifdef USE_4OPT
//Utility macros for for 1,2,4 channel images: //Utility macros for for 1,2,4 channel images:
// - LOAD4/STORE4 - load/store 4-pixel groups from/to global memory // - LOAD4/STORE4 - load/store 4-pixel groups from/to global memory
...@@ -89,8 +93,6 @@ ...@@ -89,8 +93,6 @@
#endif #endif
#define OP(a,b) { mid=a; a=min(a,b); b=max(mid,b);}
__kernel void medianFilter3_u(__global const uchar* srcptr, int srcStep, int srcOffset, __kernel void medianFilter3_u(__global const uchar* srcptr, int srcStep, int srcOffset,
__global uchar* dstptr, int dstStep, int dstOffset, __global uchar* dstptr, int dstStep, int dstOffset,
int rows, int cols) int rows, int cols)
...@@ -274,6 +276,8 @@ __kernel void medianFilter5_u(__global const uchar* srcptr, int srcStep, int src ...@@ -274,6 +276,8 @@ __kernel void medianFilter5_u(__global const uchar* srcptr, int srcStep, int src
} }
} }
#endif
__kernel void medianFilter3(__global const uchar * srcptr, int src_step, int src_offset, __kernel void medianFilter3(__global const uchar * srcptr, int src_step, int src_offset,
__global uchar * dstptr, int dst_step, int dst_offset, int dst_rows, int dst_cols) __global uchar * dstptr, int dst_step, int dst_offset, int dst_rows, int dst_cols)
{ {
......
...@@ -2021,13 +2021,20 @@ static bool ocl_medianFilter(InputArray _src, OutputArray _dst, int m) ...@@ -2021,13 +2021,20 @@ static bool ocl_medianFilter(InputArray _src, OutputArray _dst, int m)
if ( !((depth == CV_8U || depth == CV_16U || depth == CV_16S || depth == CV_32F) && cn <= 4 && (m == 3 || m == 5)) ) if ( !((depth == CV_8U || depth == CV_16U || depth == CV_16S || depth == CV_32F) && cn <= 4 && (m == 3 || m == 5)) )
return false; return false;
bool useOptimized = (1 == cn) && (ocl::Device::getDefault().isIntel()); Size imgSize = _src.size();
bool useOptimized = (1 == cn) &&
imgSize.width >= localsize[0] * 8 &&
imgSize.height >= localsize[1] * 8 &&
(ocl::Device::getDefault().isIntel());
cv::String kname = format( useOptimized ? "medianFilter%d_u" : "medianFilter%d", m) ; cv::String kname = format( useOptimized ? "medianFilter%d_u" : "medianFilter%d", m) ;
cv::String kdefs = useOptimized ?
format("-D T=%s -D T1=%s -D T4=%s%d -D cn=%d -D USE_4OPT", ocl::typeToStr(type),
ocl::typeToStr(depth), ocl::typeToStr(depth), cn*4, cn)
:
format("-D T=%s -D T1=%s -D cn=%d", ocl::typeToStr(type), ocl::typeToStr(depth), cn) ;
ocl::Kernel k(kname.c_str(), ocl::imgproc::medianFilter_oclsrc, ocl::Kernel k(kname.c_str(), ocl::imgproc::medianFilter_oclsrc, kdefs.c_str() );
format("-D T=%s -D T1=%s -D T4=%s%d -D cn=%d", ocl::typeToStr(type),
ocl::typeToStr(depth), ocl::typeToStr(depth), cn*4, cn));
if (k.empty()) if (k.empty())
return false; return false;
......
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