Commit d711f109 authored by John Koleszar's avatar John Koleszar Committed by Gerrit Code Review
Browse files

Merge "add vp8 variance test"

Showing with 95 additions and 9 deletions
...@@ -50,6 +50,7 @@ LIBVPX_TEST_SRCS-yes += sad_test.cc ...@@ -50,6 +50,7 @@ LIBVPX_TEST_SRCS-yes += sad_test.cc
LIBVPX_TEST_SRCS-$(CONFIG_VP8_ENCODER) += set_roi.cc LIBVPX_TEST_SRCS-$(CONFIG_VP8_ENCODER) += set_roi.cc
LIBVPX_TEST_SRCS-yes += sixtap_predict_test.cc LIBVPX_TEST_SRCS-yes += sixtap_predict_test.cc
LIBVPX_TEST_SRCS-$(CONFIG_VP8_ENCODER) += subtract_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 LIBVPX_TEST_SRCS-$(CONFIG_VP8_ENCODER) += vp8_fdct4x4_test.cc
endif # VP8 endif # VP8
......
...@@ -12,11 +12,17 @@ ...@@ -12,11 +12,17 @@
#include "third_party/googletest/src/include/gtest/gtest.h" #include "third_party/googletest/src/include/gtest/gtest.h"
#include "vpx/vpx_integer.h"
#include "vpx_config.h" #include "vpx_config.h"
extern "C" { extern "C" {
#include "vp9/encoder/vp9_variance.h" #if CONFIG_VP8_ENCODER
#include "vpx/vpx_integer.h" # include "vp8/common/variance.h"
#include "vp9_rtcd.h" # include "vp8_rtcd.h"
#endif
#if CONFIG_VP9_ENCODER
# include "vp9/encoder/vp9_variance.h"
# include "vp9_rtcd.h"
#endif
} }
namespace { namespace {
...@@ -25,11 +31,12 @@ using ::std::tr1::get; ...@@ -25,11 +31,12 @@ using ::std::tr1::get;
using ::std::tr1::make_tuple; using ::std::tr1::make_tuple;
using ::std::tr1::tuple; using ::std::tr1::tuple;
class VP9VarianceTest : template<typename VarianceFunctionType>
public ::testing::TestWithParam<tuple<int, int, vp9_variance_fn_t> > { class VarianceTest :
public ::testing::TestWithParam<tuple<int, int, VarianceFunctionType> > {
public: public:
virtual void SetUp() { 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); width_ = get<0>(params);
height_ = get<1>(params); height_ = get<1>(params);
variance_ = get<2>(params); variance_ = get<2>(params);
...@@ -47,15 +54,20 @@ class VP9VarianceTest : ...@@ -47,15 +54,20 @@ class VP9VarianceTest :
} }
protected: protected:
void ZeroTest();
void OneQuarterTest();
uint8_t* src_; uint8_t* src_;
uint8_t* ref_; uint8_t* ref_;
int width_; int width_;
int height_; int height_;
int block_size_; 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) { for (int i = 0; i <= 255; ++i) {
memset(src_, i, block_size_); memset(src_, i, block_size_);
for (int j = 0; j <= 255; ++j) { for (int j = 0; j <= 255; ++j) {
...@@ -67,7 +79,8 @@ TEST_P(VP9VarianceTest, Zero) { ...@@ -67,7 +79,8 @@ TEST_P(VP9VarianceTest, Zero) {
} }
} }
TEST_P(VP9VarianceTest, OneQuarter) { template<typename VarianceFunctionType>
void VarianceTest<VarianceFunctionType>::OneQuarterTest() {
memset(src_, 255, block_size_); memset(src_, 255, block_size_);
const int half = block_size_ / 2; const int half = block_size_ / 2;
memset(ref_, 255, half); memset(ref_, 255, half);
...@@ -78,6 +91,74 @@ TEST_P(VP9VarianceTest, OneQuarter) { ...@@ -78,6 +91,74 @@ TEST_P(VP9VarianceTest, OneQuarter) {
EXPECT_EQ(expected, var); 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 variance4x4_c = vp9_variance4x4_c;
const vp9_variance_fn_t variance8x8_c = vp9_variance8x8_c; const vp9_variance_fn_t variance8x8_c = vp9_variance8x8_c;
const vp9_variance_fn_t variance8x16_c = vp9_variance8x16_c; const vp9_variance_fn_t variance8x16_c = vp9_variance8x16_c;
...@@ -120,4 +201,8 @@ INSTANTIATE_TEST_CASE_P( ...@@ -120,4 +201,8 @@ INSTANTIATE_TEST_CASE_P(
make_tuple(16, 8, variance16x8_wmt), make_tuple(16, 8, variance16x8_wmt),
make_tuple(16, 16, variance16x16_wmt))); make_tuple(16, 16, variance16x16_wmt)));
#endif #endif
#endif // CONFIG_VP9_ENCODER
} // namespace vp9
} // namespace } // namespace
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment