Commit 699ab0b0d58a813f4625059ca1ee1cc5aedb6b57

Authored by boolli
1 parent 4e59b2b5

Add kernel function but it's not working

openbr/plugins/cuda/copyfrom.cpp
... ... @@ -36,6 +36,9 @@ private:
36 36 case CV_8UC1:
37 37 br::cuda::cudacopyfrom::wrapper(dataPtr[0], dstMat.ptr<unsigned char>(), rows, cols);
38 38 break;
  39 + case CV_8UC3:
  40 + br::cuda::cudacopyfrom::wrapper(dataPtr[0], dstMat.ptr<unsigned char>(), rows, cols * 3);
  41 + break;
39 42 default:
40 43 cout << "ERR: Invalid image format" << endl;
41 44 break;
... ...
openbr/plugins/cuda/copyto.cpp
... ... @@ -25,7 +25,10 @@ private:
25 25 {
26 26 const Mat& srcMat = src.m();
27 27 const int rows = srcMat.rows;
28   - const int cols = srcMat.cols;
  28 + const int cols = srcMat.cols;
  29 +std::cout << "CopyTo" << std::endl;
  30 + std::cout << "rows: " << rows << std::endl;
  31 + std::cout << "cols: " << cols << std::endl;
29 32  
30 33 // output will be a single pointer to graphics card memory
31 34 Mat dstMat = Mat(4, 1, DataType<void*>::type);
... ... @@ -44,6 +47,9 @@ private:
44 47 case CV_8UC1:
45 48 br::cuda::cudacopyto::wrapper(srcMat.ptr<unsigned char>(), &dstMatData[0], rows, cols);
46 49 break;
  50 + case CV_8UC3:
  51 + br::cuda::cudacopyto::wrapper(srcMat.ptr<unsigned char>(), &dstMatData[0], rows, 3*cols);
  52 + break;
47 53 default:
48 54 cout << "ERR: Invalid image type! " << type2str(srcMat.type()) << endl;
49 55 return;
... ...
openbr/plugins/cuda/cudacvt.cpp 0 → 100644
  1 +/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  2 + * Copyright 2012 The MITRE Corporation *
  3 + * *
  4 + * Licensed under the Apache License, Version 2.0 (the "License"); *
  5 + * you may not use this file except in compliance with the License. *
  6 + * You may obtain a copy of the License at *
  7 + * *
  8 + * http://www.apache.org/licenses/LICENSE-2.0 *
  9 + * *
  10 + * Unless required by applicable law or agreed to in writing, software *
  11 + * distributed under the License is distributed on an "AS IS" BASIS, *
  12 + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. *
  13 + * See the License for the specific language governing permissions and *
  14 + * limitations under the License. *
  15 + * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
  16 +
  17 +#include <iostream>
  18 +#include <opencv2/imgproc/imgproc.hpp>
  19 +
  20 +#include <openbr/plugins/openbr_internal.h>
  21 +#include <openbr/core/opencvutils.h>
  22 +#include <thrust/host_vector.h>
  23 +#include <thrust/device_vector.h>
  24 +
  25 +
  26 +using namespace cv;
  27 +
  28 +namespace br { namespace cuda{
  29 + void cudacvt_wrapper(void* srcPtr, void**dstPtr, int rows, int cols);
  30 +}}
  31 +
  32 +namespace br
  33 +{
  34 +
  35 +/*!
  36 + * \ingroup transforms
  37 + * \brief Colorspace conversion.
  38 + * \author Li Li \cite Josh Klontz \cite jklontz
  39 + */
  40 +class CUDACvtTransform : public UntrainableTransform
  41 +{
  42 + Q_OBJECT
  43 + Q_ENUMS(ColorSpace)
  44 + Q_PROPERTY(ColorSpace colorSpace READ get_colorSpace WRITE set_colorSpace RESET reset_colorSpace STORED false)
  45 + Q_PROPERTY(int channel READ get_channel WRITE set_channel RESET reset_channel STORED false)
  46 +
  47 +public:
  48 + enum ColorSpace { Gray = CV_BGR2GRAY,
  49 + RGBGray = CV_RGB2GRAY,
  50 + HLS = CV_BGR2HLS,
  51 + HSV = CV_BGR2HSV,
  52 + Lab = CV_BGR2Lab,
  53 + Luv = CV_BGR2Luv,
  54 + RGB = CV_BGR2RGB,
  55 + XYZ = CV_BGR2XYZ,
  56 + YCrCb = CV_BGR2YCrCb,
  57 + Color = CV_GRAY2BGR };
  58 +
  59 +private:
  60 + BR_PROPERTY(ColorSpace, colorSpace, Gray)
  61 + BR_PROPERTY(int, channel, -1)
  62 +
  63 + void project(const Template &src, Template &dst) const
  64 + {
  65 + void* const* srcDataPtr = src.m().ptr<void*>();
  66 + int rows = *((int*) srcDataPtr[1]);
  67 + int cols = *((int*) srcDataPtr[2]);
  68 + int type = *((int*) srcDataPtr[3]);
  69 + std::cout << "CVT" << std::endl;
  70 + std::cout << "rows: " << rows << std::endl;
  71 + std::cout << "cols: " << cols << std::endl;
  72 +
  73 + Mat dstMat = Mat(src.m().rows, src.m().cols, CV_8UC1);
  74 + void** dstDataPtr = dstMat.ptr<void*>();
  75 + dstDataPtr[1] = srcDataPtr[1];
  76 + dstDataPtr[2] = srcDataPtr[2];
  77 + dstDataPtr[3] = srcDataPtr[3];
  78 + *((int*)dstDataPtr[3]) = CV_8UC1; // not sure if the type of the new mat is the same
  79 +
  80 + br::cuda::cudacvt_wrapper(srcDataPtr[0], &dstDataPtr[0], rows, cols);
  81 + dst = dstMat;
  82 +
  83 + /*
  84 + if (src.m().channels() > 1 || colorSpace == Color) cvtColor(src, dst, colorSpace);
  85 + else dst = src;
  86 +
  87 + if (channel != -1) {
  88 + std::vector<Mat> mv;
  89 + split(dst, mv);
  90 + dst = mv[channel % (int)mv.size()];
  91 + } */
  92 + }
  93 +};
  94 +
  95 +BR_REGISTER(Transform, CUDACvtTransform)
  96 +
  97 +} // namespace br
  98 +
  99 +#include "imgproc/cudacvt.moc"
... ...
openbr/plugins/cuda/cudacvt.cu 0 → 100644
  1 +#include <stdio.h>
  2 +#include <iostream>
  3 +#include <opencv2/opencv.hpp>
  4 +#include <opencv2/gpu/gpu.hpp>
  5 +#include "cudadefines.hpp"
  6 +#include <opencv2/imgproc/imgproc.hpp>
  7 +#include <opencv2/imgproc/imgproc_c.h>
  8 +#include <opencv2/highgui/highgui.hpp>
  9 +#include <opencv2/highgui/highgui_c.h>
  10 +
  11 +using namespace std;
  12 +using namespace cv;
  13 +using namespace cv::gpu;
  14 +
  15 +namespace br{ namespace cuda {
  16 +
  17 + __global__ void cudacvt_kernel(uint8_t* srcPtr, uint8_t* dstPtr, int rows, int cols)
  18 + {
  19 + int rowInd = blockIdx.y*blockDim.y+threadIdx.y;
  20 + int colInd = blockIdx.x*blockDim.x+threadIdx.x;
  21 + int index = rowInd*cols + colInd;
  22 + if (rowInd < 1 || rowInd >= rows-1 || colInd < 1 || colInd >= cols-1) {
  23 + if (rowInd >= rows || colInd >= cols) {
  24 + return;
  25 + } else {
  26 + return;
  27 + }
  28 + }
  29 +
  30 + dstPtr[index] = 0;
  31 + return;
  32 + }
  33 +
  34 + void cudacvt_wrapper(void* srcPtr, void** dstPtr, int rows, int cols)
  35 + {
  36 + cudaError_t err;
  37 + dim3 threadsPerBlock(8, 8);
  38 + dim3 numBlocks(cols/threadsPerBlock.x + 1,
  39 + rows/threadsPerBlock.y + 1);
  40 + std::cout << "Before malloc" << std::endl;
  41 + CUDA_SAFE_MALLOC(dstPtr, rows*cols*sizeof(uint8_t), &err);
  42 + std::cout << "After malloc" << std::endl;
  43 +
  44 + //cudacvt_kernel<<<numBlocks, threadsPerBlock>>>((uint8_t*)srcPtr, (uint8_t*) (*dstPtr), rows, cols);
  45 + CUDA_KERNEL_ERR_CHK(&err);
  46 + CUDA_SAFE_FREE(srcPtr, &err);
  47 + }
  48 +
  49 +}}
... ...
openbr/plugins/cuda/cudadefines.hpp
... ... @@ -16,7 +16,7 @@ using namespace std;
16 16 cout << pthread_self() << ": CUDA Malloc Error(" << *errPtr << "): " << cudaGetErrorString(*errPtr) << endl; \
17 17 throw 0; \
18 18 } \
19   - /* cout << pthread_self() << ": CUDA Malloc: " << (void*)*(int**)cudaPtrPtr << endl; */;
  19 + cout << pthread_self() << ": CUDA Malloc: " << (void*)*(int**)cudaPtrPtr << endl;
20 20  
21 21 #define CUDA_SAFE_MEMCPY(dstPtr, srcPtr, count, kind, errPtr) \
22 22 *errPtr = cudaMemcpy(dstPtr, srcPtr, count, kind); \
... ...