~paparazzi-uav/paparazzi/v5.0-manual

« back to all changes in this revision

Viewing changes to sw/ext/opencv_bebop/opencv/modules/imgproc/perf/perf_cvt_color.cpp

  • Committer: Paparazzi buildbot
  • Date: 2016-05-18 15:00:29 UTC
  • Revision ID: felix.ruess+docbot@gmail.com-20160518150029-e8lgzi5kvb4p7un9
Manual import commit 4b8bbb730080dac23cf816b98908dacfabe2a8ec from v5.0 branch.

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
#include "perf_precomp.hpp"
 
2
 
 
3
using namespace std;
 
4
using namespace cv;
 
5
using namespace perf;
 
6
using std::tr1::make_tuple;
 
7
using std::tr1::get;
 
8
 
 
9
//extra color conversions supported implicitly
 
10
enum
 
11
{
 
12
    CX_BGRA2HLS      = COLOR_COLORCVT_MAX + COLOR_BGR2HLS,
 
13
    CX_BGRA2HLS_FULL = COLOR_COLORCVT_MAX + COLOR_BGR2HLS_FULL,
 
14
    CX_BGRA2HSV      = COLOR_COLORCVT_MAX + COLOR_BGR2HSV,
 
15
    CX_BGRA2HSV_FULL = COLOR_COLORCVT_MAX + COLOR_BGR2HSV_FULL,
 
16
    CX_BGRA2Lab      = COLOR_COLORCVT_MAX + COLOR_BGR2Lab,
 
17
    CX_BGRA2Luv      = COLOR_COLORCVT_MAX + COLOR_BGR2Luv,
 
18
    CX_BGRA2XYZ      = COLOR_COLORCVT_MAX + COLOR_BGR2XYZ,
 
19
    CX_BGRA2YCrCb    = COLOR_COLORCVT_MAX + COLOR_BGR2YCrCb,
 
20
    CX_BGRA2YUV      = COLOR_COLORCVT_MAX + COLOR_BGR2YUV,
 
21
    CX_HLS2BGRA      = COLOR_COLORCVT_MAX + COLOR_HLS2BGR,
 
22
    CX_HLS2BGRA_FULL = COLOR_COLORCVT_MAX + COLOR_HLS2BGR_FULL,
 
23
    CX_HLS2RGBA      = COLOR_COLORCVT_MAX + COLOR_HLS2RGB,
 
24
    CX_HLS2RGBA_FULL = COLOR_COLORCVT_MAX + COLOR_HLS2RGB_FULL,
 
25
    CX_HSV2BGRA      = COLOR_COLORCVT_MAX + COLOR_HSV2BGR,
 
26
    CX_HSV2BGRA_FULL = COLOR_COLORCVT_MAX + COLOR_HSV2BGR_FULL,
 
27
    CX_HSV2RGBA      = COLOR_COLORCVT_MAX + COLOR_HSV2RGB,
 
28
    CX_HSV2RGBA_FULL = COLOR_COLORCVT_MAX + COLOR_HSV2RGB_FULL,
 
29
    CX_Lab2BGRA      = COLOR_COLORCVT_MAX + COLOR_Lab2BGR,
 
30
    CX_Lab2LBGRA     = COLOR_COLORCVT_MAX + COLOR_Lab2LBGR,
 
31
    CX_Lab2LRGBA     = COLOR_COLORCVT_MAX + COLOR_Lab2LRGB,
 
32
    CX_Lab2RGBA      = COLOR_COLORCVT_MAX + COLOR_Lab2RGB,
 
33
    CX_LBGRA2Lab     = COLOR_COLORCVT_MAX + COLOR_LBGR2Lab,
 
34
    CX_LBGRA2Luv     = COLOR_COLORCVT_MAX + COLOR_LBGR2Luv,
 
35
    CX_LRGBA2Lab     = COLOR_COLORCVT_MAX + COLOR_LRGB2Lab,
 
36
    CX_LRGBA2Luv     = COLOR_COLORCVT_MAX + COLOR_LRGB2Luv,
 
37
    CX_Luv2BGRA      = COLOR_COLORCVT_MAX + COLOR_Luv2BGR,
 
38
    CX_Luv2LBGRA     = COLOR_COLORCVT_MAX + COLOR_Luv2LBGR,
 
39
    CX_Luv2LRGBA     = COLOR_COLORCVT_MAX + COLOR_Luv2LRGB,
 
40
    CX_Luv2RGBA      = COLOR_COLORCVT_MAX + COLOR_Luv2RGB,
 
41
    CX_RGBA2HLS      = COLOR_COLORCVT_MAX + COLOR_RGB2HLS,
 
42
    CX_RGBA2HLS_FULL = COLOR_COLORCVT_MAX + COLOR_RGB2HLS_FULL,
 
43
    CX_RGBA2HSV      = COLOR_COLORCVT_MAX + COLOR_RGB2HSV,
 
44
    CX_RGBA2HSV_FULL = COLOR_COLORCVT_MAX + COLOR_RGB2HSV_FULL,
 
45
    CX_RGBA2Lab      = COLOR_COLORCVT_MAX + COLOR_RGB2Lab,
 
46
    CX_RGBA2Luv      = COLOR_COLORCVT_MAX + COLOR_RGB2Luv,
 
47
    CX_RGBA2XYZ      = COLOR_COLORCVT_MAX + COLOR_RGB2XYZ,
 
48
    CX_RGBA2YCrCb    = COLOR_COLORCVT_MAX + COLOR_RGB2YCrCb,
 
49
    CX_RGBA2YUV      = COLOR_COLORCVT_MAX + COLOR_RGB2YUV,
 
50
    CX_XYZ2BGRA      = COLOR_COLORCVT_MAX + COLOR_XYZ2BGR,
 
51
    CX_XYZ2RGBA      = COLOR_COLORCVT_MAX + COLOR_XYZ2RGB,
 
52
    CX_YCrCb2BGRA    = COLOR_COLORCVT_MAX + COLOR_YCrCb2BGR,
 
53
    CX_YCrCb2RGBA    = COLOR_COLORCVT_MAX + COLOR_YCrCb2RGB,
 
54
    CX_YUV2BGRA      = COLOR_COLORCVT_MAX + COLOR_YUV2BGR,
 
55
    CX_YUV2RGBA      = COLOR_COLORCVT_MAX + COLOR_YUV2RGB
 
56
};
 
