From b3af0e3154f04ce4fdf38100b32723b1e1498e40 Mon Sep 17 00:00:00 2001 From: Ilya Lavrenov Date: Thu, 19 Dec 2013 14:27:21 +0400 Subject: [PATCH] added cv::repeat to T-API --- modules/core/src/copy.cpp | 31 ++++++++++++++++++++++++++----- 1 file changed, 26 insertions(+), 5 deletions(-) diff --git a/modules/core/src/copy.cpp b/modules/core/src/copy.cpp index 0c690bd..7d54ebc 100644 --- a/modules/core/src/copy.cpp +++ b/modules/core/src/copy.cpp @@ -544,15 +544,36 @@ void flip( InputArray _src, OutputArray _dst, int flip_mode ) } +static bool ocl_repeat(InputArray _src, int ny, int nx, OutputArray _dst) +{ + UMat src = _src.getUMat(), dst = _dst.getUMat(); + + for (int y = 0; y < ny; ++y) + for (int x = 0; x < nx; ++x) + { + Rect roi(x * src.cols, y * src.rows, src.cols, src.rows); + UMat hdr(dst, roi); + src.copyTo(hdr); + } + return true; +} + void repeat(InputArray _src, int ny, int nx, OutputArray _dst) { - Mat src = _src.getMat(); - CV_Assert( src.dims <= 2 ); + CV_Assert( _src.dims() <= 2 ); CV_Assert( ny > 0 && nx > 0 ); - _dst.create(src.rows*ny, src.cols*nx, src.type()); - Mat dst = _dst.getMat(); - Size ssize = src.size(), dsize = dst.size(); + Size ssize = _src.size(); + _dst.create(ssize.height*ny, ssize.width*nx, _src.type()); + + if (ocl::useOpenCL() && _src.isUMat()) + { + CV_Assert(ocl_repeat(_src, ny, nx, _dst)); + return; + } + + Mat src = _src.getMat(), dst = _dst.getMat(); + Size dsize = dst.size(); int esz = (int)src.elemSize(); int x, y; ssize.width *= esz; dsize.width *= esz; -- 2.7.4