1793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler#include "perf_precomp.hpp"
2793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
3793ee12c6df9cad3806238d32528c49a3ff9331dNoah Preslerusing namespace std;
4793ee12c6df9cad3806238d32528c49a3ff9331dNoah Preslerusing namespace cv;
5793ee12c6df9cad3806238d32528c49a3ff9331dNoah Preslerusing namespace perf;
6793ee12c6df9cad3806238d32528c49a3ff9331dNoah Preslerusing std::tr1::make_tuple;
7793ee12c6df9cad3806238d32528c49a3ff9331dNoah Preslerusing std::tr1::get;
8793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
9793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler#define TYPICAL_MAT_TYPES_ADWEIGHTED  CV_8UC1, CV_8UC4, CV_8SC1, CV_16UC1, CV_16SC1, CV_32SC1
10793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler#define TYPICAL_MATS_ADWEIGHTED       testing::Combine(testing::Values(szVGA, sz720p, sz1080p), testing::Values(TYPICAL_MAT_TYPES_ADWEIGHTED))
11793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
12793ee12c6df9cad3806238d32528c49a3ff9331dNoah PreslerPERF_TEST_P(Size_MatType, addWeighted, TYPICAL_MATS_ADWEIGHTED)
13793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler{
14793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    Size size = get<0>(GetParam());
15793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    int type = get<1>(GetParam());
16793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    Mat src1(size, type);
17793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    Mat src2(size, type);
18793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    double alpha = 3.75;
19793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    double beta = -0.125;
20793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    double gamma = 100.0;
21793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
22793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    Mat dst(size, type);
23793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
24793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    declare.in(src1, src2, dst, WARMUP_RNG).out(dst);
25793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
26793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    if (CV_MAT_DEPTH(type) == CV_32S)
27793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    {
28793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        // there might be not enough precision for integers
29793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        src1 /= 2048;
30793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        src2 /= 2048;
31793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    }
32793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
33793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    TEST_CYCLE() cv::addWeighted( src1, alpha, src2, beta, gamma, dst, dst.type() );
34793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
35793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    SANITY_CHECK(dst, 1);
36793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler}
37