Home | History | Annotate | Download | only in perf
      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 #else
    267     SANITY_CHECK(dst, 1);
    268 #endif
    269 }
    270 
    271 typedef std::tr1::tuple<Size, CvtModeBayer> Size_CvtMode_Bayer_t;
    272 typedef perf::TestBaseWithParam<Size_CvtMode_Bayer_t> Size_CvtMode_Bayer;
    273 
    274 PERF_TEST_P(Size_CvtMode_Bayer, cvtColorBayer8u,
    275             testing::Combine(
    276                 testing::Values(::perf::szODD, ::perf::szVGA),
    277                 CvtModeBayer::all()
    278                 )
    279             )
    280 {
    281     Size sz = get<0>(GetParam());
    282     int mode = get<1>(GetParam());
    283     ChPair ch = getConversionInfo(mode);
    284     mode %= COLOR_COLORCVT_MAX;
    285 
    286     Mat src(sz, CV_8UC(ch.scn));
    287     Mat dst(sz, CV_8UC(ch.dcn));
    288 
    289     declare.time(100);
    290     declare.in(src, WARMUP_RNG).out(dst);
    291 
    292     TEST_CYCLE() cvtColor(src, dst, mode, ch.dcn);
    293 
    294     SANITY_CHECK(dst, 1);
    295 }
    296 
    297 typedef std::tr1::tuple<Size, CvtMode2> Size_CvtMode2_t;
    298 typedef perf::TestBaseWithParam<Size_CvtMode2_t> Size_CvtMode2;
    299 
    300 PERF_TEST_P(Size_CvtMode2, cvtColorYUV420,
    301             testing::Combine(
    302                 testing::Values(szVGA, sz1080p, Size(130, 60)),
    303                 CvtMode2::all()
    304                 )
    305             )
    306 {
    307     Size sz = get<0>(GetParam());
    308     int mode = get<1>(GetParam());
    309     ChPair ch = getConversionInfo(mode);
    310 
    311     Mat src(sz.height + sz.height / 2, sz.width, CV_8UC(ch.scn));
    312     Mat dst(sz, CV_8UC(ch.dcn));
    313 
    314     declare.in(src, WARMUP_RNG).out(dst);
    315 
    316     int runs = (sz.width <= 640) ? 8 : 1;
    317     TEST_CYCLE_MULTIRUN(runs) cvtColor(src, dst, mode, ch.dcn);
    318 
    319     SANITY_CHECK(dst, 1);
    320 }
    321 
    322 typedef std::tr1::tuple<Size, CvtMode3> Size_CvtMode3_t;
    323 typedef perf::TestBaseWithParam<Size_CvtMode3_t> Size_CvtMode3;
    324 
    325 PERF_TEST_P(Size_CvtMode3, cvtColorRGB2YUV420p,
    326             testing::Combine(
    327                 testing::Values(szVGA, sz720p, sz1080p, Size(130, 60)),
    328                 CvtMode3::all()
    329                 )
    330             )
    331 {
    332     Size sz = get<0>(GetParam());
    333     int mode = get<1>(GetParam());
    334     ChPair ch = getConversionInfo(mode);
    335 
    336     Mat src(sz, CV_8UC(ch.scn));
    337     Mat dst(sz.height + sz.height / 2, sz.width, CV_8UC(ch.dcn));
    338 
    339     declare.time(100);
    340     declare.in(src, WARMUP_RNG).out(dst);
    341 
    342     int runs = (sz.width <= 640) ? 10 : 1;
    343     TEST_CYCLE_MULTIRUN(runs) cvtColor(src, dst, mode, ch.dcn);
    344 
    345     SANITY_CHECK(dst, 1);
    346 }
    347 
    348 CV_ENUM(EdgeAwareBayerMode, COLOR_BayerBG2BGR_EA, COLOR_BayerGB2BGR_EA, COLOR_BayerRG2BGR_EA, COLOR_BayerGR2BGR_EA)
    349 
    350 typedef std::tr1::tuple<Size, EdgeAwareBayerMode> EdgeAwareParams;
    351 typedef perf::TestBaseWithParam<EdgeAwareParams> EdgeAwareDemosaicingTest;
    352 
    353 PERF_TEST_P(EdgeAwareDemosaicingTest, demosaicingEA,
    354             testing::Combine(
    355                 testing::Values(szVGA, sz720p, sz1080p, Size(130, 60)),
    356                 EdgeAwareBayerMode::all()
    357                 )
    358             )
    359 {
    360     Size sz = get<0>(GetParam());
    361     int mode = get<1>(GetParam());
    362 
    363     Mat src(sz, CV_8UC1);
    364     Mat dst(sz, CV_8UC3);
    365 
    366     declare.in(src, WARMUP_RNG).out(dst);
    367 
    368     TEST_CYCLE() cvtColor(src, dst, mode, 3);
    369 
    370     SANITY_CHECK(dst, 1);
    371 }
    372