diff --git a/openbr/plugins/cuda/MatManager.cu b/openbr/plugins/cuda/MatManager.cu index 41d1137..510dda3 100644 --- a/openbr/plugins/cuda/MatManager.cu +++ b/openbr/plugins/cuda/MatManager.cu @@ -41,7 +41,7 @@ namespace br { namespace cuda { sem_init(_matSemaphore, 0, _numMats); } - MatManager::matindex MatManager::reserve(Mat *mat) { + MatManager::matindex MatManager::reserve(Mat &mat) { int reservedMatIndex = 0; //std::cout << "Reserving" << std::endl << std::flush; @@ -66,16 +66,11 @@ namespace br { namespace cuda { // reallocate if size does not match pthread_mutex_lock(_matsDimensionLock); - if (*_matsDimension[reservedMatIndex] != mat->rows * mat->cols) { - //printSizeChangingMat(reservedMat); - //reservedMat->release(); - //reservedMat->create(mat->size(), mat->type()); - //std::cout << "Size mismatch" << std::endl << std::flush; - // re malloc + if (*_matsDimension[reservedMatIndex] != mat.rows * mat.cols) { cudaFree(_mats[reservedMatIndex]); // free the previous memory first - cudaMalloc(&_mats[reservedMatIndex], mat->rows * mat->cols * sizeof(uint8_t)); + cudaMalloc(&_mats[reservedMatIndex], mat.rows * mat.cols * sizeof(uint8_t)); // change the dimension of that matrix - *_matsDimension[reservedMatIndex] = mat->rows * mat->cols; + *_matsDimension[reservedMatIndex] = mat.rows * mat.cols; } pthread_mutex_unlock(_matsDimensionLock); diff --git a/openbr/plugins/cuda/MatManager.hpp b/openbr/plugins/cuda/MatManager.hpp index b7713eb..2731d7b 100644 --- a/openbr/plugins/cuda/MatManager.hpp +++ b/openbr/plugins/cuda/MatManager.hpp @@ -28,7 +28,7 @@ namespace br { namespace cuda { typedef int matindex; MatManager(int num); - int reserve(Mat *mat); + int reserve(Mat &mat); void upload(matindex reservedMatIndex, Mat& mat); void download(matindex reservedMatIndex, Mat& dstMat); void release(matindex matIndex); diff --git a/openbr/plugins/cuda/cudalbp.cpp b/openbr/plugins/cuda/cudalbp.cpp index d7756a8..fd85f43 100644 --- a/openbr/plugins/cuda/cudalbp.cpp +++ b/openbr/plugins/cuda/cudalbp.cpp @@ -156,13 +156,13 @@ class CUDALBPTransform : public UntrainableTransform Mat& m = (Mat&)src.m(); cuda::MatManager::matindex a; cuda::MatManager::matindex b; - a = matManager->reserve(&m); + a = matManager->reserve(m); // std::cout << "m: " << m.size() << ", " << m.type() << std::endl << std::flush; // std::cout << "a: " << a->size() << ", " << a->type() << std::endl << std::flush; matManager->upload(a, m); // reserve the second mat and check the dimensiosn - b = matManager->reserve(&m); + b = matManager->reserve(m); //matManager->matchDimensions(b, a); //std::cout << "Coming to here" << std::endl << std::flush;