@@ -615,31 +615,49 @@ PARAM_TEST_CASE(getUMat, int, int, Size, bool)
615
615
cv::ocl::setUseOpenCL (isOpenCL_enabled);
616
616
}
617
617
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
+
618
643
private:
619
644
bool useOpenCL;
620
645
bool isOpenCL_enabled;
621
646
};
622
647
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)
625
649
{
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
+ }
639
652
640
- EXPECT_EQ (0 , norm);
653
+ TEST_P (getUMat, custom_ptr_align_64b)
654
+ {
655
+ custom_ptr_test (4096 , 64 );
656
+ }
641
657
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 ));
643
661
}
644
662
645
663
TEST_P (getUMat, self_allocated)
@@ -659,7 +677,7 @@ TEST_P(getUMat, self_allocated)
659
677
}
660
678
661
679
INSTANTIATE_TEST_CASE_P (UMat, getUMat, Combine(
662
- Values (CV_8U), // depth
680
+ Values (CV_8U, CV_64F ), // depth
663
681
Values(1 , 3 ), // channels
664
682
Values(cv::Size(1 , 1 ), cv::Size(255 , 255 ), cv::Size(256 , 256 )), // Size
665
683
Bool() // useOpenCL
0 commit comments