fix bugs on host and device sides for imgprog_sobel3.cl
authorkonstantin <konstantin@mailserver.fake>
Sun, 27 Oct 2013 20:14:07 +0000 (00:14 +0400)
committerkonstantin <konstantin@mailserver.fake>
Sun, 27 Oct 2013 20:14:07 +0000 (00:14 +0400)
modules/ocl/src/imgproc.cpp
modules/ocl/src/opencl/imgproc_sobel3.cl

index f550ea5..31405ac 100644 (file)
@@ -908,7 +908,11 @@ namespace cv
                 Context* clCxt = Context::getContext();
                 if(clCxt->supportsFeature(FEATURE_CL_INTEL_DEVICE) && src.type() == CV_8UC1 &&
                     src.cols % 8 == 0 && src.rows % 8 == 0 &&
-                    ksize==3)
+                    ksize==3 &&
+                    (borderType ==cv::BORDER_REFLECT ||
+                     borderType == cv::BORDER_REPLICATE ||
+                     borderType ==cv::BORDER_REFLECT101 ||
+                     borderType ==cv::BORDER_WRAP))
                 {
                     Dx.create(src.size(), CV_32FC1);
                     Dy.create(src.size(), CV_32FC1);
index 0b27402..d6a995f 100644 (file)
@@ -55,11 +55,11 @@ __kernel void sobel3(
 
     lsmem[liy+1][lix+1] = convert_float(Src[ id_y * srcStride + id_x ]);
 
-    int id_y_h = ADDR_H(id_y-1, 0);
-    int id_y_b = ADDR_B(id_y+1, height);
+    int id_y_h = ADDR_H(id_y-1, 0,height);
+    int id_y_b = ADDR_B(id_y+1, height,id_y+1);
 
-    int id_x_l = ADDR_L(id_x-1, 0);
-    int id_x_r = ADDR_R(id_x+1, width);
+    int id_x_l = ADDR_L(id_x-1, 0,width);
+    int id_x_r = ADDR_R(id_x+1, width,id_x+1);
 
     if(liy==0)
     {