57
 
 
58
CV_ENUM(CvtMode,
 
59
    COLOR_BGR2BGR555, COLOR_BGR2BGR565, COLOR_BGR2BGRA, COLOR_BGR2GRAY,
 
60
    COLOR_BGR2HLS, COLOR_BGR2HLS_FULL, COLOR_BGR2HSV, COLOR_BGR2HSV_FULL,
 
61
    COLOR_BGR2Lab, COLOR_BGR2Luv, COLOR_BGR2RGB, COLOR_BGR2RGBA, COLOR_BGR2XYZ,
 
62
    COLOR_BGR2YCrCb, COLOR_BGR2YUV, COLOR_BGR5552BGR, COLOR_BGR5552BGRA,
 
63
 
 
64
    COLOR_BGR5552GRAY, COLOR_BGR5552RGB, COLOR_BGR5552RGBA, COLOR_BGR5652BGR,
 
65
    COLOR_BGR5652BGRA, COLOR_BGR5652GRAY, COLOR_BGR5652RGB, COLOR_BGR5652RGBA,
 
66
 
 
67
    COLOR_BGRA2BGR, COLOR_BGRA2BGR555, COLOR_BGRA2BGR565, COLOR_BGRA2GRAY, COLOR_BGRA2RGBA,
 
68
    CX_BGRA2HLS, CX_BGRA2HLS_FULL, CX_BGRA2HSV, CX_BGRA2HSV_FULL,
 
69
    CX_BGRA2Lab, CX_BGRA2Luv, CX_BGRA2XYZ,
 
70
    CX_BGRA2YCrCb, CX_BGRA2YUV,
 
71
 
 
72
    COLOR_GRAY2BGR, COLOR_GRAY2BGR555, COLOR_GRAY2BGR565, COLOR_GRAY2BGRA,
 
73
 
 
74
    COLOR_HLS2BGR, COLOR_HLS2BGR_FULL, COLOR_HLS2RGB, COLOR_HLS2RGB_FULL,
 
75
    CX_HLS2BGRA, CX_HLS2BGRA_FULL, CX_HLS2RGBA, CX_HLS2RGBA_FULL,
 
76
 
 
77
    COLOR_HSV2BGR, COLOR_HSV2BGR_FULL, COLOR_HSV2RGB, COLOR_HSV2RGB_FULL,
 
78
    CX_HSV2BGRA, CX_HSV2BGRA_FULL, CX_HSV2RGBA,    CX_HSV2RGBA_FULL,
 
79
 
 
80
    COLOR_Lab2BGR, COLOR_Lab2LBGR, COLOR_Lab2LRGB, COLOR_Lab2RGB,
 
81
    CX_Lab2BGRA, CX_Lab2LBGRA, CX_Lab2LRGBA, CX_Lab2RGBA,
 
82
 
 
83
    COLOR_LBGR2Lab, COLOR_LBGR2Luv, COLOR_LRGB2Lab, COLOR_LRGB2Luv,
 
84
    CX_LBGRA2Lab, CX_LBGRA2Luv, CX_LRGBA2Lab, CX_LRGBA2Luv,
 
85
 
 
86
    COLOR_Luv2BGR, COLOR_Luv2LBGR, COLOR_Luv2LRGB, COLOR_Luv2RGB,
 
87
    CX_Luv2BGRA, CX_Luv2LBGRA, CX_Luv2LRGBA, CX_Luv2RGBA,
 
88
 
 
89
    COLOR_RGB2BGR555, COLOR_RGB2BGR565, COLOR_RGB2GRAY,
 
90
    COLOR_RGB2HLS, COLOR_RGB2HLS_FULL, COLOR_RGB2HSV, COLOR_RGB2HSV_FULL,
 
91
    COLOR_RGB2Lab, COLOR_RGB2Luv, COLOR_RGB2XYZ, COLOR_RGB2YCrCb, COLOR_RGB2YUV,
 
92
 
 
93
    COLOR_RGBA2BGR, COLOR_RGBA2BGR555, COLOR_RGBA2BGR565, COLOR_RGBA2GRAY,
 
94
    CX_RGBA2HLS, CX_RGBA2HLS_FULL, CX_RGBA2HSV, CX_RGBA2HSV_FULL,
 
95
    CX_RGBA2Lab, CX_RGBA2Luv, CX_RGBA2XYZ,
 
96
    CX_RGBA2YCrCb, CX_RGBA2YUV,
 
97
 
 
98
    COLOR_XYZ2BGR, COLOR_XYZ2RGB, CX_XYZ2BGRA, CX_XYZ2RGBA,
 
99
 
 
100
    COLOR_YCrCb2BGR, COLOR_YCrCb2RGB, CX_YCrCb2BGRA, CX_YCrCb2RGBA,
 
101
    COLOR_YUV2BGR, COLOR_YUV2RGB, CX_YUV2BGRA, CX_YUV2RGBA
 
102
    )
 
