diff options
Diffstat (limited to 'test/sad_test.cc')
-rw-r--r-- | test/sad_test.cc | 385 |
1 files changed, 340 insertions, 45 deletions
diff --git a/test/sad_test.cc b/test/sad_test.cc index 5a0653b65..453b3a84e 100644 --- a/test/sad_test.cc +++ b/test/sad_test.cc @@ -15,12 +15,17 @@ extern "C" { #include "./vpx_config.h" -#include "./vpx_rtcd.h" -#include "vp8/common/blockd.h" +#if CONFIG_VP8_ENCODER +#include "./vp8_rtcd.h" +#endif +#if CONFIG_VP9_ENCODER +#include "./vp9_rtcd.h" +#endif #include "vpx_mem/vpx_mem.h" } #include "test/acm_random.h" +#include "test/clear_system_state.h" #include "test/register_state_check.h" #include "test/util.h" #include "third_party/googletest/src/include/gtest/gtest.h" @@ -31,15 +36,26 @@ typedef unsigned int (*sad_m_by_n_fn_t)(const unsigned char *source_ptr, const unsigned char *reference_ptr, int reference_stride, unsigned int max_sad); +typedef std::tr1::tuple<int, int, sad_m_by_n_fn_t> sad_m_by_n_test_param_t; + +typedef void (*sad_n_by_n_by_4_fn_t)(const uint8_t *src_ptr, + int src_stride, + const unsigned char * const ref_ptr[], + int ref_stride, + unsigned int *sad_array); +typedef std::tr1::tuple<int, int, sad_n_by_n_by_4_fn_t> + sad_n_by_n_by_4_test_param_t; using libvpx_test::ACMRandom; namespace { -class SADTest : public PARAMS(int, int, sad_m_by_n_fn_t) { +class SADTestBase : public ::testing::Test { public: + SADTestBase(int width, int height) : width_(width), height_(height) {} + static void SetUpTestCase() { source_data_ = reinterpret_cast<uint8_t*>( - vpx_memalign(kDataAlignment, kDataBufferSize)); + vpx_memalign(kDataAlignment, kDataBlockSize)); reference_data_ = reinterpret_cast<uint8_t*>( vpx_memalign(kDataAlignment, kDataBufferSize)); } @@ -51,37 +67,36 @@ class SADTest : public PARAMS(int, int, sad_m_by_n_fn_t) { reference_data_ = NULL; } + virtual void TearDown() { + libvpx_test::ClearSystemState(); + } + protected: + // Handle blocks up to 4 blocks 64x64 with stride up to 128 static const int kDataAlignment = 16; - static const int kDataBufferSize = 16 * 32; + static const int kDataBlockSize = 64 * 128; + static const int kDataBufferSize = 4 * kDataBlockSize; virtual void SetUp() { - sad_fn_ = GET_PARAM(2); - height_ = GET_PARAM(1); - width_ = GET_PARAM(0); - source_stride_ = width_ * 2; + source_stride_ = (width_ + 31) & ~31; reference_stride_ = width_ * 2; rnd_.Reset(ACMRandom::DeterministicSeed()); } - sad_m_by_n_fn_t sad_fn_; - virtual unsigned int SAD(unsigned int max_sad) { - unsigned int ret; - REGISTER_STATE_CHECK(ret = sad_fn_(source_data_, source_stride_, - reference_data_, reference_stride_, - max_sad)); - return ret; + virtual uint8_t* GetReference(int block_idx) { + return reference_data_ + block_idx * kDataBlockSize; } // Sum of Absolute Differences. Given two blocks, calculate the absolute // difference between two pixels in the same relative location; accumulate. - unsigned int ReferenceSAD(unsigned int max_sad) { + unsigned int ReferenceSAD(unsigned int max_sad, int block_idx = 0) { unsigned int sad = 0; + const uint8_t* const reference = GetReference(block_idx); for (int h = 0; h < height_; ++h) { for (int w = 0; w < width_; ++w) { sad += abs(source_data_[h * source_stride_ + w] - - reference_data_[h * reference_stride_ + w]); + - reference[h * reference_stride_ + w]); } if (sad > max_sad) { break; @@ -106,6 +121,31 @@ class SADTest : public PARAMS(int, int, sad_m_by_n_fn_t) { } } + int width_, height_; + static uint8_t* source_data_; + int source_stride_; + static uint8_t* reference_data_; + int reference_stride_; + + ACMRandom rnd_; +}; + +class SADTest : public SADTestBase, + public ::testing::WithParamInterface<sad_m_by_n_test_param_t> { + public: + SADTest() : SADTestBase(GET_PARAM(0), GET_PARAM(1)) {} + + protected: + unsigned int SAD(unsigned int max_sad, int block_idx = 0) { + unsigned int ret; + const uint8_t* const reference = GetReference(block_idx); + + REGISTER_STATE_CHECK(ret = GET_PARAM(2)(source_data_, source_stride_, + reference, reference_stride_, + max_sad)); + return ret; + } + void CheckSad(unsigned int max_sad) { unsigned int reference_sad, exp_sad; @@ -119,19 +159,37 @@ class SADTest : public PARAMS(int, int, sad_m_by_n_fn_t) { ASSERT_GE(exp_sad, reference_sad); } } +}; - // Handle blocks up to 16x16 with stride up to 32 - int height_, width_; - static uint8_t* source_data_; - int source_stride_; - static uint8_t* reference_data_; - int reference_stride_; +class SADx4Test : public SADTestBase, + public ::testing::WithParamInterface<sad_n_by_n_by_4_test_param_t> { + public: + SADx4Test() : SADTestBase(GET_PARAM(0), GET_PARAM(1)) {} - ACMRandom rnd_; + protected: + void SADs(unsigned int *results) { + const uint8_t* refs[] = {GetReference(0), GetReference(1), + GetReference(2), GetReference(3)}; + + REGISTER_STATE_CHECK(GET_PARAM(2)(source_data_, source_stride_, + refs, reference_stride_, + results)); + } + + void CheckSADs() { + unsigned int reference_sad, exp_sad[4]; + + SADs(exp_sad); + for (int block = 0; block < 4; block++) { + reference_sad = ReferenceSAD(UINT_MAX, block); + + EXPECT_EQ(exp_sad[block], reference_sad) << "block " << block; + } + } }; -uint8_t* SADTest::source_data_ = NULL; -uint8_t* SADTest::reference_data_ = NULL; +uint8_t* SADTestBase::source_data_ = NULL; +uint8_t* SADTestBase::reference_data_ = NULL; TEST_P(SADTest, MaxRef) { FillConstant(source_data_, source_stride_, 0); @@ -139,12 +197,30 @@ TEST_P(SADTest, MaxRef) { CheckSad(UINT_MAX); } +TEST_P(SADx4Test, MaxRef) { + FillConstant(source_data_, source_stride_, 0); + FillConstant(GetReference(0), reference_stride_, 255); + FillConstant(GetReference(1), reference_stride_, 255); + FillConstant(GetReference(2), reference_stride_, 255); + FillConstant(GetReference(3), reference_stride_, 255); + CheckSADs(); +} + TEST_P(SADTest, MaxSrc) { FillConstant(source_data_, source_stride_, 255); FillConstant(reference_data_, reference_stride_, 0); CheckSad(UINT_MAX); } +TEST_P(SADx4Test, MaxSrc) { + FillConstant(source_data_, source_stride_, 255); + FillConstant(GetReference(0), reference_stride_, 0); + FillConstant(GetReference(1), reference_stride_, 0); + FillConstant(GetReference(2), reference_stride_, 0); + FillConstant(GetReference(3), reference_stride_, 0); + CheckSADs(); +} + TEST_P(SADTest, ShortRef) { int tmp_stride = reference_stride_; reference_stride_ >>= 1; @@ -154,6 +230,18 @@ TEST_P(SADTest, ShortRef) { reference_stride_ = tmp_stride; } +TEST_P(SADx4Test, ShortRef) { + int tmp_stride = reference_stride_; + reference_stride_ >>= 1; + FillRandom(source_data_, source_stride_); + FillRandom(GetReference(0), reference_stride_); + FillRandom(GetReference(1), reference_stride_); + FillRandom(GetReference(2), reference_stride_); + FillRandom(GetReference(3), reference_stride_); + CheckSADs(); + reference_stride_ = tmp_stride; +} + TEST_P(SADTest, UnalignedRef) { // The reference frame, but not the source frame, may be unaligned for // certain types of searches. @@ -165,6 +253,20 @@ TEST_P(SADTest, UnalignedRef) { reference_stride_ = tmp_stride; } +TEST_P(SADx4Test, UnalignedRef) { + // The reference frame, but not the source frame, may be unaligned for + // certain types of searches. + int tmp_stride = reference_stride_; + reference_stride_ -= 1; + FillRandom(source_data_, source_stride_); + FillRandom(GetReference(0), reference_stride_); + FillRandom(GetReference(1), reference_stride_); + FillRandom(GetReference(2), reference_stride_); + FillRandom(GetReference(3), reference_stride_); + CheckSADs(); + reference_stride_ = tmp_stride; +} + TEST_P(SADTest, ShortSrc) { int tmp_stride = source_stride_; source_stride_ >>= 1; @@ -174,6 +276,18 @@ TEST_P(SADTest, ShortSrc) { source_stride_ = tmp_stride; } +TEST_P(SADx4Test, ShortSrc) { + int tmp_stride = source_stride_; + source_stride_ >>= 1; + FillRandom(source_data_, source_stride_); + FillRandom(GetReference(0), reference_stride_); + FillRandom(GetReference(1), reference_stride_); + FillRandom(GetReference(2), reference_stride_); + FillRandom(GetReference(3), reference_stride_); + CheckSADs(); + source_stride_ = tmp_stride; +} + TEST_P(SADTest, MaxSAD) { // Verify that, when max_sad is set, the implementation does not return a // value lower than the reference. @@ -184,17 +298,75 @@ TEST_P(SADTest, MaxSAD) { using std::tr1::make_tuple; +#if CONFIG_VP8_ENCODER const sad_m_by_n_fn_t sad_16x16_c = vp8_sad16x16_c; const sad_m_by_n_fn_t sad_8x16_c = vp8_sad8x16_c; const sad_m_by_n_fn_t sad_16x8_c = vp8_sad16x8_c; const sad_m_by_n_fn_t sad_8x8_c = vp8_sad8x8_c; const sad_m_by_n_fn_t sad_4x4_c = vp8_sad4x4_c; -INSTANTIATE_TEST_CASE_P(C, SADTest, ::testing::Values( - make_tuple(16, 16, sad_16x16_c), - make_tuple(8, 16, sad_8x16_c), - make_tuple(16, 8, sad_16x8_c), - make_tuple(8, 8, sad_8x8_c), - make_tuple(4, 4, sad_4x4_c))); +#endif +#if CONFIG_VP9_ENCODER +const sad_m_by_n_fn_t sad_64x64_c_vp9 = vp9_sad64x64_c; +const sad_m_by_n_fn_t sad_32x32_c_vp9 = vp9_sad32x32_c; +const sad_m_by_n_fn_t sad_16x16_c_vp9 = vp9_sad16x16_c; +const sad_m_by_n_fn_t sad_8x16_c_vp9 = vp9_sad8x16_c; +const sad_m_by_n_fn_t sad_16x8_c_vp9 = vp9_sad16x8_c; +const sad_m_by_n_fn_t sad_8x8_c_vp9 = vp9_sad8x8_c; +const sad_m_by_n_fn_t sad_8x4_c_vp9 = vp9_sad8x4_c; +const sad_m_by_n_fn_t sad_4x8_c_vp9 = vp9_sad4x8_c; +const sad_m_by_n_fn_t sad_4x4_c_vp9 = vp9_sad4x4_c; +#endif +const sad_m_by_n_test_param_t c_tests[] = { +#if CONFIG_VP8_ENCODER + make_tuple(16, 16, sad_16x16_c), + make_tuple(8, 16, sad_8x16_c), + make_tuple(16, 8, sad_16x8_c), + make_tuple(8, 8, sad_8x8_c), + make_tuple(4, 4, sad_4x4_c), +#endif +#if CONFIG_VP9_ENCODER + make_tuple(64, 64, sad_64x64_c_vp9), + make_tuple(32, 32, sad_32x32_c_vp9), + make_tuple(16, 16, sad_16x16_c_vp9), + make_tuple(8, 16, sad_8x16_c_vp9), + make_tuple(16, 8, sad_16x8_c_vp9), + make_tuple(8, 8, sad_8x8_c_vp9), + make_tuple(8, 4, sad_8x4_c_vp9), + make_tuple(4, 8, sad_4x8_c_vp9), + make_tuple(4, 4, sad_4x4_c_vp9), +#endif +}; +INSTANTIATE_TEST_CASE_P(C, SADTest, ::testing::ValuesIn(c_tests)); + +#if CONFIG_VP9_ENCODER +const sad_n_by_n_by_4_fn_t sad_64x64x4d_c = vp9_sad64x64x4d_c; +const sad_n_by_n_by_4_fn_t sad_64x32x4d_c = vp9_sad64x32x4d_c; +const sad_n_by_n_by_4_fn_t sad_32x64x4d_c = vp9_sad32x64x4d_c; +const sad_n_by_n_by_4_fn_t sad_32x32x4d_c = vp9_sad32x32x4d_c; +const sad_n_by_n_by_4_fn_t sad_32x16x4d_c = vp9_sad32x16x4d_c; +const sad_n_by_n_by_4_fn_t sad_16x32x4d_c = vp9_sad16x32x4d_c; +const sad_n_by_n_by_4_fn_t sad_16x16x4d_c = vp9_sad16x16x4d_c; +const sad_n_by_n_by_4_fn_t sad_16x8x4d_c = vp9_sad16x8x4d_c; +const sad_n_by_n_by_4_fn_t sad_8x16x4d_c = vp9_sad8x16x4d_c; +const sad_n_by_n_by_4_fn_t sad_8x8x4d_c = vp9_sad8x8x4d_c; +const sad_n_by_n_by_4_fn_t sad_8x4x4d_c = vp9_sad8x4x4d_c; +const sad_n_by_n_by_4_fn_t sad_4x8x4d_c = vp9_sad4x8x4d_c; +const sad_n_by_n_by_4_fn_t sad_4x4x4d_c = vp9_sad4x4x4d_c; +INSTANTIATE_TEST_CASE_P(C, SADx4Test, ::testing::Values( + make_tuple(64, 64, sad_64x64x4d_c), + make_tuple(64, 32, sad_64x32x4d_c), + make_tuple(32, 64, sad_32x64x4d_c), + make_tuple(32, 32, sad_32x32x4d_c), + make_tuple(32, 16, sad_32x16x4d_c), + make_tuple(16, 32, sad_16x32x4d_c), + make_tuple(16, 16, sad_16x16x4d_c), + make_tuple(16, 8, sad_16x8x4d_c), + make_tuple(8, 16, sad_8x16x4d_c), + make_tuple(8, 8, sad_8x8x4d_c), + make_tuple(8, 4, sad_8x4x4d_c), + make_tuple(4, 8, sad_4x8x4d_c), + make_tuple(4, 4, sad_4x4x4d_c))); +#endif // ARM tests #if HAVE_MEDIA @@ -219,35 +391,158 @@ INSTANTIATE_TEST_CASE_P(NEON, SADTest, ::testing::Values( // X86 tests #if HAVE_MMX +#if CONFIG_VP8_ENCODER const sad_m_by_n_fn_t sad_16x16_mmx = vp8_sad16x16_mmx; const sad_m_by_n_fn_t sad_8x16_mmx = vp8_sad8x16_mmx; const sad_m_by_n_fn_t sad_16x8_mmx = vp8_sad16x8_mmx; const sad_m_by_n_fn_t sad_8x8_mmx = vp8_sad8x8_mmx; const sad_m_by_n_fn_t sad_4x4_mmx = vp8_sad4x4_mmx; -INSTANTIATE_TEST_CASE_P(MMX, SADTest, ::testing::Values( - make_tuple(16, 16, sad_16x16_mmx), - make_tuple(8, 16, sad_8x16_mmx), - make_tuple(16, 8, sad_16x8_mmx), - make_tuple(8, 8, sad_8x8_mmx), - make_tuple(4, 4, sad_4x4_mmx))); #endif +#if CONFIG_VP9_ENCODER +const sad_m_by_n_fn_t sad_16x16_mmx_vp9 = vp9_sad16x16_mmx; +const sad_m_by_n_fn_t sad_8x16_mmx_vp9 = vp9_sad8x16_mmx; +const sad_m_by_n_fn_t sad_16x8_mmx_vp9 = vp9_sad16x8_mmx; +const sad_m_by_n_fn_t sad_8x8_mmx_vp9 = vp9_sad8x8_mmx; +const sad_m_by_n_fn_t sad_4x4_mmx_vp9 = vp9_sad4x4_mmx; +#endif + +const sad_m_by_n_test_param_t mmx_tests[] = { +#if CONFIG_VP8_ENCODER + make_tuple(16, 16, sad_16x16_mmx), + make_tuple(8, 16, sad_8x16_mmx), + make_tuple(16, 8, sad_16x8_mmx), + make_tuple(8, 8, sad_8x8_mmx), + make_tuple(4, 4, sad_4x4_mmx), +#endif +#if CONFIG_VP9_ENCODER + make_tuple(16, 16, sad_16x16_mmx_vp9), + make_tuple(8, 16, sad_8x16_mmx_vp9), + make_tuple(16, 8, sad_16x8_mmx_vp9), + make_tuple(8, 8, sad_8x8_mmx_vp9), + make_tuple(4, 4, sad_4x4_mmx_vp9), +#endif +}; +INSTANTIATE_TEST_CASE_P(MMX, SADTest, ::testing::ValuesIn(mmx_tests)); +#endif + +#if HAVE_SSE +#if CONFIG_VP9_ENCODER +#if CONFIG_USE_X86INC +const sad_m_by_n_fn_t sad_4x4_sse_vp9 = vp9_sad4x4_sse; +const sad_m_by_n_fn_t sad_4x8_sse_vp9 = vp9_sad4x8_sse; +INSTANTIATE_TEST_CASE_P(SSE, SADTest, ::testing::Values( + make_tuple(4, 4, sad_4x4_sse_vp9), + make_tuple(4, 8, sad_4x8_sse_vp9))); + +const sad_n_by_n_by_4_fn_t sad_4x8x4d_sse = vp9_sad4x8x4d_sse; +const sad_n_by_n_by_4_fn_t sad_4x4x4d_sse = vp9_sad4x4x4d_sse; +INSTANTIATE_TEST_CASE_P(SSE, SADx4Test, ::testing::Values( + make_tuple(4, 8, sad_4x8x4d_sse), + make_tuple(4, 4, sad_4x4x4d_sse))); +#endif +#endif +#endif + #if HAVE_SSE2 +#if CONFIG_VP8_ENCODER const sad_m_by_n_fn_t sad_16x16_wmt = vp8_sad16x16_wmt; const sad_m_by_n_fn_t sad_8x16_wmt = vp8_sad8x16_wmt; const sad_m_by_n_fn_t sad_16x8_wmt = vp8_sad16x8_wmt; const sad_m_by_n_fn_t sad_8x8_wmt = vp8_sad8x8_wmt; const sad_m_by_n_fn_t sad_4x4_wmt = vp8_sad4x4_wmt; -INSTANTIATE_TEST_CASE_P(SSE2, SADTest, ::testing::Values( - make_tuple(16, 16, sad_16x16_wmt), - make_tuple(8, 16, sad_8x16_wmt), - make_tuple(16, 8, sad_16x8_wmt), - make_tuple(8, 8, sad_8x8_wmt), - make_tuple(4, 4, sad_4x4_wmt))); #endif +#if CONFIG_VP9_ENCODER +#if CONFIG_USE_X86INC +const sad_m_by_n_fn_t sad_64x64_sse2_vp9 = vp9_sad64x64_sse2; +const sad_m_by_n_fn_t sad_64x32_sse2_vp9 = vp9_sad64x32_sse2; +const sad_m_by_n_fn_t sad_32x64_sse2_vp9 = vp9_sad32x64_sse2; +const sad_m_by_n_fn_t sad_32x32_sse2_vp9 = vp9_sad32x32_sse2; +const sad_m_by_n_fn_t sad_32x16_sse2_vp9 = vp9_sad32x16_sse2; +const sad_m_by_n_fn_t sad_16x32_sse2_vp9 = vp9_sad16x32_sse2; +const sad_m_by_n_fn_t sad_16x16_sse2_vp9 = vp9_sad16x16_sse2; +const sad_m_by_n_fn_t sad_16x8_sse2_vp9 = vp9_sad16x8_sse2; +const sad_m_by_n_fn_t sad_8x16_sse2_vp9 = vp9_sad8x16_sse2; +const sad_m_by_n_fn_t sad_8x8_sse2_vp9 = vp9_sad8x8_sse2; +const sad_m_by_n_fn_t sad_8x4_sse2_vp9 = vp9_sad8x4_sse2; +#endif +#endif +const sad_m_by_n_test_param_t sse2_tests[] = { +#if CONFIG_VP8_ENCODER + make_tuple(16, 16, sad_16x16_wmt), + make_tuple(8, 16, sad_8x16_wmt), + make_tuple(16, 8, sad_16x8_wmt), + make_tuple(8, 8, sad_8x8_wmt), + make_tuple(4, 4, sad_4x4_wmt), +#endif +#if CONFIG_VP9_ENCODER +#if CONFIG_USE_X86INC + make_tuple(64, 64, sad_64x64_sse2_vp9), + make_tuple(64, 32, sad_64x32_sse2_vp9), + make_tuple(32, 64, sad_32x64_sse2_vp9), + make_tuple(32, 32, sad_32x32_sse2_vp9), + make_tuple(32, 16, sad_32x16_sse2_vp9), + make_tuple(16, 32, sad_16x32_sse2_vp9), + make_tuple(16, 16, sad_16x16_sse2_vp9), + make_tuple(16, 8, sad_16x8_sse2_vp9), + make_tuple(8, 16, sad_8x16_sse2_vp9), + make_tuple(8, 8, sad_8x8_sse2_vp9), + make_tuple(8, 4, sad_8x4_sse2_vp9), +#endif +#endif +}; +INSTANTIATE_TEST_CASE_P(SSE2, SADTest, ::testing::ValuesIn(sse2_tests)); + +#if CONFIG_VP9_ENCODER +#if CONFIG_USE_X86INC +const sad_n_by_n_by_4_fn_t sad_64x64x4d_sse2 = vp9_sad64x64x4d_sse2; +const sad_n_by_n_by_4_fn_t sad_64x32x4d_sse2 = vp9_sad64x32x4d_sse2; +const sad_n_by_n_by_4_fn_t sad_32x64x4d_sse2 = vp9_sad32x64x4d_sse2; +const sad_n_by_n_by_4_fn_t sad_32x32x4d_sse2 = vp9_sad32x32x4d_sse2; +const sad_n_by_n_by_4_fn_t sad_32x16x4d_sse2 = vp9_sad32x16x4d_sse2; +const sad_n_by_n_by_4_fn_t sad_16x32x4d_sse2 = vp9_sad16x32x4d_sse2; +const sad_n_by_n_by_4_fn_t sad_16x16x4d_sse2 = vp9_sad16x16x4d_sse2; +const sad_n_by_n_by_4_fn_t sad_16x8x4d_sse2 = vp9_sad16x8x4d_sse2; +const sad_n_by_n_by_4_fn_t sad_8x16x4d_sse2 = vp9_sad8x16x4d_sse2; +const sad_n_by_n_by_4_fn_t sad_8x8x4d_sse2 = vp9_sad8x8x4d_sse2; +const sad_n_by_n_by_4_fn_t sad_8x4x4d_sse2 = vp9_sad8x4x4d_sse2; +INSTANTIATE_TEST_CASE_P(SSE2, SADx4Test, ::testing::Values( + make_tuple(64, 64, sad_64x64x4d_sse2), + make_tuple(64, 32, sad_64x32x4d_sse2), + make_tuple(32, 64, sad_32x64x4d_sse2), + make_tuple(32, 32, sad_32x32x4d_sse2), + make_tuple(32, 16, sad_32x16x4d_sse2), + make_tuple(16, 32, sad_16x32x4d_sse2), + make_tuple(16, 16, sad_16x16x4d_sse2), + make_tuple(16, 8, sad_16x8x4d_sse2), + make_tuple(8, 16, sad_8x16x4d_sse2), + make_tuple(8, 8, sad_8x8x4d_sse2), + make_tuple(8, 4, sad_8x4x4d_sse2))); +#endif +#endif +#endif + +#if HAVE_SSE3 +#if CONFIG_VP8_ENCODER +const sad_n_by_n_by_4_fn_t sad_16x16x4d_sse3 = vp8_sad16x16x4d_sse3; +const sad_n_by_n_by_4_fn_t sad_16x8x4d_sse3 = vp8_sad16x8x4d_sse3; +const sad_n_by_n_by_4_fn_t sad_8x16x4d_sse3 = vp8_sad8x16x4d_sse3; +const sad_n_by_n_by_4_fn_t sad_8x8x4d_sse3 = vp8_sad8x8x4d_sse3; +const sad_n_by_n_by_4_fn_t sad_4x4x4d_sse3 = vp8_sad4x4x4d_sse3; +INSTANTIATE_TEST_CASE_P(SSE3, SADx4Test, ::testing::Values( + make_tuple(16, 16, sad_16x16x4d_sse3), + make_tuple(16, 8, sad_16x8x4d_sse3), + make_tuple(8, 16, sad_8x16x4d_sse3), + make_tuple(8, 8, sad_8x8x4d_sse3), + make_tuple(4, 4, sad_4x4x4d_sse3))); +#endif +#endif + #if HAVE_SSSE3 +#if CONFIG_USE_X86INC const sad_m_by_n_fn_t sad_16x16_sse3 = vp8_sad16x16_sse3; INSTANTIATE_TEST_CASE_P(SSE3, SADTest, ::testing::Values( make_tuple(16, 16, sad_16x16_sse3))); #endif +#endif } // namespace |