Skip to content

Commit cdfdf29

Browse files
committed
Merge pull request opencv#5292 from alalek:tapi_custom_ptr
2 parents 32c3867 + 8694ba0 commit cdfdf29

File tree

1 file changed

+36
-18
lines changed

1 file changed

+36
-18
lines changed

modules/core/test/test_umat.cpp

Lines changed: 36 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -615,31 +615,49 @@ PARAM_TEST_CASE(getUMat, int, int, Size, bool)
615615
cv::ocl::setUseOpenCL(isOpenCL_enabled);
616616
}
617617

618+
// UMat created from user allocated host memory (USE_HOST_PTR)
619+
void custom_ptr_test(size_t align_base, size_t align_offset)
620+
{
621+
void* pData_allocated = new unsigned char [size.area() * CV_ELEM_SIZE(type) + (align_base + align_offset)];
622+
void* pData = (char*)alignPtr(pData_allocated, (int)align_base) + align_offset;
623+
size_t step = size.width * CV_ELEM_SIZE(type);
624+
625+
{
626+
Mat m = Mat(size, type, pData, step);
627+
m.setTo(cv::Scalar::all(2));
628+
629+
UMat u = m.getUMat(ACCESS_RW);
630+
cv::add(u, cv::Scalar::all(2), u);
631+
632+
Mat d = u.getMat(ACCESS_READ);
633+
634+
Mat expected(m.size(), m.type(), cv::Scalar::all(4));
635+
double norm = cvtest::norm(d, expected, NORM_INF);
636+
637+
EXPECT_EQ(0, norm);
638+
}
639+
640+
delete[] (unsigned char*)pData_allocated;
641+
}
642+
618643
private:
619644
bool useOpenCL;
620645
bool isOpenCL_enabled;
621646
};
622647

623-
// UMat created from user allocated host memory (USE_HOST_PTR)
624-
TEST_P(getUMat, custom_ptr)
648+
TEST_P(getUMat, custom_ptr_align_4Kb)
625649
{
626-
void* pData = new unsigned char [size.area() * CV_ELEM_SIZE(type)];
627-
size_t step = size.width * CV_ELEM_SIZE(type);
628-
629-
Mat m = Mat(size, type, pData, step);
630-
m.setTo(cv::Scalar::all(2));
631-
632-
UMat u = m.getUMat(ACCESS_RW);
633-
cv::add(u, cv::Scalar::all(2), u);
634-
635-
Mat d = u.getMat(ACCESS_READ);
636-
637-
Mat expected(m.size(), m.type(), cv::Scalar::all(4));
638-
double norm = cvtest::norm(d, expected, NORM_INF);
650+
custom_ptr_test(4096, 0);
651+
}
639652

640-
EXPECT_EQ(0, norm);
653+
TEST_P(getUMat, custom_ptr_align_64b)
654+
{
655+
custom_ptr_test(4096, 64);
656+
}
641657

642-
delete[] (unsigned char*)pData;
658+
TEST_P(getUMat, custom_ptr_align_none)
659+
{
660+
custom_ptr_test(4096, cv::alignSize(CV_ELEM_SIZE(type), 4));
643661
}
644662

645663
TEST_P(getUMat, self_allocated)
@@ -659,7 +677,7 @@ TEST_P(getUMat, self_allocated)
659677
}
660678

661679
INSTANTIATE_TEST_CASE_P(UMat, getUMat, Combine(
662-
Values(CV_8U), // depth
680+
Values(CV_8U, CV_64F), // depth
663681
Values(1, 3), // channels
664682
Values(cv::Size(1, 1), cv::Size(255, 255), cv::Size(256, 256)), // Size
665683
Bool() // useOpenCL

0 commit comments

Comments
 (0)