Looks like something automatically added tabs back in after I already fixed the white space. :/

This commit is contained in:
Dan 2015-09-28 09:37:10 -04:00
parent 3efe131480
commit e4184195a2

View File

@ -7,46 +7,46 @@
#include <thrust/device_ptr.h> #include <thrust/device_ptr.h>
/* /*
@Brief step_functor is an object to correctly step a thrust iterator according to the stride of a matrix @Brief step_functor is an object to correctly step a thrust iterator according to the stride of a matrix
*/ */
//! [step_functor] //! [step_functor]
template<typename T> struct step_functor : public thrust::unary_function<int, int> template<typename T> struct step_functor : public thrust::unary_function<int, int>
{ {
int columns; int columns;
int step; int step;
int channels; int channels;
__host__ __device__ step_functor(int columns_, int step_, int channels_ = 1) : columns(columns_), step(step_), channels(channels_) { }; __host__ __device__ step_functor(int columns_, int step_, int channels_ = 1) : columns(columns_), step(step_), channels(channels_) { };
__host__ step_functor(cv::cuda::GpuMat& mat) __host__ step_functor(cv::cuda::GpuMat& mat)
{ {
CV_Assert(mat.depth() == cv::DataType<T>::depth); CV_Assert(mat.depth() == cv::DataType<T>::depth);
columns = mat.cols; columns = mat.cols;
step = mat.step / sizeof(T); step = mat.step / sizeof(T);
channels = mat.channels(); channels = mat.channels();
} }
__host__ __device__ __host__ __device__
int operator()(int x) const int operator()(int x) const
{ {
int row = x / columns; int row = x / columns;
int idx = (row * step) + (x % columns)*channels; int idx = (row * step) + (x % columns)*channels;
return idx; return idx;
} }
}; };
//! [step_functor] //! [step_functor]
//! [begin_itr] //! [begin_itr]
/* /*
@Brief GpuMatBeginItr returns a thrust compatible iterator to the beginning of a GPU mat's memory. @Brief GpuMatBeginItr returns a thrust compatible iterator to the beginning of a GPU mat's memory.
@Param mat is the input matrix @Param mat is the input matrix
@Param channel is the channel of the matrix that the iterator is accessing. If set to -1, the iterator will access every element in sequential order @Param channel is the channel of the matrix that the iterator is accessing. If set to -1, the iterator will access every element in sequential order
*/ */
template<typename T> template<typename T>
thrust::permutation_iterator<thrust::device_ptr<T>, thrust::transform_iterator<step_functor<T>, thrust::counting_iterator<int>>> GpuMatBeginItr(cv::cuda::GpuMat mat, int channel = 0) thrust::permutation_iterator<thrust::device_ptr<T>, thrust::transform_iterator<step_functor<T>, thrust::counting_iterator<int>>> GpuMatBeginItr(cv::cuda::GpuMat mat, int channel = 0)
{ {
if (channel == -1) if (channel == -1)
mat = mat.reshape(1); mat = mat.reshape(1);
CV_Assert(mat.depth() == cv::DataType<T>::depth); CV_Assert(mat.depth() == cv::DataType<T>::depth);
CV_Assert(channel < mat.channels()); CV_Assert(channel < mat.channels());
return thrust::make_permutation_iterator(thrust::device_pointer_cast(mat.ptr<T>(0) + channel), return thrust::make_permutation_iterator(thrust::device_pointer_cast(mat.ptr<T>(0) + channel),
thrust::make_transform_iterator(thrust::make_counting_iterator(0), step_functor<T>(mat.cols, mat.step / sizeof(T), mat.channels()))); thrust::make_transform_iterator(thrust::make_counting_iterator(0), step_functor<T>(mat.cols, mat.step / sizeof(T), mat.channels())));
} }
//! [begin_itr] //! [begin_itr]
//! [end_itr] //! [end_itr]
@ -58,11 +58,11 @@ thrust::permutation_iterator<thrust::device_ptr<T>, thrust::transform_iterator<s
template<typename T> template<typename T>
thrust::permutation_iterator<thrust::device_ptr<T>, thrust::transform_iterator<step_functor<T>, thrust::counting_iterator<int>>> GpuMatEndItr(cv::cuda::GpuMat mat, int channel = 0) thrust::permutation_iterator<thrust::device_ptr<T>, thrust::transform_iterator<step_functor<T>, thrust::counting_iterator<int>>> GpuMatEndItr(cv::cuda::GpuMat mat, int channel = 0)
{ {
if (channel == -1) if (channel == -1)
mat = mat.reshape(1); mat = mat.reshape(1);
CV_Assert(mat.depth() == cv::DataType<T>::depth); CV_Assert(mat.depth() == cv::DataType<T>::depth);
CV_Assert(channel < mat.channels()); CV_Assert(channel < mat.channels());
return thrust::make_permutation_iterator(thrust::device_pointer_cast(mat.ptr<T>(0) + channel), return thrust::make_permutation_iterator(thrust::device_pointer_cast(mat.ptr<T>(0) + channel),
thrust::make_transform_iterator(thrust::make_counting_iterator(mat.rows*mat.cols), step_functor<T>(mat.cols, mat.step / sizeof(T), mat.channels()))); thrust::make_transform_iterator(thrust::make_counting_iterator(mat.rows*mat.cols), step_functor<T>(mat.cols, mat.step / sizeof(T), mat.channels())));
} }
//! [end_itr] //! [end_itr]