1*77c1e3ccSAndroid Build Coastguard Worker /*
2*77c1e3ccSAndroid Build Coastguard Worker * Copyright (c) 2016, Alliance for Open Media. All rights reserved.
3*77c1e3ccSAndroid Build Coastguard Worker *
4*77c1e3ccSAndroid Build Coastguard Worker * This source code is subject to the terms of the BSD 2 Clause License and
5*77c1e3ccSAndroid Build Coastguard Worker * the Alliance for Open Media Patent License 1.0. If the BSD 2 Clause License
6*77c1e3ccSAndroid Build Coastguard Worker * was not distributed with this source code in the LICENSE file, you can
7*77c1e3ccSAndroid Build Coastguard Worker * obtain it at www.aomedia.org/license/software. If the Alliance for Open
8*77c1e3ccSAndroid Build Coastguard Worker * Media Patent License 1.0 was not distributed with this source code in the
9*77c1e3ccSAndroid Build Coastguard Worker * PATENTS file, you can obtain it at www.aomedia.org/license/patent.
10*77c1e3ccSAndroid Build Coastguard Worker */
11*77c1e3ccSAndroid Build Coastguard Worker
12*77c1e3ccSAndroid Build Coastguard Worker #include <math.h>
13*77c1e3ccSAndroid Build Coastguard Worker #include <stdlib.h>
14*77c1e3ccSAndroid Build Coastguard Worker #include <new>
15*77c1e3ccSAndroid Build Coastguard Worker #include <tuple>
16*77c1e3ccSAndroid Build Coastguard Worker
17*77c1e3ccSAndroid Build Coastguard Worker #include "gtest/gtest.h"
18*77c1e3ccSAndroid Build Coastguard Worker #include "test/acm_random.h"
19*77c1e3ccSAndroid Build Coastguard Worker #include "test/util.h"
20*77c1e3ccSAndroid Build Coastguard Worker
21*77c1e3ccSAndroid Build Coastguard Worker #include "config/aom_config.h"
22*77c1e3ccSAndroid Build Coastguard Worker
23*77c1e3ccSAndroid Build Coastguard Worker #include "aom_dsp/psnr.h"
24*77c1e3ccSAndroid Build Coastguard Worker #include "aom_dsp/ssim.h"
25*77c1e3ccSAndroid Build Coastguard Worker #include "aom_ports/mem.h"
26*77c1e3ccSAndroid Build Coastguard Worker #include "aom_scale/yv12config.h"
27*77c1e3ccSAndroid Build Coastguard Worker
28*77c1e3ccSAndroid Build Coastguard Worker using libaom_test::ACMRandom;
29*77c1e3ccSAndroid Build Coastguard Worker
30*77c1e3ccSAndroid Build Coastguard Worker namespace {
31*77c1e3ccSAndroid Build Coastguard Worker
32*77c1e3ccSAndroid Build Coastguard Worker typedef double (*LBDMetricFunc)(const YV12_BUFFER_CONFIG *source,
33*77c1e3ccSAndroid Build Coastguard Worker const YV12_BUFFER_CONFIG *dest);
34*77c1e3ccSAndroid Build Coastguard Worker typedef double (*HBDMetricFunc)(const YV12_BUFFER_CONFIG *source,
35*77c1e3ccSAndroid Build Coastguard Worker const YV12_BUFFER_CONFIG *dest, uint32_t in_bd,
36*77c1e3ccSAndroid Build Coastguard Worker uint32_t bd);
37*77c1e3ccSAndroid Build Coastguard Worker
compute_hbd_psnr(const YV12_BUFFER_CONFIG * source,const YV12_BUFFER_CONFIG * dest,uint32_t in_bd,uint32_t bd)38*77c1e3ccSAndroid Build Coastguard Worker double compute_hbd_psnr(const YV12_BUFFER_CONFIG *source,
39*77c1e3ccSAndroid Build Coastguard Worker const YV12_BUFFER_CONFIG *dest, uint32_t in_bd,
40*77c1e3ccSAndroid Build Coastguard Worker uint32_t bd) {
41*77c1e3ccSAndroid Build Coastguard Worker PSNR_STATS psnr;
42*77c1e3ccSAndroid Build Coastguard Worker aom_calc_highbd_psnr(source, dest, &psnr, bd, in_bd);
43*77c1e3ccSAndroid Build Coastguard Worker return psnr.psnr[0];
44*77c1e3ccSAndroid Build Coastguard Worker }
45*77c1e3ccSAndroid Build Coastguard Worker
compute_psnr(const YV12_BUFFER_CONFIG * source,const YV12_BUFFER_CONFIG * dest)46*77c1e3ccSAndroid Build Coastguard Worker double compute_psnr(const YV12_BUFFER_CONFIG *source,
47*77c1e3ccSAndroid Build Coastguard Worker const YV12_BUFFER_CONFIG *dest) {
48*77c1e3ccSAndroid Build Coastguard Worker PSNR_STATS psnr;
49*77c1e3ccSAndroid Build Coastguard Worker aom_calc_psnr(source, dest, &psnr);
50*77c1e3ccSAndroid Build Coastguard Worker return psnr.psnr[0];
51*77c1e3ccSAndroid Build Coastguard Worker }
52*77c1e3ccSAndroid Build Coastguard Worker
compute_hbd_psnrhvs(const YV12_BUFFER_CONFIG * source,const YV12_BUFFER_CONFIG * dest,uint32_t in_bd,uint32_t bd)53*77c1e3ccSAndroid Build Coastguard Worker double compute_hbd_psnrhvs(const YV12_BUFFER_CONFIG *source,
54*77c1e3ccSAndroid Build Coastguard Worker const YV12_BUFFER_CONFIG *dest, uint32_t in_bd,
55*77c1e3ccSAndroid Build Coastguard Worker uint32_t bd) {
56*77c1e3ccSAndroid Build Coastguard Worker double tempy, tempu, tempv;
57*77c1e3ccSAndroid Build Coastguard Worker return aom_psnrhvs(source, dest, &tempy, &tempu, &tempv, bd, in_bd);
58*77c1e3ccSAndroid Build Coastguard Worker }
59*77c1e3ccSAndroid Build Coastguard Worker
compute_psnrhvs(const YV12_BUFFER_CONFIG * source,const YV12_BUFFER_CONFIG * dest)60*77c1e3ccSAndroid Build Coastguard Worker double compute_psnrhvs(const YV12_BUFFER_CONFIG *source,
61*77c1e3ccSAndroid Build Coastguard Worker const YV12_BUFFER_CONFIG *dest) {
62*77c1e3ccSAndroid Build Coastguard Worker double tempy, tempu, tempv;
63*77c1e3ccSAndroid Build Coastguard Worker return aom_psnrhvs(source, dest, &tempy, &tempu, &tempv, 8, 8);
64*77c1e3ccSAndroid Build Coastguard Worker }
65*77c1e3ccSAndroid Build Coastguard Worker
compute_hbd_fastssim(const YV12_BUFFER_CONFIG * source,const YV12_BUFFER_CONFIG * dest,uint32_t in_bd,uint32_t bd)66*77c1e3ccSAndroid Build Coastguard Worker double compute_hbd_fastssim(const YV12_BUFFER_CONFIG *source,
67*77c1e3ccSAndroid Build Coastguard Worker const YV12_BUFFER_CONFIG *dest, uint32_t in_bd,
68*77c1e3ccSAndroid Build Coastguard Worker uint32_t bd) {
69*77c1e3ccSAndroid Build Coastguard Worker double tempy, tempu, tempv;
70*77c1e3ccSAndroid Build Coastguard Worker return aom_calc_fastssim(source, dest, &tempy, &tempu, &tempv, bd, in_bd);
71*77c1e3ccSAndroid Build Coastguard Worker }
72*77c1e3ccSAndroid Build Coastguard Worker
compute_fastssim(const YV12_BUFFER_CONFIG * source,const YV12_BUFFER_CONFIG * dest)73*77c1e3ccSAndroid Build Coastguard Worker double compute_fastssim(const YV12_BUFFER_CONFIG *source,
74*77c1e3ccSAndroid Build Coastguard Worker const YV12_BUFFER_CONFIG *dest) {
75*77c1e3ccSAndroid Build Coastguard Worker double tempy, tempu, tempv;
76*77c1e3ccSAndroid Build Coastguard Worker return aom_calc_fastssim(source, dest, &tempy, &tempu, &tempv, 8, 8);
77*77c1e3ccSAndroid Build Coastguard Worker }
78*77c1e3ccSAndroid Build Coastguard Worker
compute_hbd_aomssim(const YV12_BUFFER_CONFIG * source,const YV12_BUFFER_CONFIG * dest,uint32_t in_bd,uint32_t bd)79*77c1e3ccSAndroid Build Coastguard Worker double compute_hbd_aomssim(const YV12_BUFFER_CONFIG *source,
80*77c1e3ccSAndroid Build Coastguard Worker const YV12_BUFFER_CONFIG *dest, uint32_t in_bd,
81*77c1e3ccSAndroid Build Coastguard Worker uint32_t bd) {
82*77c1e3ccSAndroid Build Coastguard Worker double ssim[2], weight[2];
83*77c1e3ccSAndroid Build Coastguard Worker aom_highbd_calc_ssim(source, dest, weight, bd, in_bd, ssim);
84*77c1e3ccSAndroid Build Coastguard Worker return 100 * pow(ssim[0] / weight[0], 8.0);
85*77c1e3ccSAndroid Build Coastguard Worker }
86*77c1e3ccSAndroid Build Coastguard Worker
compute_aomssim(const YV12_BUFFER_CONFIG * source,const YV12_BUFFER_CONFIG * dest)87*77c1e3ccSAndroid Build Coastguard Worker double compute_aomssim(const YV12_BUFFER_CONFIG *source,
88*77c1e3ccSAndroid Build Coastguard Worker const YV12_BUFFER_CONFIG *dest) {
89*77c1e3ccSAndroid Build Coastguard Worker double ssim, weight;
90*77c1e3ccSAndroid Build Coastguard Worker aom_lowbd_calc_ssim(source, dest, &weight, &ssim);
91*77c1e3ccSAndroid Build Coastguard Worker return 100 * pow(ssim / weight, 8.0);
92*77c1e3ccSAndroid Build Coastguard Worker }
93*77c1e3ccSAndroid Build Coastguard Worker
94*77c1e3ccSAndroid Build Coastguard Worker class HBDMetricsTestBase {
95*77c1e3ccSAndroid Build Coastguard Worker public:
96*77c1e3ccSAndroid Build Coastguard Worker virtual ~HBDMetricsTestBase() = default;
97*77c1e3ccSAndroid Build Coastguard Worker
98*77c1e3ccSAndroid Build Coastguard Worker protected:
RunAccuracyCheck()99*77c1e3ccSAndroid Build Coastguard Worker void RunAccuracyCheck() {
100*77c1e3ccSAndroid Build Coastguard Worker const int width = 1920;
101*77c1e3ccSAndroid Build Coastguard Worker const int height = 1080;
102*77c1e3ccSAndroid Build Coastguard Worker size_t i = 0;
103*77c1e3ccSAndroid Build Coastguard Worker const uint8_t kPixFiller = 128;
104*77c1e3ccSAndroid Build Coastguard Worker YV12_BUFFER_CONFIG lbd_src, lbd_dst;
105*77c1e3ccSAndroid Build Coastguard Worker YV12_BUFFER_CONFIG hbd_src, hbd_dst;
106*77c1e3ccSAndroid Build Coastguard Worker ACMRandom rnd(ACMRandom::DeterministicSeed());
107*77c1e3ccSAndroid Build Coastguard Worker double lbd_db, hbd_db;
108*77c1e3ccSAndroid Build Coastguard Worker
109*77c1e3ccSAndroid Build Coastguard Worker memset(&lbd_src, 0, sizeof(lbd_src));
110*77c1e3ccSAndroid Build Coastguard Worker memset(&lbd_dst, 0, sizeof(lbd_dst));
111*77c1e3ccSAndroid Build Coastguard Worker memset(&hbd_src, 0, sizeof(hbd_src));
112*77c1e3ccSAndroid Build Coastguard Worker memset(&hbd_dst, 0, sizeof(hbd_dst));
113*77c1e3ccSAndroid Build Coastguard Worker
114*77c1e3ccSAndroid Build Coastguard Worker aom_alloc_frame_buffer(&lbd_src, width, height, 1, 1, 0, 32, 16, false, 0);
115*77c1e3ccSAndroid Build Coastguard Worker aom_alloc_frame_buffer(&lbd_dst, width, height, 1, 1, 0, 32, 16, false, 0);
116*77c1e3ccSAndroid Build Coastguard Worker aom_alloc_frame_buffer(&hbd_src, width, height, 1, 1, 1, 32, 16, false, 0);
117*77c1e3ccSAndroid Build Coastguard Worker aom_alloc_frame_buffer(&hbd_dst, width, height, 1, 1, 1, 32, 16, false, 0);
118*77c1e3ccSAndroid Build Coastguard Worker
119*77c1e3ccSAndroid Build Coastguard Worker memset(lbd_src.buffer_alloc, kPixFiller, lbd_src.buffer_alloc_sz);
120*77c1e3ccSAndroid Build Coastguard Worker while (i < lbd_src.buffer_alloc_sz) {
121*77c1e3ccSAndroid Build Coastguard Worker uint16_t spel, dpel;
122*77c1e3ccSAndroid Build Coastguard Worker spel = lbd_src.buffer_alloc[i];
123*77c1e3ccSAndroid Build Coastguard Worker // Create some distortion for dst buffer.
124*77c1e3ccSAndroid Build Coastguard Worker dpel = rnd.Rand8();
125*77c1e3ccSAndroid Build Coastguard Worker lbd_dst.buffer_alloc[i] = (uint8_t)dpel;
126*77c1e3ccSAndroid Build Coastguard Worker ((uint16_t *)(hbd_src.buffer_alloc))[i] = spel << (bit_depth_ - 8);
127*77c1e3ccSAndroid Build Coastguard Worker ((uint16_t *)(hbd_dst.buffer_alloc))[i] = dpel << (bit_depth_ - 8);
128*77c1e3ccSAndroid Build Coastguard Worker i++;
129*77c1e3ccSAndroid Build Coastguard Worker }
130*77c1e3ccSAndroid Build Coastguard Worker
131*77c1e3ccSAndroid Build Coastguard Worker lbd_db = lbd_metric_(&lbd_src, &lbd_dst);
132*77c1e3ccSAndroid Build Coastguard Worker hbd_db = hbd_metric_(&hbd_src, &hbd_dst, input_bit_depth_, bit_depth_);
133*77c1e3ccSAndroid Build Coastguard Worker EXPECT_LE(fabs(lbd_db - hbd_db), threshold_);
134*77c1e3ccSAndroid Build Coastguard Worker
135*77c1e3ccSAndroid Build Coastguard Worker i = 0;
136*77c1e3ccSAndroid Build Coastguard Worker while (i < lbd_src.buffer_alloc_sz) {
137*77c1e3ccSAndroid Build Coastguard Worker uint16_t dpel;
138*77c1e3ccSAndroid Build Coastguard Worker // Create some small distortion for dst buffer.
139*77c1e3ccSAndroid Build Coastguard Worker dpel = 120 + (rnd.Rand8() >> 4);
140*77c1e3ccSAndroid Build Coastguard Worker lbd_dst.buffer_alloc[i] = (uint8_t)dpel;
141*77c1e3ccSAndroid Build Coastguard Worker ((uint16_t *)(hbd_dst.buffer_alloc))[i] = dpel << (bit_depth_ - 8);
142*77c1e3ccSAndroid Build Coastguard Worker i++;
143*77c1e3ccSAndroid Build Coastguard Worker }
144*77c1e3ccSAndroid Build Coastguard Worker
145*77c1e3ccSAndroid Build Coastguard Worker lbd_db = lbd_metric_(&lbd_src, &lbd_dst);
146*77c1e3ccSAndroid Build Coastguard Worker hbd_db = hbd_metric_(&hbd_src, &hbd_dst, input_bit_depth_, bit_depth_);
147*77c1e3ccSAndroid Build Coastguard Worker EXPECT_LE(fabs(lbd_db - hbd_db), threshold_);
148*77c1e3ccSAndroid Build Coastguard Worker
149*77c1e3ccSAndroid Build Coastguard Worker i = 0;
150*77c1e3ccSAndroid Build Coastguard Worker while (i < lbd_src.buffer_alloc_sz) {
151*77c1e3ccSAndroid Build Coastguard Worker uint16_t dpel;
152*77c1e3ccSAndroid Build Coastguard Worker // Create some small distortion for dst buffer.
153*77c1e3ccSAndroid Build Coastguard Worker dpel = 126 + (rnd.Rand8() >> 6);
154*77c1e3ccSAndroid Build Coastguard Worker lbd_dst.buffer_alloc[i] = (uint8_t)dpel;
155*77c1e3ccSAndroid Build Coastguard Worker ((uint16_t *)(hbd_dst.buffer_alloc))[i] = dpel << (bit_depth_ - 8);
156*77c1e3ccSAndroid Build Coastguard Worker i++;
157*77c1e3ccSAndroid Build Coastguard Worker }
158*77c1e3ccSAndroid Build Coastguard Worker
159*77c1e3ccSAndroid Build Coastguard Worker lbd_db = lbd_metric_(&lbd_src, &lbd_dst);
160*77c1e3ccSAndroid Build Coastguard Worker hbd_db = hbd_metric_(&hbd_src, &hbd_dst, input_bit_depth_, bit_depth_);
161*77c1e3ccSAndroid Build Coastguard Worker EXPECT_LE(fabs(lbd_db - hbd_db), threshold_);
162*77c1e3ccSAndroid Build Coastguard Worker
163*77c1e3ccSAndroid Build Coastguard Worker aom_free_frame_buffer(&lbd_src);
164*77c1e3ccSAndroid Build Coastguard Worker aom_free_frame_buffer(&lbd_dst);
165*77c1e3ccSAndroid Build Coastguard Worker aom_free_frame_buffer(&hbd_src);
166*77c1e3ccSAndroid Build Coastguard Worker aom_free_frame_buffer(&hbd_dst);
167*77c1e3ccSAndroid Build Coastguard Worker }
168*77c1e3ccSAndroid Build Coastguard Worker
169*77c1e3ccSAndroid Build Coastguard Worker int input_bit_depth_;
170*77c1e3ccSAndroid Build Coastguard Worker int bit_depth_;
171*77c1e3ccSAndroid Build Coastguard Worker double threshold_;
172*77c1e3ccSAndroid Build Coastguard Worker LBDMetricFunc lbd_metric_;
173*77c1e3ccSAndroid Build Coastguard Worker HBDMetricFunc hbd_metric_;
174*77c1e3ccSAndroid Build Coastguard Worker };
175*77c1e3ccSAndroid Build Coastguard Worker
176*77c1e3ccSAndroid Build Coastguard Worker typedef std::tuple<LBDMetricFunc, HBDMetricFunc, int, int, double>
177*77c1e3ccSAndroid Build Coastguard Worker MetricTestTParam;
178*77c1e3ccSAndroid Build Coastguard Worker class HBDMetricsTest : public HBDMetricsTestBase,
179*77c1e3ccSAndroid Build Coastguard Worker public ::testing::TestWithParam<MetricTestTParam> {
180*77c1e3ccSAndroid Build Coastguard Worker public:
SetUp()181*77c1e3ccSAndroid Build Coastguard Worker void SetUp() override {
182*77c1e3ccSAndroid Build Coastguard Worker lbd_metric_ = GET_PARAM(0);
183*77c1e3ccSAndroid Build Coastguard Worker hbd_metric_ = GET_PARAM(1);
184*77c1e3ccSAndroid Build Coastguard Worker input_bit_depth_ = GET_PARAM(2);
185*77c1e3ccSAndroid Build Coastguard Worker bit_depth_ = GET_PARAM(3);
186*77c1e3ccSAndroid Build Coastguard Worker threshold_ = GET_PARAM(4);
187*77c1e3ccSAndroid Build Coastguard Worker }
188*77c1e3ccSAndroid Build Coastguard Worker };
189*77c1e3ccSAndroid Build Coastguard Worker
TEST_P(HBDMetricsTest,RunAccuracyCheck)190*77c1e3ccSAndroid Build Coastguard Worker TEST_P(HBDMetricsTest, RunAccuracyCheck) { RunAccuracyCheck(); }
191*77c1e3ccSAndroid Build Coastguard Worker
192*77c1e3ccSAndroid Build Coastguard Worker // Allow small variation due to floating point operations.
193*77c1e3ccSAndroid Build Coastguard Worker static const double kSsim_thresh = 0.001;
194*77c1e3ccSAndroid Build Coastguard Worker // Allow some additional errors accumulated in floating point operations.
195*77c1e3ccSAndroid Build Coastguard Worker static const double kFSsim_thresh = 0.03;
196*77c1e3ccSAndroid Build Coastguard Worker // Allow some extra variation due to rounding error accumulated in dct.
197*77c1e3ccSAndroid Build Coastguard Worker static const double kPhvs_thresh = 0.3;
198*77c1e3ccSAndroid Build Coastguard Worker
199*77c1e3ccSAndroid Build Coastguard Worker INSTANTIATE_TEST_SUITE_P(
200*77c1e3ccSAndroid Build Coastguard Worker AOMSSIM, HBDMetricsTest,
201*77c1e3ccSAndroid Build Coastguard Worker ::testing::Values(MetricTestTParam(&compute_aomssim, &compute_hbd_aomssim,
202*77c1e3ccSAndroid Build Coastguard Worker 8, 10, kSsim_thresh),
203*77c1e3ccSAndroid Build Coastguard Worker MetricTestTParam(&compute_aomssim, &compute_hbd_aomssim,
204*77c1e3ccSAndroid Build Coastguard Worker 10, 10, kPhvs_thresh),
205*77c1e3ccSAndroid Build Coastguard Worker MetricTestTParam(&compute_aomssim, &compute_hbd_aomssim,
206*77c1e3ccSAndroid Build Coastguard Worker 8, 12, kSsim_thresh),
207*77c1e3ccSAndroid Build Coastguard Worker MetricTestTParam(&compute_aomssim, &compute_hbd_aomssim,
208*77c1e3ccSAndroid Build Coastguard Worker 12, 12, kPhvs_thresh)));
209*77c1e3ccSAndroid Build Coastguard Worker INSTANTIATE_TEST_SUITE_P(
210*77c1e3ccSAndroid Build Coastguard Worker FASTSSIM, HBDMetricsTest,
211*77c1e3ccSAndroid Build Coastguard Worker ::testing::Values(MetricTestTParam(&compute_fastssim, &compute_hbd_fastssim,
212*77c1e3ccSAndroid Build Coastguard Worker 8, 10, kFSsim_thresh),
213*77c1e3ccSAndroid Build Coastguard Worker MetricTestTParam(&compute_fastssim, &compute_hbd_fastssim,
214*77c1e3ccSAndroid Build Coastguard Worker 10, 10, kFSsim_thresh),
215*77c1e3ccSAndroid Build Coastguard Worker MetricTestTParam(&compute_fastssim, &compute_hbd_fastssim,
216*77c1e3ccSAndroid Build Coastguard Worker 8, 12, kFSsim_thresh),
217*77c1e3ccSAndroid Build Coastguard Worker MetricTestTParam(&compute_fastssim, &compute_hbd_fastssim,
218*77c1e3ccSAndroid Build Coastguard Worker 12, 12, kFSsim_thresh)));
219*77c1e3ccSAndroid Build Coastguard Worker INSTANTIATE_TEST_SUITE_P(
220*77c1e3ccSAndroid Build Coastguard Worker PSNRHVS, HBDMetricsTest,
221*77c1e3ccSAndroid Build Coastguard Worker ::testing::Values(MetricTestTParam(&compute_psnrhvs, &compute_hbd_psnrhvs,
222*77c1e3ccSAndroid Build Coastguard Worker 8, 10, kPhvs_thresh),
223*77c1e3ccSAndroid Build Coastguard Worker MetricTestTParam(&compute_psnrhvs, &compute_hbd_psnrhvs,
224*77c1e3ccSAndroid Build Coastguard Worker 10, 10, kPhvs_thresh),
225*77c1e3ccSAndroid Build Coastguard Worker MetricTestTParam(&compute_psnrhvs, &compute_hbd_psnrhvs,
226*77c1e3ccSAndroid Build Coastguard Worker 8, 12, kPhvs_thresh),
227*77c1e3ccSAndroid Build Coastguard Worker MetricTestTParam(&compute_psnrhvs, &compute_hbd_psnrhvs,
228*77c1e3ccSAndroid Build Coastguard Worker 12, 12, kPhvs_thresh)));
229*77c1e3ccSAndroid Build Coastguard Worker INSTANTIATE_TEST_SUITE_P(
230*77c1e3ccSAndroid Build Coastguard Worker PSNR, HBDMetricsTest,
231*77c1e3ccSAndroid Build Coastguard Worker ::testing::Values(
232*77c1e3ccSAndroid Build Coastguard Worker MetricTestTParam(&compute_psnr, &compute_hbd_psnr, 8, 10, kPhvs_thresh),
233*77c1e3ccSAndroid Build Coastguard Worker MetricTestTParam(&compute_psnr, &compute_hbd_psnr, 10, 10,
234*77c1e3ccSAndroid Build Coastguard Worker kPhvs_thresh),
235*77c1e3ccSAndroid Build Coastguard Worker MetricTestTParam(&compute_psnr, &compute_hbd_psnr, 8, 12, kPhvs_thresh),
236*77c1e3ccSAndroid Build Coastguard Worker MetricTestTParam(&compute_psnr, &compute_hbd_psnr, 12, 12,
237*77c1e3ccSAndroid Build Coastguard Worker kPhvs_thresh)));
238*77c1e3ccSAndroid Build Coastguard Worker } // namespace
239