1 // This file is part of OpenCV project. 2 // It is subject to the license terms in the LICENSE file found in the top-level directory 3 // of this distribution and at http://opencv.org/license.html. 4 5 // Copyright (C) 2014, Advanced Micro Devices, Inc., all rights reserved. 6 // Third party copyrights are property of their respective owners. 7 8 #include "../perf_precomp.hpp" 9 #include "opencv2/ts/ocl_perf.hpp" 10 11 #ifdef HAVE_OPENCL 12 13 namespace cvtest { 14 namespace ocl { 15 16 ///////////// 3 channels Vs 4 //////////////////////// 17 18 enum 19 { 20 Pure = 0, Split, Convert 21 }; 22 23 CV_ENUM(Modes, Pure, Split, Convert) 24 25 typedef tuple <Size, MatType, Modes> _3vs4Params; 26 typedef TestBaseWithParam<_3vs4Params> _3vs4_Fixture; 27 28 OCL_PERF_TEST_P(_3vs4_Fixture, Resize, 29 ::testing::Combine(OCL_TEST_SIZES, OCL_PERF_ENUM(CV_8UC3, CV_32FC3), Modes::all())) 30 { 31 _3vs4Params params = GetParam(); 32 const Size srcSize = get<0>(params); 33 const int type = get<1>(params), depth = CV_MAT_DEPTH(type); 34 const int mode = get<2>(params); 35 36 checkDeviceMaxMemoryAllocSize(srcSize, type); 37 38 UMat src(srcSize, type), dst(srcSize, type); 39 declare.in(src, WARMUP_RNG).out(dst); 40 41 if (mode == Pure) 42 { 43 OCL_TEST_CYCLE() resize(src, dst, Size(), 0.5, 0.5, INTER_LINEAR); 44 } 45 else if (mode == Split) 46 { 47 std::vector<UMat> srcs(3), dsts(3); 48 49 for (int i = 0; i < 3; ++i) 50 { 51 dsts[i] = UMat(srcSize, depth); 52 srcs[i] = UMat(srcSize, depth); 53 } 54 55 OCL_TEST_CYCLE() 56 { 57 split(src, srcs); 58 59 for (size_t i = 0; i < srcs.size(); ++i) 60 resize(srcs[i], dsts[i], Size(), 0.5, 0.5, INTER_LINEAR); 61 62 merge(dsts, dst); 63 } 64 } 65 else if (mode == Convert) 66 { 67 int type4 = CV_MAKE_TYPE(depth, 4); 68 UMat src4(srcSize, type4), dst4(srcSize, type4); 69 70 OCL_TEST_CYCLE() 71 { 72 cvtColor(src, src4, COLOR_RGB2RGBA); 73 resize(src4, dst4, Size(), 0.5, 0.5, INTER_LINEAR); 74 cvtColor(dst4, dst, COLOR_RGBA2RGB); 75 } 76 } 77 78 SANITY_CHECK_NOTHING(); 79 } 80 81 OCL_PERF_TEST_P(_3vs4_Fixture, Subtract, 82 ::testing::Combine(OCL_TEST_SIZES, OCL_PERF_ENUM(CV_8UC3, CV_32FC3), Modes::all())) 83 { 84 _3vs4Params params = GetParam(); 85 const Size srcSize = get<0>(params); 86 const int type = get<1>(params), depth = CV_MAT_DEPTH(type); 87 const int mode = get<2>(params); 88 89 checkDeviceMaxMemoryAllocSize(srcSize, type); 90 91 Scalar s(14); 92 UMat src(srcSize, type), dst(srcSize, type); 93 declare.in(src, WARMUP_RNG).out(dst); 94 95 if (mode == Pure) 96 { 97 OCL_TEST_CYCLE() subtract(src, s, dst); 98 } 99 else if (mode == Split) 100 { 101 std::vector<UMat> srcs(3), dsts(3); 102 103 for (int i = 0; i < 3; ++i) 104 { 105 dsts[i] = UMat(srcSize, depth); 106 srcs[i] = UMat(srcSize, depth); 107 } 108 109 OCL_TEST_CYCLE() 110 { 111 split(src, srcs); 112 113 for (size_t i = 0; i < srcs.size(); ++i) 114 subtract(srcs[i], s, dsts[i]); 115 116 merge(dsts, dst); 117 } 118 } 119 else if (mode == Convert) 120 { 121 int type4 = CV_MAKE_TYPE(depth, 4); 122 UMat src4(srcSize, type4), dst4(srcSize, type4); 123 124 OCL_TEST_CYCLE() 125 { 126 cvtColor(src, src4, COLOR_RGB2RGBA); 127 subtract(src4, s, dst4); 128 cvtColor(dst4, dst, COLOR_RGBA2RGB); 129 } 130 } 131 132 SANITY_CHECK_NOTHING(); 133 } 134 135 } } // namespace cvtest::ocl 136 137 #endif // HAVE_OPENCL 138