Merge pull request #2334 from alalek:umat_usage_flags_2

This commit is contained in:
Andrey Pavlenko
2014-02-17 17:34:19 +04:00
committed by OpenCV Buildbot
7 changed files with 154 additions and 64 deletions

View File

@@ -60,6 +60,7 @@ UMatData::UMatData(const MatAllocator* allocator)
flags = 0;
handle = 0;
userdata = 0;
allocatorFlags_ = 0;
}
UMatData::~UMatData()
@@ -71,6 +72,7 @@ UMatData::~UMatData()
flags = 0;
handle = 0;
userdata = 0;
allocatorFlags_ = 0;
}
void UMatData::lock()
@@ -204,8 +206,7 @@ static void finalizeHdr(UMat& m)
m.rows = m.cols = -1;
}
UMat Mat::getUMat(int accessFlags) const
UMat Mat::getUMat(int accessFlags, UMatUsageFlags usageFlags) const
{
UMat hdr;
if(!data)
@@ -216,10 +217,10 @@ UMat Mat::getUMat(int accessFlags) const
MatAllocator *a = allocator, *a0 = getStdAllocator();
if(!a)
a = a0;
temp_u = a->allocate(dims, size.p, type(), data, step.p, accessFlags);
temp_u = a->allocate(dims, size.p, type(), data, step.p, accessFlags, usageFlags);
temp_u->refcount = 1;
}
UMat::getStdAllocator()->allocate(temp_u, accessFlags);
UMat::getStdAllocator()->allocate(temp_u, accessFlags, usageFlags);
hdr.flags = flags;
setSize(hdr, dims, size.p, step.p);
finalizeHdr(hdr);
@@ -229,8 +230,10 @@ UMat Mat::getUMat(int accessFlags) const
return hdr;
}
void UMat::create(int d, const int* _sizes, int _type)
void UMat::create(int d, const int* _sizes, int _type, UMatUsageFlags _usageFlags)
{
this->usageFlags = _usageFlags;
int i;
CV_Assert(0 <= d && d <= CV_MAX_DIM && _sizes);
_type = CV_MAT_TYPE(_type);
@@ -260,13 +263,13 @@ void UMat::create(int d, const int* _sizes, int _type)
a = a0;
try
{
u = a->allocate(dims, size, _type, 0, step.p, 0);
u = a->allocate(dims, size, _type, 0, step.p, 0, usageFlags);
CV_Assert(u != 0);
}
catch(...)
{
if(a != a0)
u = a0->allocate(dims, size, _type, 0, step.p, 0);
u = a0->allocate(dims, size, _type, 0, step.p, 0, usageFlags);
CV_Assert(u != 0);
}
CV_Assert( step[dims-1] == (size_t)CV_ELEM_SIZE(flags) );