Commit 7f5c5a5ad6d59db09b253e8177d280fce438ed21

Authored by DepthDeluxe
1 parent a2eadb17

added templating for copyto and copyfrom for multiple image types

openbr/plugins/cuda/copyfrom.cpp
... ... @@ -10,8 +10,7 @@ using namespace cv;
10 10  
11 11 // extern CUDA declaration
12 12 namespace br { namespace cuda { namespace cudacopyfrom {
13   - //template <typename T> void wrapper(void* src, T* out, int rows, int cols) {
14   - void wrapper(void* src, float* out, const int rows, const int cols);
  13 + template <typename T> void wrapper(void* src, T* out, int rows, int cols);
15 14 }}}
16 15  
17 16 namespace br
... ... @@ -32,26 +31,21 @@ private:
32 31 int cols = *((int*)dataPtr[2]);
33 32 int type = *((int*)dataPtr[3]);
34 33  
35   - if (type != CV_32FC1) {
36   - cout << "ERR: Invalid data type!" << endl;
37   - return;
38   - }
39   -
40   - cout << "cudaMemPtr: " << cudaMemPtr << endl;
41   - cout << "rows: " << rows << endl;
42   - cout << "cols: " << cols << endl;
43   - cout << "type: " << type << endl;
44   -
45 34 Mat dstMat = Mat(rows, cols, type);
46   - br::cuda::cudacopyfrom::wrapper(cudaMemPtr, dstMat.ptr<float>(), rows, cols);
  35 + switch(type) {
  36 + case CV_32FC1:
  37 + br::cuda::cudacopyfrom::wrapper(cudaMemPtr, dstMat.ptr<float>(), rows, cols);
  38 + break;
  39 + case CV_8UC1:
  40 + br::cuda::cudacopyfrom::wrapper(cudaMemPtr, dstMat.ptr<unsigned char>(), rows, cols);
  41 + break;
  42 + default:
  43 + cout << "ERR: Invalid image format" << endl;
  44 + break;
  45 + }
47 46 dst = dstMat;
48 47  
49 48 cout << "CUDACopyFrom End" << endl;
50   -
51   - cout << "DST Data" << endl;
52   - cout << "rows: " << dstMat.rows << endl;
53   - cout << "cols: " << dstMat.cols << endl;
54   - cout << "type: " << dstMat.type() << endl;
55 49 }
56 50 };
57 51  
... ...
openbr/plugins/cuda/copyfrom.cu
1 1 namespace br { namespace cuda { namespace cudacopyfrom {
2   - //template <typename T> void wrapper(void* src, T* out, int rows, int cols) {
3   - void wrapper(void* src, float* dst, const int rows, const int cols) {
4   - cudaMemcpy(dst, src, rows*cols*sizeof(float), cudaMemcpyDeviceToHost);
  2 + template <typename T> void wrapper(void* src, T* dst, int rows, int cols) {
  3 + cudaMemcpy(dst, src, rows*cols*sizeof(T), cudaMemcpyDeviceToHost);
5 4 cudaFree(src);
6 5 }
  6 +
  7 + template void wrapper(void*, float*, int, int);
  8 + template void wrapper(void*, unsigned char*, int, int);
7 9 }}}
... ...
openbr/plugins/cuda/copyto.cpp
... ... @@ -11,9 +11,7 @@ using namespace cv;
11 11 extern string type2str(int type);
12 12  
13 13 namespace br { namespace cuda { namespace cudacopyto {
14   - //template<typename T>
15   - //void wrapper(const T* in, void** out, const int rows, const int cols);
16   - void wrapper(const unsigned char* in, void** out, const int rows, const int cols);
  14 + template <typename T> void wrapper(const T* in, void** out, const int rows, const int cols);
17 15 }}}
18 16  
19 17 namespace br
... ... @@ -31,11 +29,10 @@ private:
31 29  
32 30 void* cudaMemPtr;
33 31 switch(srcMat.type()) {
34   - //case CV_32FC1:
35   - // br::cuda::cudacopyfrom::wrapper<float>(srcMat.ptr<float>(), &cudaMemPtr, rows, cols);
36   - // break;
  32 + case CV_32FC1:
  33 + br::cuda::cudacopyto::wrapper(srcMat.ptr<float>(), &cudaMemPtr, rows, cols);
  34 + break;
37 35 case CV_8UC1:
38   - //br::cuda::cudacopyfrom::wrapper<unsigned char>(srcMat.ptr<unsigned char>(), &cudaMemPtr, rows, cols);
39 36 br::cuda::cudacopyto::wrapper(srcMat.ptr<unsigned char>(), &cudaMemPtr, rows, cols);
40 37 break;
41 38 default:
... ...
openbr/plugins/cuda/copyto.cu
1 1 namespace br { namespace cuda { namespace cudacopyto {
2   - //template<typename T>
3   - //void wrapper(const T* in, void** out, const int rows, const int cols) {
4   - void wrapper(const unsigned char* in, void** out, const int rows, const int cols) {
5   - cudaMalloc(out, rows*cols*sizeof(unsigned char));
6   - cudaMemcpy(*out, in, rows*cols*sizeof(unsigned char), cudaMemcpyHostToDevice);
  2 + template <typename T> void wrapper(const T* in, void** out, const int rows, const int cols) {
  3 + cudaMalloc(out, rows*cols*sizeof(T));
  4 + cudaMemcpy(*out, in, rows*cols*sizeof(T), cudaMemcpyHostToDevice);
7 5 }
  6 +
  7 + template void wrapper(const float* in, void** out, const int rows, const int cols);
  8 + template void wrapper(const unsigned char* in, void** out, const int rows, const int cols);
8 9 }}}
... ...