Extend HBDMetricTest
This commit extends the HBDMetricTests to handle testing for metric
computation where input source depth is different from working bit
depth.
Change-Id: I5d11101cc9603a3fd09e8439816bb982a0f1b654
diff --git a/test/hbd_metrics_test.cc b/test/hbd_metrics_test.cc
index dac001f..e6ceaf1 100644
--- a/test/hbd_metrics_test.cc
+++ b/test/hbd_metrics_test.cc
@@ -31,12 +31,13 @@
const YV12_BUFFER_CONFIG *dest);
typedef double (*HBDMetricFunc)(const YV12_BUFFER_CONFIG *source,
const YV12_BUFFER_CONFIG *dest,
- uint32_t bd);
+ uint32_t in_bd, uint32_t bd);
double compute_hbd_psnr(const YV12_BUFFER_CONFIG *source,
- const YV12_BUFFER_CONFIG *dest, uint32_t bit_depth) {
+ const YV12_BUFFER_CONFIG *dest,
+ uint32_t in_bd, uint32_t bd) {
PSNR_STATS psnr;
- calc_highbd_psnr(source, dest, &psnr, bit_depth, bit_depth);
+ calc_highbd_psnr(source, dest, &psnr, bd, in_bd);
return psnr.psnr[0];
}
@@ -48,11 +49,11 @@
}
double compute_hbd_psnrhvs(const YV12_BUFFER_CONFIG *source,
- const YV12_BUFFER_CONFIG *dest,
- uint32_t bit_depth) {
+ const YV12_BUFFER_CONFIG *dest,
+ uint32_t in_bd, uint32_t bd) {
double tempy, tempu, tempv;
return vpx_psnrhvs(source, dest,
- &tempy, &tempu, &tempv, bit_depth);
+ &tempy, &tempu, &tempv, bd);
}
double compute_psnrhvs(const YV12_BUFFER_CONFIG *source,
@@ -64,10 +65,10 @@
double compute_hbd_fastssim(const YV12_BUFFER_CONFIG *source,
const YV12_BUFFER_CONFIG *dest,
- uint32_t bit_depth) {
+ uint32_t in_bd, uint32_t bd) {
double tempy, tempu, tempv;
return vpx_calc_fastssim(source, dest,
- &tempy, &tempu, &tempv, bit_depth);
+ &tempy, &tempu, &tempv, bd);
}
double compute_fastssim(const YV12_BUFFER_CONFIG *source,
@@ -79,9 +80,9 @@
double compute_hbd_vpxssim(const YV12_BUFFER_CONFIG *source,
const YV12_BUFFER_CONFIG *dest,
- uint32_t bit_depth) {
+ uint32_t in_bd, uint32_t bd) {
double ssim, weight;
- ssim = vpx_highbd_calc_ssim(source, dest, &weight, bit_depth);
+ ssim = vpx_highbd_calc_ssim(source, dest, &weight, bd);
return 100 * pow(ssim / weight, 8.0);
}
@@ -131,7 +132,7 @@
}
lbd_db = lbd_metric_(&lbd_src, &lbd_dst);
- hbd_db = hbd_metric_(&hbd_src, &hbd_dst, bit_depth_);
+ hbd_db = hbd_metric_(&hbd_src, &hbd_dst, input_bit_depth_, bit_depth_);
EXPECT_LE(fabs(lbd_db - hbd_db), threshold_);
i = 0;
@@ -145,7 +146,7 @@
}
lbd_db = lbd_metric_(&lbd_src, &lbd_dst);
- hbd_db = hbd_metric_(&hbd_src, &hbd_dst, bit_depth_);
+ hbd_db = hbd_metric_(&hbd_src, &hbd_dst, input_bit_depth_, bit_depth_);
EXPECT_LE(fabs(lbd_db - hbd_db), threshold_);
i = 0;
@@ -159,7 +160,7 @@
}
lbd_db = lbd_metric_(&lbd_src, &lbd_dst);
- hbd_db = hbd_metric_(&hbd_src, &hbd_dst, bit_depth_);
+ hbd_db = hbd_metric_(&hbd_src, &hbd_dst, input_bit_depth_, bit_depth_);
EXPECT_LE(fabs(lbd_db - hbd_db), threshold_);
vpx_free_frame_buffer(&lbd_src);
@@ -168,6 +169,7 @@
vpx_free_frame_buffer(&hbd_dst);
}
+ int input_bit_depth_;
int bit_depth_;
double threshold_;
LBDMetricFunc lbd_metric_;
@@ -175,7 +177,7 @@
};
typedef std::tr1::tuple<LBDMetricFunc,
- HBDMetricFunc, int, double> MetricTestTParam;
+ HBDMetricFunc, int, int, double> MetricTestTParam;
class HBDMetricsTest
: public HBDMetricsTestBase,
public ::testing::TestWithParam<MetricTestTParam> {
@@ -183,8 +185,9 @@
virtual void SetUp() {
lbd_metric_ = GET_PARAM(0);
hbd_metric_ = GET_PARAM(1);
- bit_depth_ = GET_PARAM(2);
- threshold_ = GET_PARAM(3);
+ input_bit_depth_ = GET_PARAM(2);
+ bit_depth_ = GET_PARAM(3);
+ threshold_ = GET_PARAM(4);
}
virtual void TearDown() {}
};
@@ -203,32 +206,46 @@
INSTANTIATE_TEST_CASE_P(
VPXSSIM, HBDMetricsTest,
::testing::Values(
- MetricTestTParam(&compute_vpxssim, &compute_hbd_vpxssim, 10,
+ MetricTestTParam(&compute_vpxssim, &compute_hbd_vpxssim, 8, 10,
kSsim_thresh),
- MetricTestTParam(&compute_vpxssim, &compute_hbd_vpxssim, 12,
+ MetricTestTParam(&compute_vpxssim, &compute_hbd_vpxssim, 10, 10,
+ kSsim_thresh),
+ MetricTestTParam(&compute_vpxssim, &compute_hbd_vpxssim, 8, 12,
+ kSsim_thresh),
+ MetricTestTParam(&compute_vpxssim, &compute_hbd_vpxssim, 12, 12,
kSsim_thresh)));
INSTANTIATE_TEST_CASE_P(
FASTSSIM, HBDMetricsTest,
::testing::Values(
- MetricTestTParam(&compute_fastssim, &compute_hbd_fastssim, 10,
+ MetricTestTParam(&compute_fastssim, &compute_hbd_fastssim, 8, 10,
kFSsim_thresh),
- MetricTestTParam(&compute_fastssim, &compute_hbd_fastssim, 12,
+ MetricTestTParam(&compute_fastssim, &compute_hbd_fastssim, 10, 10,
+ kFSsim_thresh),
+ MetricTestTParam(&compute_fastssim, &compute_hbd_fastssim, 8, 12,
+ kFSsim_thresh),
+ MetricTestTParam(&compute_fastssim, &compute_hbd_fastssim, 12, 12,
kFSsim_thresh)));
INSTANTIATE_TEST_CASE_P(
PSNRHVS, HBDMetricsTest,
::testing::Values(
- MetricTestTParam(&compute_psnrhvs, &compute_hbd_psnrhvs, 10,
+ MetricTestTParam(&compute_psnrhvs, &compute_hbd_psnrhvs, 8, 10,
kPhvs_thresh),
- MetricTestTParam(&compute_psnrhvs, &compute_hbd_psnrhvs, 12,
+ MetricTestTParam(&compute_psnrhvs, &compute_hbd_psnrhvs, 10, 10,
+ kPhvs_thresh),
+ MetricTestTParam(&compute_psnrhvs, &compute_hbd_psnrhvs, 8, 12,
+ kPhvs_thresh),
+ MetricTestTParam(&compute_psnrhvs, &compute_hbd_psnrhvs, 12, 12,
kPhvs_thresh)));
-
INSTANTIATE_TEST_CASE_P(
PSNR, HBDMetricsTest,
::testing::Values(
- MetricTestTParam(&compute_psnr, &compute_hbd_psnr, 10,
+ MetricTestTParam(&compute_psnr, &compute_hbd_psnr, 8, 10,
kPhvs_thresh),
- MetricTestTParam(&compute_psnr, &compute_hbd_psnr, 12,
+ MetricTestTParam(&compute_psnr, &compute_hbd_psnr, 10, 10,
+ kPhvs_thresh),
+ MetricTestTParam(&compute_psnr, &compute_hbd_psnr, 8, 12,
+ kPhvs_thresh),
+ MetricTestTParam(&compute_psnr, &compute_hbd_psnr, 12, 12,
kPhvs_thresh)));
-
} // namespace