1233d2500723e5594f3e7c70896ffeeef32b9c950ywan/* 2233d2500723e5594f3e7c70896ffeeef32b9c950ywan * Copyright (c) 2012 The WebM project authors. All Rights Reserved. 3233d2500723e5594f3e7c70896ffeeef32b9c950ywan * 4233d2500723e5594f3e7c70896ffeeef32b9c950ywan * Use of this source code is governed by a BSD-style license 5233d2500723e5594f3e7c70896ffeeef32b9c950ywan * that can be found in the LICENSE file in the root of the source 6233d2500723e5594f3e7c70896ffeeef32b9c950ywan * tree. An additional intellectual property rights grant can be found 7233d2500723e5594f3e7c70896ffeeef32b9c950ywan * in the file PATENTS. All contributing project authors may 8233d2500723e5594f3e7c70896ffeeef32b9c950ywan * be found in the AUTHORS file in the root of the source tree. 9233d2500723e5594f3e7c70896ffeeef32b9c950ywan */ 10233d2500723e5594f3e7c70896ffeeef32b9c950ywan#include <stdlib.h> 11233d2500723e5594f3e7c70896ffeeef32b9c950ywan#include <new> 12233d2500723e5594f3e7c70896ffeeef32b9c950ywan 13233d2500723e5594f3e7c70896ffeeef32b9c950ywan#include "third_party/googletest/src/include/gtest/gtest.h" 14233d2500723e5594f3e7c70896ffeeef32b9c950ywan 15233d2500723e5594f3e7c70896ffeeef32b9c950ywan#include "test/clear_system_state.h" 16233d2500723e5594f3e7c70896ffeeef32b9c950ywan#include "test/register_state_check.h" 17233d2500723e5594f3e7c70896ffeeef32b9c950ywan 18233d2500723e5594f3e7c70896ffeeef32b9c950ywan#include "vpx/vpx_integer.h" 19233d2500723e5594f3e7c70896ffeeef32b9c950ywan#include "./vpx_config.h" 20233d2500723e5594f3e7c70896ffeeef32b9c950ywan#include "vpx_mem/vpx_mem.h" 21233d2500723e5594f3e7c70896ffeeef32b9c950ywan#if CONFIG_VP8_ENCODER 22233d2500723e5594f3e7c70896ffeeef32b9c950ywan# include "./vp8_rtcd.h" 23233d2500723e5594f3e7c70896ffeeef32b9c950ywan# include "vp8/common/variance.h" 24233d2500723e5594f3e7c70896ffeeef32b9c950ywan#endif 25233d2500723e5594f3e7c70896ffeeef32b9c950ywan#if CONFIG_VP9_ENCODER 26233d2500723e5594f3e7c70896ffeeef32b9c950ywan# include "./vp9_rtcd.h" 27233d2500723e5594f3e7c70896ffeeef32b9c950ywan# include "vp9/encoder/vp9_variance.h" 28233d2500723e5594f3e7c70896ffeeef32b9c950ywan#endif 29233d2500723e5594f3e7c70896ffeeef32b9c950ywan#include "test/acm_random.h" 30233d2500723e5594f3e7c70896ffeeef32b9c950ywan 31233d2500723e5594f3e7c70896ffeeef32b9c950ywannamespace { 32233d2500723e5594f3e7c70896ffeeef32b9c950ywan 33233d2500723e5594f3e7c70896ffeeef32b9c950ywanusing ::std::tr1::get; 34233d2500723e5594f3e7c70896ffeeef32b9c950ywanusing ::std::tr1::make_tuple; 35233d2500723e5594f3e7c70896ffeeef32b9c950ywanusing ::std::tr1::tuple; 36233d2500723e5594f3e7c70896ffeeef32b9c950ywanusing libvpx_test::ACMRandom; 37233d2500723e5594f3e7c70896ffeeef32b9c950ywan 38233d2500723e5594f3e7c70896ffeeef32b9c950ywanstatic unsigned int variance_ref(const uint8_t *ref, const uint8_t *src, 39233d2500723e5594f3e7c70896ffeeef32b9c950ywan int l2w, int l2h, unsigned int *sse_ptr) { 40233d2500723e5594f3e7c70896ffeeef32b9c950ywan int se = 0; 41233d2500723e5594f3e7c70896ffeeef32b9c950ywan unsigned int sse = 0; 42233d2500723e5594f3e7c70896ffeeef32b9c950ywan const int w = 1 << l2w, h = 1 << l2h; 43233d2500723e5594f3e7c70896ffeeef32b9c950ywan for (int y = 0; y < h; y++) { 44233d2500723e5594f3e7c70896ffeeef32b9c950ywan for (int x = 0; x < w; x++) { 45233d2500723e5594f3e7c70896ffeeef32b9c950ywan int diff = ref[w * y + x] - src[w * y + x]; 46233d2500723e5594f3e7c70896ffeeef32b9c950ywan se += diff; 47233d2500723e5594f3e7c70896ffeeef32b9c950ywan sse += diff * diff; 48233d2500723e5594f3e7c70896ffeeef32b9c950ywan } 49233d2500723e5594f3e7c70896ffeeef32b9c950ywan } 50233d2500723e5594f3e7c70896ffeeef32b9c950ywan *sse_ptr = sse; 51233d2500723e5594f3e7c70896ffeeef32b9c950ywan return sse - (((int64_t) se * se) >> (l2w + l2h)); 52233d2500723e5594f3e7c70896ffeeef32b9c950ywan} 53233d2500723e5594f3e7c70896ffeeef32b9c950ywan 54233d2500723e5594f3e7c70896ffeeef32b9c950ywanstatic unsigned int subpel_variance_ref(const uint8_t *ref, const uint8_t *src, 55233d2500723e5594f3e7c70896ffeeef32b9c950ywan int l2w, int l2h, int xoff, int yoff, 56233d2500723e5594f3e7c70896ffeeef32b9c950ywan unsigned int *sse_ptr) { 57233d2500723e5594f3e7c70896ffeeef32b9c950ywan int se = 0; 58233d2500723e5594f3e7c70896ffeeef32b9c950ywan unsigned int sse = 0; 59233d2500723e5594f3e7c70896ffeeef32b9c950ywan const int w = 1 << l2w, h = 1 << l2h; 60233d2500723e5594f3e7c70896ffeeef32b9c950ywan for (int y = 0; y < h; y++) { 61233d2500723e5594f3e7c70896ffeeef32b9c950ywan for (int x = 0; x < w; x++) { 62233d2500723e5594f3e7c70896ffeeef32b9c950ywan // bilinear interpolation at a 16th pel step 63233d2500723e5594f3e7c70896ffeeef32b9c950ywan const int a1 = ref[(w + 1) * (y + 0) + x + 0]; 64233d2500723e5594f3e7c70896ffeeef32b9c950ywan const int a2 = ref[(w + 1) * (y + 0) + x + 1]; 65233d2500723e5594f3e7c70896ffeeef32b9c950ywan const int b1 = ref[(w + 1) * (y + 1) + x + 0]; 66233d2500723e5594f3e7c70896ffeeef32b9c950ywan const int b2 = ref[(w + 1) * (y + 1) + x + 1]; 67233d2500723e5594f3e7c70896ffeeef32b9c950ywan const int a = a1 + (((a2 - a1) * xoff + 8) >> 4); 68233d2500723e5594f3e7c70896ffeeef32b9c950ywan const int b = b1 + (((b2 - b1) * xoff + 8) >> 4); 69233d2500723e5594f3e7c70896ffeeef32b9c950ywan const int r = a + (((b - a) * yoff + 8) >> 4); 70233d2500723e5594f3e7c70896ffeeef32b9c950ywan int diff = r - src[w * y + x]; 71233d2500723e5594f3e7c70896ffeeef32b9c950ywan se += diff; 72233d2500723e5594f3e7c70896ffeeef32b9c950ywan sse += diff * diff; 73233d2500723e5594f3e7c70896ffeeef32b9c950ywan } 74233d2500723e5594f3e7c70896ffeeef32b9c950ywan } 75233d2500723e5594f3e7c70896ffeeef32b9c950ywan *sse_ptr = sse; 76233d2500723e5594f3e7c70896ffeeef32b9c950ywan return sse - (((int64_t) se * se) >> (l2w + l2h)); 77233d2500723e5594f3e7c70896ffeeef32b9c950ywan} 78233d2500723e5594f3e7c70896ffeeef32b9c950ywan 79233d2500723e5594f3e7c70896ffeeef32b9c950ywantemplate<typename VarianceFunctionType> 80233d2500723e5594f3e7c70896ffeeef32b9c950ywanclass VarianceTest 81233d2500723e5594f3e7c70896ffeeef32b9c950ywan : public ::testing::TestWithParam<tuple<int, int, VarianceFunctionType> > { 82233d2500723e5594f3e7c70896ffeeef32b9c950ywan public: 83233d2500723e5594f3e7c70896ffeeef32b9c950ywan virtual void SetUp() { 84233d2500723e5594f3e7c70896ffeeef32b9c950ywan const tuple<int, int, VarianceFunctionType>& params = this->GetParam(); 85233d2500723e5594f3e7c70896ffeeef32b9c950ywan log2width_ = get<0>(params); 86233d2500723e5594f3e7c70896ffeeef32b9c950ywan width_ = 1 << log2width_; 87233d2500723e5594f3e7c70896ffeeef32b9c950ywan log2height_ = get<1>(params); 88233d2500723e5594f3e7c70896ffeeef32b9c950ywan height_ = 1 << log2height_; 89233d2500723e5594f3e7c70896ffeeef32b9c950ywan variance_ = get<2>(params); 90233d2500723e5594f3e7c70896ffeeef32b9c950ywan 91233d2500723e5594f3e7c70896ffeeef32b9c950ywan rnd(ACMRandom::DeterministicSeed()); 92233d2500723e5594f3e7c70896ffeeef32b9c950ywan block_size_ = width_ * height_; 93233d2500723e5594f3e7c70896ffeeef32b9c950ywan src_ = new uint8_t[block_size_]; 94233d2500723e5594f3e7c70896ffeeef32b9c950ywan ref_ = new uint8_t[block_size_]; 95233d2500723e5594f3e7c70896ffeeef32b9c950ywan ASSERT_TRUE(src_ != NULL); 96233d2500723e5594f3e7c70896ffeeef32b9c950ywan ASSERT_TRUE(ref_ != NULL); 97233d2500723e5594f3e7c70896ffeeef32b9c950ywan } 98233d2500723e5594f3e7c70896ffeeef32b9c950ywan 99233d2500723e5594f3e7c70896ffeeef32b9c950ywan virtual void TearDown() { 100233d2500723e5594f3e7c70896ffeeef32b9c950ywan delete[] src_; 101233d2500723e5594f3e7c70896ffeeef32b9c950ywan delete[] ref_; 102233d2500723e5594f3e7c70896ffeeef32b9c950ywan libvpx_test::ClearSystemState(); 103233d2500723e5594f3e7c70896ffeeef32b9c950ywan } 104233d2500723e5594f3e7c70896ffeeef32b9c950ywan 105233d2500723e5594f3e7c70896ffeeef32b9c950ywan protected: 106233d2500723e5594f3e7c70896ffeeef32b9c950ywan void ZeroTest(); 107233d2500723e5594f3e7c70896ffeeef32b9c950ywan void RefTest(); 108233d2500723e5594f3e7c70896ffeeef32b9c950ywan void OneQuarterTest(); 109233d2500723e5594f3e7c70896ffeeef32b9c950ywan 110233d2500723e5594f3e7c70896ffeeef32b9c950ywan ACMRandom rnd; 111233d2500723e5594f3e7c70896ffeeef32b9c950ywan uint8_t* src_; 112233d2500723e5594f3e7c70896ffeeef32b9c950ywan uint8_t* ref_; 113233d2500723e5594f3e7c70896ffeeef32b9c950ywan int width_, log2width_; 114233d2500723e5594f3e7c70896ffeeef32b9c950ywan int height_, log2height_; 115233d2500723e5594f3e7c70896ffeeef32b9c950ywan int block_size_; 116233d2500723e5594f3e7c70896ffeeef32b9c950ywan VarianceFunctionType variance_; 117233d2500723e5594f3e7c70896ffeeef32b9c950ywan}; 118233d2500723e5594f3e7c70896ffeeef32b9c950ywan 119233d2500723e5594f3e7c70896ffeeef32b9c950ywantemplate<typename VarianceFunctionType> 120233d2500723e5594f3e7c70896ffeeef32b9c950ywanvoid VarianceTest<VarianceFunctionType>::ZeroTest() { 121233d2500723e5594f3e7c70896ffeeef32b9c950ywan for (int i = 0; i <= 255; ++i) { 122233d2500723e5594f3e7c70896ffeeef32b9c950ywan memset(src_, i, block_size_); 123233d2500723e5594f3e7c70896ffeeef32b9c950ywan for (int j = 0; j <= 255; ++j) { 124233d2500723e5594f3e7c70896ffeeef32b9c950ywan memset(ref_, j, block_size_); 125233d2500723e5594f3e7c70896ffeeef32b9c950ywan unsigned int sse; 126233d2500723e5594f3e7c70896ffeeef32b9c950ywan unsigned int var; 127233d2500723e5594f3e7c70896ffeeef32b9c950ywan REGISTER_STATE_CHECK(var = variance_(src_, width_, ref_, width_, &sse)); 128233d2500723e5594f3e7c70896ffeeef32b9c950ywan EXPECT_EQ(0u, var) << "src values: " << i << "ref values: " << j; 129233d2500723e5594f3e7c70896ffeeef32b9c950ywan } 130233d2500723e5594f3e7c70896ffeeef32b9c950ywan } 131233d2500723e5594f3e7c70896ffeeef32b9c950ywan} 132233d2500723e5594f3e7c70896ffeeef32b9c950ywan 133233d2500723e5594f3e7c70896ffeeef32b9c950ywantemplate<typename VarianceFunctionType> 134233d2500723e5594f3e7c70896ffeeef32b9c950ywanvoid VarianceTest<VarianceFunctionType>::RefTest() { 135233d2500723e5594f3e7c70896ffeeef32b9c950ywan for (int i = 0; i < 10; ++i) { 136233d2500723e5594f3e7c70896ffeeef32b9c950ywan for (int j = 0; j < block_size_; j++) { 137233d2500723e5594f3e7c70896ffeeef32b9c950ywan src_[j] = rnd.Rand8(); 138233d2500723e5594f3e7c70896ffeeef32b9c950ywan ref_[j] = rnd.Rand8(); 139233d2500723e5594f3e7c70896ffeeef32b9c950ywan } 140233d2500723e5594f3e7c70896ffeeef32b9c950ywan unsigned int sse1, sse2; 141233d2500723e5594f3e7c70896ffeeef32b9c950ywan unsigned int var1; 142233d2500723e5594f3e7c70896ffeeef32b9c950ywan REGISTER_STATE_CHECK(var1 = variance_(src_, width_, ref_, width_, &sse1)); 143233d2500723e5594f3e7c70896ffeeef32b9c950ywan const unsigned int var2 = variance_ref(src_, ref_, log2width_, 144233d2500723e5594f3e7c70896ffeeef32b9c950ywan log2height_, &sse2); 145233d2500723e5594f3e7c70896ffeeef32b9c950ywan EXPECT_EQ(sse1, sse2); 146233d2500723e5594f3e7c70896ffeeef32b9c950ywan EXPECT_EQ(var1, var2); 147233d2500723e5594f3e7c70896ffeeef32b9c950ywan } 148233d2500723e5594f3e7c70896ffeeef32b9c950ywan} 149233d2500723e5594f3e7c70896ffeeef32b9c950ywan 150233d2500723e5594f3e7c70896ffeeef32b9c950ywantemplate<typename VarianceFunctionType> 151233d2500723e5594f3e7c70896ffeeef32b9c950ywanvoid VarianceTest<VarianceFunctionType>::OneQuarterTest() { 152233d2500723e5594f3e7c70896ffeeef32b9c950ywan memset(src_, 255, block_size_); 153233d2500723e5594f3e7c70896ffeeef32b9c950ywan const int half = block_size_ / 2; 154233d2500723e5594f3e7c70896ffeeef32b9c950ywan memset(ref_, 255, half); 155233d2500723e5594f3e7c70896ffeeef32b9c950ywan memset(ref_ + half, 0, half); 156233d2500723e5594f3e7c70896ffeeef32b9c950ywan unsigned int sse; 157233d2500723e5594f3e7c70896ffeeef32b9c950ywan unsigned int var; 158233d2500723e5594f3e7c70896ffeeef32b9c950ywan REGISTER_STATE_CHECK(var = variance_(src_, width_, ref_, width_, &sse)); 159233d2500723e5594f3e7c70896ffeeef32b9c950ywan const unsigned int expected = block_size_ * 255 * 255 / 4; 160233d2500723e5594f3e7c70896ffeeef32b9c950ywan EXPECT_EQ(expected, var); 161233d2500723e5594f3e7c70896ffeeef32b9c950ywan} 162233d2500723e5594f3e7c70896ffeeef32b9c950ywan 163233d2500723e5594f3e7c70896ffeeef32b9c950ywan#if CONFIG_VP9_ENCODER 164233d2500723e5594f3e7c70896ffeeef32b9c950ywan 165233d2500723e5594f3e7c70896ffeeef32b9c950ywanunsigned int subpel_avg_variance_ref(const uint8_t *ref, 166233d2500723e5594f3e7c70896ffeeef32b9c950ywan const uint8_t *src, 167233d2500723e5594f3e7c70896ffeeef32b9c950ywan const uint8_t *second_pred, 168233d2500723e5594f3e7c70896ffeeef32b9c950ywan int l2w, int l2h, 169233d2500723e5594f3e7c70896ffeeef32b9c950ywan int xoff, int yoff, 170233d2500723e5594f3e7c70896ffeeef32b9c950ywan unsigned int *sse_ptr) { 171233d2500723e5594f3e7c70896ffeeef32b9c950ywan int se = 0; 172233d2500723e5594f3e7c70896ffeeef32b9c950ywan unsigned int sse = 0; 173233d2500723e5594f3e7c70896ffeeef32b9c950ywan const int w = 1 << l2w, h = 1 << l2h; 174233d2500723e5594f3e7c70896ffeeef32b9c950ywan for (int y = 0; y < h; y++) { 175233d2500723e5594f3e7c70896ffeeef32b9c950ywan for (int x = 0; x < w; x++) { 176233d2500723e5594f3e7c70896ffeeef32b9c950ywan // bilinear interpolation at a 16th pel step 177233d2500723e5594f3e7c70896ffeeef32b9c950ywan const int a1 = ref[(w + 1) * (y + 0) + x + 0]; 178233d2500723e5594f3e7c70896ffeeef32b9c950ywan const int a2 = ref[(w + 1) * (y + 0) + x + 1]; 179233d2500723e5594f3e7c70896ffeeef32b9c950ywan const int b1 = ref[(w + 1) * (y + 1) + x + 0]; 180233d2500723e5594f3e7c70896ffeeef32b9c950ywan const int b2 = ref[(w + 1) * (y + 1) + x + 1]; 181233d2500723e5594f3e7c70896ffeeef32b9c950ywan const int a = a1 + (((a2 - a1) * xoff + 8) >> 4); 182233d2500723e5594f3e7c70896ffeeef32b9c950ywan const int b = b1 + (((b2 - b1) * xoff + 8) >> 4); 183233d2500723e5594f3e7c70896ffeeef32b9c950ywan const int r = a + (((b - a) * yoff + 8) >> 4); 184233d2500723e5594f3e7c70896ffeeef32b9c950ywan int diff = ((r + second_pred[w * y + x] + 1) >> 1) - src[w * y + x]; 185233d2500723e5594f3e7c70896ffeeef32b9c950ywan se += diff; 186233d2500723e5594f3e7c70896ffeeef32b9c950ywan sse += diff * diff; 187233d2500723e5594f3e7c70896ffeeef32b9c950ywan } 188233d2500723e5594f3e7c70896ffeeef32b9c950ywan } 189233d2500723e5594f3e7c70896ffeeef32b9c950ywan *sse_ptr = sse; 190233d2500723e5594f3e7c70896ffeeef32b9c950ywan return sse - (((int64_t) se * se) >> (l2w + l2h)); 191233d2500723e5594f3e7c70896ffeeef32b9c950ywan} 192233d2500723e5594f3e7c70896ffeeef32b9c950ywan 193233d2500723e5594f3e7c70896ffeeef32b9c950ywantemplate<typename SubpelVarianceFunctionType> 194233d2500723e5594f3e7c70896ffeeef32b9c950ywanclass SubpelVarianceTest 195233d2500723e5594f3e7c70896ffeeef32b9c950ywan : public ::testing::TestWithParam<tuple<int, int, 196233d2500723e5594f3e7c70896ffeeef32b9c950ywan SubpelVarianceFunctionType> > { 197233d2500723e5594f3e7c70896ffeeef32b9c950ywan public: 198233d2500723e5594f3e7c70896ffeeef32b9c950ywan virtual void SetUp() { 199233d2500723e5594f3e7c70896ffeeef32b9c950ywan const tuple<int, int, SubpelVarianceFunctionType>& params = 200233d2500723e5594f3e7c70896ffeeef32b9c950ywan this->GetParam(); 201233d2500723e5594f3e7c70896ffeeef32b9c950ywan log2width_ = get<0>(params); 202233d2500723e5594f3e7c70896ffeeef32b9c950ywan width_ = 1 << log2width_; 203233d2500723e5594f3e7c70896ffeeef32b9c950ywan log2height_ = get<1>(params); 204233d2500723e5594f3e7c70896ffeeef32b9c950ywan height_ = 1 << log2height_; 205233d2500723e5594f3e7c70896ffeeef32b9c950ywan subpel_variance_ = get<2>(params); 206233d2500723e5594f3e7c70896ffeeef32b9c950ywan 207233d2500723e5594f3e7c70896ffeeef32b9c950ywan rnd(ACMRandom::DeterministicSeed()); 208233d2500723e5594f3e7c70896ffeeef32b9c950ywan block_size_ = width_ * height_; 209233d2500723e5594f3e7c70896ffeeef32b9c950ywan src_ = reinterpret_cast<uint8_t *>(vpx_memalign(16, block_size_)); 210233d2500723e5594f3e7c70896ffeeef32b9c950ywan sec_ = reinterpret_cast<uint8_t *>(vpx_memalign(16, block_size_)); 211233d2500723e5594f3e7c70896ffeeef32b9c950ywan ref_ = new uint8_t[block_size_ + width_ + height_ + 1]; 212233d2500723e5594f3e7c70896ffeeef32b9c950ywan ASSERT_TRUE(src_ != NULL); 213233d2500723e5594f3e7c70896ffeeef32b9c950ywan ASSERT_TRUE(sec_ != NULL); 214233d2500723e5594f3e7c70896ffeeef32b9c950ywan ASSERT_TRUE(ref_ != NULL); 215233d2500723e5594f3e7c70896ffeeef32b9c950ywan } 216233d2500723e5594f3e7c70896ffeeef32b9c950ywan 217233d2500723e5594f3e7c70896ffeeef32b9c950ywan virtual void TearDown() { 218233d2500723e5594f3e7c70896ffeeef32b9c950ywan vpx_free(src_); 219233d2500723e5594f3e7c70896ffeeef32b9c950ywan delete[] ref_; 220233d2500723e5594f3e7c70896ffeeef32b9c950ywan vpx_free(sec_); 221233d2500723e5594f3e7c70896ffeeef32b9c950ywan libvpx_test::ClearSystemState(); 222233d2500723e5594f3e7c70896ffeeef32b9c950ywan } 223233d2500723e5594f3e7c70896ffeeef32b9c950ywan 224233d2500723e5594f3e7c70896ffeeef32b9c950ywan protected: 225233d2500723e5594f3e7c70896ffeeef32b9c950ywan void RefTest(); 226233d2500723e5594f3e7c70896ffeeef32b9c950ywan 227233d2500723e5594f3e7c70896ffeeef32b9c950ywan ACMRandom rnd; 228233d2500723e5594f3e7c70896ffeeef32b9c950ywan uint8_t *src_; 229233d2500723e5594f3e7c70896ffeeef32b9c950ywan uint8_t *ref_; 230233d2500723e5594f3e7c70896ffeeef32b9c950ywan uint8_t *sec_; 231233d2500723e5594f3e7c70896ffeeef32b9c950ywan int width_, log2width_; 232233d2500723e5594f3e7c70896ffeeef32b9c950ywan int height_, log2height_; 233233d2500723e5594f3e7c70896ffeeef32b9c950ywan int block_size_; 234233d2500723e5594f3e7c70896ffeeef32b9c950ywan SubpelVarianceFunctionType subpel_variance_; 235233d2500723e5594f3e7c70896ffeeef32b9c950ywan}; 236233d2500723e5594f3e7c70896ffeeef32b9c950ywan 237233d2500723e5594f3e7c70896ffeeef32b9c950ywantemplate<typename SubpelVarianceFunctionType> 238233d2500723e5594f3e7c70896ffeeef32b9c950ywanvoid SubpelVarianceTest<SubpelVarianceFunctionType>::RefTest() { 239233d2500723e5594f3e7c70896ffeeef32b9c950ywan for (int x = 0; x < 16; ++x) { 240233d2500723e5594f3e7c70896ffeeef32b9c950ywan for (int y = 0; y < 16; ++y) { 241233d2500723e5594f3e7c70896ffeeef32b9c950ywan for (int j = 0; j < block_size_; j++) { 242233d2500723e5594f3e7c70896ffeeef32b9c950ywan src_[j] = rnd.Rand8(); 243233d2500723e5594f3e7c70896ffeeef32b9c950ywan } 244233d2500723e5594f3e7c70896ffeeef32b9c950ywan for (int j = 0; j < block_size_ + width_ + height_ + 1; j++) { 245233d2500723e5594f3e7c70896ffeeef32b9c950ywan ref_[j] = rnd.Rand8(); 246233d2500723e5594f3e7c70896ffeeef32b9c950ywan } 247233d2500723e5594f3e7c70896ffeeef32b9c950ywan unsigned int sse1, sse2; 248233d2500723e5594f3e7c70896ffeeef32b9c950ywan unsigned int var1; 249233d2500723e5594f3e7c70896ffeeef32b9c950ywan REGISTER_STATE_CHECK(var1 = subpel_variance_(ref_, width_ + 1, x, y, 250233d2500723e5594f3e7c70896ffeeef32b9c950ywan src_, width_, &sse1)); 251233d2500723e5594f3e7c70896ffeeef32b9c950ywan const unsigned int var2 = subpel_variance_ref(ref_, src_, log2width_, 252233d2500723e5594f3e7c70896ffeeef32b9c950ywan log2height_, x, y, &sse2); 253233d2500723e5594f3e7c70896ffeeef32b9c950ywan EXPECT_EQ(sse1, sse2) << "at position " << x << ", " << y; 254233d2500723e5594f3e7c70896ffeeef32b9c950ywan EXPECT_EQ(var1, var2) << "at position " << x << ", " << y; 255233d2500723e5594f3e7c70896ffeeef32b9c950ywan } 256233d2500723e5594f3e7c70896ffeeef32b9c950ywan } 257233d2500723e5594f3e7c70896ffeeef32b9c950ywan} 258233d2500723e5594f3e7c70896ffeeef32b9c950ywan 259233d2500723e5594f3e7c70896ffeeef32b9c950ywantemplate<> 260233d2500723e5594f3e7c70896ffeeef32b9c950ywanvoid SubpelVarianceTest<vp9_subp_avg_variance_fn_t>::RefTest() { 261233d2500723e5594f3e7c70896ffeeef32b9c950ywan for (int x = 0; x < 16; ++x) { 262233d2500723e5594f3e7c70896ffeeef32b9c950ywan for (int y = 0; y < 16; ++y) { 263233d2500723e5594f3e7c70896ffeeef32b9c950ywan for (int j = 0; j < block_size_; j++) { 264233d2500723e5594f3e7c70896ffeeef32b9c950ywan src_[j] = rnd.Rand8(); 265233d2500723e5594f3e7c70896ffeeef32b9c950ywan sec_[j] = rnd.Rand8(); 266233d2500723e5594f3e7c70896ffeeef32b9c950ywan } 267233d2500723e5594f3e7c70896ffeeef32b9c950ywan for (int j = 0; j < block_size_ + width_ + height_ + 1; j++) { 268233d2500723e5594f3e7c70896ffeeef32b9c950ywan ref_[j] = rnd.Rand8(); 269233d2500723e5594f3e7c70896ffeeef32b9c950ywan } 270233d2500723e5594f3e7c70896ffeeef32b9c950ywan unsigned int sse1, sse2; 271233d2500723e5594f3e7c70896ffeeef32b9c950ywan unsigned int var1; 272233d2500723e5594f3e7c70896ffeeef32b9c950ywan REGISTER_STATE_CHECK(var1 = subpel_variance_(ref_, width_ + 1, x, y, 273233d2500723e5594f3e7c70896ffeeef32b9c950ywan src_, width_, &sse1, sec_)); 274233d2500723e5594f3e7c70896ffeeef32b9c950ywan const unsigned int var2 = subpel_avg_variance_ref(ref_, src_, sec_, 275233d2500723e5594f3e7c70896ffeeef32b9c950ywan log2width_, log2height_, 276233d2500723e5594f3e7c70896ffeeef32b9c950ywan x, y, &sse2); 277233d2500723e5594f3e7c70896ffeeef32b9c950ywan EXPECT_EQ(sse1, sse2) << "at position " << x << ", " << y; 278233d2500723e5594f3e7c70896ffeeef32b9c950ywan EXPECT_EQ(var1, var2) << "at position " << x << ", " << y; 279233d2500723e5594f3e7c70896ffeeef32b9c950ywan } 280233d2500723e5594f3e7c70896ffeeef32b9c950ywan } 281233d2500723e5594f3e7c70896ffeeef32b9c950ywan} 282233d2500723e5594f3e7c70896ffeeef32b9c950ywan 283233d2500723e5594f3e7c70896ffeeef32b9c950ywan#endif // CONFIG_VP9_ENCODER 284233d2500723e5594f3e7c70896ffeeef32b9c950ywan 285233d2500723e5594f3e7c70896ffeeef32b9c950ywan// ----------------------------------------------------------------------------- 286233d2500723e5594f3e7c70896ffeeef32b9c950ywan// VP8 test cases. 287233d2500723e5594f3e7c70896ffeeef32b9c950ywan 288233d2500723e5594f3e7c70896ffeeef32b9c950ywannamespace vp8 { 289233d2500723e5594f3e7c70896ffeeef32b9c950ywan 290233d2500723e5594f3e7c70896ffeeef32b9c950ywan#if CONFIG_VP8_ENCODER 291233d2500723e5594f3e7c70896ffeeef32b9c950ywantypedef VarianceTest<vp8_variance_fn_t> VP8VarianceTest; 292233d2500723e5594f3e7c70896ffeeef32b9c950ywan 293233d2500723e5594f3e7c70896ffeeef32b9c950ywanTEST_P(VP8VarianceTest, Zero) { ZeroTest(); } 294233d2500723e5594f3e7c70896ffeeef32b9c950ywanTEST_P(VP8VarianceTest, Ref) { RefTest(); } 295233d2500723e5594f3e7c70896ffeeef32b9c950ywanTEST_P(VP8VarianceTest, OneQuarter) { OneQuarterTest(); } 296233d2500723e5594f3e7c70896ffeeef32b9c950ywan 297233d2500723e5594f3e7c70896ffeeef32b9c950ywanconst vp8_variance_fn_t variance4x4_c = vp8_variance4x4_c; 298233d2500723e5594f3e7c70896ffeeef32b9c950ywanconst vp8_variance_fn_t variance8x8_c = vp8_variance8x8_c; 299233d2500723e5594f3e7c70896ffeeef32b9c950ywanconst vp8_variance_fn_t variance8x16_c = vp8_variance8x16_c; 300233d2500723e5594f3e7c70896ffeeef32b9c950ywanconst vp8_variance_fn_t variance16x8_c = vp8_variance16x8_c; 301233d2500723e5594f3e7c70896ffeeef32b9c950ywanconst vp8_variance_fn_t variance16x16_c = vp8_variance16x16_c; 302233d2500723e5594f3e7c70896ffeeef32b9c950ywanINSTANTIATE_TEST_CASE_P( 303233d2500723e5594f3e7c70896ffeeef32b9c950ywan C, VP8VarianceTest, 304233d2500723e5594f3e7c70896ffeeef32b9c950ywan ::testing::Values(make_tuple(2, 2, variance4x4_c), 305233d2500723e5594f3e7c70896ffeeef32b9c950ywan make_tuple(3, 3, variance8x8_c), 306233d2500723e5594f3e7c70896ffeeef32b9c950ywan make_tuple(3, 4, variance8x16_c), 307233d2500723e5594f3e7c70896ffeeef32b9c950ywan make_tuple(4, 3, variance16x8_c), 308233d2500723e5594f3e7c70896ffeeef32b9c950ywan make_tuple(4, 4, variance16x16_c))); 309233d2500723e5594f3e7c70896ffeeef32b9c950ywan 310233d2500723e5594f3e7c70896ffeeef32b9c950ywan#if HAVE_NEON 311233d2500723e5594f3e7c70896ffeeef32b9c950ywanconst vp8_variance_fn_t variance8x8_neon = vp8_variance8x8_neon; 312233d2500723e5594f3e7c70896ffeeef32b9c950ywanconst vp8_variance_fn_t variance8x16_neon = vp8_variance8x16_neon; 313233d2500723e5594f3e7c70896ffeeef32b9c950ywanconst vp8_variance_fn_t variance16x8_neon = vp8_variance16x8_neon; 314233d2500723e5594f3e7c70896ffeeef32b9c950ywanconst vp8_variance_fn_t variance16x16_neon = vp8_variance16x16_neon; 315233d2500723e5594f3e7c70896ffeeef32b9c950ywanINSTANTIATE_TEST_CASE_P( 316233d2500723e5594f3e7c70896ffeeef32b9c950ywan NEON, VP8VarianceTest, 317233d2500723e5594f3e7c70896ffeeef32b9c950ywan ::testing::Values(make_tuple(3, 3, variance8x8_neon), 318233d2500723e5594f3e7c70896ffeeef32b9c950ywan make_tuple(3, 4, variance8x16_neon), 319233d2500723e5594f3e7c70896ffeeef32b9c950ywan make_tuple(4, 3, variance16x8_neon), 320233d2500723e5594f3e7c70896ffeeef32b9c950ywan make_tuple(4, 4, variance16x16_neon))); 321233d2500723e5594f3e7c70896ffeeef32b9c950ywan#endif 322233d2500723e5594f3e7c70896ffeeef32b9c950ywan 323233d2500723e5594f3e7c70896ffeeef32b9c950ywan#if HAVE_MMX 324233d2500723e5594f3e7c70896ffeeef32b9c950ywanconst vp8_variance_fn_t variance4x4_mmx = vp8_variance4x4_mmx; 325233d2500723e5594f3e7c70896ffeeef32b9c950ywanconst vp8_variance_fn_t variance8x8_mmx = vp8_variance8x8_mmx; 326233d2500723e5594f3e7c70896ffeeef32b9c950ywanconst vp8_variance_fn_t variance8x16_mmx = vp8_variance8x16_mmx; 327233d2500723e5594f3e7c70896ffeeef32b9c950ywanconst vp8_variance_fn_t variance16x8_mmx = vp8_variance16x8_mmx; 328233d2500723e5594f3e7c70896ffeeef32b9c950ywanconst vp8_variance_fn_t variance16x16_mmx = vp8_variance16x16_mmx; 329233d2500723e5594f3e7c70896ffeeef32b9c950ywanINSTANTIATE_TEST_CASE_P( 330233d2500723e5594f3e7c70896ffeeef32b9c950ywan MMX, VP8VarianceTest, 331233d2500723e5594f3e7c70896ffeeef32b9c950ywan ::testing::Values(make_tuple(2, 2, variance4x4_mmx), 332233d2500723e5594f3e7c70896ffeeef32b9c950ywan make_tuple(3, 3, variance8x8_mmx), 333233d2500723e5594f3e7c70896ffeeef32b9c950ywan make_tuple(3, 4, variance8x16_mmx), 334233d2500723e5594f3e7c70896ffeeef32b9c950ywan make_tuple(4, 3, variance16x8_mmx), 335233d2500723e5594f3e7c70896ffeeef32b9c950ywan make_tuple(4, 4, variance16x16_mmx))); 336233d2500723e5594f3e7c70896ffeeef32b9c950ywan#endif 337233d2500723e5594f3e7c70896ffeeef32b9c950ywan 338233d2500723e5594f3e7c70896ffeeef32b9c950ywan#if HAVE_SSE2 339233d2500723e5594f3e7c70896ffeeef32b9c950ywanconst vp8_variance_fn_t variance4x4_wmt = vp8_variance4x4_wmt; 340233d2500723e5594f3e7c70896ffeeef32b9c950ywanconst vp8_variance_fn_t variance8x8_wmt = vp8_variance8x8_wmt; 341233d2500723e5594f3e7c70896ffeeef32b9c950ywanconst vp8_variance_fn_t variance8x16_wmt = vp8_variance8x16_wmt; 342233d2500723e5594f3e7c70896ffeeef32b9c950ywanconst vp8_variance_fn_t variance16x8_wmt = vp8_variance16x8_wmt; 343233d2500723e5594f3e7c70896ffeeef32b9c950ywanconst vp8_variance_fn_t variance16x16_wmt = vp8_variance16x16_wmt; 344233d2500723e5594f3e7c70896ffeeef32b9c950ywanINSTANTIATE_TEST_CASE_P( 345233d2500723e5594f3e7c70896ffeeef32b9c950ywan SSE2, VP8VarianceTest, 346233d2500723e5594f3e7c70896ffeeef32b9c950ywan ::testing::Values(make_tuple(2, 2, variance4x4_wmt), 347233d2500723e5594f3e7c70896ffeeef32b9c950ywan make_tuple(3, 3, variance8x8_wmt), 348233d2500723e5594f3e7c70896ffeeef32b9c950ywan make_tuple(3, 4, variance8x16_wmt), 349233d2500723e5594f3e7c70896ffeeef32b9c950ywan make_tuple(4, 3, variance16x8_wmt), 350233d2500723e5594f3e7c70896ffeeef32b9c950ywan make_tuple(4, 4, variance16x16_wmt))); 351233d2500723e5594f3e7c70896ffeeef32b9c950ywan#endif 352233d2500723e5594f3e7c70896ffeeef32b9c950ywan#endif // CONFIG_VP8_ENCODER 353233d2500723e5594f3e7c70896ffeeef32b9c950ywan 354233d2500723e5594f3e7c70896ffeeef32b9c950ywan} // namespace vp8 355233d2500723e5594f3e7c70896ffeeef32b9c950ywan 356233d2500723e5594f3e7c70896ffeeef32b9c950ywan// ----------------------------------------------------------------------------- 357233d2500723e5594f3e7c70896ffeeef32b9c950ywan// VP9 test cases. 358233d2500723e5594f3e7c70896ffeeef32b9c950ywan 359233d2500723e5594f3e7c70896ffeeef32b9c950ywannamespace vp9 { 360233d2500723e5594f3e7c70896ffeeef32b9c950ywan 361233d2500723e5594f3e7c70896ffeeef32b9c950ywan#if CONFIG_VP9_ENCODER 362233d2500723e5594f3e7c70896ffeeef32b9c950ywantypedef VarianceTest<vp9_variance_fn_t> VP9VarianceTest; 363233d2500723e5594f3e7c70896ffeeef32b9c950ywantypedef SubpelVarianceTest<vp9_subpixvariance_fn_t> VP9SubpelVarianceTest; 364233d2500723e5594f3e7c70896ffeeef32b9c950ywantypedef SubpelVarianceTest<vp9_subp_avg_variance_fn_t> VP9SubpelAvgVarianceTest; 365233d2500723e5594f3e7c70896ffeeef32b9c950ywan 366233d2500723e5594f3e7c70896ffeeef32b9c950ywanTEST_P(VP9VarianceTest, Zero) { ZeroTest(); } 367233d2500723e5594f3e7c70896ffeeef32b9c950ywanTEST_P(VP9VarianceTest, Ref) { RefTest(); } 368233d2500723e5594f3e7c70896ffeeef32b9c950ywanTEST_P(VP9SubpelVarianceTest, Ref) { RefTest(); } 369233d2500723e5594f3e7c70896ffeeef32b9c950ywanTEST_P(VP9SubpelAvgVarianceTest, Ref) { RefTest(); } 370233d2500723e5594f3e7c70896ffeeef32b9c950ywanTEST_P(VP9VarianceTest, OneQuarter) { OneQuarterTest(); } 371233d2500723e5594f3e7c70896ffeeef32b9c950ywan 372233d2500723e5594f3e7c70896ffeeef32b9c950ywanconst vp9_variance_fn_t variance4x4_c = vp9_variance4x4_c; 373233d2500723e5594f3e7c70896ffeeef32b9c950ywanconst vp9_variance_fn_t variance4x8_c = vp9_variance4x8_c; 374233d2500723e5594f3e7c70896ffeeef32b9c950ywanconst vp9_variance_fn_t variance8x4_c = vp9_variance8x4_c; 375233d2500723e5594f3e7c70896ffeeef32b9c950ywanconst vp9_variance_fn_t variance8x8_c = vp9_variance8x8_c; 376233d2500723e5594f3e7c70896ffeeef32b9c950ywanconst vp9_variance_fn_t variance8x16_c = vp9_variance8x16_c; 377233d2500723e5594f3e7c70896ffeeef32b9c950ywanconst vp9_variance_fn_t variance16x8_c = vp9_variance16x8_c; 378233d2500723e5594f3e7c70896ffeeef32b9c950ywanconst vp9_variance_fn_t variance16x16_c = vp9_variance16x16_c; 379233d2500723e5594f3e7c70896ffeeef32b9c950ywanconst vp9_variance_fn_t variance16x32_c = vp9_variance16x32_c; 380233d2500723e5594f3e7c70896ffeeef32b9c950ywanconst vp9_variance_fn_t variance32x16_c = vp9_variance32x16_c; 381233d2500723e5594f3e7c70896ffeeef32b9c950ywanconst vp9_variance_fn_t variance32x32_c = vp9_variance32x32_c; 382233d2500723e5594f3e7c70896ffeeef32b9c950ywanconst vp9_variance_fn_t variance32x64_c = vp9_variance32x64_c; 383233d2500723e5594f3e7c70896ffeeef32b9c950ywanconst vp9_variance_fn_t variance64x32_c = vp9_variance64x32_c; 384233d2500723e5594f3e7c70896ffeeef32b9c950ywanconst vp9_variance_fn_t variance64x64_c = vp9_variance64x64_c; 385233d2500723e5594f3e7c70896ffeeef32b9c950ywanINSTANTIATE_TEST_CASE_P( 386233d2500723e5594f3e7c70896ffeeef32b9c950ywan C, VP9VarianceTest, 387233d2500723e5594f3e7c70896ffeeef32b9c950ywan ::testing::Values(make_tuple(2, 2, variance4x4_c), 388233d2500723e5594f3e7c70896ffeeef32b9c950ywan make_tuple(2, 3, variance4x8_c), 389233d2500723e5594f3e7c70896ffeeef32b9c950ywan make_tuple(3, 2, variance8x4_c), 390233d2500723e5594f3e7c70896ffeeef32b9c950ywan make_tuple(3, 3, variance8x8_c), 391233d2500723e5594f3e7c70896ffeeef32b9c950ywan make_tuple(3, 4, variance8x16_c), 392233d2500723e5594f3e7c70896ffeeef32b9c950ywan make_tuple(4, 3, variance16x8_c), 393233d2500723e5594f3e7c70896ffeeef32b9c950ywan make_tuple(4, 4, variance16x16_c), 394233d2500723e5594f3e7c70896ffeeef32b9c950ywan make_tuple(4, 5, variance16x32_c), 395233d2500723e5594f3e7c70896ffeeef32b9c950ywan make_tuple(5, 4, variance32x16_c), 396233d2500723e5594f3e7c70896ffeeef32b9c950ywan make_tuple(5, 5, variance32x32_c), 397233d2500723e5594f3e7c70896ffeeef32b9c950ywan make_tuple(5, 6, variance32x64_c), 398233d2500723e5594f3e7c70896ffeeef32b9c950ywan make_tuple(6, 5, variance64x32_c), 399233d2500723e5594f3e7c70896ffeeef32b9c950ywan make_tuple(6, 6, variance64x64_c))); 400233d2500723e5594f3e7c70896ffeeef32b9c950ywan 401233d2500723e5594f3e7c70896ffeeef32b9c950ywanconst vp9_subpixvariance_fn_t subpel_variance4x4_c = 402233d2500723e5594f3e7c70896ffeeef32b9c950ywan vp9_sub_pixel_variance4x4_c; 403233d2500723e5594f3e7c70896ffeeef32b9c950ywanconst vp9_subpixvariance_fn_t subpel_variance4x8_c = 404233d2500723e5594f3e7c70896ffeeef32b9c950ywan vp9_sub_pixel_variance4x8_c; 405233d2500723e5594f3e7c70896ffeeef32b9c950ywanconst vp9_subpixvariance_fn_t subpel_variance8x4_c = 406233d2500723e5594f3e7c70896ffeeef32b9c950ywan vp9_sub_pixel_variance8x4_c; 407233d2500723e5594f3e7c70896ffeeef32b9c950ywanconst vp9_subpixvariance_fn_t subpel_variance8x8_c = 408233d2500723e5594f3e7c70896ffeeef32b9c950ywan vp9_sub_pixel_variance8x8_c; 409233d2500723e5594f3e7c70896ffeeef32b9c950ywanconst vp9_subpixvariance_fn_t subpel_variance8x16_c = 410233d2500723e5594f3e7c70896ffeeef32b9c950ywan vp9_sub_pixel_variance8x16_c; 411233d2500723e5594f3e7c70896ffeeef32b9c950ywanconst vp9_subpixvariance_fn_t subpel_variance16x8_c = 412233d2500723e5594f3e7c70896ffeeef32b9c950ywan vp9_sub_pixel_variance16x8_c; 413233d2500723e5594f3e7c70896ffeeef32b9c950ywanconst vp9_subpixvariance_fn_t subpel_variance16x16_c = 414233d2500723e5594f3e7c70896ffeeef32b9c950ywan vp9_sub_pixel_variance16x16_c; 415233d2500723e5594f3e7c70896ffeeef32b9c950ywanconst vp9_subpixvariance_fn_t subpel_variance16x32_c = 416233d2500723e5594f3e7c70896ffeeef32b9c950ywan vp9_sub_pixel_variance16x32_c; 417233d2500723e5594f3e7c70896ffeeef32b9c950ywanconst vp9_subpixvariance_fn_t subpel_variance32x16_c = 418233d2500723e5594f3e7c70896ffeeef32b9c950ywan vp9_sub_pixel_variance32x16_c; 419233d2500723e5594f3e7c70896ffeeef32b9c950ywanconst vp9_subpixvariance_fn_t subpel_variance32x32_c = 420233d2500723e5594f3e7c70896ffeeef32b9c950ywan vp9_sub_pixel_variance32x32_c; 421233d2500723e5594f3e7c70896ffeeef32b9c950ywanconst vp9_subpixvariance_fn_t subpel_variance32x64_c = 422233d2500723e5594f3e7c70896ffeeef32b9c950ywan vp9_sub_pixel_variance32x64_c; 423233d2500723e5594f3e7c70896ffeeef32b9c950ywanconst vp9_subpixvariance_fn_t subpel_variance64x32_c = 424233d2500723e5594f3e7c70896ffeeef32b9c950ywan vp9_sub_pixel_variance64x32_c; 425233d2500723e5594f3e7c70896ffeeef32b9c950ywanconst vp9_subpixvariance_fn_t subpel_variance64x64_c = 426233d2500723e5594f3e7c70896ffeeef32b9c950ywan vp9_sub_pixel_variance64x64_c; 427233d2500723e5594f3e7c70896ffeeef32b9c950ywanINSTANTIATE_TEST_CASE_P( 428233d2500723e5594f3e7c70896ffeeef32b9c950ywan C, VP9SubpelVarianceTest, 429233d2500723e5594f3e7c70896ffeeef32b9c950ywan ::testing::Values(make_tuple(2, 2, subpel_variance4x4_c), 430233d2500723e5594f3e7c70896ffeeef32b9c950ywan make_tuple(2, 3, subpel_variance4x8_c), 431233d2500723e5594f3e7c70896ffeeef32b9c950ywan make_tuple(3, 2, subpel_variance8x4_c), 432233d2500723e5594f3e7c70896ffeeef32b9c950ywan make_tuple(3, 3, subpel_variance8x8_c), 433233d2500723e5594f3e7c70896ffeeef32b9c950ywan make_tuple(3, 4, subpel_variance8x16_c), 434233d2500723e5594f3e7c70896ffeeef32b9c950ywan make_tuple(4, 3, subpel_variance16x8_c), 435233d2500723e5594f3e7c70896ffeeef32b9c950ywan make_tuple(4, 4, subpel_variance16x16_c), 436233d2500723e5594f3e7c70896ffeeef32b9c950ywan make_tuple(4, 5, subpel_variance16x32_c), 437233d2500723e5594f3e7c70896ffeeef32b9c950ywan make_tuple(5, 4, subpel_variance32x16_c), 438233d2500723e5594f3e7c70896ffeeef32b9c950ywan make_tuple(5, 5, subpel_variance32x32_c), 439233d2500723e5594f3e7c70896ffeeef32b9c950ywan make_tuple(5, 6, subpel_variance32x64_c), 440233d2500723e5594f3e7c70896ffeeef32b9c950ywan make_tuple(6, 5, subpel_variance64x32_c), 441233d2500723e5594f3e7c70896ffeeef32b9c950ywan make_tuple(6, 6, subpel_variance64x64_c))); 442233d2500723e5594f3e7c70896ffeeef32b9c950ywan 443233d2500723e5594f3e7c70896ffeeef32b9c950ywanconst vp9_subp_avg_variance_fn_t subpel_avg_variance4x4_c = 444233d2500723e5594f3e7c70896ffeeef32b9c950ywan vp9_sub_pixel_avg_variance4x4_c; 445233d2500723e5594f3e7c70896ffeeef32b9c950ywanconst vp9_subp_avg_variance_fn_t subpel_avg_variance4x8_c = 446233d2500723e5594f3e7c70896ffeeef32b9c950ywan vp9_sub_pixel_avg_variance4x8_c; 447233d2500723e5594f3e7c70896ffeeef32b9c950ywanconst vp9_subp_avg_variance_fn_t subpel_avg_variance8x4_c = 448233d2500723e5594f3e7c70896ffeeef32b9c950ywan vp9_sub_pixel_avg_variance8x4_c; 449233d2500723e5594f3e7c70896ffeeef32b9c950ywanconst vp9_subp_avg_variance_fn_t subpel_avg_variance8x8_c = 450233d2500723e5594f3e7c70896ffeeef32b9c950ywan vp9_sub_pixel_avg_variance8x8_c; 451233d2500723e5594f3e7c70896ffeeef32b9c950ywanconst vp9_subp_avg_variance_fn_t subpel_avg_variance8x16_c = 452233d2500723e5594f3e7c70896ffeeef32b9c950ywan vp9_sub_pixel_avg_variance8x16_c; 453233d2500723e5594f3e7c70896ffeeef32b9c950ywanconst vp9_subp_avg_variance_fn_t subpel_avg_variance16x8_c = 454233d2500723e5594f3e7c70896ffeeef32b9c950ywan vp9_sub_pixel_avg_variance16x8_c; 455233d2500723e5594f3e7c70896ffeeef32b9c950ywanconst vp9_subp_avg_variance_fn_t subpel_avg_variance16x16_c = 456233d2500723e5594f3e7c70896ffeeef32b9c950ywan vp9_sub_pixel_avg_variance16x16_c; 457233d2500723e5594f3e7c70896ffeeef32b9c950ywanconst vp9_subp_avg_variance_fn_t subpel_avg_variance16x32_c = 458233d2500723e5594f3e7c70896ffeeef32b9c950ywan vp9_sub_pixel_avg_variance16x32_c; 459233d2500723e5594f3e7c70896ffeeef32b9c950ywanconst vp9_subp_avg_variance_fn_t subpel_avg_variance32x16_c = 460233d2500723e5594f3e7c70896ffeeef32b9c950ywan vp9_sub_pixel_avg_variance32x16_c; 461233d2500723e5594f3e7c70896ffeeef32b9c950ywanconst vp9_subp_avg_variance_fn_t subpel_avg_variance32x32_c = 462233d2500723e5594f3e7c70896ffeeef32b9c950ywan vp9_sub_pixel_avg_variance32x32_c; 463233d2500723e5594f3e7c70896ffeeef32b9c950ywanconst vp9_subp_avg_variance_fn_t subpel_avg_variance32x64_c = 464233d2500723e5594f3e7c70896ffeeef32b9c950ywan vp9_sub_pixel_avg_variance32x64_c; 465233d2500723e5594f3e7c70896ffeeef32b9c950ywanconst vp9_subp_avg_variance_fn_t subpel_avg_variance64x32_c = 466233d2500723e5594f3e7c70896ffeeef32b9c950ywan vp9_sub_pixel_avg_variance64x32_c; 467233d2500723e5594f3e7c70896ffeeef32b9c950ywanconst vp9_subp_avg_variance_fn_t subpel_avg_variance64x64_c = 468233d2500723e5594f3e7c70896ffeeef32b9c950ywan vp9_sub_pixel_avg_variance64x64_c; 469233d2500723e5594f3e7c70896ffeeef32b9c950ywanINSTANTIATE_TEST_CASE_P( 470233d2500723e5594f3e7c70896ffeeef32b9c950ywan C, VP9SubpelAvgVarianceTest, 471233d2500723e5594f3e7c70896ffeeef32b9c950ywan ::testing::Values(make_tuple(2, 2, subpel_avg_variance4x4_c), 472233d2500723e5594f3e7c70896ffeeef32b9c950ywan make_tuple(2, 3, subpel_avg_variance4x8_c), 473233d2500723e5594f3e7c70896ffeeef32b9c950ywan make_tuple(3, 2, subpel_avg_variance8x4_c), 474233d2500723e5594f3e7c70896ffeeef32b9c950ywan make_tuple(3, 3, subpel_avg_variance8x8_c), 475233d2500723e5594f3e7c70896ffeeef32b9c950ywan make_tuple(3, 4, subpel_avg_variance8x16_c), 476233d2500723e5594f3e7c70896ffeeef32b9c950ywan make_tuple(4, 3, subpel_avg_variance16x8_c), 477233d2500723e5594f3e7c70896ffeeef32b9c950ywan make_tuple(4, 4, subpel_avg_variance16x16_c), 478233d2500723e5594f3e7c70896ffeeef32b9c950ywan make_tuple(4, 5, subpel_avg_variance16x32_c), 479233d2500723e5594f3e7c70896ffeeef32b9c950ywan make_tuple(5, 4, subpel_avg_variance32x16_c), 480233d2500723e5594f3e7c70896ffeeef32b9c950ywan make_tuple(5, 5, subpel_avg_variance32x32_c), 481233d2500723e5594f3e7c70896ffeeef32b9c950ywan make_tuple(5, 6, subpel_avg_variance32x64_c), 482233d2500723e5594f3e7c70896ffeeef32b9c950ywan make_tuple(6, 5, subpel_avg_variance64x32_c), 483233d2500723e5594f3e7c70896ffeeef32b9c950ywan make_tuple(6, 6, subpel_avg_variance64x64_c))); 484233d2500723e5594f3e7c70896ffeeef32b9c950ywan 485233d2500723e5594f3e7c70896ffeeef32b9c950ywan#if HAVE_MMX 486233d2500723e5594f3e7c70896ffeeef32b9c950ywanconst vp9_variance_fn_t variance4x4_mmx = vp9_variance4x4_mmx; 487233d2500723e5594f3e7c70896ffeeef32b9c950ywanconst vp9_variance_fn_t variance8x8_mmx = vp9_variance8x8_mmx; 488233d2500723e5594f3e7c70896ffeeef32b9c950ywanconst vp9_variance_fn_t variance8x16_mmx = vp9_variance8x16_mmx; 489233d2500723e5594f3e7c70896ffeeef32b9c950ywanconst vp9_variance_fn_t variance16x8_mmx = vp9_variance16x8_mmx; 490233d2500723e5594f3e7c70896ffeeef32b9c950ywanconst vp9_variance_fn_t variance16x16_mmx = vp9_variance16x16_mmx; 491233d2500723e5594f3e7c70896ffeeef32b9c950ywanINSTANTIATE_TEST_CASE_P( 492233d2500723e5594f3e7c70896ffeeef32b9c950ywan MMX, VP9VarianceTest, 493233d2500723e5594f3e7c70896ffeeef32b9c950ywan ::testing::Values(make_tuple(2, 2, variance4x4_mmx), 494233d2500723e5594f3e7c70896ffeeef32b9c950ywan make_tuple(3, 3, variance8x8_mmx), 495233d2500723e5594f3e7c70896ffeeef32b9c950ywan make_tuple(3, 4, variance8x16_mmx), 496233d2500723e5594f3e7c70896ffeeef32b9c950ywan make_tuple(4, 3, variance16x8_mmx), 497233d2500723e5594f3e7c70896ffeeef32b9c950ywan make_tuple(4, 4, variance16x16_mmx))); 498233d2500723e5594f3e7c70896ffeeef32b9c950ywan#endif 499233d2500723e5594f3e7c70896ffeeef32b9c950ywan 500233d2500723e5594f3e7c70896ffeeef32b9c950ywan#if HAVE_SSE2 501233d2500723e5594f3e7c70896ffeeef32b9c950ywan#if CONFIG_USE_X86INC 502233d2500723e5594f3e7c70896ffeeef32b9c950ywanconst vp9_variance_fn_t variance4x4_sse2 = vp9_variance4x4_sse2; 503233d2500723e5594f3e7c70896ffeeef32b9c950ywanconst vp9_variance_fn_t variance4x8_sse2 = vp9_variance4x8_sse2; 504233d2500723e5594f3e7c70896ffeeef32b9c950ywanconst vp9_variance_fn_t variance8x4_sse2 = vp9_variance8x4_sse2; 505233d2500723e5594f3e7c70896ffeeef32b9c950ywanconst vp9_variance_fn_t variance8x8_sse2 = vp9_variance8x8_sse2; 506233d2500723e5594f3e7c70896ffeeef32b9c950ywanconst vp9_variance_fn_t variance8x16_sse2 = vp9_variance8x16_sse2; 507233d2500723e5594f3e7c70896ffeeef32b9c950ywanconst vp9_variance_fn_t variance16x8_sse2 = vp9_variance16x8_sse2; 508233d2500723e5594f3e7c70896ffeeef32b9c950ywanconst vp9_variance_fn_t variance16x16_sse2 = vp9_variance16x16_sse2; 509233d2500723e5594f3e7c70896ffeeef32b9c950ywanconst vp9_variance_fn_t variance16x32_sse2 = vp9_variance16x32_sse2; 510233d2500723e5594f3e7c70896ffeeef32b9c950ywanconst vp9_variance_fn_t variance32x16_sse2 = vp9_variance32x16_sse2; 511233d2500723e5594f3e7c70896ffeeef32b9c950ywanconst vp9_variance_fn_t variance32x32_sse2 = vp9_variance32x32_sse2; 512233d2500723e5594f3e7c70896ffeeef32b9c950ywanconst vp9_variance_fn_t variance32x64_sse2 = vp9_variance32x64_sse2; 513233d2500723e5594f3e7c70896ffeeef32b9c950ywanconst vp9_variance_fn_t variance64x32_sse2 = vp9_variance64x32_sse2; 514233d2500723e5594f3e7c70896ffeeef32b9c950ywanconst vp9_variance_fn_t variance64x64_sse2 = vp9_variance64x64_sse2; 515233d2500723e5594f3e7c70896ffeeef32b9c950ywanINSTANTIATE_TEST_CASE_P( 516233d2500723e5594f3e7c70896ffeeef32b9c950ywan SSE2, VP9VarianceTest, 517233d2500723e5594f3e7c70896ffeeef32b9c950ywan ::testing::Values(make_tuple(2, 2, variance4x4_sse2), 518233d2500723e5594f3e7c70896ffeeef32b9c950ywan make_tuple(2, 3, variance4x8_sse2), 519233d2500723e5594f3e7c70896ffeeef32b9c950ywan make_tuple(3, 2, variance8x4_sse2), 520233d2500723e5594f3e7c70896ffeeef32b9c950ywan make_tuple(3, 3, variance8x8_sse2), 521233d2500723e5594f3e7c70896ffeeef32b9c950ywan make_tuple(3, 4, variance8x16_sse2), 522233d2500723e5594f3e7c70896ffeeef32b9c950ywan make_tuple(4, 3, variance16x8_sse2), 523233d2500723e5594f3e7c70896ffeeef32b9c950ywan make_tuple(4, 4, variance16x16_sse2), 524233d2500723e5594f3e7c70896ffeeef32b9c950ywan make_tuple(4, 5, variance16x32_sse2), 525233d2500723e5594f3e7c70896ffeeef32b9c950ywan make_tuple(5, 4, variance32x16_sse2), 526233d2500723e5594f3e7c70896ffeeef32b9c950ywan make_tuple(5, 5, variance32x32_sse2), 527233d2500723e5594f3e7c70896ffeeef32b9c950ywan make_tuple(5, 6, variance32x64_sse2), 528233d2500723e5594f3e7c70896ffeeef32b9c950ywan make_tuple(6, 5, variance64x32_sse2), 529233d2500723e5594f3e7c70896ffeeef32b9c950ywan make_tuple(6, 6, variance64x64_sse2))); 530233d2500723e5594f3e7c70896ffeeef32b9c950ywan 531233d2500723e5594f3e7c70896ffeeef32b9c950ywanconst vp9_subpixvariance_fn_t subpel_variance4x4_sse = 532233d2500723e5594f3e7c70896ffeeef32b9c950ywan vp9_sub_pixel_variance4x4_sse; 533233d2500723e5594f3e7c70896ffeeef32b9c950ywanconst vp9_subpixvariance_fn_t subpel_variance4x8_sse = 534233d2500723e5594f3e7c70896ffeeef32b9c950ywan vp9_sub_pixel_variance4x8_sse; 535233d2500723e5594f3e7c70896ffeeef32b9c950ywanconst vp9_subpixvariance_fn_t subpel_variance8x4_sse2 = 536233d2500723e5594f3e7c70896ffeeef32b9c950ywan vp9_sub_pixel_variance8x4_sse2; 537233d2500723e5594f3e7c70896ffeeef32b9c950ywanconst vp9_subpixvariance_fn_t subpel_variance8x8_sse2 = 538233d2500723e5594f3e7c70896ffeeef32b9c950ywan vp9_sub_pixel_variance8x8_sse2; 539233d2500723e5594f3e7c70896ffeeef32b9c950ywanconst vp9_subpixvariance_fn_t subpel_variance8x16_sse2 = 540233d2500723e5594f3e7c70896ffeeef32b9c950ywan vp9_sub_pixel_variance8x16_sse2; 541233d2500723e5594f3e7c70896ffeeef32b9c950ywanconst vp9_subpixvariance_fn_t subpel_variance16x8_sse2 = 542233d2500723e5594f3e7c70896ffeeef32b9c950ywan vp9_sub_pixel_variance16x8_sse2; 543233d2500723e5594f3e7c70896ffeeef32b9c950ywanconst vp9_subpixvariance_fn_t subpel_variance16x16_sse2 = 544233d2500723e5594f3e7c70896ffeeef32b9c950ywan vp9_sub_pixel_variance16x16_sse2; 545233d2500723e5594f3e7c70896ffeeef32b9c950ywanconst vp9_subpixvariance_fn_t subpel_variance16x32_sse2 = 546233d2500723e5594f3e7c70896ffeeef32b9c950ywan vp9_sub_pixel_variance16x32_sse2; 547233d2500723e5594f3e7c70896ffeeef32b9c950ywanconst vp9_subpixvariance_fn_t subpel_variance32x16_sse2 = 548233d2500723e5594f3e7c70896ffeeef32b9c950ywan vp9_sub_pixel_variance32x16_sse2; 549233d2500723e5594f3e7c70896ffeeef32b9c950ywanconst vp9_subpixvariance_fn_t subpel_variance32x32_sse2 = 550233d2500723e5594f3e7c70896ffeeef32b9c950ywan vp9_sub_pixel_variance32x32_sse2; 551233d2500723e5594f3e7c70896ffeeef32b9c950ywanconst vp9_subpixvariance_fn_t subpel_variance32x64_sse2 = 552233d2500723e5594f3e7c70896ffeeef32b9c950ywan vp9_sub_pixel_variance32x64_sse2; 553233d2500723e5594f3e7c70896ffeeef32b9c950ywanconst vp9_subpixvariance_fn_t subpel_variance64x32_sse2 = 554233d2500723e5594f3e7c70896ffeeef32b9c950ywan vp9_sub_pixel_variance64x32_sse2; 555233d2500723e5594f3e7c70896ffeeef32b9c950ywanconst vp9_subpixvariance_fn_t subpel_variance64x64_sse2 = 556233d2500723e5594f3e7c70896ffeeef32b9c950ywan vp9_sub_pixel_variance64x64_sse2; 557233d2500723e5594f3e7c70896ffeeef32b9c950ywanINSTANTIATE_TEST_CASE_P( 558233d2500723e5594f3e7c70896ffeeef32b9c950ywan SSE2, VP9SubpelVarianceTest, 559233d2500723e5594f3e7c70896ffeeef32b9c950ywan ::testing::Values(make_tuple(2, 2, subpel_variance4x4_sse), 560233d2500723e5594f3e7c70896ffeeef32b9c950ywan make_tuple(2, 3, subpel_variance4x8_sse), 561233d2500723e5594f3e7c70896ffeeef32b9c950ywan make_tuple(3, 2, subpel_variance8x4_sse2), 562233d2500723e5594f3e7c70896ffeeef32b9c950ywan make_tuple(3, 3, subpel_variance8x8_sse2), 563233d2500723e5594f3e7c70896ffeeef32b9c950ywan make_tuple(3, 4, subpel_variance8x16_sse2), 564233d2500723e5594f3e7c70896ffeeef32b9c950ywan make_tuple(4, 3, subpel_variance16x8_sse2), 565233d2500723e5594f3e7c70896ffeeef32b9c950ywan make_tuple(4, 4, subpel_variance16x16_sse2), 566233d2500723e5594f3e7c70896ffeeef32b9c950ywan make_tuple(4, 5, subpel_variance16x32_sse2), 567233d2500723e5594f3e7c70896ffeeef32b9c950ywan make_tuple(5, 4, subpel_variance32x16_sse2), 568233d2500723e5594f3e7c70896ffeeef32b9c950ywan make_tuple(5, 5, subpel_variance32x32_sse2), 569233d2500723e5594f3e7c70896ffeeef32b9c950ywan make_tuple(5, 6, subpel_variance32x64_sse2), 570233d2500723e5594f3e7c70896ffeeef32b9c950ywan make_tuple(6, 5, subpel_variance64x32_sse2), 571233d2500723e5594f3e7c70896ffeeef32b9c950ywan make_tuple(6, 6, subpel_variance64x64_sse2))); 572233d2500723e5594f3e7c70896ffeeef32b9c950ywan 573233d2500723e5594f3e7c70896ffeeef32b9c950ywanconst vp9_subp_avg_variance_fn_t subpel_avg_variance4x4_sse = 574233d2500723e5594f3e7c70896ffeeef32b9c950ywan vp9_sub_pixel_avg_variance4x4_sse; 575233d2500723e5594f3e7c70896ffeeef32b9c950ywanconst vp9_subp_avg_variance_fn_t subpel_avg_variance4x8_sse = 576233d2500723e5594f3e7c70896ffeeef32b9c950ywan vp9_sub_pixel_avg_variance4x8_sse; 577233d2500723e5594f3e7c70896ffeeef32b9c950ywanconst vp9_subp_avg_variance_fn_t subpel_avg_variance8x4_sse2 = 578233d2500723e5594f3e7c70896ffeeef32b9c950ywan vp9_sub_pixel_avg_variance8x4_sse2; 579233d2500723e5594f3e7c70896ffeeef32b9c950ywanconst vp9_subp_avg_variance_fn_t subpel_avg_variance8x8_sse2 = 580233d2500723e5594f3e7c70896ffeeef32b9c950ywan vp9_sub_pixel_avg_variance8x8_sse2; 581233d2500723e5594f3e7c70896ffeeef32b9c950ywanconst vp9_subp_avg_variance_fn_t subpel_avg_variance8x16_sse2 = 582233d2500723e5594f3e7c70896ffeeef32b9c950ywan vp9_sub_pixel_avg_variance8x16_sse2; 583233d2500723e5594f3e7c70896ffeeef32b9c950ywanconst vp9_subp_avg_variance_fn_t subpel_avg_variance16x8_sse2 = 584233d2500723e5594f3e7c70896ffeeef32b9c950ywan vp9_sub_pixel_avg_variance16x8_sse2; 585233d2500723e5594f3e7c70896ffeeef32b9c950ywanconst vp9_subp_avg_variance_fn_t subpel_avg_variance16x16_sse2 = 586233d2500723e5594f3e7c70896ffeeef32b9c950ywan vp9_sub_pixel_avg_variance16x16_sse2; 587233d2500723e5594f3e7c70896ffeeef32b9c950ywanconst vp9_subp_avg_variance_fn_t subpel_avg_variance16x32_sse2 = 588233d2500723e5594f3e7c70896ffeeef32b9c950ywan vp9_sub_pixel_avg_variance16x32_sse2; 589233d2500723e5594f3e7c70896ffeeef32b9c950ywanconst vp9_subp_avg_variance_fn_t subpel_avg_variance32x16_sse2 = 590233d2500723e5594f3e7c70896ffeeef32b9c950ywan vp9_sub_pixel_avg_variance32x16_sse2; 591233d2500723e5594f3e7c70896ffeeef32b9c950ywanconst vp9_subp_avg_variance_fn_t subpel_avg_variance32x32_sse2 = 592233d2500723e5594f3e7c70896ffeeef32b9c950ywan vp9_sub_pixel_avg_variance32x32_sse2; 593233d2500723e5594f3e7c70896ffeeef32b9c950ywanconst vp9_subp_avg_variance_fn_t subpel_avg_variance32x64_sse2 = 594233d2500723e5594f3e7c70896ffeeef32b9c950ywan vp9_sub_pixel_avg_variance32x64_sse2; 595233d2500723e5594f3e7c70896ffeeef32b9c950ywanconst vp9_subp_avg_variance_fn_t subpel_avg_variance64x32_sse2 = 596233d2500723e5594f3e7c70896ffeeef32b9c950ywan vp9_sub_pixel_avg_variance64x32_sse2; 597233d2500723e5594f3e7c70896ffeeef32b9c950ywanconst vp9_subp_avg_variance_fn_t subpel_avg_variance64x64_sse2 = 598233d2500723e5594f3e7c70896ffeeef32b9c950ywan vp9_sub_pixel_avg_variance64x64_sse2; 599233d2500723e5594f3e7c70896ffeeef32b9c950ywanINSTANTIATE_TEST_CASE_P( 600233d2500723e5594f3e7c70896ffeeef32b9c950ywan SSE2, VP9SubpelAvgVarianceTest, 601233d2500723e5594f3e7c70896ffeeef32b9c950ywan ::testing::Values(make_tuple(2, 2, subpel_avg_variance4x4_sse), 602233d2500723e5594f3e7c70896ffeeef32b9c950ywan make_tuple(2, 3, subpel_avg_variance4x8_sse), 603233d2500723e5594f3e7c70896ffeeef32b9c950ywan make_tuple(3, 2, subpel_avg_variance8x4_sse2), 604233d2500723e5594f3e7c70896ffeeef32b9c950ywan make_tuple(3, 3, subpel_avg_variance8x8_sse2), 605233d2500723e5594f3e7c70896ffeeef32b9c950ywan make_tuple(3, 4, subpel_avg_variance8x16_sse2), 606233d2500723e5594f3e7c70896ffeeef32b9c950ywan make_tuple(4, 3, subpel_avg_variance16x8_sse2), 607233d2500723e5594f3e7c70896ffeeef32b9c950ywan make_tuple(4, 4, subpel_avg_variance16x16_sse2), 608233d2500723e5594f3e7c70896ffeeef32b9c950ywan make_tuple(4, 5, subpel_avg_variance16x32_sse2), 609233d2500723e5594f3e7c70896ffeeef32b9c950ywan make_tuple(5, 4, subpel_avg_variance32x16_sse2), 610233d2500723e5594f3e7c70896ffeeef32b9c950ywan make_tuple(5, 5, subpel_avg_variance32x32_sse2), 611233d2500723e5594f3e7c70896ffeeef32b9c950ywan make_tuple(5, 6, subpel_avg_variance32x64_sse2), 612233d2500723e5594f3e7c70896ffeeef32b9c950ywan make_tuple(6, 5, subpel_avg_variance64x32_sse2), 613233d2500723e5594f3e7c70896ffeeef32b9c950ywan make_tuple(6, 6, subpel_avg_variance64x64_sse2))); 614233d2500723e5594f3e7c70896ffeeef32b9c950ywan#endif 615233d2500723e5594f3e7c70896ffeeef32b9c950ywan#endif 616233d2500723e5594f3e7c70896ffeeef32b9c950ywan 617233d2500723e5594f3e7c70896ffeeef32b9c950ywan#if HAVE_SSSE3 618233d2500723e5594f3e7c70896ffeeef32b9c950ywan#if CONFIG_USE_X86INC 619233d2500723e5594f3e7c70896ffeeef32b9c950ywan 620233d2500723e5594f3e7c70896ffeeef32b9c950ywanconst vp9_subpixvariance_fn_t subpel_variance4x4_ssse3 = 621233d2500723e5594f3e7c70896ffeeef32b9c950ywan vp9_sub_pixel_variance4x4_ssse3; 622233d2500723e5594f3e7c70896ffeeef32b9c950ywanconst vp9_subpixvariance_fn_t subpel_variance4x8_ssse3 = 623233d2500723e5594f3e7c70896ffeeef32b9c950ywan vp9_sub_pixel_variance4x8_ssse3; 624233d2500723e5594f3e7c70896ffeeef32b9c950ywanconst vp9_subpixvariance_fn_t subpel_variance8x4_ssse3 = 625233d2500723e5594f3e7c70896ffeeef32b9c950ywan vp9_sub_pixel_variance8x4_ssse3; 626233d2500723e5594f3e7c70896ffeeef32b9c950ywanconst vp9_subpixvariance_fn_t subpel_variance8x8_ssse3 = 627233d2500723e5594f3e7c70896ffeeef32b9c950ywan vp9_sub_pixel_variance8x8_ssse3; 628233d2500723e5594f3e7c70896ffeeef32b9c950ywanconst vp9_subpixvariance_fn_t subpel_variance8x16_ssse3 = 629233d2500723e5594f3e7c70896ffeeef32b9c950ywan vp9_sub_pixel_variance8x16_ssse3; 630233d2500723e5594f3e7c70896ffeeef32b9c950ywanconst vp9_subpixvariance_fn_t subpel_variance16x8_ssse3 = 631233d2500723e5594f3e7c70896ffeeef32b9c950ywan vp9_sub_pixel_variance16x8_ssse3; 632233d2500723e5594f3e7c70896ffeeef32b9c950ywanconst vp9_subpixvariance_fn_t subpel_variance16x16_ssse3 = 633233d2500723e5594f3e7c70896ffeeef32b9c950ywan vp9_sub_pixel_variance16x16_ssse3; 634233d2500723e5594f3e7c70896ffeeef32b9c950ywanconst vp9_subpixvariance_fn_t subpel_variance16x32_ssse3 = 635233d2500723e5594f3e7c70896ffeeef32b9c950ywan vp9_sub_pixel_variance16x32_ssse3; 636233d2500723e5594f3e7c70896ffeeef32b9c950ywanconst vp9_subpixvariance_fn_t subpel_variance32x16_ssse3 = 637233d2500723e5594f3e7c70896ffeeef32b9c950ywan vp9_sub_pixel_variance32x16_ssse3; 638233d2500723e5594f3e7c70896ffeeef32b9c950ywanconst vp9_subpixvariance_fn_t subpel_variance32x32_ssse3 = 639233d2500723e5594f3e7c70896ffeeef32b9c950ywan vp9_sub_pixel_variance32x32_ssse3; 640233d2500723e5594f3e7c70896ffeeef32b9c950ywanconst vp9_subpixvariance_fn_t subpel_variance32x64_ssse3 = 641233d2500723e5594f3e7c70896ffeeef32b9c950ywan vp9_sub_pixel_variance32x64_ssse3; 642233d2500723e5594f3e7c70896ffeeef32b9c950ywanconst vp9_subpixvariance_fn_t subpel_variance64x32_ssse3 = 643233d2500723e5594f3e7c70896ffeeef32b9c950ywan vp9_sub_pixel_variance64x32_ssse3; 644233d2500723e5594f3e7c70896ffeeef32b9c950ywanconst vp9_subpixvariance_fn_t subpel_variance64x64_ssse3 = 645233d2500723e5594f3e7c70896ffeeef32b9c950ywan vp9_sub_pixel_variance64x64_ssse3; 646233d2500723e5594f3e7c70896ffeeef32b9c950ywanINSTANTIATE_TEST_CASE_P( 647233d2500723e5594f3e7c70896ffeeef32b9c950ywan SSSE3, VP9SubpelVarianceTest, 648233d2500723e5594f3e7c70896ffeeef32b9c950ywan ::testing::Values(make_tuple(2, 2, subpel_variance4x4_ssse3), 649233d2500723e5594f3e7c70896ffeeef32b9c950ywan make_tuple(2, 3, subpel_variance4x8_ssse3), 650233d2500723e5594f3e7c70896ffeeef32b9c950ywan make_tuple(3, 2, subpel_variance8x4_ssse3), 651233d2500723e5594f3e7c70896ffeeef32b9c950ywan make_tuple(3, 3, subpel_variance8x8_ssse3), 652233d2500723e5594f3e7c70896ffeeef32b9c950ywan make_tuple(3, 4, subpel_variance8x16_ssse3), 653233d2500723e5594f3e7c70896ffeeef32b9c950ywan make_tuple(4, 3, subpel_variance16x8_ssse3), 654233d2500723e5594f3e7c70896ffeeef32b9c950ywan make_tuple(4, 4, subpel_variance16x16_ssse3), 655233d2500723e5594f3e7c70896ffeeef32b9c950ywan make_tuple(4, 5, subpel_variance16x32_ssse3), 656233d2500723e5594f3e7c70896ffeeef32b9c950ywan make_tuple(5, 4, subpel_variance32x16_ssse3), 657233d2500723e5594f3e7c70896ffeeef32b9c950ywan make_tuple(5, 5, subpel_variance32x32_ssse3), 658233d2500723e5594f3e7c70896ffeeef32b9c950ywan make_tuple(5, 6, subpel_variance32x64_ssse3), 659233d2500723e5594f3e7c70896ffeeef32b9c950ywan make_tuple(6, 5, subpel_variance64x32_ssse3), 660233d2500723e5594f3e7c70896ffeeef32b9c950ywan make_tuple(6, 6, subpel_variance64x64_ssse3))); 661233d2500723e5594f3e7c70896ffeeef32b9c950ywan 662233d2500723e5594f3e7c70896ffeeef32b9c950ywanconst vp9_subp_avg_variance_fn_t subpel_avg_variance4x4_ssse3 = 663233d2500723e5594f3e7c70896ffeeef32b9c950ywan vp9_sub_pixel_avg_variance4x4_ssse3; 664233d2500723e5594f3e7c70896ffeeef32b9c950ywanconst vp9_subp_avg_variance_fn_t subpel_avg_variance4x8_ssse3 = 665233d2500723e5594f3e7c70896ffeeef32b9c950ywan vp9_sub_pixel_avg_variance4x8_ssse3; 666233d2500723e5594f3e7c70896ffeeef32b9c950ywanconst vp9_subp_avg_variance_fn_t subpel_avg_variance8x4_ssse3 = 667233d2500723e5594f3e7c70896ffeeef32b9c950ywan vp9_sub_pixel_avg_variance8x4_ssse3; 668233d2500723e5594f3e7c70896ffeeef32b9c950ywanconst vp9_subp_avg_variance_fn_t subpel_avg_variance8x8_ssse3 = 669233d2500723e5594f3e7c70896ffeeef32b9c950ywan vp9_sub_pixel_avg_variance8x8_ssse3; 670233d2500723e5594f3e7c70896ffeeef32b9c950ywanconst vp9_subp_avg_variance_fn_t subpel_avg_variance8x16_ssse3 = 671233d2500723e5594f3e7c70896ffeeef32b9c950ywan vp9_sub_pixel_avg_variance8x16_ssse3; 672233d2500723e5594f3e7c70896ffeeef32b9c950ywanconst vp9_subp_avg_variance_fn_t subpel_avg_variance16x8_ssse3 = 673233d2500723e5594f3e7c70896ffeeef32b9c950ywan vp9_sub_pixel_avg_variance16x8_ssse3; 674233d2500723e5594f3e7c70896ffeeef32b9c950ywanconst vp9_subp_avg_variance_fn_t subpel_avg_variance16x16_ssse3 = 675233d2500723e5594f3e7c70896ffeeef32b9c950ywan vp9_sub_pixel_avg_variance16x16_ssse3; 676233d2500723e5594f3e7c70896ffeeef32b9c950ywanconst vp9_subp_avg_variance_fn_t subpel_avg_variance16x32_ssse3 = 677233d2500723e5594f3e7c70896ffeeef32b9c950ywan vp9_sub_pixel_avg_variance16x32_ssse3; 678233d2500723e5594f3e7c70896ffeeef32b9c950ywanconst vp9_subp_avg_variance_fn_t subpel_avg_variance32x16_ssse3 = 679233d2500723e5594f3e7c70896ffeeef32b9c950ywan vp9_sub_pixel_avg_variance32x16_ssse3; 680233d2500723e5594f3e7c70896ffeeef32b9c950ywanconst vp9_subp_avg_variance_fn_t subpel_avg_variance32x32_ssse3 = 681233d2500723e5594f3e7c70896ffeeef32b9c950ywan vp9_sub_pixel_avg_variance32x32_ssse3; 682233d2500723e5594f3e7c70896ffeeef32b9c950ywanconst vp9_subp_avg_variance_fn_t subpel_avg_variance32x64_ssse3 = 683233d2500723e5594f3e7c70896ffeeef32b9c950ywan vp9_sub_pixel_avg_variance32x64_ssse3; 684233d2500723e5594f3e7c70896ffeeef32b9c950ywanconst vp9_subp_avg_variance_fn_t subpel_avg_variance64x32_ssse3 = 685233d2500723e5594f3e7c70896ffeeef32b9c950ywan vp9_sub_pixel_avg_variance64x32_ssse3; 686233d2500723e5594f3e7c70896ffeeef32b9c950ywanconst vp9_subp_avg_variance_fn_t subpel_avg_variance64x64_ssse3 = 687233d2500723e5594f3e7c70896ffeeef32b9c950ywan vp9_sub_pixel_avg_variance64x64_ssse3; 688233d2500723e5594f3e7c70896ffeeef32b9c950ywanINSTANTIATE_TEST_CASE_P( 689233d2500723e5594f3e7c70896ffeeef32b9c950ywan SSSE3, VP9SubpelAvgVarianceTest, 690233d2500723e5594f3e7c70896ffeeef32b9c950ywan ::testing::Values(make_tuple(2, 2, subpel_avg_variance4x4_ssse3), 691233d2500723e5594f3e7c70896ffeeef32b9c950ywan make_tuple(2, 3, subpel_avg_variance4x8_ssse3), 692233d2500723e5594f3e7c70896ffeeef32b9c950ywan make_tuple(3, 2, subpel_avg_variance8x4_ssse3), 693233d2500723e5594f3e7c70896ffeeef32b9c950ywan make_tuple(3, 3, subpel_avg_variance8x8_ssse3), 694233d2500723e5594f3e7c70896ffeeef32b9c950ywan make_tuple(3, 4, subpel_avg_variance8x16_ssse3), 695233d2500723e5594f3e7c70896ffeeef32b9c950ywan make_tuple(4, 3, subpel_avg_variance16x8_ssse3), 696233d2500723e5594f3e7c70896ffeeef32b9c950ywan make_tuple(4, 4, subpel_avg_variance16x16_ssse3), 697233d2500723e5594f3e7c70896ffeeef32b9c950ywan make_tuple(4, 5, subpel_avg_variance16x32_ssse3), 698233d2500723e5594f3e7c70896ffeeef32b9c950ywan make_tuple(5, 4, subpel_avg_variance32x16_ssse3), 699233d2500723e5594f3e7c70896ffeeef32b9c950ywan make_tuple(5, 5, subpel_avg_variance32x32_ssse3), 700233d2500723e5594f3e7c70896ffeeef32b9c950ywan make_tuple(5, 6, subpel_avg_variance32x64_ssse3), 701233d2500723e5594f3e7c70896ffeeef32b9c950ywan make_tuple(6, 5, subpel_avg_variance64x32_ssse3), 702233d2500723e5594f3e7c70896ffeeef32b9c950ywan make_tuple(6, 6, subpel_avg_variance64x64_ssse3))); 703233d2500723e5594f3e7c70896ffeeef32b9c950ywan#endif 704233d2500723e5594f3e7c70896ffeeef32b9c950ywan#endif 705233d2500723e5594f3e7c70896ffeeef32b9c950ywan#endif // CONFIG_VP9_ENCODER 706233d2500723e5594f3e7c70896ffeeef32b9c950ywan 707233d2500723e5594f3e7c70896ffeeef32b9c950ywan} // namespace vp9 708233d2500723e5594f3e7c70896ffeeef32b9c950ywan 709233d2500723e5594f3e7c70896ffeeef32b9c950ywan} // namespace 710