• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 
OCL_PERF_TEST_P(_3vs4_Fixture,Resize,::testing::Combine (OCL_TEST_SIZES,OCL_PERF_ENUM (CV_8UC3,CV_32FC3),Modes::all ()))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 
OCL_PERF_TEST_P(_3vs4_Fixture,Subtract,::testing::Combine (OCL_TEST_SIZES,OCL_PERF_ENUM (CV_8UC3,CV_32FC3),Modes::all ()))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