103
 
 
104
 
 
105
CV_ENUM(CvtModeBayer,
 
106
    COLOR_BayerBG2BGR, COLOR_BayerBG2BGR_VNG, COLOR_BayerBG2GRAY,
 
107
    COLOR_BayerGB2BGR, COLOR_BayerGB2BGR_VNG, COLOR_BayerGB2GRAY,
 
108
    COLOR_BayerGR2BGR, COLOR_BayerGR2BGR_VNG, COLOR_BayerGR2GRAY,
 
109
    COLOR_BayerRG2BGR, COLOR_BayerRG2BGR_VNG, COLOR_BayerRG2GRAY
 
110
    )
 
111
 
 
112
 
 
113
CV_ENUM(CvtMode2, COLOR_YUV2BGR_NV12, COLOR_YUV2BGRA_NV12, COLOR_YUV2RGB_NV12, COLOR_YUV2RGBA_NV12, COLOR_YUV2BGR_NV21, COLOR_YUV2BGRA_NV21, COLOR_YUV2RGB_NV21, COLOR_YUV2RGBA_NV21,
 
114
                  COLOR_YUV2BGR_YV12, COLOR_YUV2BGRA_YV12, COLOR_YUV2RGB_YV12, COLOR_YUV2RGBA_YV12, COLOR_YUV2BGR_IYUV, COLOR_YUV2BGRA_IYUV, COLOR_YUV2RGB_IYUV, COLOR_YUV2RGBA_IYUV,
 
115
                  COLOR_YUV2GRAY_420, COLOR_YUV2RGB_UYVY, COLOR_YUV2BGR_UYVY, COLOR_YUV2RGBA_UYVY, COLOR_YUV2BGRA_UYVY, COLOR_YUV2RGB_YUY2, COLOR_YUV2BGR_YUY2, COLOR_YUV2RGB_YVYU,
 
116
                  COLOR_YUV2BGR_YVYU, COLOR_YUV2RGBA_YUY2, COLOR_YUV2BGRA_YUY2, COLOR_YUV2RGBA_YVYU, COLOR_YUV2BGRA_YVYU)
 
117
 
 
118
CV_ENUM(CvtMode3, COLOR_RGB2YUV_IYUV, COLOR_BGR2YUV_IYUV, COLOR_RGBA2YUV_IYUV, COLOR_BGRA2YUV_IYUV,
 
119
                  COLOR_RGB2YUV_YV12, COLOR_BGR2YUV_YV12, COLOR_RGBA2YUV_YV12, COLOR_BGRA2YUV_YV12)
 
120
 
 
121
struct ChPair
 
122
{
 
123
    ChPair(int _scn, int _dcn): scn(_scn), dcn(_dcn) {}
 
124
    int scn, dcn;
 
125
};
 
126
 
 
127
ChPair getConversionInfo(int cvtMode)
 
128
{
 
129
    switch(cvtMode)
 
130
    {
 
131
    case COLOR_BayerBG2GRAY: case COLOR_BayerGB2GRAY:
 
132
    case COLOR_BayerGR2GRAY: case COLOR_BayerRG2GRAY:
 
133
    case COLOR_YUV2GRAY_420:
 
134
        return ChPair(1,1);
 
135
    case COLOR_GRAY2BGR555: case COLOR_GRAY2BGR565:
 
136
        return ChPair(1,2);
 
137
    case COLOR_BayerBG2BGR: case COLOR_BayerBG2BGR_VNG:
 
138
    case COLOR_BayerGB2BGR: case COLOR_BayerGB2BGR_VNG:
 
139
    case COLOR_BayerGR2BGR: case COLOR_BayerGR2BGR_VNG:
 
140
    case COLOR_BayerRG2BGR: case COLOR_BayerRG2BGR_VNG:
 
141
    case COLOR_GRAY2BGR:
 
142
    case COLOR_YUV2BGR_NV12: case COLOR_YUV2RGB_NV12:
 
143
    case COLOR_YUV2BGR_NV21: case COLOR_YUV2RGB_NV21:
 
144
    case COLOR_YUV2BGR_YV12: case COLOR_YUV2RGB_YV12:
 
145
    case COLOR_YUV2BGR_IYUV: case COLOR_YUV2RGB_IYUV:
 
146
        return ChPair(1,3);
 
147
    case COLOR_GRAY2BGRA:
 
148
    case COLOR_YUV2BGRA_NV12: case COLOR_YUV2RGBA_NV12:
 
149
    case COLOR_YUV2BGRA_NV21: case COLOR_YUV2RGBA_NV21:
 
150
    case COLOR_YUV2BGRA_YV12: case COLOR_YUV2RGBA_YV12:
 
151
    case COLOR_YUV2BGRA_IYUV: case COLOR_YUV2RGBA_IYUV:
 
152
        return ChPair(1,4);
 
153
    case COLOR_BGR5552GRAY: case COLOR_BGR5652GRAY:
 
154
        return ChPair(2,1);
 
155
    case COLOR_BGR5552BGR: case COLOR_BGR5552RGB:
 
156
    case COLOR_BGR5652BGR: case COLOR_BGR5652RGB:
 
157
    case COLOR_YUV2RGB_UYVY: case COLOR_YUV2BGR_UYVY:
 
158
    case COLOR_YUV2RGB_YUY2: case COLOR_YUV2BGR_YUY2:
 
159
    case COLOR_YUV2RGB_YVYU: case COLOR_YUV2BGR_YVYU:
 
160
        return ChPair(2,3);
 
161
    case COLOR_BGR5552BGRA: case COLOR_BGR5552RGBA:
 
162
    case COLOR_BGR5652BGRA: case COLOR_BGR5652RGBA:
 
163
    case COLOR_YUV2RGBA_UYVY: case COLOR_YUV2BGRA_UYVY:
 
164
    case COLOR_YUV2RGBA_YUY2: case COLOR_YUV2BGRA_YUY2:
 
165
    case COLOR_YUV2RGBA_YVYU: case COLOR_YUV2BGRA_YVYU:
 
166
        return ChPair(2,4);
 
167
    case COLOR_BGR2GRAY: case COLOR_RGB2GRAY:
 
168
    case COLOR_RGB2YUV_IYUV: case COLOR_RGB2YUV_YV12:
 
169
    case COLOR_BGR2YUV_IYUV: case COLOR_BGR2YUV_YV12:
 
170
        return ChPair(3,1);
 
171
    case COLOR_BGR2BGR555: case COLOR_BGR2BGR565:
 
172
    case COLOR_RGB2BGR555: case COLOR_RGB2BGR565:
 
173
        return ChPair(3,2);
 
174
    case COLOR_BGR2HLS: case COLOR_BGR2HLS_FULL:
 
175
    case COLOR_BGR2HSV: case COLOR_BGR2HSV_FULL:
 
176
    case COLOR_BGR2Lab: case COLOR_BGR2Luv:
 
177
    case COLOR_BGR2RGB: case COLOR_BGR2XYZ:
 
178
    case COLOR_BGR2YCrCb: case COLOR_BGR2YUV:
 
179
    case COLOR_HLS2BGR: case COLOR_HLS2BGR_FULL:
 
180
    case COLOR_HLS2RGB: case COLOR_HLS2RGB_FULL:
 
181
    case COLOR_HSV2BGR: case COLOR_HSV2BGR_FULL:
 
182
    case COLOR_HSV2RGB: case COLOR_HSV2RGB_FULL:
 
183
    case COLOR_Lab2BGR: case COLOR_Lab2LBGR:
 
184
    case COLOR_Lab2LRGB: case COLOR_Lab2RGB:
 
185
    case COLOR_LBGR2Lab: case COLOR_LBGR2Luv:
 
186
    case COLOR_LRGB2Lab: case COLOR_LRGB2Luv:
 
187
    case COLOR_Luv2BGR: case COLOR_Luv2LBGR:
 
188
    case COLOR_Luv2LRGB: case COLOR_Luv2RGB:
 
189
    case COLOR_RGB2HLS: case COLOR_RGB2HLS_FULL:
 
190
    case COLOR_RGB2HSV: case COLOR_RGB2HSV_FULL:
 
191
    case COLOR_RGB2Lab: case COLOR_RGB2Luv:
 
192
    case COLOR_RGB2XYZ: case COLOR_RGB2YCrCb:
 
193
    case COLOR_RGB2YUV: case COLOR_XYZ2BGR:
 
194
    case COLOR_XYZ2RGB: case COLOR_YCrCb2BGR:
 
195
    case COLOR_YCrCb2RGB: case COLOR_YUV2BGR:
 
196
    case COLOR_YUV2RGB:
 
197
        return ChPair(3,3);
 
198
    case COLOR_BGR2BGRA: case COLOR_BGR2RGBA:
 
199
    case CX_HLS2BGRA: case CX_HLS2BGRA_FULL:
 
200
    case CX_HLS2RGBA: case CX_HLS2RGBA_FULL:
 
201
    case CX_HSV2BGRA: case CX_HSV2BGRA_FULL:
 
202
    case CX_HSV2RGBA: case CX_HSV2RGBA_FULL:
 
203
    case CX_Lab2BGRA: case CX_Lab2LBGRA:
 
204
    case CX_Lab2LRGBA: case CX_Lab2RGBA:
 
205
    case CX_Luv2BGRA: case CX_Luv2LBGRA:
 
206
    case CX_Luv2LRGBA: case CX_Luv2RGBA:
 
207
    case CX_XYZ2BGRA: case CX_XYZ2RGBA:
 
208
    case CX_YCrCb2BGRA: case CX_YCrCb2RGBA:
 
209
    case CX_YUV2BGRA: case CX_YUV2RGBA:
 
210
        return ChPair(3,4);
 
211
    case COLOR_BGRA2GRAY: case COLOR_RGBA2GRAY:
 
212
    case COLOR_RGBA2YUV_IYUV: case COLOR_RGBA2YUV_YV12:
 
213
    case COLOR_BGRA2YUV_IYUV: case COLOR_BGRA2YUV_YV12:
 
214
        return ChPair(4,1);
 
215
    case COLOR_BGRA2BGR555: case COLOR_BGRA2BGR565:
 
216
    case COLOR_RGBA2BGR555: case COLOR_RGBA2BGR565:
 
217
        return ChPair(4,2);
 
218
    case COLOR_BGRA2BGR: case CX_BGRA2HLS:
 
219
    case CX_BGRA2HLS_FULL: case CX_BGRA2HSV:
 
220
    case CX_BGRA2HSV_FULL: case CX_BGRA2Lab:
 
221
    case CX_BGRA2Luv: case CX_BGRA2XYZ:
 
222
    case CX_BGRA2YCrCb: case CX_BGRA2YUV:
 
223
    case CX_LBGRA2Lab: case CX_LBGRA2Luv:
 
224
    case CX_LRGBA2Lab: case CX_LRGBA2Luv:
 
225
    case COLOR_RGBA2BGR: case CX_RGBA2HLS:
 
226
    case CX_RGBA2HLS_FULL: case CX_RGBA2HSV:
 
227
    case CX_RGBA2HSV_FULL: case CX_RGBA2Lab:
 
228
    case CX_RGBA2Luv: case CX_RGBA2XYZ:
 
229
    case CX_RGBA2YCrCb: case CX_RGBA2YUV:
 
230
        return ChPair(4,3);
 
231
    case COLOR_BGRA2RGBA:
 
232
        return ChPair(4,4);
 
233
    default:
 
234
        ADD_FAILURE() << "Unknown conversion type";
 
235
        break;
 
236
    };
 
237
    return ChPair(0,0);
 
238
}
 
