add vp8 variance test
Change-Id: I4e94ee2c4e2360d6a11a454c323f2899c1bb6f72
diff --git a/test/variance_test.cc b/test/variance_test.cc
index 83f1139..120df31 100644
--- a/test/variance_test.cc
+++ b/test/variance_test.cc
@@ -12,11 +12,17 @@
#include "third_party/googletest/src/include/gtest/gtest.h"
+#include "vpx/vpx_integer.h"
#include "vpx_config.h"
extern "C" {
-#include "vp9/encoder/vp9_variance.h"
-#include "vpx/vpx_integer.h"
-#include "vp9_rtcd.h"
+#if CONFIG_VP8_ENCODER
+# include "vp8/common/variance.h"
+# include "vp8_rtcd.h"
+#endif
+#if CONFIG_VP9_ENCODER
+# include "vp9/encoder/vp9_variance.h"
+# include "vp9_rtcd.h"
+#endif
}
namespace {
@@ -25,11 +31,12 @@
using ::std::tr1::make_tuple;
using ::std::tr1::tuple;
-class VP9VarianceTest :
- public ::testing::TestWithParam<tuple<int, int, vp9_variance_fn_t> > {
+template<typename VarianceFunctionType>
+class VarianceTest :
+ public ::testing::TestWithParam<tuple<int, int, VarianceFunctionType> > {
public:
virtual void SetUp() {
- const tuple<int, int, vp9_variance_fn_t>& params = GetParam();
+ const tuple<int, int, VarianceFunctionType>& params = this->GetParam();
width_ = get<0>(params);
height_ = get<1>(params);
variance_ = get<2>(params);
@@ -47,15 +54,20 @@
}
protected:
+ void ZeroTest();
+ void OneQuarterTest();
+
uint8_t* src_;
uint8_t* ref_;
int width_;
int height_;
int block_size_;
- vp9_variance_fn_t variance_;
+ VarianceFunctionType variance_;
+
};
-TEST_P(VP9VarianceTest, Zero) {
+template<typename VarianceFunctionType>
+void VarianceTest<VarianceFunctionType>::ZeroTest() {
for (int i = 0; i <= 255; ++i) {
memset(src_, i, block_size_);
for (int j = 0; j <= 255; ++j) {
@@ -67,7 +79,8 @@
}
}
-TEST_P(VP9VarianceTest, OneQuarter) {
+template<typename VarianceFunctionType>
+void VarianceTest<VarianceFunctionType>::OneQuarterTest() {
memset(src_, 255, block_size_);
const int half = block_size_ / 2;
memset(ref_, 255, half);
@@ -78,6 +91,74 @@
EXPECT_EQ(expected, var);
}
+// -----------------------------------------------------------------------------
+// VP8 test cases.
+
+namespace vp8 {
+
+#if CONFIG_VP8_ENCODER
+typedef VarianceTest<vp8_variance_fn_t> VP8VarianceTest;
+
+TEST_P(VP8VarianceTest, Zero) { ZeroTest(); }
+TEST_P(VP8VarianceTest, OneQuarter) { OneQuarterTest(); }
+
+const vp8_variance_fn_t variance4x4_c = vp8_variance4x4_c;
+const vp8_variance_fn_t variance8x8_c = vp8_variance8x8_c;
+const vp8_variance_fn_t variance8x16_c = vp8_variance8x16_c;
+const vp8_variance_fn_t variance16x8_c = vp8_variance16x8_c;
+const vp8_variance_fn_t variance16x16_c = vp8_variance16x16_c;
+INSTANTIATE_TEST_CASE_P(
+ C, VP8VarianceTest,
+ ::testing::Values(make_tuple(4, 4, variance4x4_c),
+ make_tuple(8, 8, variance8x8_c),
+ make_tuple(8, 16, variance8x16_c),
+ make_tuple(16, 8, variance16x8_c),
+ make_tuple(16, 16, variance16x16_c)));
+
+#if HAVE_MMX
+const vp8_variance_fn_t variance4x4_mmx = vp8_variance4x4_mmx;
+const vp8_variance_fn_t variance8x8_mmx = vp8_variance8x8_mmx;
+const vp8_variance_fn_t variance8x16_mmx = vp8_variance8x16_mmx;
+const vp8_variance_fn_t variance16x8_mmx = vp8_variance16x8_mmx;
+const vp8_variance_fn_t variance16x16_mmx = vp8_variance16x16_mmx;
+INSTANTIATE_TEST_CASE_P(
+ MMX, VP8VarianceTest,
+ ::testing::Values(make_tuple(4, 4, variance4x4_mmx),
+ make_tuple(8, 8, variance8x8_mmx),
+ make_tuple(8, 16, variance8x16_mmx),
+ make_tuple(16, 8, variance16x8_mmx),
+ make_tuple(16, 16, variance16x16_mmx)));
+#endif
+
+#if HAVE_SSE2
+const vp8_variance_fn_t variance4x4_wmt = vp8_variance4x4_wmt;
+const vp8_variance_fn_t variance8x8_wmt = vp8_variance8x8_wmt;
+const vp8_variance_fn_t variance8x16_wmt = vp8_variance8x16_wmt;
+const vp8_variance_fn_t variance16x8_wmt = vp8_variance16x8_wmt;
+const vp8_variance_fn_t variance16x16_wmt = vp8_variance16x16_wmt;
+INSTANTIATE_TEST_CASE_P(
+ SSE2, VP8VarianceTest,
+ ::testing::Values(make_tuple(4, 4, variance4x4_wmt),
+ make_tuple(8, 8, variance8x8_wmt),
+ make_tuple(8, 16, variance8x16_wmt),
+ make_tuple(16, 8, variance16x8_wmt),
+ make_tuple(16, 16, variance16x16_wmt)));
+#endif
+#endif // CONFIG_VP8_ENCODER
+
+} // namespace vp8
+
+// -----------------------------------------------------------------------------
+// VP9 test cases.
+
+namespace vp9 {
+
+#if CONFIG_VP9_ENCODER
+typedef VarianceTest<vp9_variance_fn_t> VP9VarianceTest;
+
+TEST_P(VP9VarianceTest, Zero) { ZeroTest(); }
+TEST_P(VP9VarianceTest, OneQuarter) { OneQuarterTest(); }
+
const vp9_variance_fn_t variance4x4_c = vp9_variance4x4_c;
const vp9_variance_fn_t variance8x8_c = vp9_variance8x8_c;
const vp9_variance_fn_t variance8x16_c = vp9_variance8x16_c;
@@ -120,4 +201,8 @@
make_tuple(16, 8, variance16x8_wmt),
make_tuple(16, 16, variance16x16_wmt)));
#endif
+#endif // CONFIG_VP9_ENCODER
+
+} // namespace vp9
+
} // namespace