add auxiliary functions to work with Input/Output arrays:
they allow to perform asynchronous upload/download into temporary buffer to get valid GpuMat object
This commit is contained in:
parent
61991a3330
commit
00e7816c1b
@ -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)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
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()
|
||||||
|
Loading…
x
Reference in New Issue
Block a user