Merge pull request #5480 from dtmoodie:vecgpumat
This commit is contained in:
commit
b4112a5878
@ -164,7 +164,8 @@ public:
|
|||||||
CUDA_GPU_MAT = 9 << KIND_SHIFT,
|
CUDA_GPU_MAT = 9 << KIND_SHIFT,
|
||||||
UMAT =10 << KIND_SHIFT,
|
UMAT =10 << KIND_SHIFT,
|
||||||
STD_VECTOR_UMAT =11 << KIND_SHIFT,
|
STD_VECTOR_UMAT =11 << KIND_SHIFT,
|
||||||
STD_BOOL_VECTOR =12 << KIND_SHIFT
|
STD_BOOL_VECTOR =12 << KIND_SHIFT,
|
||||||
|
STD_VECTOR_CUDA_GPU_MAT = 13 << KIND_SHIFT
|
||||||
};
|
};
|
||||||
|
|
||||||
_InputArray();
|
_InputArray();
|
||||||
@ -181,6 +182,7 @@ public:
|
|||||||
template<typename _Tp, int m, int n> _InputArray(const Matx<_Tp, m, n>& matx);
|
template<typename _Tp, int m, int n> _InputArray(const Matx<_Tp, m, n>& matx);
|
||||||
_InputArray(const double& val);
|
_InputArray(const double& val);
|
||||||
_InputArray(const cuda::GpuMat& d_mat);
|
_InputArray(const cuda::GpuMat& d_mat);
|
||||||
|
_InputArray(const std::vector<cuda::GpuMat>& d_mat_array);
|
||||||
_InputArray(const ogl::Buffer& buf);
|
_InputArray(const ogl::Buffer& buf);
|
||||||
_InputArray(const cuda::HostMem& cuda_mem);
|
_InputArray(const cuda::HostMem& cuda_mem);
|
||||||
template<typename _Tp> _InputArray(const cudev::GpuMat_<_Tp>& m);
|
template<typename _Tp> _InputArray(const cudev::GpuMat_<_Tp>& m);
|
||||||
@ -192,6 +194,7 @@ public:
|
|||||||
UMat getUMat(int idx=-1) const;
|
UMat getUMat(int idx=-1) const;
|
||||||
void getMatVector(std::vector<Mat>& mv) const;
|
void getMatVector(std::vector<Mat>& mv) const;
|
||||||
void getUMatVector(std::vector<UMat>& umv) const;
|
void getUMatVector(std::vector<UMat>& umv) const;
|
||||||
|
void getGpuMatVector(std::vector<cuda::GpuMat>& gpumv) const;
|
||||||
cuda::GpuMat getGpuMat() const;
|
cuda::GpuMat getGpuMat() const;
|
||||||
ogl::Buffer getOGlBuffer() const;
|
ogl::Buffer getOGlBuffer() const;
|
||||||
|
|
||||||
@ -223,7 +226,7 @@ public:
|
|||||||
bool isUMatVector() const;
|
bool isUMatVector() const;
|
||||||
bool isMatx() const;
|
bool isMatx() const;
|
||||||
bool isVector() const;
|
bool isVector() const;
|
||||||
|
bool isGpuMatVector() const;
|
||||||
~_InputArray();
|
~_InputArray();
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
@ -283,6 +286,7 @@ public:
|
|||||||
_OutputArray(Mat& m);
|
_OutputArray(Mat& m);
|
||||||
_OutputArray(std::vector<Mat>& vec);
|
_OutputArray(std::vector<Mat>& vec);
|
||||||
_OutputArray(cuda::GpuMat& d_mat);
|
_OutputArray(cuda::GpuMat& d_mat);
|
||||||
|
_OutputArray(std::vector<cuda::GpuMat>& d_mat);
|
||||||
_OutputArray(ogl::Buffer& buf);
|
_OutputArray(ogl::Buffer& buf);
|
||||||
_OutputArray(cuda::HostMem& cuda_mem);
|
_OutputArray(cuda::HostMem& cuda_mem);
|
||||||
template<typename _Tp> _OutputArray(cudev::GpuMat_<_Tp>& m);
|
template<typename _Tp> _OutputArray(cudev::GpuMat_<_Tp>& m);
|
||||||
@ -299,6 +303,7 @@ public:
|
|||||||
_OutputArray(const Mat& m);
|
_OutputArray(const Mat& m);
|
||||||
_OutputArray(const std::vector<Mat>& vec);
|
_OutputArray(const std::vector<Mat>& vec);
|
||||||
_OutputArray(const cuda::GpuMat& d_mat);
|
_OutputArray(const cuda::GpuMat& d_mat);
|
||||||
|
_OutputArray(const std::vector<cuda::GpuMat>& d_mat);
|
||||||
_OutputArray(const ogl::Buffer& buf);
|
_OutputArray(const ogl::Buffer& buf);
|
||||||
_OutputArray(const cuda::HostMem& cuda_mem);
|
_OutputArray(const cuda::HostMem& cuda_mem);
|
||||||
template<typename _Tp> _OutputArray(const cudev::GpuMat_<_Tp>& m);
|
template<typename _Tp> _OutputArray(const cudev::GpuMat_<_Tp>& m);
|
||||||
@ -317,6 +322,7 @@ public:
|
|||||||
Mat& getMatRef(int i=-1) const;
|
Mat& getMatRef(int i=-1) const;
|
||||||
UMat& getUMatRef(int i=-1) const;
|
UMat& getUMatRef(int i=-1) const;
|
||||||
cuda::GpuMat& getGpuMatRef() const;
|
cuda::GpuMat& getGpuMatRef() const;
|
||||||
|
std::vector<cuda::GpuMat>& getGpuMatVecRef() const;
|
||||||
ogl::Buffer& getOGlBufferRef() const;
|
ogl::Buffer& getOGlBufferRef() const;
|
||||||
cuda::HostMem& getHostMemRef() const;
|
cuda::HostMem& getHostMemRef() const;
|
||||||
void create(Size sz, int type, int i=-1, bool allowTransposed=false, int fixedDepthMask=0) const;
|
void create(Size sz, int type, int i=-1, bool allowTransposed=false, int fixedDepthMask=0) const;
|
||||||
@ -356,6 +362,7 @@ public:
|
|||||||
_InputOutputArray(const Mat& m);
|
_InputOutputArray(const Mat& m);
|
||||||
_InputOutputArray(const std::vector<Mat>& vec);
|
_InputOutputArray(const std::vector<Mat>& vec);
|
||||||
_InputOutputArray(const cuda::GpuMat& d_mat);
|
_InputOutputArray(const cuda::GpuMat& d_mat);
|
||||||
|
_InputOutputArray(const std::vector<cuda::GpuMat>& d_mat);
|
||||||
_InputOutputArray(const ogl::Buffer& buf);
|
_InputOutputArray(const ogl::Buffer& buf);
|
||||||
_InputOutputArray(const cuda::HostMem& cuda_mem);
|
_InputOutputArray(const cuda::HostMem& cuda_mem);
|
||||||
template<typename _Tp> _InputOutputArray(const cudev::GpuMat_<_Tp>& m);
|
template<typename _Tp> _InputOutputArray(const cudev::GpuMat_<_Tp>& m);
|
||||||
|
@ -110,6 +110,9 @@ inline _InputArray::_InputArray(const MatExpr& expr)
|
|||||||
inline _InputArray::_InputArray(const cuda::GpuMat& d_mat)
|
inline _InputArray::_InputArray(const cuda::GpuMat& d_mat)
|
||||||
{ init(CUDA_GPU_MAT + ACCESS_READ, &d_mat); }
|
{ init(CUDA_GPU_MAT + ACCESS_READ, &d_mat); }
|
||||||
|
|
||||||
|
inline _InputArray::_InputArray(const std::vector<cuda::GpuMat>& d_mat)
|
||||||
|
{ init(STD_VECTOR_CUDA_GPU_MAT + ACCESS_READ, &d_mat);}
|
||||||
|
|
||||||
inline _InputArray::_InputArray(const ogl::Buffer& buf)
|
inline _InputArray::_InputArray(const ogl::Buffer& buf)
|
||||||
{ init(OPENGL_BUFFER + ACCESS_READ, &buf); }
|
{ init(OPENGL_BUFFER + ACCESS_READ, &buf); }
|
||||||
|
|
||||||
@ -131,6 +134,7 @@ inline bool _InputArray::isMatVector() const { return kind() == _InputArray::STD
|
|||||||
inline bool _InputArray::isUMatVector() const { return kind() == _InputArray::STD_VECTOR_UMAT; }
|
inline bool _InputArray::isUMatVector() const { return kind() == _InputArray::STD_VECTOR_UMAT; }
|
||||||
inline bool _InputArray::isMatx() const { return kind() == _InputArray::MATX; }
|
inline bool _InputArray::isMatx() const { return kind() == _InputArray::MATX; }
|
||||||
inline bool _InputArray::isVector() const { return kind() == _InputArray::STD_VECTOR || kind() == _InputArray::STD_BOOL_VECTOR; }
|
inline bool _InputArray::isVector() const { return kind() == _InputArray::STD_VECTOR || kind() == _InputArray::STD_BOOL_VECTOR; }
|
||||||
|
inline bool _InputArray::isGpuMatVector() const { return kind() == _InputArray::STD_VECTOR_CUDA_GPU_MAT; }
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
@ -196,6 +200,9 @@ _OutputArray::_OutputArray(const _Tp* vec, int n)
|
|||||||
inline _OutputArray::_OutputArray(cuda::GpuMat& d_mat)
|
inline _OutputArray::_OutputArray(cuda::GpuMat& d_mat)
|
||||||
{ init(CUDA_GPU_MAT + ACCESS_WRITE, &d_mat); }
|
{ init(CUDA_GPU_MAT + ACCESS_WRITE, &d_mat); }
|
||||||
|
|
||||||
|
inline _OutputArray::_OutputArray(std::vector<cuda::GpuMat>& d_mat)
|
||||||
|
{ init(STD_VECTOR_CUDA_GPU_MAT + ACCESS_WRITE, &d_mat);}
|
||||||
|
|
||||||
inline _OutputArray::_OutputArray(ogl::Buffer& buf)
|
inline _OutputArray::_OutputArray(ogl::Buffer& buf)
|
||||||
{ init(OPENGL_BUFFER + ACCESS_WRITE, &buf); }
|
{ init(OPENGL_BUFFER + ACCESS_WRITE, &buf); }
|
||||||
|
|
||||||
@ -217,6 +224,7 @@ inline _OutputArray::_OutputArray(const std::vector<UMat>& vec)
|
|||||||
inline _OutputArray::_OutputArray(const cuda::GpuMat& d_mat)
|
inline _OutputArray::_OutputArray(const cuda::GpuMat& d_mat)
|
||||||
{ init(FIXED_TYPE + FIXED_SIZE + CUDA_GPU_MAT + ACCESS_WRITE, &d_mat); }
|
{ init(FIXED_TYPE + FIXED_SIZE + CUDA_GPU_MAT + ACCESS_WRITE, &d_mat); }
|
||||||
|
|
||||||
|
|
||||||
inline _OutputArray::_OutputArray(const ogl::Buffer& buf)
|
inline _OutputArray::_OutputArray(const ogl::Buffer& buf)
|
||||||
{ init(FIXED_TYPE + FIXED_SIZE + OPENGL_BUFFER + ACCESS_WRITE, &buf); }
|
{ init(FIXED_TYPE + FIXED_SIZE + OPENGL_BUFFER + ACCESS_WRITE, &buf); }
|
||||||
|
|
||||||
@ -306,6 +314,8 @@ inline _InputOutputArray::_InputOutputArray(const std::vector<UMat>& vec)
|
|||||||
|
|
||||||
inline _InputOutputArray::_InputOutputArray(const cuda::GpuMat& d_mat)
|
inline _InputOutputArray::_InputOutputArray(const cuda::GpuMat& d_mat)
|
||||||
{ init(FIXED_TYPE + FIXED_SIZE + CUDA_GPU_MAT + ACCESS_RW, &d_mat); }
|
{ init(FIXED_TYPE + FIXED_SIZE + CUDA_GPU_MAT + ACCESS_RW, &d_mat); }
|
||||||
|
inline _InputOutputArray::_InputOutputArray(const std::vector<cuda::GpuMat>& d_mat)
|
||||||
|
{ init(FIXED_TYPE + FIXED_SIZE + STD_VECTOR_CUDA_GPU_MAT + ACCESS_RW, &d_mat);}
|
||||||
|
|
||||||
inline _InputOutputArray::_InputOutputArray(const ogl::Buffer& buf)
|
inline _InputOutputArray::_InputOutputArray(const ogl::Buffer& buf)
|
||||||
{ init(FIXED_TYPE + FIXED_SIZE + OPENGL_BUFFER + ACCESS_RW, &buf); }
|
{ init(FIXED_TYPE + FIXED_SIZE + OPENGL_BUFFER + ACCESS_RW, &buf); }
|
||||||
|
@ -1429,7 +1429,14 @@ cuda::GpuMat _InputArray::getGpuMat() const
|
|||||||
CV_Error(cv::Error::StsNotImplemented, "getGpuMat is available only for cuda::GpuMat and cuda::HostMem");
|
CV_Error(cv::Error::StsNotImplemented, "getGpuMat is available only for cuda::GpuMat and cuda::HostMem");
|
||||||
return cuda::GpuMat();
|
return cuda::GpuMat();
|
||||||
}
|
}
|
||||||
|
void _InputArray::getGpuMatVector(std::vector<cuda::GpuMat>& gpumv) const
|
||||||
|
{
|
||||||
|
int k = kind();
|
||||||
|
if (k == STD_VECTOR_CUDA_GPU_MAT)
|
||||||
|
{
|
||||||
|
gpumv = *(std::vector<cuda::GpuMat>*)obj;
|
||||||
|
}
|
||||||
|
}
|
||||||
ogl::Buffer _InputArray::getOGlBuffer() const
|
ogl::Buffer _InputArray::getOGlBuffer() const
|
||||||
{
|
{
|
||||||
int k = kind();
|
int k = kind();
|
||||||
@ -1524,6 +1531,15 @@ Size _InputArray::size(int i) const
|
|||||||
return vv[i].size();
|
return vv[i].size();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (k == STD_VECTOR_CUDA_GPU_MAT)
|
||||||
|
{
|
||||||
|
const std::vector<cuda::GpuMat>& vv = *(const std::vector<cuda::GpuMat>*)obj;
|
||||||
|
if (i < 0)
|
||||||
|
return vv.empty() ? Size() : Size((int)vv.size(), 1);
|
||||||
|
CV_Assert(i < (int)vv.size());
|
||||||
|
return vv[i].size();
|
||||||
|
}
|
||||||
|
|
||||||
if( k == STD_VECTOR_UMAT )
|
if( k == STD_VECTOR_UMAT )
|
||||||
{
|
{
|
||||||
const std::vector<UMat>& vv = *(const std::vector<UMat>*)obj;
|
const std::vector<UMat>& vv = *(const std::vector<UMat>*)obj;
|
||||||
@ -1765,6 +1781,7 @@ size_t _InputArray::total(int i) const
|
|||||||
return vv[i].total();
|
return vv[i].total();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
if( k == STD_VECTOR_UMAT )
|
if( k == STD_VECTOR_UMAT )
|
||||||
{
|
{
|
||||||
const std::vector<UMat>& vv = *(const std::vector<UMat>*)obj;
|
const std::vector<UMat>& vv = *(const std::vector<UMat>*)obj;
|
||||||
@ -1821,6 +1838,18 @@ int _InputArray::type(int i) const
|
|||||||
return vv[i >= 0 ? i : 0].type();
|
return vv[i >= 0 ? i : 0].type();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (k == STD_VECTOR_CUDA_GPU_MAT)
|
||||||
|
{
|
||||||
|
const std::vector<cuda::GpuMat>& vv = *(const std::vector<cuda::GpuMat>*)obj;
|
||||||
|
if (vv.empty())
|
||||||
|
{
|
||||||
|
CV_Assert((flags & FIXED_TYPE) != 0);
|
||||||
|
return CV_MAT_TYPE(flags);
|
||||||
|
}
|
||||||
|
CV_Assert(i < (int)vv.size());
|
||||||
|
return vv[i >= 0 ? i : 0].type();
|
||||||
|
}
|
||||||
|
|
||||||
if( k == OPENGL_BUFFER )
|
if( k == OPENGL_BUFFER )
|
||||||
return ((const ogl::Buffer*)obj)->type();
|
return ((const ogl::Buffer*)obj)->type();
|
||||||
|
|
||||||
@ -1899,6 +1928,12 @@ bool _InputArray::empty() const
|
|||||||
if( k == CUDA_GPU_MAT )
|
if( k == CUDA_GPU_MAT )
|
||||||
return ((const cuda::GpuMat*)obj)->empty();
|
return ((const cuda::GpuMat*)obj)->empty();
|
||||||
|
|
||||||
|
if (k == STD_VECTOR_CUDA_GPU_MAT)
|
||||||
|
{
|
||||||
|
const std::vector<cuda::GpuMat>& vv = *(const std::vector<cuda::GpuMat>*)obj;
|
||||||
|
return vv.empty();
|
||||||
|
}
|
||||||
|
|
||||||
if( k == CUDA_HOST_MEM )
|
if( k == CUDA_HOST_MEM )
|
||||||
return ((const cuda::HostMem*)obj)->empty();
|
return ((const cuda::HostMem*)obj)->empty();
|
||||||
|
|
||||||
@ -2015,6 +2050,13 @@ size_t _InputArray::offset(int i) const
|
|||||||
return (size_t)(m->data - m->datastart);
|
return (size_t)(m->data - m->datastart);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (k == STD_VECTOR_CUDA_GPU_MAT)
|
||||||
|
{
|
||||||
|
const std::vector<cuda::GpuMat>& vv = *(const std::vector<cuda::GpuMat>*)obj;
|
||||||
|
CV_Assert((size_t)i < vv.size());
|
||||||
|
return (size_t)(vv[i].data - vv[i].datastart);
|
||||||
|
}
|
||||||
|
|
||||||
CV_Error(Error::StsNotImplemented, "");
|
CV_Error(Error::StsNotImplemented, "");
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
@ -2060,6 +2102,12 @@ size_t _InputArray::step(int i) const
|
|||||||
CV_Assert( i < 0 );
|
CV_Assert( i < 0 );
|
||||||
return ((const cuda::GpuMat*)obj)->step;
|
return ((const cuda::GpuMat*)obj)->step;
|
||||||
}
|
}
|
||||||
|
if (k == STD_VECTOR_CUDA_GPU_MAT)
|
||||||
|
{
|
||||||
|
const std::vector<cuda::GpuMat>& vv = *(const std::vector<cuda::GpuMat>*)obj;
|
||||||
|
CV_Assert((size_t)i < vv.size());
|
||||||
|
return vv[i].step;
|
||||||
|
}
|
||||||
|
|
||||||
CV_Error(Error::StsNotImplemented, "");
|
CV_Error(Error::StsNotImplemented, "");
|
||||||
return 0;
|
return 0;
|
||||||
@ -2562,7 +2610,11 @@ void _OutputArray::release() const
|
|||||||
((std::vector<UMat>*)obj)->clear();
|
((std::vector<UMat>*)obj)->clear();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
if (k == STD_VECTOR_CUDA_GPU_MAT)
|
||||||
|
{
|
||||||
|
((std::vector<cuda::GpuMat>*)obj)->clear();
|
||||||
|
return;
|
||||||
|
}
|
||||||
CV_Error(Error::StsNotImplemented, "Unknown/unsupported array type");
|
CV_Error(Error::StsNotImplemented, "Unknown/unsupported array type");
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -2625,6 +2677,12 @@ cuda::GpuMat& _OutputArray::getGpuMatRef() const
|
|||||||
CV_Assert( k == CUDA_GPU_MAT );
|
CV_Assert( k == CUDA_GPU_MAT );
|
||||||
return *(cuda::GpuMat*)obj;
|
return *(cuda::GpuMat*)obj;
|
||||||
}
|
}
|
||||||
|
std::vector<cuda::GpuMat>& _OutputArray::getGpuMatVecRef() const
|
||||||
|
{
|
||||||
|
int k = kind();
|
||||||
|
CV_Assert(k == STD_VECTOR_CUDA_GPU_MAT);
|
||||||
|
return *(std::vector<cuda::GpuMat>*)obj;
|
||||||
|
}
|
||||||
|
|
||||||
ogl::Buffer& _OutputArray::getOGlBufferRef() const
|
ogl::Buffer& _OutputArray::getOGlBufferRef() const
|
||||||
{
|
{
|
||||||
|
Loading…
Reference in New Issue
Block a user