239
 
 
240
typedef std::tr1::tuple<Size, CvtMode> Size_CvtMode_t;
 
241
typedef perf::TestBaseWithParam<Size_CvtMode_t> Size_CvtMode;
 
242
 
 
243
PERF_TEST_P(Size_CvtMode, cvtColor8u,
 
244
            testing::Combine(
 
245
                testing::Values(::perf::szODD, ::perf::szVGA, ::perf::sz1080p),
 
246
                CvtMode::all()
 
247
                )
 
248
            )
 
249
{
 
250
    Size sz = get<0>(GetParam());
 
251
    int _mode = get<1>(GetParam()), mode = _mode;
 
252
    ChPair ch = getConversionInfo(mode);
 
253
    mode %= COLOR_COLORCVT_MAX;
 
254
 
 
255
    Mat src(sz, CV_8UC(ch.scn));
 
256
    Mat dst(sz, CV_8UC(ch.dcn));
 
257
 
 
258
    declare.time(100);
 
259
    declare.in(src, WARMUP_RNG).out(dst);
 
260
 
 
261
    int runs = sz.width <= 320 ? 100 : 5;
 
262
    TEST_CYCLE_MULTIRUN(runs) cvtColor(src, dst, mode, ch.dcn);
 
263
 
 
264
#if defined(__APPLE__) && defined(HAVE_IPP)
 
265
    SANITY_CHECK(dst, _mode == CX_BGRA2HLS_FULL ? 2 : 1);
 
266
#elif defined(_MSC_VER) && _MSC_VER >= 1900 /* MSVC 14 */
 
267
    if (_mode == CX_Luv2BGRA)
 
268
        SANITY_CHECK_NOTHING();
 
269
    else
 
270
        SANITY_CHECK(dst, 1);
 
271
#else
 
272
    SANITY_CHECK(dst, 1);
 
273
#endif
 
274
}
 
