Commit 00e7816c authored by Vladislav Vinogradov's avatar Vladislav Vinogradov

add auxiliary functions to work with Input/Output arrays:

they allow to perform asynchronous upload/download into temporary buffer
to get valid GpuMat object
parent 61991a33
...@@ -106,6 +106,16 @@ namespace cv { namespace cuda ...@@ -106,6 +106,16 @@ namespace cv { namespace cuda
GpuMat::Allocator* allocator_; GpuMat::Allocator* allocator_;
}; };
CV_EXPORTS GpuMat getInputMat(InputArray _src, Stream& stream);
CV_EXPORTS GpuMat getOutputMat(OutputArray _dst, int rows, int cols, int type, Stream& stream);
static inline GpuMat getOutputMat(OutputArray _dst, Size size, int type, Stream& stream)
{
return getOutputMat(_dst, size.height, size.width, type, stream);
}
CV_EXPORTS void syncOutput(const GpuMat& dst, OutputArray _dst, Stream& stream);
static inline void checkNppError(int code, const char* file, const int line, const char* func) static inline void checkNppError(int code, const char* file, const int line, const char* func)
{ {
if (code < 0) if (code < 0)
......
...@@ -342,6 +342,53 @@ void cv::cuda::ensureSizeIsEnough(int rows, int cols, int type, OutputArray arr) ...@@ -342,6 +342,53 @@ void cv::cuda::ensureSizeIsEnough(int rows, int cols, int type, OutputArray arr)
} }
} }
GpuMat cv::cuda::getInputMat(InputArray _src, Stream& stream)
{
GpuMat src;
if (_src.kind() == _InputArray::CUDA_GPU_MAT)
{
src = _src.getGpuMat();
}
else if (!_src.empty())
{
BufferPool pool(stream);
src = pool.getBuffer(_src.size(), _src.type());
src.upload(_src, stream);
}
return src;
}
GpuMat cv::cuda::getOutputMat(OutputArray _dst, int rows, int cols, int type, Stream& stream)
{
GpuMat dst;
if (_dst.kind() == _InputArray::CUDA_GPU_MAT)
{
_dst.create(rows, cols, type);
dst = _dst.getGpuMat();
}
else
{
BufferPool pool(stream);
dst = pool.getBuffer(rows, cols, type);
}
return dst;
}
void cv::cuda::syncOutput(const GpuMat& dst, OutputArray _dst, Stream& stream)
{
if (_dst.kind() != _InputArray::CUDA_GPU_MAT)
{
if (stream)
dst.download(_dst, stream);
else
dst.download(_dst);
}
}
#ifndef HAVE_CUDA #ifndef HAVE_CUDA
GpuMat::Allocator* cv::cuda::GpuMat::defaultAllocator() GpuMat::Allocator* cv::cuda::GpuMat::defaultAllocator()
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment