1ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang/* 2ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang * Copyright (c) 2012 The WebM project authors. All Rights Reserved. 3ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang * 4ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang * Use of this source code is governed by a BSD-style license 5ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang * that can be found in the LICENSE file in the root of the source 6ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang * tree. An additional intellectual property rights grant can be found 7ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang * in the file PATENTS. All contributing project authors may 8ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang * be found in the AUTHORS file in the root of the source tree. 9ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang */ 10ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang#include <stdlib.h> 11ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang#include <new> 12ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang 13ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang#include "third_party/googletest/src/include/gtest/gtest.h" 14ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang 15ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang#include "test/clear_system_state.h" 1691037db265ecdd914a26e056cf69207b4f50924ehkuang#include "test/register_state_check.h" 17ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang 18ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang#include "vpx/vpx_integer.h" 191184aebb761cbeac9124c37189a80a1a58f04b6bhkuang#include "./vpx_config.h" 20ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuangextern "C" { 2191037db265ecdd914a26e056cf69207b4f50924ehkuang#include "vpx_mem/vpx_mem.h" 22ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang#if CONFIG_VP8_ENCODER 23ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang# include "vp8/common/variance.h" 241184aebb761cbeac9124c37189a80a1a58f04b6bhkuang# include "./vp8_rtcd.h" 25ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang#endif 26ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang#if CONFIG_VP9_ENCODER 27ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang# include "vp9/encoder/vp9_variance.h" 281184aebb761cbeac9124c37189a80a1a58f04b6bhkuang# include "./vp9_rtcd.h" 29ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang#endif 30ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang} 3191037db265ecdd914a26e056cf69207b4f50924ehkuang#include "test/acm_random.h" 32ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang 33ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuangnamespace { 34ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang 35ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuangusing ::std::tr1::get; 36ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuangusing ::std::tr1::make_tuple; 37ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuangusing ::std::tr1::tuple; 3891037db265ecdd914a26e056cf69207b4f50924ehkuangusing libvpx_test::ACMRandom; 3991037db265ecdd914a26e056cf69207b4f50924ehkuang 4091037db265ecdd914a26e056cf69207b4f50924ehkuangstatic unsigned int variance_ref(const uint8_t *ref, const uint8_t *src, 4191037db265ecdd914a26e056cf69207b4f50924ehkuang int l2w, int l2h, unsigned int *sse_ptr) { 4291037db265ecdd914a26e056cf69207b4f50924ehkuang int se = 0; 4391037db265ecdd914a26e056cf69207b4f50924ehkuang unsigned int sse = 0; 4491037db265ecdd914a26e056cf69207b4f50924ehkuang const int w = 1 << l2w, h = 1 << l2h; 4591037db265ecdd914a26e056cf69207b4f50924ehkuang for (int y = 0; y < h; y++) { 4691037db265ecdd914a26e056cf69207b4f50924ehkuang for (int x = 0; x < w; x++) { 4791037db265ecdd914a26e056cf69207b4f50924ehkuang int diff = ref[w * y + x] - src[w * y + x]; 4891037db265ecdd914a26e056cf69207b4f50924ehkuang se += diff; 4991037db265ecdd914a26e056cf69207b4f50924ehkuang sse += diff * diff; 5091037db265ecdd914a26e056cf69207b4f50924ehkuang } 5191037db265ecdd914a26e056cf69207b4f50924ehkuang } 5291037db265ecdd914a26e056cf69207b4f50924ehkuang *sse_ptr = sse; 5391037db265ecdd914a26e056cf69207b4f50924ehkuang return sse - (((int64_t) se * se) >> (l2w + l2h)); 5491037db265ecdd914a26e056cf69207b4f50924ehkuang} 5591037db265ecdd914a26e056cf69207b4f50924ehkuang 5691037db265ecdd914a26e056cf69207b4f50924ehkuangstatic unsigned int subpel_variance_ref(const uint8_t *ref, const uint8_t *src, 5791037db265ecdd914a26e056cf69207b4f50924ehkuang int l2w, int l2h, int xoff, int yoff, 5891037db265ecdd914a26e056cf69207b4f50924ehkuang unsigned int *sse_ptr) { 5991037db265ecdd914a26e056cf69207b4f50924ehkuang int se = 0; 6091037db265ecdd914a26e056cf69207b4f50924ehkuang unsigned int sse = 0; 6191037db265ecdd914a26e056cf69207b4f50924ehkuang const int w = 1 << l2w, h = 1 << l2h; 6291037db265ecdd914a26e056cf69207b4f50924ehkuang for (int y = 0; y < h; y++) { 6391037db265ecdd914a26e056cf69207b4f50924ehkuang for (int x = 0; x < w; x++) { 6491037db265ecdd914a26e056cf69207b4f50924ehkuang // bilinear interpolation at a 16th pel step 6591037db265ecdd914a26e056cf69207b4f50924ehkuang const int a1 = ref[(w + 1) * (y + 0) + x + 0]; 6691037db265ecdd914a26e056cf69207b4f50924ehkuang const int a2 = ref[(w + 1) * (y + 0) + x + 1]; 6791037db265ecdd914a26e056cf69207b4f50924ehkuang const int b1 = ref[(w + 1) * (y + 1) + x + 0]; 6891037db265ecdd914a26e056cf69207b4f50924ehkuang const int b2 = ref[(w + 1) * (y + 1) + x + 1]; 6991037db265ecdd914a26e056cf69207b4f50924ehkuang const int a = a1 + (((a2 - a1) * xoff + 8) >> 4); 7091037db265ecdd914a26e056cf69207b4f50924ehkuang const int b = b1 + (((b2 - b1) * xoff + 8) >> 4); 7191037db265ecdd914a26e056cf69207b4f50924ehkuang const int r = a + (((b - a) * yoff + 8) >> 4); 7291037db265ecdd914a26e056cf69207b4f50924ehkuang int diff = r - src[w * y + x]; 7391037db265ecdd914a26e056cf69207b4f50924ehkuang se += diff; 7491037db265ecdd914a26e056cf69207b4f50924ehkuang sse += diff * diff; 7591037db265ecdd914a26e056cf69207b4f50924ehkuang } 7691037db265ecdd914a26e056cf69207b4f50924ehkuang } 7791037db265ecdd914a26e056cf69207b4f50924ehkuang *sse_ptr = sse; 7891037db265ecdd914a26e056cf69207b4f50924ehkuang return sse - (((int64_t) se * se) >> (l2w + l2h)); 7991037db265ecdd914a26e056cf69207b4f50924ehkuang} 8091037db265ecdd914a26e056cf69207b4f50924ehkuang 81ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuangtemplate<typename VarianceFunctionType> 821184aebb761cbeac9124c37189a80a1a58f04b6bhkuangclass VarianceTest 831184aebb761cbeac9124c37189a80a1a58f04b6bhkuang : public ::testing::TestWithParam<tuple<int, int, VarianceFunctionType> > { 84ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang public: 85ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang virtual void SetUp() { 86ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang const tuple<int, int, VarianceFunctionType>& params = this->GetParam(); 8791037db265ecdd914a26e056cf69207b4f50924ehkuang log2width_ = get<0>(params); 8891037db265ecdd914a26e056cf69207b4f50924ehkuang width_ = 1 << log2width_; 8991037db265ecdd914a26e056cf69207b4f50924ehkuang log2height_ = get<1>(params); 9091037db265ecdd914a26e056cf69207b4f50924ehkuang height_ = 1 << log2height_; 91ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang variance_ = get<2>(params); 92ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang 9391037db265ecdd914a26e056cf69207b4f50924ehkuang rnd(ACMRandom::DeterministicSeed()); 94ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang block_size_ = width_ * height_; 95ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang src_ = new uint8_t[block_size_]; 96ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang ref_ = new uint8_t[block_size_]; 97ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang ASSERT_TRUE(src_ != NULL); 98ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang ASSERT_TRUE(ref_ != NULL); 99ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang } 100ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang 101ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang virtual void TearDown() { 102ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang delete[] src_; 103ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang delete[] ref_; 104ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang libvpx_test::ClearSystemState(); 105ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang } 106ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang 107ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang protected: 108ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang void ZeroTest(); 10991037db265ecdd914a26e056cf69207b4f50924ehkuang void RefTest(); 110ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang void OneQuarterTest(); 111ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang 11291037db265ecdd914a26e056cf69207b4f50924ehkuang ACMRandom rnd; 113ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang uint8_t* src_; 114ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang uint8_t* ref_; 11591037db265ecdd914a26e056cf69207b4f50924ehkuang int width_, log2width_; 11691037db265ecdd914a26e056cf69207b4f50924ehkuang int height_, log2height_; 117ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang int block_size_; 118ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang VarianceFunctionType variance_; 119ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang}; 120ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang 121ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuangtemplate<typename VarianceFunctionType> 122ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuangvoid VarianceTest<VarianceFunctionType>::ZeroTest() { 123ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang for (int i = 0; i <= 255; ++i) { 124ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang memset(src_, i, block_size_); 125ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang for (int j = 0; j <= 255; ++j) { 126ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang memset(ref_, j, block_size_); 127ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang unsigned int sse; 12891037db265ecdd914a26e056cf69207b4f50924ehkuang unsigned int var; 12991037db265ecdd914a26e056cf69207b4f50924ehkuang REGISTER_STATE_CHECK(var = variance_(src_, width_, ref_, width_, &sse)); 130ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang EXPECT_EQ(0u, var) << "src values: " << i << "ref values: " << j; 131ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang } 132ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang } 133ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang} 134ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang 135ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuangtemplate<typename VarianceFunctionType> 13691037db265ecdd914a26e056cf69207b4f50924ehkuangvoid VarianceTest<VarianceFunctionType>::RefTest() { 13791037db265ecdd914a26e056cf69207b4f50924ehkuang for (int i = 0; i < 10; ++i) { 13891037db265ecdd914a26e056cf69207b4f50924ehkuang for (int j = 0; j < block_size_; j++) { 13991037db265ecdd914a26e056cf69207b4f50924ehkuang src_[j] = rnd.Rand8(); 14091037db265ecdd914a26e056cf69207b4f50924ehkuang ref_[j] = rnd.Rand8(); 14191037db265ecdd914a26e056cf69207b4f50924ehkuang } 14291037db265ecdd914a26e056cf69207b4f50924ehkuang unsigned int sse1, sse2; 14391037db265ecdd914a26e056cf69207b4f50924ehkuang unsigned int var1; 14491037db265ecdd914a26e056cf69207b4f50924ehkuang REGISTER_STATE_CHECK(var1 = variance_(src_, width_, ref_, width_, &sse1)); 14591037db265ecdd914a26e056cf69207b4f50924ehkuang const unsigned int var2 = variance_ref(src_, ref_, log2width_, 14691037db265ecdd914a26e056cf69207b4f50924ehkuang log2height_, &sse2); 14791037db265ecdd914a26e056cf69207b4f50924ehkuang EXPECT_EQ(sse1, sse2); 14891037db265ecdd914a26e056cf69207b4f50924ehkuang EXPECT_EQ(var1, var2); 14991037db265ecdd914a26e056cf69207b4f50924ehkuang } 15091037db265ecdd914a26e056cf69207b4f50924ehkuang} 15191037db265ecdd914a26e056cf69207b4f50924ehkuang 15291037db265ecdd914a26e056cf69207b4f50924ehkuangtemplate<typename VarianceFunctionType> 153ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuangvoid VarianceTest<VarianceFunctionType>::OneQuarterTest() { 154ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang memset(src_, 255, block_size_); 155ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang const int half = block_size_ / 2; 156ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang memset(ref_, 255, half); 157ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang memset(ref_ + half, 0, half); 158ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang unsigned int sse; 15991037db265ecdd914a26e056cf69207b4f50924ehkuang unsigned int var; 16091037db265ecdd914a26e056cf69207b4f50924ehkuang REGISTER_STATE_CHECK(var = variance_(src_, width_, ref_, width_, &sse)); 161ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang const unsigned int expected = block_size_ * 255 * 255 / 4; 162ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang EXPECT_EQ(expected, var); 163ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang} 164ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang 1655ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang#if CONFIG_VP9_ENCODER 1665ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang 1675ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuangunsigned int subpel_avg_variance_ref(const uint8_t *ref, 1685ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang const uint8_t *src, 1695ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang const uint8_t *second_pred, 1705ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang int l2w, int l2h, 1715ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang int xoff, int yoff, 1725ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang unsigned int *sse_ptr) { 1735ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang int se = 0; 1745ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang unsigned int sse = 0; 1755ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang const int w = 1 << l2w, h = 1 << l2h; 1765ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang for (int y = 0; y < h; y++) { 1775ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang for (int x = 0; x < w; x++) { 1785ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang // bilinear interpolation at a 16th pel step 1795ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang const int a1 = ref[(w + 1) * (y + 0) + x + 0]; 1805ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang const int a2 = ref[(w + 1) * (y + 0) + x + 1]; 1815ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang const int b1 = ref[(w + 1) * (y + 1) + x + 0]; 1825ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang const int b2 = ref[(w + 1) * (y + 1) + x + 1]; 1835ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang const int a = a1 + (((a2 - a1) * xoff + 8) >> 4); 1845ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang const int b = b1 + (((b2 - b1) * xoff + 8) >> 4); 1855ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang const int r = a + (((b - a) * yoff + 8) >> 4); 1865ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang int diff = ((r + second_pred[w * y + x] + 1) >> 1) - src[w * y + x]; 1875ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang se += diff; 1885ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang sse += diff * diff; 1895ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang } 1905ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang } 1915ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang *sse_ptr = sse; 1925ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang return sse - (((int64_t) se * se) >> (l2w + l2h)); 1935ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang} 1945ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang 19591037db265ecdd914a26e056cf69207b4f50924ehkuangtemplate<typename SubpelVarianceFunctionType> 1961184aebb761cbeac9124c37189a80a1a58f04b6bhkuangclass SubpelVarianceTest 1971184aebb761cbeac9124c37189a80a1a58f04b6bhkuang : public ::testing::TestWithParam<tuple<int, int, 1981184aebb761cbeac9124c37189a80a1a58f04b6bhkuang SubpelVarianceFunctionType> > { 19991037db265ecdd914a26e056cf69207b4f50924ehkuang public: 20091037db265ecdd914a26e056cf69207b4f50924ehkuang virtual void SetUp() { 20191037db265ecdd914a26e056cf69207b4f50924ehkuang const tuple<int, int, SubpelVarianceFunctionType>& params = 20291037db265ecdd914a26e056cf69207b4f50924ehkuang this->GetParam(); 20391037db265ecdd914a26e056cf69207b4f50924ehkuang log2width_ = get<0>(params); 20491037db265ecdd914a26e056cf69207b4f50924ehkuang width_ = 1 << log2width_; 20591037db265ecdd914a26e056cf69207b4f50924ehkuang log2height_ = get<1>(params); 20691037db265ecdd914a26e056cf69207b4f50924ehkuang height_ = 1 << log2height_; 20791037db265ecdd914a26e056cf69207b4f50924ehkuang subpel_variance_ = get<2>(params); 20891037db265ecdd914a26e056cf69207b4f50924ehkuang 20991037db265ecdd914a26e056cf69207b4f50924ehkuang rnd(ACMRandom::DeterministicSeed()); 21091037db265ecdd914a26e056cf69207b4f50924ehkuang block_size_ = width_ * height_; 21191037db265ecdd914a26e056cf69207b4f50924ehkuang src_ = reinterpret_cast<uint8_t *>(vpx_memalign(16, block_size_)); 21291037db265ecdd914a26e056cf69207b4f50924ehkuang sec_ = reinterpret_cast<uint8_t *>(vpx_memalign(16, block_size_)); 21391037db265ecdd914a26e056cf69207b4f50924ehkuang ref_ = new uint8_t[block_size_ + width_ + height_ + 1]; 21491037db265ecdd914a26e056cf69207b4f50924ehkuang ASSERT_TRUE(src_ != NULL); 21591037db265ecdd914a26e056cf69207b4f50924ehkuang ASSERT_TRUE(sec_ != NULL); 21691037db265ecdd914a26e056cf69207b4f50924ehkuang ASSERT_TRUE(ref_ != NULL); 21791037db265ecdd914a26e056cf69207b4f50924ehkuang } 21891037db265ecdd914a26e056cf69207b4f50924ehkuang 21991037db265ecdd914a26e056cf69207b4f50924ehkuang virtual void TearDown() { 22091037db265ecdd914a26e056cf69207b4f50924ehkuang vpx_free(src_); 22191037db265ecdd914a26e056cf69207b4f50924ehkuang delete[] ref_; 22291037db265ecdd914a26e056cf69207b4f50924ehkuang vpx_free(sec_); 22391037db265ecdd914a26e056cf69207b4f50924ehkuang libvpx_test::ClearSystemState(); 22491037db265ecdd914a26e056cf69207b4f50924ehkuang } 22591037db265ecdd914a26e056cf69207b4f50924ehkuang 22691037db265ecdd914a26e056cf69207b4f50924ehkuang protected: 22791037db265ecdd914a26e056cf69207b4f50924ehkuang void RefTest(); 22891037db265ecdd914a26e056cf69207b4f50924ehkuang 22991037db265ecdd914a26e056cf69207b4f50924ehkuang ACMRandom rnd; 23091037db265ecdd914a26e056cf69207b4f50924ehkuang uint8_t *src_; 23191037db265ecdd914a26e056cf69207b4f50924ehkuang uint8_t *ref_; 23291037db265ecdd914a26e056cf69207b4f50924ehkuang uint8_t *sec_; 23391037db265ecdd914a26e056cf69207b4f50924ehkuang int width_, log2width_; 23491037db265ecdd914a26e056cf69207b4f50924ehkuang int height_, log2height_; 23591037db265ecdd914a26e056cf69207b4f50924ehkuang int block_size_; 23691037db265ecdd914a26e056cf69207b4f50924ehkuang SubpelVarianceFunctionType subpel_variance_; 23791037db265ecdd914a26e056cf69207b4f50924ehkuang}; 23891037db265ecdd914a26e056cf69207b4f50924ehkuang 23991037db265ecdd914a26e056cf69207b4f50924ehkuangtemplate<typename SubpelVarianceFunctionType> 24091037db265ecdd914a26e056cf69207b4f50924ehkuangvoid SubpelVarianceTest<SubpelVarianceFunctionType>::RefTest() { 24191037db265ecdd914a26e056cf69207b4f50924ehkuang for (int x = 0; x < 16; ++x) { 24291037db265ecdd914a26e056cf69207b4f50924ehkuang for (int y = 0; y < 16; ++y) { 24391037db265ecdd914a26e056cf69207b4f50924ehkuang for (int j = 0; j < block_size_; j++) { 24491037db265ecdd914a26e056cf69207b4f50924ehkuang src_[j] = rnd.Rand8(); 24591037db265ecdd914a26e056cf69207b4f50924ehkuang } 24691037db265ecdd914a26e056cf69207b4f50924ehkuang for (int j = 0; j < block_size_ + width_ + height_ + 1; j++) { 24791037db265ecdd914a26e056cf69207b4f50924ehkuang ref_[j] = rnd.Rand8(); 24891037db265ecdd914a26e056cf69207b4f50924ehkuang } 24991037db265ecdd914a26e056cf69207b4f50924ehkuang unsigned int sse1, sse2; 25091037db265ecdd914a26e056cf69207b4f50924ehkuang unsigned int var1; 25191037db265ecdd914a26e056cf69207b4f50924ehkuang REGISTER_STATE_CHECK(var1 = subpel_variance_(ref_, width_ + 1, x, y, 25291037db265ecdd914a26e056cf69207b4f50924ehkuang src_, width_, &sse1)); 25391037db265ecdd914a26e056cf69207b4f50924ehkuang const unsigned int var2 = subpel_variance_ref(ref_, src_, log2width_, 25491037db265ecdd914a26e056cf69207b4f50924ehkuang log2height_, x, y, &sse2); 25591037db265ecdd914a26e056cf69207b4f50924ehkuang EXPECT_EQ(sse1, sse2) << "at position " << x << ", " << y; 25691037db265ecdd914a26e056cf69207b4f50924ehkuang EXPECT_EQ(var1, var2) << "at position " << x << ", " << y; 25791037db265ecdd914a26e056cf69207b4f50924ehkuang } 25891037db265ecdd914a26e056cf69207b4f50924ehkuang } 25991037db265ecdd914a26e056cf69207b4f50924ehkuang} 26091037db265ecdd914a26e056cf69207b4f50924ehkuang 26191037db265ecdd914a26e056cf69207b4f50924ehkuangtemplate<> 26291037db265ecdd914a26e056cf69207b4f50924ehkuangvoid SubpelVarianceTest<vp9_subp_avg_variance_fn_t>::RefTest() { 26391037db265ecdd914a26e056cf69207b4f50924ehkuang for (int x = 0; x < 16; ++x) { 26491037db265ecdd914a26e056cf69207b4f50924ehkuang for (int y = 0; y < 16; ++y) { 26591037db265ecdd914a26e056cf69207b4f50924ehkuang for (int j = 0; j < block_size_; j++) { 26691037db265ecdd914a26e056cf69207b4f50924ehkuang src_[j] = rnd.Rand8(); 26791037db265ecdd914a26e056cf69207b4f50924ehkuang sec_[j] = rnd.Rand8(); 26891037db265ecdd914a26e056cf69207b4f50924ehkuang } 26991037db265ecdd914a26e056cf69207b4f50924ehkuang for (int j = 0; j < block_size_ + width_ + height_ + 1; j++) { 27091037db265ecdd914a26e056cf69207b4f50924ehkuang ref_[j] = rnd.Rand8(); 27191037db265ecdd914a26e056cf69207b4f50924ehkuang } 27291037db265ecdd914a26e056cf69207b4f50924ehkuang unsigned int sse1, sse2; 27391037db265ecdd914a26e056cf69207b4f50924ehkuang unsigned int var1; 27491037db265ecdd914a26e056cf69207b4f50924ehkuang REGISTER_STATE_CHECK(var1 = subpel_variance_(ref_, width_ + 1, x, y, 27591037db265ecdd914a26e056cf69207b4f50924ehkuang src_, width_, &sse1, sec_)); 27691037db265ecdd914a26e056cf69207b4f50924ehkuang const unsigned int var2 = subpel_avg_variance_ref(ref_, src_, sec_, 27791037db265ecdd914a26e056cf69207b4f50924ehkuang log2width_, log2height_, 27891037db265ecdd914a26e056cf69207b4f50924ehkuang x, y, &sse2); 27991037db265ecdd914a26e056cf69207b4f50924ehkuang EXPECT_EQ(sse1, sse2) << "at position " << x << ", " << y; 28091037db265ecdd914a26e056cf69207b4f50924ehkuang EXPECT_EQ(var1, var2) << "at position " << x << ", " << y; 28191037db265ecdd914a26e056cf69207b4f50924ehkuang } 28291037db265ecdd914a26e056cf69207b4f50924ehkuang } 28391037db265ecdd914a26e056cf69207b4f50924ehkuang} 28491037db265ecdd914a26e056cf69207b4f50924ehkuang 2855ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang#endif // CONFIG_VP9_ENCODER 2865ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang 287ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang// ----------------------------------------------------------------------------- 288ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang// VP8 test cases. 289ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang 290ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuangnamespace vp8 { 291ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang 292ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang#if CONFIG_VP8_ENCODER 293ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuangtypedef VarianceTest<vp8_variance_fn_t> VP8VarianceTest; 294ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang 295ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuangTEST_P(VP8VarianceTest, Zero) { ZeroTest(); } 29691037db265ecdd914a26e056cf69207b4f50924ehkuangTEST_P(VP8VarianceTest, Ref) { RefTest(); } 297ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuangTEST_P(VP8VarianceTest, OneQuarter) { OneQuarterTest(); } 298ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang 299ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuangconst vp8_variance_fn_t variance4x4_c = vp8_variance4x4_c; 300ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuangconst vp8_variance_fn_t variance8x8_c = vp8_variance8x8_c; 301ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuangconst vp8_variance_fn_t variance8x16_c = vp8_variance8x16_c; 302ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuangconst vp8_variance_fn_t variance16x8_c = vp8_variance16x8_c; 303ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuangconst vp8_variance_fn_t variance16x16_c = vp8_variance16x16_c; 304ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuangINSTANTIATE_TEST_CASE_P( 305ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang C, VP8VarianceTest, 30691037db265ecdd914a26e056cf69207b4f50924ehkuang ::testing::Values(make_tuple(2, 2, variance4x4_c), 30791037db265ecdd914a26e056cf69207b4f50924ehkuang make_tuple(3, 3, variance8x8_c), 30891037db265ecdd914a26e056cf69207b4f50924ehkuang make_tuple(3, 4, variance8x16_c), 30991037db265ecdd914a26e056cf69207b4f50924ehkuang make_tuple(4, 3, variance16x8_c), 31091037db265ecdd914a26e056cf69207b4f50924ehkuang make_tuple(4, 4, variance16x16_c))); 311ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang 312ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang#if HAVE_MMX 313ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuangconst vp8_variance_fn_t variance4x4_mmx = vp8_variance4x4_mmx; 314ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuangconst vp8_variance_fn_t variance8x8_mmx = vp8_variance8x8_mmx; 315ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuangconst vp8_variance_fn_t variance8x16_mmx = vp8_variance8x16_mmx; 316ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuangconst vp8_variance_fn_t variance16x8_mmx = vp8_variance16x8_mmx; 317ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuangconst vp8_variance_fn_t variance16x16_mmx = vp8_variance16x16_mmx; 318ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuangINSTANTIATE_TEST_CASE_P( 319ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang MMX, VP8VarianceTest, 32091037db265ecdd914a26e056cf69207b4f50924ehkuang ::testing::Values(make_tuple(2, 2, variance4x4_mmx), 32191037db265ecdd914a26e056cf69207b4f50924ehkuang make_tuple(3, 3, variance8x8_mmx), 32291037db265ecdd914a26e056cf69207b4f50924ehkuang make_tuple(3, 4, variance8x16_mmx), 32391037db265ecdd914a26e056cf69207b4f50924ehkuang make_tuple(4, 3, variance16x8_mmx), 32491037db265ecdd914a26e056cf69207b4f50924ehkuang make_tuple(4, 4, variance16x16_mmx))); 325ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang#endif 326ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang 327ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang#if HAVE_SSE2 328ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuangconst vp8_variance_fn_t variance4x4_wmt = vp8_variance4x4_wmt; 329ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuangconst vp8_variance_fn_t variance8x8_wmt = vp8_variance8x8_wmt; 330ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuangconst vp8_variance_fn_t variance8x16_wmt = vp8_variance8x16_wmt; 331ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuangconst vp8_variance_fn_t variance16x8_wmt = vp8_variance16x8_wmt; 332ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuangconst vp8_variance_fn_t variance16x16_wmt = vp8_variance16x16_wmt; 333ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuangINSTANTIATE_TEST_CASE_P( 334ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang SSE2, VP8VarianceTest, 33591037db265ecdd914a26e056cf69207b4f50924ehkuang ::testing::Values(make_tuple(2, 2, variance4x4_wmt), 33691037db265ecdd914a26e056cf69207b4f50924ehkuang make_tuple(3, 3, variance8x8_wmt), 33791037db265ecdd914a26e056cf69207b4f50924ehkuang make_tuple(3, 4, variance8x16_wmt), 33891037db265ecdd914a26e056cf69207b4f50924ehkuang make_tuple(4, 3, variance16x8_wmt), 33991037db265ecdd914a26e056cf69207b4f50924ehkuang make_tuple(4, 4, variance16x16_wmt))); 340ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang#endif 341ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang#endif // CONFIG_VP8_ENCODER 342ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang 343ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang} // namespace vp8 344ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang 345ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang// ----------------------------------------------------------------------------- 346ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang// VP9 test cases. 347ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang 348ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuangnamespace vp9 { 349ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang 350ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang#if CONFIG_VP9_ENCODER 351ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuangtypedef VarianceTest<vp9_variance_fn_t> VP9VarianceTest; 35291037db265ecdd914a26e056cf69207b4f50924ehkuangtypedef SubpelVarianceTest<vp9_subpixvariance_fn_t> VP9SubpelVarianceTest; 35391037db265ecdd914a26e056cf69207b4f50924ehkuangtypedef SubpelVarianceTest<vp9_subp_avg_variance_fn_t> VP9SubpelAvgVarianceTest; 354ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang 355ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuangTEST_P(VP9VarianceTest, Zero) { ZeroTest(); } 35691037db265ecdd914a26e056cf69207b4f50924ehkuangTEST_P(VP9VarianceTest, Ref) { RefTest(); } 35791037db265ecdd914a26e056cf69207b4f50924ehkuangTEST_P(VP9SubpelVarianceTest, Ref) { RefTest(); } 35891037db265ecdd914a26e056cf69207b4f50924ehkuangTEST_P(VP9SubpelAvgVarianceTest, Ref) { RefTest(); } 359ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuangTEST_P(VP9VarianceTest, OneQuarter) { OneQuarterTest(); } 360ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang 361ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuangconst vp9_variance_fn_t variance4x4_c = vp9_variance4x4_c; 36291037db265ecdd914a26e056cf69207b4f50924ehkuangconst vp9_variance_fn_t variance4x8_c = vp9_variance4x8_c; 36391037db265ecdd914a26e056cf69207b4f50924ehkuangconst vp9_variance_fn_t variance8x4_c = vp9_variance8x4_c; 364ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuangconst vp9_variance_fn_t variance8x8_c = vp9_variance8x8_c; 365ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuangconst vp9_variance_fn_t variance8x16_c = vp9_variance8x16_c; 366ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuangconst vp9_variance_fn_t variance16x8_c = vp9_variance16x8_c; 367ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuangconst vp9_variance_fn_t variance16x16_c = vp9_variance16x16_c; 36891037db265ecdd914a26e056cf69207b4f50924ehkuangconst vp9_variance_fn_t variance16x32_c = vp9_variance16x32_c; 36991037db265ecdd914a26e056cf69207b4f50924ehkuangconst vp9_variance_fn_t variance32x16_c = vp9_variance32x16_c; 37091037db265ecdd914a26e056cf69207b4f50924ehkuangconst vp9_variance_fn_t variance32x32_c = vp9_variance32x32_c; 37191037db265ecdd914a26e056cf69207b4f50924ehkuangconst vp9_variance_fn_t variance32x64_c = vp9_variance32x64_c; 37291037db265ecdd914a26e056cf69207b4f50924ehkuangconst vp9_variance_fn_t variance64x32_c = vp9_variance64x32_c; 37391037db265ecdd914a26e056cf69207b4f50924ehkuangconst vp9_variance_fn_t variance64x64_c = vp9_variance64x64_c; 374ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuangINSTANTIATE_TEST_CASE_P( 375ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang C, VP9VarianceTest, 37691037db265ecdd914a26e056cf69207b4f50924ehkuang ::testing::Values(make_tuple(2, 2, variance4x4_c), 37791037db265ecdd914a26e056cf69207b4f50924ehkuang make_tuple(2, 3, variance4x8_c), 37891037db265ecdd914a26e056cf69207b4f50924ehkuang make_tuple(3, 2, variance8x4_c), 37991037db265ecdd914a26e056cf69207b4f50924ehkuang make_tuple(3, 3, variance8x8_c), 38091037db265ecdd914a26e056cf69207b4f50924ehkuang make_tuple(3, 4, variance8x16_c), 38191037db265ecdd914a26e056cf69207b4f50924ehkuang make_tuple(4, 3, variance16x8_c), 38291037db265ecdd914a26e056cf69207b4f50924ehkuang make_tuple(4, 4, variance16x16_c), 38391037db265ecdd914a26e056cf69207b4f50924ehkuang make_tuple(4, 5, variance16x32_c), 38491037db265ecdd914a26e056cf69207b4f50924ehkuang make_tuple(5, 4, variance32x16_c), 38591037db265ecdd914a26e056cf69207b4f50924ehkuang make_tuple(5, 5, variance32x32_c), 38691037db265ecdd914a26e056cf69207b4f50924ehkuang make_tuple(5, 6, variance32x64_c), 38791037db265ecdd914a26e056cf69207b4f50924ehkuang make_tuple(6, 5, variance64x32_c), 38891037db265ecdd914a26e056cf69207b4f50924ehkuang make_tuple(6, 6, variance64x64_c))); 38991037db265ecdd914a26e056cf69207b4f50924ehkuang 39091037db265ecdd914a26e056cf69207b4f50924ehkuangconst vp9_subpixvariance_fn_t subpel_variance4x4_c = 39191037db265ecdd914a26e056cf69207b4f50924ehkuang vp9_sub_pixel_variance4x4_c; 39291037db265ecdd914a26e056cf69207b4f50924ehkuangconst vp9_subpixvariance_fn_t subpel_variance4x8_c = 39391037db265ecdd914a26e056cf69207b4f50924ehkuang vp9_sub_pixel_variance4x8_c; 39491037db265ecdd914a26e056cf69207b4f50924ehkuangconst vp9_subpixvariance_fn_t subpel_variance8x4_c = 39591037db265ecdd914a26e056cf69207b4f50924ehkuang vp9_sub_pixel_variance8x4_c; 39691037db265ecdd914a26e056cf69207b4f50924ehkuangconst vp9_subpixvariance_fn_t subpel_variance8x8_c = 39791037db265ecdd914a26e056cf69207b4f50924ehkuang vp9_sub_pixel_variance8x8_c; 39891037db265ecdd914a26e056cf69207b4f50924ehkuangconst vp9_subpixvariance_fn_t subpel_variance8x16_c = 39991037db265ecdd914a26e056cf69207b4f50924ehkuang vp9_sub_pixel_variance8x16_c; 40091037db265ecdd914a26e056cf69207b4f50924ehkuangconst vp9_subpixvariance_fn_t subpel_variance16x8_c = 40191037db265ecdd914a26e056cf69207b4f50924ehkuang vp9_sub_pixel_variance16x8_c; 40291037db265ecdd914a26e056cf69207b4f50924ehkuangconst vp9_subpixvariance_fn_t subpel_variance16x16_c = 40391037db265ecdd914a26e056cf69207b4f50924ehkuang vp9_sub_pixel_variance16x16_c; 40491037db265ecdd914a26e056cf69207b4f50924ehkuangconst vp9_subpixvariance_fn_t subpel_variance16x32_c = 40591037db265ecdd914a26e056cf69207b4f50924ehkuang vp9_sub_pixel_variance16x32_c; 40691037db265ecdd914a26e056cf69207b4f50924ehkuangconst vp9_subpixvariance_fn_t subpel_variance32x16_c = 40791037db265ecdd914a26e056cf69207b4f50924ehkuang vp9_sub_pixel_variance32x16_c; 40891037db265ecdd914a26e056cf69207b4f50924ehkuangconst vp9_subpixvariance_fn_t subpel_variance32x32_c = 40991037db265ecdd914a26e056cf69207b4f50924ehkuang vp9_sub_pixel_variance32x32_c; 41091037db265ecdd914a26e056cf69207b4f50924ehkuangconst vp9_subpixvariance_fn_t subpel_variance32x64_c = 41191037db265ecdd914a26e056cf69207b4f50924ehkuang vp9_sub_pixel_variance32x64_c; 41291037db265ecdd914a26e056cf69207b4f50924ehkuangconst vp9_subpixvariance_fn_t subpel_variance64x32_c = 41391037db265ecdd914a26e056cf69207b4f50924ehkuang vp9_sub_pixel_variance64x32_c; 41491037db265ecdd914a26e056cf69207b4f50924ehkuangconst vp9_subpixvariance_fn_t subpel_variance64x64_c = 41591037db265ecdd914a26e056cf69207b4f50924ehkuang vp9_sub_pixel_variance64x64_c; 41691037db265ecdd914a26e056cf69207b4f50924ehkuangINSTANTIATE_TEST_CASE_P( 41791037db265ecdd914a26e056cf69207b4f50924ehkuang C, VP9SubpelVarianceTest, 41891037db265ecdd914a26e056cf69207b4f50924ehkuang ::testing::Values(make_tuple(2, 2, subpel_variance4x4_c), 41991037db265ecdd914a26e056cf69207b4f50924ehkuang make_tuple(2, 3, subpel_variance4x8_c), 42091037db265ecdd914a26e056cf69207b4f50924ehkuang make_tuple(3, 2, subpel_variance8x4_c), 42191037db265ecdd914a26e056cf69207b4f50924ehkuang make_tuple(3, 3, subpel_variance8x8_c), 42291037db265ecdd914a26e056cf69207b4f50924ehkuang make_tuple(3, 4, subpel_variance8x16_c), 42391037db265ecdd914a26e056cf69207b4f50924ehkuang make_tuple(4, 3, subpel_variance16x8_c), 42491037db265ecdd914a26e056cf69207b4f50924ehkuang make_tuple(4, 4, subpel_variance16x16_c), 42591037db265ecdd914a26e056cf69207b4f50924ehkuang make_tuple(4, 5, subpel_variance16x32_c), 42691037db265ecdd914a26e056cf69207b4f50924ehkuang make_tuple(5, 4, subpel_variance32x16_c), 42791037db265ecdd914a26e056cf69207b4f50924ehkuang make_tuple(5, 5, subpel_variance32x32_c), 42891037db265ecdd914a26e056cf69207b4f50924ehkuang make_tuple(5, 6, subpel_variance32x64_c), 42991037db265ecdd914a26e056cf69207b4f50924ehkuang make_tuple(6, 5, subpel_variance64x32_c), 43091037db265ecdd914a26e056cf69207b4f50924ehkuang make_tuple(6, 6, subpel_variance64x64_c))); 43191037db265ecdd914a26e056cf69207b4f50924ehkuang 43291037db265ecdd914a26e056cf69207b4f50924ehkuangconst vp9_subp_avg_variance_fn_t subpel_avg_variance4x4_c = 43391037db265ecdd914a26e056cf69207b4f50924ehkuang vp9_sub_pixel_avg_variance4x4_c; 43491037db265ecdd914a26e056cf69207b4f50924ehkuangconst vp9_subp_avg_variance_fn_t subpel_avg_variance4x8_c = 43591037db265ecdd914a26e056cf69207b4f50924ehkuang vp9_sub_pixel_avg_variance4x8_c; 43691037db265ecdd914a26e056cf69207b4f50924ehkuangconst vp9_subp_avg_variance_fn_t subpel_avg_variance8x4_c = 43791037db265ecdd914a26e056cf69207b4f50924ehkuang vp9_sub_pixel_avg_variance8x4_c; 43891037db265ecdd914a26e056cf69207b4f50924ehkuangconst vp9_subp_avg_variance_fn_t subpel_avg_variance8x8_c = 43991037db265ecdd914a26e056cf69207b4f50924ehkuang vp9_sub_pixel_avg_variance8x8_c; 44091037db265ecdd914a26e056cf69207b4f50924ehkuangconst vp9_subp_avg_variance_fn_t subpel_avg_variance8x16_c = 44191037db265ecdd914a26e056cf69207b4f50924ehkuang vp9_sub_pixel_avg_variance8x16_c; 44291037db265ecdd914a26e056cf69207b4f50924ehkuangconst vp9_subp_avg_variance_fn_t subpel_avg_variance16x8_c = 44391037db265ecdd914a26e056cf69207b4f50924ehkuang vp9_sub_pixel_avg_variance16x8_c; 44491037db265ecdd914a26e056cf69207b4f50924ehkuangconst vp9_subp_avg_variance_fn_t subpel_avg_variance16x16_c = 44591037db265ecdd914a26e056cf69207b4f50924ehkuang vp9_sub_pixel_avg_variance16x16_c; 44691037db265ecdd914a26e056cf69207b4f50924ehkuangconst vp9_subp_avg_variance_fn_t subpel_avg_variance16x32_c = 44791037db265ecdd914a26e056cf69207b4f50924ehkuang vp9_sub_pixel_avg_variance16x32_c; 44891037db265ecdd914a26e056cf69207b4f50924ehkuangconst vp9_subp_avg_variance_fn_t subpel_avg_variance32x16_c = 44991037db265ecdd914a26e056cf69207b4f50924ehkuang vp9_sub_pixel_avg_variance32x16_c; 45091037db265ecdd914a26e056cf69207b4f50924ehkuangconst vp9_subp_avg_variance_fn_t subpel_avg_variance32x32_c = 45191037db265ecdd914a26e056cf69207b4f50924ehkuang vp9_sub_pixel_avg_variance32x32_c; 45291037db265ecdd914a26e056cf69207b4f50924ehkuangconst vp9_subp_avg_variance_fn_t subpel_avg_variance32x64_c = 45391037db265ecdd914a26e056cf69207b4f50924ehkuang vp9_sub_pixel_avg_variance32x64_c; 45491037db265ecdd914a26e056cf69207b4f50924ehkuangconst vp9_subp_avg_variance_fn_t subpel_avg_variance64x32_c = 45591037db265ecdd914a26e056cf69207b4f50924ehkuang vp9_sub_pixel_avg_variance64x32_c; 45691037db265ecdd914a26e056cf69207b4f50924ehkuangconst vp9_subp_avg_variance_fn_t subpel_avg_variance64x64_c = 45791037db265ecdd914a26e056cf69207b4f50924ehkuang vp9_sub_pixel_avg_variance64x64_c; 45891037db265ecdd914a26e056cf69207b4f50924ehkuangINSTANTIATE_TEST_CASE_P( 45991037db265ecdd914a26e056cf69207b4f50924ehkuang C, VP9SubpelAvgVarianceTest, 46091037db265ecdd914a26e056cf69207b4f50924ehkuang ::testing::Values(make_tuple(2, 2, subpel_avg_variance4x4_c), 46191037db265ecdd914a26e056cf69207b4f50924ehkuang make_tuple(2, 3, subpel_avg_variance4x8_c), 46291037db265ecdd914a26e056cf69207b4f50924ehkuang make_tuple(3, 2, subpel_avg_variance8x4_c), 46391037db265ecdd914a26e056cf69207b4f50924ehkuang make_tuple(3, 3, subpel_avg_variance8x8_c), 46491037db265ecdd914a26e056cf69207b4f50924ehkuang make_tuple(3, 4, subpel_avg_variance8x16_c), 46591037db265ecdd914a26e056cf69207b4f50924ehkuang make_tuple(4, 3, subpel_avg_variance16x8_c), 46691037db265ecdd914a26e056cf69207b4f50924ehkuang make_tuple(4, 4, subpel_avg_variance16x16_c), 46791037db265ecdd914a26e056cf69207b4f50924ehkuang make_tuple(4, 5, subpel_avg_variance16x32_c), 46891037db265ecdd914a26e056cf69207b4f50924ehkuang make_tuple(5, 4, subpel_avg_variance32x16_c), 46991037db265ecdd914a26e056cf69207b4f50924ehkuang make_tuple(5, 5, subpel_avg_variance32x32_c), 47091037db265ecdd914a26e056cf69207b4f50924ehkuang make_tuple(5, 6, subpel_avg_variance32x64_c), 47191037db265ecdd914a26e056cf69207b4f50924ehkuang make_tuple(6, 5, subpel_avg_variance64x32_c), 47291037db265ecdd914a26e056cf69207b4f50924ehkuang make_tuple(6, 6, subpel_avg_variance64x64_c))); 473ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang 474ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang#if HAVE_MMX 475ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuangconst vp9_variance_fn_t variance4x4_mmx = vp9_variance4x4_mmx; 476ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuangconst vp9_variance_fn_t variance8x8_mmx = vp9_variance8x8_mmx; 477ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuangconst vp9_variance_fn_t variance8x16_mmx = vp9_variance8x16_mmx; 478ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuangconst vp9_variance_fn_t variance16x8_mmx = vp9_variance16x8_mmx; 479ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuangconst vp9_variance_fn_t variance16x16_mmx = vp9_variance16x16_mmx; 480ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuangINSTANTIATE_TEST_CASE_P( 481ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang MMX, VP9VarianceTest, 48291037db265ecdd914a26e056cf69207b4f50924ehkuang ::testing::Values(make_tuple(2, 2, variance4x4_mmx), 48391037db265ecdd914a26e056cf69207b4f50924ehkuang make_tuple(3, 3, variance8x8_mmx), 48491037db265ecdd914a26e056cf69207b4f50924ehkuang make_tuple(3, 4, variance8x16_mmx), 48591037db265ecdd914a26e056cf69207b4f50924ehkuang make_tuple(4, 3, variance16x8_mmx), 48691037db265ecdd914a26e056cf69207b4f50924ehkuang make_tuple(4, 4, variance16x16_mmx))); 487ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang#endif 488ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang 489ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang#if HAVE_SSE2 4901184aebb761cbeac9124c37189a80a1a58f04b6bhkuang#if CONFIG_USE_X86INC 49191037db265ecdd914a26e056cf69207b4f50924ehkuangconst vp9_variance_fn_t variance4x4_sse2 = vp9_variance4x4_sse2; 49291037db265ecdd914a26e056cf69207b4f50924ehkuangconst vp9_variance_fn_t variance4x8_sse2 = vp9_variance4x8_sse2; 49391037db265ecdd914a26e056cf69207b4f50924ehkuangconst vp9_variance_fn_t variance8x4_sse2 = vp9_variance8x4_sse2; 49491037db265ecdd914a26e056cf69207b4f50924ehkuangconst vp9_variance_fn_t variance8x8_sse2 = vp9_variance8x8_sse2; 49591037db265ecdd914a26e056cf69207b4f50924ehkuangconst vp9_variance_fn_t variance8x16_sse2 = vp9_variance8x16_sse2; 49691037db265ecdd914a26e056cf69207b4f50924ehkuangconst vp9_variance_fn_t variance16x8_sse2 = vp9_variance16x8_sse2; 49791037db265ecdd914a26e056cf69207b4f50924ehkuangconst vp9_variance_fn_t variance16x16_sse2 = vp9_variance16x16_sse2; 49891037db265ecdd914a26e056cf69207b4f50924ehkuangconst vp9_variance_fn_t variance16x32_sse2 = vp9_variance16x32_sse2; 49991037db265ecdd914a26e056cf69207b4f50924ehkuangconst vp9_variance_fn_t variance32x16_sse2 = vp9_variance32x16_sse2; 50091037db265ecdd914a26e056cf69207b4f50924ehkuangconst vp9_variance_fn_t variance32x32_sse2 = vp9_variance32x32_sse2; 50191037db265ecdd914a26e056cf69207b4f50924ehkuangconst vp9_variance_fn_t variance32x64_sse2 = vp9_variance32x64_sse2; 50291037db265ecdd914a26e056cf69207b4f50924ehkuangconst vp9_variance_fn_t variance64x32_sse2 = vp9_variance64x32_sse2; 50391037db265ecdd914a26e056cf69207b4f50924ehkuangconst vp9_variance_fn_t variance64x64_sse2 = vp9_variance64x64_sse2; 504ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuangINSTANTIATE_TEST_CASE_P( 505ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang SSE2, VP9VarianceTest, 50691037db265ecdd914a26e056cf69207b4f50924ehkuang ::testing::Values(make_tuple(2, 2, variance4x4_sse2), 50791037db265ecdd914a26e056cf69207b4f50924ehkuang make_tuple(2, 3, variance4x8_sse2), 50891037db265ecdd914a26e056cf69207b4f50924ehkuang make_tuple(3, 2, variance8x4_sse2), 50991037db265ecdd914a26e056cf69207b4f50924ehkuang make_tuple(3, 3, variance8x8_sse2), 51091037db265ecdd914a26e056cf69207b4f50924ehkuang make_tuple(3, 4, variance8x16_sse2), 51191037db265ecdd914a26e056cf69207b4f50924ehkuang make_tuple(4, 3, variance16x8_sse2), 51291037db265ecdd914a26e056cf69207b4f50924ehkuang make_tuple(4, 4, variance16x16_sse2), 51391037db265ecdd914a26e056cf69207b4f50924ehkuang make_tuple(4, 5, variance16x32_sse2), 51491037db265ecdd914a26e056cf69207b4f50924ehkuang make_tuple(5, 4, variance32x16_sse2), 51591037db265ecdd914a26e056cf69207b4f50924ehkuang make_tuple(5, 5, variance32x32_sse2), 51691037db265ecdd914a26e056cf69207b4f50924ehkuang make_tuple(5, 6, variance32x64_sse2), 51791037db265ecdd914a26e056cf69207b4f50924ehkuang make_tuple(6, 5, variance64x32_sse2), 51891037db265ecdd914a26e056cf69207b4f50924ehkuang make_tuple(6, 6, variance64x64_sse2))); 51991037db265ecdd914a26e056cf69207b4f50924ehkuang 52091037db265ecdd914a26e056cf69207b4f50924ehkuangconst vp9_subpixvariance_fn_t subpel_variance4x4_sse = 52191037db265ecdd914a26e056cf69207b4f50924ehkuang vp9_sub_pixel_variance4x4_sse; 52291037db265ecdd914a26e056cf69207b4f50924ehkuangconst vp9_subpixvariance_fn_t subpel_variance4x8_sse = 52391037db265ecdd914a26e056cf69207b4f50924ehkuang vp9_sub_pixel_variance4x8_sse; 52491037db265ecdd914a26e056cf69207b4f50924ehkuangconst vp9_subpixvariance_fn_t subpel_variance8x4_sse2 = 52591037db265ecdd914a26e056cf69207b4f50924ehkuang vp9_sub_pixel_variance8x4_sse2; 52691037db265ecdd914a26e056cf69207b4f50924ehkuangconst vp9_subpixvariance_fn_t subpel_variance8x8_sse2 = 52791037db265ecdd914a26e056cf69207b4f50924ehkuang vp9_sub_pixel_variance8x8_sse2; 52891037db265ecdd914a26e056cf69207b4f50924ehkuangconst vp9_subpixvariance_fn_t subpel_variance8x16_sse2 = 52991037db265ecdd914a26e056cf69207b4f50924ehkuang vp9_sub_pixel_variance8x16_sse2; 53091037db265ecdd914a26e056cf69207b4f50924ehkuangconst vp9_subpixvariance_fn_t subpel_variance16x8_sse2 = 53191037db265ecdd914a26e056cf69207b4f50924ehkuang vp9_sub_pixel_variance16x8_sse2; 53291037db265ecdd914a26e056cf69207b4f50924ehkuangconst vp9_subpixvariance_fn_t subpel_variance16x16_sse2 = 53391037db265ecdd914a26e056cf69207b4f50924ehkuang vp9_sub_pixel_variance16x16_sse2; 53491037db265ecdd914a26e056cf69207b4f50924ehkuangconst vp9_subpixvariance_fn_t subpel_variance16x32_sse2 = 53591037db265ecdd914a26e056cf69207b4f50924ehkuang vp9_sub_pixel_variance16x32_sse2; 53691037db265ecdd914a26e056cf69207b4f50924ehkuangconst vp9_subpixvariance_fn_t subpel_variance32x16_sse2 = 53791037db265ecdd914a26e056cf69207b4f50924ehkuang vp9_sub_pixel_variance32x16_sse2; 53891037db265ecdd914a26e056cf69207b4f50924ehkuangconst vp9_subpixvariance_fn_t subpel_variance32x32_sse2 = 53991037db265ecdd914a26e056cf69207b4f50924ehkuang vp9_sub_pixel_variance32x32_sse2; 54091037db265ecdd914a26e056cf69207b4f50924ehkuangconst vp9_subpixvariance_fn_t subpel_variance32x64_sse2 = 54191037db265ecdd914a26e056cf69207b4f50924ehkuang vp9_sub_pixel_variance32x64_sse2; 54291037db265ecdd914a26e056cf69207b4f50924ehkuangconst vp9_subpixvariance_fn_t subpel_variance64x32_sse2 = 54391037db265ecdd914a26e056cf69207b4f50924ehkuang vp9_sub_pixel_variance64x32_sse2; 54491037db265ecdd914a26e056cf69207b4f50924ehkuangconst vp9_subpixvariance_fn_t subpel_variance64x64_sse2 = 54591037db265ecdd914a26e056cf69207b4f50924ehkuang vp9_sub_pixel_variance64x64_sse2; 54691037db265ecdd914a26e056cf69207b4f50924ehkuangINSTANTIATE_TEST_CASE_P( 54791037db265ecdd914a26e056cf69207b4f50924ehkuang SSE2, VP9SubpelVarianceTest, 54891037db265ecdd914a26e056cf69207b4f50924ehkuang ::testing::Values(make_tuple(2, 2, subpel_variance4x4_sse), 54991037db265ecdd914a26e056cf69207b4f50924ehkuang make_tuple(2, 3, subpel_variance4x8_sse), 55091037db265ecdd914a26e056cf69207b4f50924ehkuang make_tuple(3, 2, subpel_variance8x4_sse2), 55191037db265ecdd914a26e056cf69207b4f50924ehkuang make_tuple(3, 3, subpel_variance8x8_sse2), 55291037db265ecdd914a26e056cf69207b4f50924ehkuang make_tuple(3, 4, subpel_variance8x16_sse2), 55391037db265ecdd914a26e056cf69207b4f50924ehkuang make_tuple(4, 3, subpel_variance16x8_sse2), 55491037db265ecdd914a26e056cf69207b4f50924ehkuang make_tuple(4, 4, subpel_variance16x16_sse2), 55591037db265ecdd914a26e056cf69207b4f50924ehkuang make_tuple(4, 5, subpel_variance16x32_sse2), 55691037db265ecdd914a26e056cf69207b4f50924ehkuang make_tuple(5, 4, subpel_variance32x16_sse2), 55791037db265ecdd914a26e056cf69207b4f50924ehkuang make_tuple(5, 5, subpel_variance32x32_sse2), 55891037db265ecdd914a26e056cf69207b4f50924ehkuang make_tuple(5, 6, subpel_variance32x64_sse2), 55991037db265ecdd914a26e056cf69207b4f50924ehkuang make_tuple(6, 5, subpel_variance64x32_sse2), 56091037db265ecdd914a26e056cf69207b4f50924ehkuang make_tuple(6, 6, subpel_variance64x64_sse2))); 56191037db265ecdd914a26e056cf69207b4f50924ehkuang 56291037db265ecdd914a26e056cf69207b4f50924ehkuangconst vp9_subp_avg_variance_fn_t subpel_avg_variance4x4_sse = 56391037db265ecdd914a26e056cf69207b4f50924ehkuang vp9_sub_pixel_avg_variance4x4_sse; 56491037db265ecdd914a26e056cf69207b4f50924ehkuangconst vp9_subp_avg_variance_fn_t subpel_avg_variance4x8_sse = 56591037db265ecdd914a26e056cf69207b4f50924ehkuang vp9_sub_pixel_avg_variance4x8_sse; 56691037db265ecdd914a26e056cf69207b4f50924ehkuangconst vp9_subp_avg_variance_fn_t subpel_avg_variance8x4_sse2 = 56791037db265ecdd914a26e056cf69207b4f50924ehkuang vp9_sub_pixel_avg_variance8x4_sse2; 56891037db265ecdd914a26e056cf69207b4f50924ehkuangconst vp9_subp_avg_variance_fn_t subpel_avg_variance8x8_sse2 = 56991037db265ecdd914a26e056cf69207b4f50924ehkuang vp9_sub_pixel_avg_variance8x8_sse2; 57091037db265ecdd914a26e056cf69207b4f50924ehkuangconst vp9_subp_avg_variance_fn_t subpel_avg_variance8x16_sse2 = 57191037db265ecdd914a26e056cf69207b4f50924ehkuang vp9_sub_pixel_avg_variance8x16_sse2; 57291037db265ecdd914a26e056cf69207b4f50924ehkuangconst vp9_subp_avg_variance_fn_t subpel_avg_variance16x8_sse2 = 57391037db265ecdd914a26e056cf69207b4f50924ehkuang vp9_sub_pixel_avg_variance16x8_sse2; 57491037db265ecdd914a26e056cf69207b4f50924ehkuangconst vp9_subp_avg_variance_fn_t subpel_avg_variance16x16_sse2 = 57591037db265ecdd914a26e056cf69207b4f50924ehkuang vp9_sub_pixel_avg_variance16x16_sse2; 57691037db265ecdd914a26e056cf69207b4f50924ehkuangconst vp9_subp_avg_variance_fn_t subpel_avg_variance16x32_sse2 = 57791037db265ecdd914a26e056cf69207b4f50924ehkuang vp9_sub_pixel_avg_variance16x32_sse2; 57891037db265ecdd914a26e056cf69207b4f50924ehkuangconst vp9_subp_avg_variance_fn_t subpel_avg_variance32x16_sse2 = 57991037db265ecdd914a26e056cf69207b4f50924ehkuang vp9_sub_pixel_avg_variance32x16_sse2; 58091037db265ecdd914a26e056cf69207b4f50924ehkuangconst vp9_subp_avg_variance_fn_t subpel_avg_variance32x32_sse2 = 58191037db265ecdd914a26e056cf69207b4f50924ehkuang vp9_sub_pixel_avg_variance32x32_sse2; 58291037db265ecdd914a26e056cf69207b4f50924ehkuangconst vp9_subp_avg_variance_fn_t subpel_avg_variance32x64_sse2 = 58391037db265ecdd914a26e056cf69207b4f50924ehkuang vp9_sub_pixel_avg_variance32x64_sse2; 58491037db265ecdd914a26e056cf69207b4f50924ehkuangconst vp9_subp_avg_variance_fn_t subpel_avg_variance64x32_sse2 = 58591037db265ecdd914a26e056cf69207b4f50924ehkuang vp9_sub_pixel_avg_variance64x32_sse2; 58691037db265ecdd914a26e056cf69207b4f50924ehkuangconst vp9_subp_avg_variance_fn_t subpel_avg_variance64x64_sse2 = 58791037db265ecdd914a26e056cf69207b4f50924ehkuang vp9_sub_pixel_avg_variance64x64_sse2; 58891037db265ecdd914a26e056cf69207b4f50924ehkuangINSTANTIATE_TEST_CASE_P( 58991037db265ecdd914a26e056cf69207b4f50924ehkuang SSE2, VP9SubpelAvgVarianceTest, 59091037db265ecdd914a26e056cf69207b4f50924ehkuang ::testing::Values(make_tuple(2, 2, subpel_avg_variance4x4_sse), 59191037db265ecdd914a26e056cf69207b4f50924ehkuang make_tuple(2, 3, subpel_avg_variance4x8_sse), 59291037db265ecdd914a26e056cf69207b4f50924ehkuang make_tuple(3, 2, subpel_avg_variance8x4_sse2), 59391037db265ecdd914a26e056cf69207b4f50924ehkuang make_tuple(3, 3, subpel_avg_variance8x8_sse2), 59491037db265ecdd914a26e056cf69207b4f50924ehkuang make_tuple(3, 4, subpel_avg_variance8x16_sse2), 59591037db265ecdd914a26e056cf69207b4f50924ehkuang make_tuple(4, 3, subpel_avg_variance16x8_sse2), 59691037db265ecdd914a26e056cf69207b4f50924ehkuang make_tuple(4, 4, subpel_avg_variance16x16_sse2), 59791037db265ecdd914a26e056cf69207b4f50924ehkuang make_tuple(4, 5, subpel_avg_variance16x32_sse2), 59891037db265ecdd914a26e056cf69207b4f50924ehkuang make_tuple(5, 4, subpel_avg_variance32x16_sse2), 59991037db265ecdd914a26e056cf69207b4f50924ehkuang make_tuple(5, 5, subpel_avg_variance32x32_sse2), 60091037db265ecdd914a26e056cf69207b4f50924ehkuang make_tuple(5, 6, subpel_avg_variance32x64_sse2), 60191037db265ecdd914a26e056cf69207b4f50924ehkuang make_tuple(6, 5, subpel_avg_variance64x32_sse2), 60291037db265ecdd914a26e056cf69207b4f50924ehkuang make_tuple(6, 6, subpel_avg_variance64x64_sse2))); 60391037db265ecdd914a26e056cf69207b4f50924ehkuang#endif 6041184aebb761cbeac9124c37189a80a1a58f04b6bhkuang#endif 60591037db265ecdd914a26e056cf69207b4f50924ehkuang 60691037db265ecdd914a26e056cf69207b4f50924ehkuang#if HAVE_SSSE3 6071184aebb761cbeac9124c37189a80a1a58f04b6bhkuang#if CONFIG_USE_X86INC 6081184aebb761cbeac9124c37189a80a1a58f04b6bhkuang 60991037db265ecdd914a26e056cf69207b4f50924ehkuangconst vp9_subpixvariance_fn_t subpel_variance4x4_ssse3 = 61091037db265ecdd914a26e056cf69207b4f50924ehkuang vp9_sub_pixel_variance4x4_ssse3; 61191037db265ecdd914a26e056cf69207b4f50924ehkuangconst vp9_subpixvariance_fn_t subpel_variance4x8_ssse3 = 61291037db265ecdd914a26e056cf69207b4f50924ehkuang vp9_sub_pixel_variance4x8_ssse3; 61391037db265ecdd914a26e056cf69207b4f50924ehkuangconst vp9_subpixvariance_fn_t subpel_variance8x4_ssse3 = 61491037db265ecdd914a26e056cf69207b4f50924ehkuang vp9_sub_pixel_variance8x4_ssse3; 61591037db265ecdd914a26e056cf69207b4f50924ehkuangconst vp9_subpixvariance_fn_t subpel_variance8x8_ssse3 = 61691037db265ecdd914a26e056cf69207b4f50924ehkuang vp9_sub_pixel_variance8x8_ssse3; 61791037db265ecdd914a26e056cf69207b4f50924ehkuangconst vp9_subpixvariance_fn_t subpel_variance8x16_ssse3 = 61891037db265ecdd914a26e056cf69207b4f50924ehkuang vp9_sub_pixel_variance8x16_ssse3; 61991037db265ecdd914a26e056cf69207b4f50924ehkuangconst vp9_subpixvariance_fn_t subpel_variance16x8_ssse3 = 62091037db265ecdd914a26e056cf69207b4f50924ehkuang vp9_sub_pixel_variance16x8_ssse3; 62191037db265ecdd914a26e056cf69207b4f50924ehkuangconst vp9_subpixvariance_fn_t subpel_variance16x16_ssse3 = 62291037db265ecdd914a26e056cf69207b4f50924ehkuang vp9_sub_pixel_variance16x16_ssse3; 62391037db265ecdd914a26e056cf69207b4f50924ehkuangconst vp9_subpixvariance_fn_t subpel_variance16x32_ssse3 = 62491037db265ecdd914a26e056cf69207b4f50924ehkuang vp9_sub_pixel_variance16x32_ssse3; 62591037db265ecdd914a26e056cf69207b4f50924ehkuangconst vp9_subpixvariance_fn_t subpel_variance32x16_ssse3 = 62691037db265ecdd914a26e056cf69207b4f50924ehkuang vp9_sub_pixel_variance32x16_ssse3; 62791037db265ecdd914a26e056cf69207b4f50924ehkuangconst vp9_subpixvariance_fn_t subpel_variance32x32_ssse3 = 62891037db265ecdd914a26e056cf69207b4f50924ehkuang vp9_sub_pixel_variance32x32_ssse3; 62991037db265ecdd914a26e056cf69207b4f50924ehkuangconst vp9_subpixvariance_fn_t subpel_variance32x64_ssse3 = 63091037db265ecdd914a26e056cf69207b4f50924ehkuang vp9_sub_pixel_variance32x64_ssse3; 63191037db265ecdd914a26e056cf69207b4f50924ehkuangconst vp9_subpixvariance_fn_t subpel_variance64x32_ssse3 = 63291037db265ecdd914a26e056cf69207b4f50924ehkuang vp9_sub_pixel_variance64x32_ssse3; 63391037db265ecdd914a26e056cf69207b4f50924ehkuangconst vp9_subpixvariance_fn_t subpel_variance64x64_ssse3 = 63491037db265ecdd914a26e056cf69207b4f50924ehkuang vp9_sub_pixel_variance64x64_ssse3; 63591037db265ecdd914a26e056cf69207b4f50924ehkuangINSTANTIATE_TEST_CASE_P( 63691037db265ecdd914a26e056cf69207b4f50924ehkuang SSSE3, VP9SubpelVarianceTest, 63791037db265ecdd914a26e056cf69207b4f50924ehkuang ::testing::Values(make_tuple(2, 2, subpel_variance4x4_ssse3), 63891037db265ecdd914a26e056cf69207b4f50924ehkuang make_tuple(2, 3, subpel_variance4x8_ssse3), 63991037db265ecdd914a26e056cf69207b4f50924ehkuang make_tuple(3, 2, subpel_variance8x4_ssse3), 64091037db265ecdd914a26e056cf69207b4f50924ehkuang make_tuple(3, 3, subpel_variance8x8_ssse3), 64191037db265ecdd914a26e056cf69207b4f50924ehkuang make_tuple(3, 4, subpel_variance8x16_ssse3), 64291037db265ecdd914a26e056cf69207b4f50924ehkuang make_tuple(4, 3, subpel_variance16x8_ssse3), 64391037db265ecdd914a26e056cf69207b4f50924ehkuang make_tuple(4, 4, subpel_variance16x16_ssse3), 64491037db265ecdd914a26e056cf69207b4f50924ehkuang make_tuple(4, 5, subpel_variance16x32_ssse3), 64591037db265ecdd914a26e056cf69207b4f50924ehkuang make_tuple(5, 4, subpel_variance32x16_ssse3), 64691037db265ecdd914a26e056cf69207b4f50924ehkuang make_tuple(5, 5, subpel_variance32x32_ssse3), 64791037db265ecdd914a26e056cf69207b4f50924ehkuang make_tuple(5, 6, subpel_variance32x64_ssse3), 64891037db265ecdd914a26e056cf69207b4f50924ehkuang make_tuple(6, 5, subpel_variance64x32_ssse3), 64991037db265ecdd914a26e056cf69207b4f50924ehkuang make_tuple(6, 6, subpel_variance64x64_ssse3))); 65091037db265ecdd914a26e056cf69207b4f50924ehkuang 65191037db265ecdd914a26e056cf69207b4f50924ehkuangconst vp9_subp_avg_variance_fn_t subpel_avg_variance4x4_ssse3 = 65291037db265ecdd914a26e056cf69207b4f50924ehkuang vp9_sub_pixel_avg_variance4x4_ssse3; 65391037db265ecdd914a26e056cf69207b4f50924ehkuangconst vp9_subp_avg_variance_fn_t subpel_avg_variance4x8_ssse3 = 65491037db265ecdd914a26e056cf69207b4f50924ehkuang vp9_sub_pixel_avg_variance4x8_ssse3; 65591037db265ecdd914a26e056cf69207b4f50924ehkuangconst vp9_subp_avg_variance_fn_t subpel_avg_variance8x4_ssse3 = 65691037db265ecdd914a26e056cf69207b4f50924ehkuang vp9_sub_pixel_avg_variance8x4_ssse3; 65791037db265ecdd914a26e056cf69207b4f50924ehkuangconst vp9_subp_avg_variance_fn_t subpel_avg_variance8x8_ssse3 = 65891037db265ecdd914a26e056cf69207b4f50924ehkuang vp9_sub_pixel_avg_variance8x8_ssse3; 65991037db265ecdd914a26e056cf69207b4f50924ehkuangconst vp9_subp_avg_variance_fn_t subpel_avg_variance8x16_ssse3 = 66091037db265ecdd914a26e056cf69207b4f50924ehkuang vp9_sub_pixel_avg_variance8x16_ssse3; 66191037db265ecdd914a26e056cf69207b4f50924ehkuangconst vp9_subp_avg_variance_fn_t subpel_avg_variance16x8_ssse3 = 66291037db265ecdd914a26e056cf69207b4f50924ehkuang vp9_sub_pixel_avg_variance16x8_ssse3; 66391037db265ecdd914a26e056cf69207b4f50924ehkuangconst vp9_subp_avg_variance_fn_t subpel_avg_variance16x16_ssse3 = 66491037db265ecdd914a26e056cf69207b4f50924ehkuang vp9_sub_pixel_avg_variance16x16_ssse3; 66591037db265ecdd914a26e056cf69207b4f50924ehkuangconst vp9_subp_avg_variance_fn_t subpel_avg_variance16x32_ssse3 = 66691037db265ecdd914a26e056cf69207b4f50924ehkuang vp9_sub_pixel_avg_variance16x32_ssse3; 66791037db265ecdd914a26e056cf69207b4f50924ehkuangconst vp9_subp_avg_variance_fn_t subpel_avg_variance32x16_ssse3 = 66891037db265ecdd914a26e056cf69207b4f50924ehkuang vp9_sub_pixel_avg_variance32x16_ssse3; 66991037db265ecdd914a26e056cf69207b4f50924ehkuangconst vp9_subp_avg_variance_fn_t subpel_avg_variance32x32_ssse3 = 67091037db265ecdd914a26e056cf69207b4f50924ehkuang vp9_sub_pixel_avg_variance32x32_ssse3; 67191037db265ecdd914a26e056cf69207b4f50924ehkuangconst vp9_subp_avg_variance_fn_t subpel_avg_variance32x64_ssse3 = 67291037db265ecdd914a26e056cf69207b4f50924ehkuang vp9_sub_pixel_avg_variance32x64_ssse3; 67391037db265ecdd914a26e056cf69207b4f50924ehkuangconst vp9_subp_avg_variance_fn_t subpel_avg_variance64x32_ssse3 = 67491037db265ecdd914a26e056cf69207b4f50924ehkuang vp9_sub_pixel_avg_variance64x32_ssse3; 67591037db265ecdd914a26e056cf69207b4f50924ehkuangconst vp9_subp_avg_variance_fn_t subpel_avg_variance64x64_ssse3 = 67691037db265ecdd914a26e056cf69207b4f50924ehkuang vp9_sub_pixel_avg_variance64x64_ssse3; 67791037db265ecdd914a26e056cf69207b4f50924ehkuangINSTANTIATE_TEST_CASE_P( 67891037db265ecdd914a26e056cf69207b4f50924ehkuang SSSE3, VP9SubpelAvgVarianceTest, 67991037db265ecdd914a26e056cf69207b4f50924ehkuang ::testing::Values(make_tuple(2, 2, subpel_avg_variance4x4_ssse3), 68091037db265ecdd914a26e056cf69207b4f50924ehkuang make_tuple(2, 3, subpel_avg_variance4x8_ssse3), 68191037db265ecdd914a26e056cf69207b4f50924ehkuang make_tuple(3, 2, subpel_avg_variance8x4_ssse3), 68291037db265ecdd914a26e056cf69207b4f50924ehkuang make_tuple(3, 3, subpel_avg_variance8x8_ssse3), 68391037db265ecdd914a26e056cf69207b4f50924ehkuang make_tuple(3, 4, subpel_avg_variance8x16_ssse3), 68491037db265ecdd914a26e056cf69207b4f50924ehkuang make_tuple(4, 3, subpel_avg_variance16x8_ssse3), 68591037db265ecdd914a26e056cf69207b4f50924ehkuang make_tuple(4, 4, subpel_avg_variance16x16_ssse3), 68691037db265ecdd914a26e056cf69207b4f50924ehkuang make_tuple(4, 5, subpel_avg_variance16x32_ssse3), 68791037db265ecdd914a26e056cf69207b4f50924ehkuang make_tuple(5, 4, subpel_avg_variance32x16_ssse3), 68891037db265ecdd914a26e056cf69207b4f50924ehkuang make_tuple(5, 5, subpel_avg_variance32x32_ssse3), 68991037db265ecdd914a26e056cf69207b4f50924ehkuang make_tuple(5, 6, subpel_avg_variance32x64_ssse3), 69091037db265ecdd914a26e056cf69207b4f50924ehkuang make_tuple(6, 5, subpel_avg_variance64x32_ssse3), 69191037db265ecdd914a26e056cf69207b4f50924ehkuang make_tuple(6, 6, subpel_avg_variance64x64_ssse3))); 692ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang#endif 6931184aebb761cbeac9124c37189a80a1a58f04b6bhkuang#endif 694ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang#endif // CONFIG_VP9_ENCODER 695ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang 696ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang} // namespace vp9 697ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang 698ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang} // namespace 699