275
 
 
276
typedef std::tr1::tuple<Size, CvtModeBayer> Size_CvtMode_Bayer_t;
 
277
typedef perf::TestBaseWithParam<Size_CvtMode_Bayer_t> Size_CvtMode_Bayer;
 
278
 
 
279
PERF_TEST_P(Size_CvtMode_Bayer, cvtColorBayer8u,
 
280
            testing::Combine(
 
281
                testing::Values(::perf::szODD, ::perf::szVGA),
 
282
                CvtModeBayer::all()
 
283
                )
 
284
            )
 
285
{
 
286
    Size sz = get<0>(GetParam());
 
287
    int mode = get<1>(GetParam());
 
288
    ChPair ch = getConversionInfo(mode);
 
289
    mode %= COLOR_COLORCVT_MAX;
 
290
 
 
291
    Mat src(sz, CV_8UC(ch.scn));
 
292
    Mat dst(sz, CV_8UC(ch.dcn));
 
293
 
 
294
    declare.time(100);
 
295
    declare.in(src, WARMUP_RNG).out(dst);
 
296
 
 
297
    TEST_CYCLE() cvtColor(src, dst, mode, ch.dcn);
 
298
 
 
299
    SANITY_CHECK(dst, 1);
 
300
}
 
301
 
 
302
typedef std::tr1::tuple<Size, CvtMode2> Size_CvtMode2_t;
 
303
typedef perf::TestBaseWithParam<Size_CvtMode2_t> Size_CvtMode2;
 
304
 
 
305
PERF_TEST_P(Size_CvtMode2, cvtColorYUV420,
 
306
            testing::Combine(
 
307
                testing::Values(szVGA, sz1080p, Size(130, 60)),
 
308
                CvtMode2::all()
 
309
                )
 
310
            )
 
311
{
 
312
    Size sz = get<0>(GetParam());
 
313
    int mode = get<1>(GetParam());
 
314
    ChPair ch = getConversionInfo(mode);
 
315
 
 
316
    Mat src(sz.height + sz.height / 2, sz.width, CV_8UC(ch.scn));
 
317
    Mat dst(sz, CV_8UC(ch.dcn));
 
318
 
 
319
    declare.in(src, WARMUP_RNG).out(dst);
 
320
 
 
321
    int runs = (sz.width <= 640) ? 8 : 1;
 
322
    TEST_CYCLE_MULTIRUN(runs) cvtColor(src, dst, mode, ch.dcn);
 
323
 
 
324
    SANITY_CHECK(dst, 1);
 
325
}
 
326
 
 
327
typedef std::tr1::tuple<Size, CvtMode3> Size_CvtMode3_t;
 
328
typedef perf::TestBaseWithParam<Size_CvtMode3_t> Size_CvtMode3;
 
329
 
 
330
PERF_TEST_P(Size_CvtMode3, cvtColorRGB2YUV420p,
 
331
            testing::Combine(
 
332
                testing::Values(szVGA, sz720p, sz1080p, Size(130, 60)),
 
333
                CvtMode3::all()
 
334
                )
 
335
            )
 
336
{
 
337
    Size sz = get<0>(GetParam());
 
338
    int mode = get<1>(GetParam());
 
339
    ChPair ch = getConversionInfo(mode);
 
340
 
 
341
    Mat src(sz, CV_8UC(ch.scn));
 
342
    Mat dst(sz.height + sz.height / 2, sz.width, CV_8UC(ch.dcn));
 
343
 
 
344
    declare.time(100);
 
345
    declare.in(src, WARMUP_RNG).out(dst);
 
346
 
 
347
    int runs = (sz.width <= 640) ? 10 : 1;
 
348
    TEST_CYCLE_MULTIRUN(runs) cvtColor(src, dst, mode, ch.dcn);
 
349
 
 
350
    SANITY_CHECK(dst, 1);
 
351
}
 
352
 
 
353
CV_ENUM(EdgeAwareBayerMode, COLOR_BayerBG2BGR_EA, COLOR_BayerGB2BGR_EA, COLOR_BayerRG2BGR_EA, COLOR_BayerGR2BGR_EA)
 
354
 
 
355
typedef std::tr1::tuple<Size, EdgeAwareBayerMode> EdgeAwareParams;
 
356
typedef perf::TestBaseWithParam<EdgeAwareParams> EdgeAwareDemosaicingTest;
 
357
 
 
358
PERF_TEST_P(EdgeAwareDemosaicingTest, demosaicingEA,
 
359
            testing::Combine(
 
360
                testing::Values(szVGA, sz720p, sz1080p, Size(130, 60)),
 
361
                EdgeAwareBayerMode::all()
 
362
                )
 
363
            )
 
364
{
 
365
    Size sz = get<0>(GetParam());
 
366
    int mode = get<1>(GetParam());
 
367
 
 
368
    Mat src(sz, CV_8UC1);
 
369
    Mat dst(sz, CV_8UC3);
 
370
 
 
371
    declare.in(src, WARMUP_RNG).out(dst);
 
372
 
 
373
    TEST_CYCLE() cvtColor(src, dst, mode, 3);
 
374
 
 
375
    SANITY_CHECK(dst, 1);
 
376
}