updated BrdReflect101 in gpu module
authorAlexey Spizhevoy <no@email>
Fri, 3 Dec 2010 13:28:49 +0000 (13:28 +0000)
committerAlexey Spizhevoy <no@email>
Fri, 3 Dec 2010 13:28:49 +0000 (13:28 +0000)
modules/gpu/src/cuda/border_interpolate.hpp

index 26b19cb..7bfcf82 100644 (file)
@@ -53,12 +53,12 @@ namespace cv { namespace gpu {
 \r
         __device__ int idx_high(int i) const \r
         {\r
-            return last - abs(i - last);\r
+            return last - abs(last - i);\r
         }\r
 \r
         __device__ int idx(int i) const\r
         {\r
-            return i <= last ? idx_low(i) : idx_high(i);\r
+            return abs(idx_high(i));\r
         }\r
 \r
         bool is_range_safe(int mini, int maxi) const \r
@@ -105,4 +105,68 @@ namespace cv { namespace gpu {
         int step;\r
     };\r
 \r
+\r
+    struct BrdReplicate\r
+    {\r
+        BrdReplicate(int len) : last(len - 1) {}\r
+\r
+        __device__ int idx_low(int i) const\r
+        {\r
+            return max(i, 0);\r
+        }\r
+\r
+        __device__ int idx_high(int i) const \r
+        {\r
+            return min(i, last);\r
+        }\r
+\r
+        __device__ int idx(int i) const\r
+        {\r
+            return min(max(i, last), 0);\r
+        }\r
+\r
+        bool is_range_safe(int mini, int maxi) const \r
+        {\r
+            return true;\r
+        }\r
+\r
+        int last;\r
+    };\r
+\r
+\r
+    template <typename T>\r
+    struct BrdRowReplicate: BrdReplicate\r
+    {\r
+        BrdRowReplicate(int len) : BrdReplicate(len) {}\r
+\r
+        __device__ float at_low(int i, const T* data) const \r
+        {\r
+            return data[idx_low(i)];\r
+        }\r
+\r
+        __device__ float at_high(int i, const T* data) const \r
+        {\r
+            return data[idx_high(i)];\r
+        }\r
+    };\r
+\r
+\r
+    template <typename T>\r
+    struct BrdColReplicate: BrdReplicate\r
+    {\r
+        BrdColReplicate(int len, int step) : BrdReplicate(len), step(step) {}\r
+\r
+        __device__ float at_low(int i, const T* data) const \r
+        {\r
+            return data[idx_low(i) * step];\r
+        }\r
+\r
+        __device__ float at_high(int i, const T* data) const \r
+        {\r
+            return data[idx_high(i) * step];\r
+        }\r
+\r
+        int step;\r
+    };\r
+\r
 }}
\ No newline at end of file