Index: source/libvpx/test/variance_test.cc |
=================================================================== |
--- source/libvpx/test/variance_test.cc (revision 191025) |
+++ source/libvpx/test/variance_test.cc (working copy) |
@@ -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 |