From: James Zern Date: Sat, 23 Feb 2013 00:23:36 +0000 (-0800) Subject: add vp8 variance test X-Git-Tag: v1.3.0~1181^2 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=1711cf2dbb1debeb6313ddff118ad70d2b266470;p=platform%2Fupstream%2Flibvpx.git add vp8 variance test Change-Id: I4e94ee2c4e2360d6a11a454c323f2899c1bb6f72 --- diff --git a/test/test.mk b/test/test.mk index e7a1dcd..e0e6d1e 100644 --- a/test/test.mk +++ b/test/test.mk @@ -50,6 +50,7 @@ LIBVPX_TEST_SRCS-yes += sad_test.cc LIBVPX_TEST_SRCS-$(CONFIG_VP8_ENCODER) += set_roi.cc LIBVPX_TEST_SRCS-yes += sixtap_predict_test.cc LIBVPX_TEST_SRCS-$(CONFIG_VP8_ENCODER) += subtract_test.cc +LIBVPX_TEST_SRCS-$(CONFIG_VP8_ENCODER) += variance_test.cc LIBVPX_TEST_SRCS-$(CONFIG_VP8_ENCODER) += vp8_fdct4x4_test.cc endif # VP8 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::get; using ::std::tr1::make_tuple; using ::std::tr1::tuple; -class VP9VarianceTest : - public ::testing::TestWithParam > { +template +class VarianceTest : + public ::testing::TestWithParam > { public: virtual void SetUp() { - const tuple& params = GetParam(); + const tuple& params = this->GetParam(); width_ = get<0>(params); height_ = get<1>(params); variance_ = get<2>(params); @@ -47,15 +54,20 @@ class VP9VarianceTest : } 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 +void VarianceTest::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, Zero) { } } -TEST_P(VP9VarianceTest, OneQuarter) { +template +void VarianceTest::OneQuarterTest() { memset(src_, 255, block_size_); const int half = block_size_ / 2; memset(ref_, 255, half); @@ -78,6 +91,74 @@ TEST_P(VP9VarianceTest, OneQuarter) { EXPECT_EQ(expected, var); } +// ----------------------------------------------------------------------------- +// VP8 test cases. + +namespace vp8 { + +#if CONFIG_VP8_ENCODER +typedef VarianceTest 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 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 @@ INSTANTIATE_TEST_CASE_P( make_tuple(16, 8, variance16x8_wmt), make_tuple(16, 16, variance16x16_wmt))); #endif +#endif // CONFIG_VP9_ENCODER + +} // namespace vp9 + } // namespace