blob: a8dd7de139280b5720b79a0de99eccbde199842c [file] [log] [blame]
James Zern98473442012-11-06 16:58:11 -08001/*
2 * Copyright (c) 2012 The WebM project authors. All Rights Reserved.
3 *
4 * Use of this source code is governed by a BSD-style license
5 * that can be found in the LICENSE file in the root of the source
6 * tree. An additional intellectual property rights grant can be found
7 * in the file PATENTS. All contributing project authors may
8 * be found in the AUTHORS file in the root of the source tree.
9 */
Peter de Rivaz48032bf2014-10-16 14:00:54 +010010
11#include <cstdlib>
James Zern98473442012-11-06 16:58:11 -080012#include <new>
13
Peter de Rivaz48032bf2014-10-16 14:00:54 +010014#include "test/acm_random.h"
James Zern5b756742013-06-17 22:58:40 -070015#include "test/clear_system_state.h"
James Zerncc774c82013-06-18 19:15:56 -070016#include "test/register_state_check.h"
Peter de Rivaz48032bf2014-10-16 14:00:54 +010017#include "third_party/googletest/src/include/gtest/gtest.h"
James Zern5b756742013-06-17 22:58:40 -070018
Yaowu Xuafffa3d2013-09-05 08:45:56 -070019#include "./vpx_config.h"
Peter de Rivaz48032bf2014-10-16 14:00:54 +010020#include "vpx/vpx_codec.h"
21#include "vpx/vpx_integer.h"
Ronald S. Bultjeac6ea2a2013-06-21 17:03:57 -070022#include "vpx_mem/vpx_mem.h"
James Zern1711cf22013-02-22 16:23:36 -080023#if CONFIG_VP8_ENCODER
Yaowu Xuafffa3d2013-09-05 08:45:56 -070024# include "./vp8_rtcd.h"
James Zern002ad402014-01-18 13:03:31 -080025# include "vp8/common/variance.h"
James Zern1711cf22013-02-22 16:23:36 -080026#endif
27#if CONFIG_VP9_ENCODER
Yaowu Xuafffa3d2013-09-05 08:45:56 -070028# include "./vp9_rtcd.h"
James Zern002ad402014-01-18 13:03:31 -080029# include "vp9/encoder/vp9_variance.h"
James Zern1711cf22013-02-22 16:23:36 -080030#endif
James Zern98473442012-11-06 16:58:11 -080031
32namespace {
33
34using ::std::tr1::get;
35using ::std::tr1::make_tuple;
36using ::std::tr1::tuple;
Ronald S. Bultje8fb6c582013-06-20 09:34:25 -070037using libvpx_test::ACMRandom;
38
Dmitry Kovalev1f19ebb2014-09-06 00:10:25 -070039static unsigned int mb_ss_ref(const int16_t *src) {
40 unsigned int res = 0;
41 for (int i = 0; i < 256; ++i) {
42 res += src[i] * src[i];
43 }
44 return res;
45}
46
Peter de Rivaz48032bf2014-10-16 14:00:54 +010047static unsigned int variance_ref(const uint8_t *src, const uint8_t *ref,
48 int l2w, int l2h, int src_stride_coeff,
49 int ref_stride_coeff, uint32_t *sse_ptr,
50 bool use_high_bit_depth_,
51 vpx_bit_depth_t bit_depth) {
52#if CONFIG_VP9_HIGHBITDEPTH
53 int64_t se = 0;
54 uint64_t sse = 0;
55 const int w = 1 << l2w;
56 const int h = 1 << l2h;
Ronald S. Bultje8fb6c582013-06-20 09:34:25 -070057 for (int y = 0; y < h; y++) {
58 for (int x = 0; x < w; x++) {
Peter de Rivaz48032bf2014-10-16 14:00:54 +010059 int diff;
60 if (!use_high_bit_depth_) {
61 diff = ref[w * y * ref_stride_coeff + x] -
62 src[w * y * src_stride_coeff + x];
63 se += diff;
64 sse += diff * diff;
65 } else {
66 diff = CONVERT_TO_SHORTPTR(ref)[w * y * ref_stride_coeff + x] -
67 CONVERT_TO_SHORTPTR(src)[w * y * src_stride_coeff + x];
68 se += diff;
69 sse += diff * diff;
70 }
71 }
72 }
73 if (bit_depth > VPX_BITS_8) {
74 sse = ROUND_POWER_OF_TWO(sse, 2 * (bit_depth - 8));
75 se = ROUND_POWER_OF_TWO(se, bit_depth - 8);
76 }
77#else
78 int se = 0;
79 unsigned int sse = 0;
80 const int w = 1 << l2w;
81 const int h = 1 << l2h;
82 for (int y = 0; y < h; y++) {
83 for (int x = 0; x < w; x++) {
84 int diff = ref[w * y * ref_stride_coeff + x] -
85 src[w * y * src_stride_coeff + x];
Ronald S. Bultje8fb6c582013-06-20 09:34:25 -070086 se += diff;
87 sse += diff * diff;
88 }
89 }
Peter de Rivaz48032bf2014-10-16 14:00:54 +010090#endif // CONFIG_VP9_HIGHBITDEPTH
Ronald S. Bultje8fb6c582013-06-20 09:34:25 -070091 *sse_ptr = sse;
92 return sse - (((int64_t) se * se) >> (l2w + l2h));
93}
94
95static unsigned int subpel_variance_ref(const uint8_t *ref, const uint8_t *src,
96 int l2w, int l2h, int xoff, int yoff,
Peter de Rivaz48032bf2014-10-16 14:00:54 +010097 unsigned int *sse_ptr,
98 bool use_high_bit_depth_,
99 vpx_bit_depth_t bit_depth) {
100#if CONFIG_VP9_HIGHBITDEPTH
101 int64_t se = 0;
102 uint64_t sse = 0;
103 const int w = 1 << l2w;
104 const int h = 1 << l2h;
Ronald S. Bultje8fb6c582013-06-20 09:34:25 -0700105 for (int y = 0; y < h; y++) {
106 for (int x = 0; x < w; x++) {
Peter de Rivaz48032bf2014-10-16 14:00:54 +0100107 // Bilinear interpolation at a 16th pel step.
108 if (!use_high_bit_depth_) {
109 const int a1 = ref[(w + 1) * (y + 0) + x + 0];
110 const int a2 = ref[(w + 1) * (y + 0) + x + 1];
111 const int b1 = ref[(w + 1) * (y + 1) + x + 0];
112 const int b2 = ref[(w + 1) * (y + 1) + x + 1];
113 const int a = a1 + (((a2 - a1) * xoff + 8) >> 4);
114 const int b = b1 + (((b2 - b1) * xoff + 8) >> 4);
115 const int r = a + (((b - a) * yoff + 8) >> 4);
116 const int diff = r - src[w * y + x];
117 se += diff;
118 sse += diff * diff;
119 } else {
120 uint16_t *ref16 = CONVERT_TO_SHORTPTR(ref);
121 uint16_t *src16 = CONVERT_TO_SHORTPTR(src);
122 const int a1 = ref16[(w + 1) * (y + 0) + x + 0];
123 const int a2 = ref16[(w + 1) * (y + 0) + x + 1];
124 const int b1 = ref16[(w + 1) * (y + 1) + x + 0];
125 const int b2 = ref16[(w + 1) * (y + 1) + x + 1];
126 const int a = a1 + (((a2 - a1) * xoff + 8) >> 4);
127 const int b = b1 + (((b2 - b1) * xoff + 8) >> 4);
128 const int r = a + (((b - a) * yoff + 8) >> 4);
129 const int diff = r - src16[w * y + x];
130 se += diff;
131 sse += diff * diff;
132 }
133 }
134 }
135 if (bit_depth > VPX_BITS_8) {
136 sse = ROUND_POWER_OF_TWO(sse, 2 * (bit_depth - 8));
137 se = ROUND_POWER_OF_TWO(se, bit_depth - 8);
138 }
139#else
140 int se = 0;
141 unsigned int sse = 0;
142 const int w = 1 << l2w;
143 const int h = 1 << l2h;
144 for (int y = 0; y < h; y++) {
145 for (int x = 0; x < w; x++) {
146 // Bilinear interpolation at a 16th pel step.
Ronald S. Bultje8fb6c582013-06-20 09:34:25 -0700147 const int a1 = ref[(w + 1) * (y + 0) + x + 0];
148 const int a2 = ref[(w + 1) * (y + 0) + x + 1];
149 const int b1 = ref[(w + 1) * (y + 1) + x + 0];
150 const int b2 = ref[(w + 1) * (y + 1) + x + 1];
151 const int a = a1 + (((a2 - a1) * xoff + 8) >> 4);
152 const int b = b1 + (((b2 - b1) * xoff + 8) >> 4);
153 const int r = a + (((b - a) * yoff + 8) >> 4);
Peter de Rivaz48032bf2014-10-16 14:00:54 +0100154 const int diff = r - src[w * y + x];
Ronald S. Bultje8fb6c582013-06-20 09:34:25 -0700155 se += diff;
156 sse += diff * diff;
157 }
158 }
Peter de Rivaz48032bf2014-10-16 14:00:54 +0100159#endif // CONFIG_VP9_HIGHBITDEPTH
Ronald S. Bultje8fb6c582013-06-20 09:34:25 -0700160 *sse_ptr = sse;
161 return sse - (((int64_t) se * se) >> (l2w + l2h));
162}
James Zern98473442012-11-06 16:58:11 -0800163
Dmitry Kovalev1f19ebb2014-09-06 00:10:25 -0700164typedef unsigned int (*SumOfSquaresFunction)(const int16_t *src);
165
166class SumOfSquaresTest : public ::testing::TestWithParam<SumOfSquaresFunction> {
167 public:
168 SumOfSquaresTest() : func_(GetParam()) {}
169
170 virtual ~SumOfSquaresTest() {
171 libvpx_test::ClearSystemState();
172 }
173
174 protected:
175 void ConstTest();
176 void RefTest();
177
178 SumOfSquaresFunction func_;
179 ACMRandom rnd_;
180};
181
182void SumOfSquaresTest::ConstTest() {
183 int16_t mem[256];
184 unsigned int res;
185 for (int v = 0; v < 256; ++v) {
186 for (int i = 0; i < 256; ++i) {
187 mem[i] = v;
188 }
189 ASM_REGISTER_STATE_CHECK(res = func_(mem));
190 EXPECT_EQ(256u * (v * v), res);
191 }
192}
193
194void SumOfSquaresTest::RefTest() {
195 int16_t mem[256];
196 for (int i = 0; i < 100; ++i) {
197 for (int j = 0; j < 256; ++j) {
198 mem[j] = rnd_.Rand8() - rnd_.Rand8();
199 }
200
201 const unsigned int expected = mb_ss_ref(mem);
202 unsigned int res;
203 ASM_REGISTER_STATE_CHECK(res = func_(mem));
204 EXPECT_EQ(expected, res);
205 }
206}
207
James Zern1711cf22013-02-22 16:23:36 -0800208template<typename VarianceFunctionType>
Yaowu Xuafffa3d2013-09-05 08:45:56 -0700209class VarianceTest
Peter de Rivaz48032bf2014-10-16 14:00:54 +0100210 : public ::testing::TestWithParam<tuple<int, int,
211 VarianceFunctionType, int> > {
James Zern98473442012-11-06 16:58:11 -0800212 public:
213 virtual void SetUp() {
Peter de Rivaz48032bf2014-10-16 14:00:54 +0100214 const tuple<int, int, VarianceFunctionType, int>& params = this->GetParam();
Ronald S. Bultje8fb6c582013-06-20 09:34:25 -0700215 log2width_ = get<0>(params);
216 width_ = 1 << log2width_;
217 log2height_ = get<1>(params);
218 height_ = 1 << log2height_;
James Zern98473442012-11-06 16:58:11 -0800219 variance_ = get<2>(params);
Peter de Rivaz48032bf2014-10-16 14:00:54 +0100220 if (get<3>(params)) {
221 bit_depth_ = static_cast<vpx_bit_depth_t>(get<3>(params));
222 use_high_bit_depth_ = true;
223 } else {
224 bit_depth_ = VPX_BITS_8;
225 use_high_bit_depth_ = false;
226 }
227 mask_ = (1 << bit_depth_) - 1;
James Zern98473442012-11-06 16:58:11 -0800228
Dmitry Kovalev202edb32014-09-04 12:24:52 -0700229 rnd_.Reset(ACMRandom::DeterministicSeed());
James Zern98473442012-11-06 16:58:11 -0800230 block_size_ = width_ * height_;
Peter de Rivaz48032bf2014-10-16 14:00:54 +0100231#if CONFIG_VP9_HIGHBITDEPTH
232 if (!use_high_bit_depth_) {
233 src_ = reinterpret_cast<uint8_t *>(vpx_memalign(16, block_size_ * 2));
234 ref_ = new uint8_t[block_size_ * 2];
235 } else {
236 src_ = CONVERT_TO_BYTEPTR(reinterpret_cast<uint16_t *>(
237 vpx_memalign(16, block_size_ * 2 * sizeof(uint16_t))));
238 ref_ = CONVERT_TO_BYTEPTR(new uint16_t[block_size_ * 2]);
239 }
240#else
241 src_ = reinterpret_cast<uint8_t *>(vpx_memalign(16, block_size_ * 2));
242 ref_ = new uint8_t[block_size_ * 2];
243#endif
James Zern98473442012-11-06 16:58:11 -0800244 ASSERT_TRUE(src_ != NULL);
245 ASSERT_TRUE(ref_ != NULL);
246 }
247
248 virtual void TearDown() {
Peter de Rivaz48032bf2014-10-16 14:00:54 +0100249#if CONFIG_VP9_HIGHBITDEPTH
250 if (!use_high_bit_depth_) {
251 vpx_free(src_);
252 delete[] ref_;
253 } else {
254 vpx_free(CONVERT_TO_SHORTPTR(src_));
255 delete[] CONVERT_TO_SHORTPTR(ref_);
256 }
257#else
Yunqing Wang5c93e622014-07-24 17:11:58 -0700258 vpx_free(src_);
James Zern98473442012-11-06 16:58:11 -0800259 delete[] ref_;
Peter de Rivaz48032bf2014-10-16 14:00:54 +0100260#endif
James Zern5b756742013-06-17 22:58:40 -0700261 libvpx_test::ClearSystemState();
James Zern98473442012-11-06 16:58:11 -0800262 }
263
264 protected:
James Zern1711cf22013-02-22 16:23:36 -0800265 void ZeroTest();
Ronald S. Bultje8fb6c582013-06-20 09:34:25 -0700266 void RefTest();
Peter de Rivaz48032bf2014-10-16 14:00:54 +0100267 void RefStrideTest();
James Zern1711cf22013-02-22 16:23:36 -0800268 void OneQuarterTest();
269
Dmitry Kovalev202edb32014-09-04 12:24:52 -0700270 ACMRandom rnd_;
Peter de Rivaz48032bf2014-10-16 14:00:54 +0100271 uint8_t *src_;
272 uint8_t *ref_;
Ronald S. Bultje8fb6c582013-06-20 09:34:25 -0700273 int width_, log2width_;
274 int height_, log2height_;
Peter de Rivaz48032bf2014-10-16 14:00:54 +0100275 vpx_bit_depth_t bit_depth_;
276 int mask_;
277 bool use_high_bit_depth_;
James Zern98473442012-11-06 16:58:11 -0800278 int block_size_;
James Zern1711cf22013-02-22 16:23:36 -0800279 VarianceFunctionType variance_;
James Zern98473442012-11-06 16:58:11 -0800280};
281
James Zern1711cf22013-02-22 16:23:36 -0800282template<typename VarianceFunctionType>
283void VarianceTest<VarianceFunctionType>::ZeroTest() {
James Zern98473442012-11-06 16:58:11 -0800284 for (int i = 0; i <= 255; ++i) {
Peter de Rivaz48032bf2014-10-16 14:00:54 +0100285#if CONFIG_VP9_HIGHBITDEPTH
286 if (!use_high_bit_depth_) {
287 memset(src_, i, block_size_);
288 } else {
289 vpx_memset16(CONVERT_TO_SHORTPTR(src_), i << (bit_depth_ - 8),
290 block_size_);
291 }
292#else
James Zern98473442012-11-06 16:58:11 -0800293 memset(src_, i, block_size_);
Peter de Rivaz48032bf2014-10-16 14:00:54 +0100294#endif
James Zern98473442012-11-06 16:58:11 -0800295 for (int j = 0; j <= 255; ++j) {
Peter de Rivaz48032bf2014-10-16 14:00:54 +0100296#if CONFIG_VP9_HIGHBITDEPTH
297 if (!use_high_bit_depth_) {
298 memset(ref_, j, block_size_);
299 } else {
300 vpx_memset16(CONVERT_TO_SHORTPTR(ref_), j << (bit_depth_ - 8),
301 block_size_);
302 }
303#else
James Zern98473442012-11-06 16:58:11 -0800304 memset(ref_, j, block_size_);
Peter de Rivaz48032bf2014-10-16 14:00:54 +0100305#endif
James Zern98473442012-11-06 16:58:11 -0800306 unsigned int sse;
James Zerncc774c82013-06-18 19:15:56 -0700307 unsigned int var;
James Zern29e1b1a2014-07-09 21:02:02 -0700308 ASM_REGISTER_STATE_CHECK(
309 var = variance_(src_, width_, ref_, width_, &sse));
Peter de Rivaz48032bf2014-10-16 14:00:54 +0100310 EXPECT_EQ(0u, var) << "src values: " << i << " ref values: " << j;
James Zern98473442012-11-06 16:58:11 -0800311 }
312 }
313}
314
James Zern1711cf22013-02-22 16:23:36 -0800315template<typename VarianceFunctionType>
Ronald S. Bultje8fb6c582013-06-20 09:34:25 -0700316void VarianceTest<VarianceFunctionType>::RefTest() {
317 for (int i = 0; i < 10; ++i) {
318 for (int j = 0; j < block_size_; j++) {
Peter de Rivaz48032bf2014-10-16 14:00:54 +0100319#if CONFIG_VP9_HIGHBITDEPTH
320 if (!use_high_bit_depth_) {
Dmitry Kovalev202edb32014-09-04 12:24:52 -0700321 src_[j] = rnd_.Rand8();
322 ref_[j] = rnd_.Rand8();
Peter de Rivaz48032bf2014-10-16 14:00:54 +0100323 } else {
324 CONVERT_TO_SHORTPTR(src_)[j] = rnd_.Rand16() && mask_;
325 CONVERT_TO_SHORTPTR(ref_)[j] = rnd_.Rand16() && mask_;
326 }
327#else
328 src_[j] = rnd_.Rand8();
329 ref_[j] = rnd_.Rand8();
330#endif
Ronald S. Bultje8fb6c582013-06-20 09:34:25 -0700331 }
332 unsigned int sse1, sse2;
James Zerncc774c82013-06-18 19:15:56 -0700333 unsigned int var1;
Peter de Rivaz48032bf2014-10-16 14:00:54 +0100334 const int stride_coeff = 1;
James Zern29e1b1a2014-07-09 21:02:02 -0700335 ASM_REGISTER_STATE_CHECK(
336 var1 = variance_(src_, width_, ref_, width_, &sse1));
Ronald S. Bultje8fb6c582013-06-20 09:34:25 -0700337 const unsigned int var2 = variance_ref(src_, ref_, log2width_,
Peter de Rivaz48032bf2014-10-16 14:00:54 +0100338 log2height_, stride_coeff,
339 stride_coeff, &sse2,
340 use_high_bit_depth_, bit_depth_);
341 EXPECT_EQ(sse1, sse2);
342 EXPECT_EQ(var1, var2);
343 }
344}
345
346template<typename VarianceFunctionType>
347void VarianceTest<VarianceFunctionType>::RefStrideTest() {
348 for (int i = 0; i < 10; ++i) {
349 int ref_stride_coeff = i % 2;
350 int src_stride_coeff = (i >> 1) % 2;
351 for (int j = 0; j < block_size_; j++) {
352 int ref_ind = (j / width_) * ref_stride_coeff * width_ + j % width_;
353 int src_ind = (j / width_) * src_stride_coeff * width_ + j % width_;
354#if CONFIG_VP9_HIGHBITDEPTH
355 if (!use_high_bit_depth_) {
356 src_[src_ind] = rnd_.Rand8();
357 ref_[ref_ind] = rnd_.Rand8();
358 } else {
359 CONVERT_TO_SHORTPTR(src_)[src_ind] = rnd_.Rand16() && mask_;
360 CONVERT_TO_SHORTPTR(ref_)[ref_ind] = rnd_.Rand16() && mask_;
361 }
362#else
363 src_[src_ind] = rnd_.Rand8();
364 ref_[ref_ind] = rnd_.Rand8();
365#endif
366 }
367 unsigned int sse1, sse2;
368 unsigned int var1;
369
370 ASM_REGISTER_STATE_CHECK(
371 var1 = variance_(src_, width_ * src_stride_coeff,
372 ref_, width_ * ref_stride_coeff, &sse1));
373 const unsigned int var2 = variance_ref(src_, ref_, log2width_,
374 log2height_, src_stride_coeff,
375 ref_stride_coeff, &sse2,
376 use_high_bit_depth_, bit_depth_);
Ronald S. Bultje8fb6c582013-06-20 09:34:25 -0700377 EXPECT_EQ(sse1, sse2);
378 EXPECT_EQ(var1, var2);
379 }
380}
381
382template<typename VarianceFunctionType>
James Zern1711cf22013-02-22 16:23:36 -0800383void VarianceTest<VarianceFunctionType>::OneQuarterTest() {
James Zern98473442012-11-06 16:58:11 -0800384 const int half = block_size_ / 2;
Peter de Rivaz48032bf2014-10-16 14:00:54 +0100385#if CONFIG_VP9_HIGHBITDEPTH
386 if (!use_high_bit_depth_) {
387 memset(src_, 255, block_size_);
388 memset(ref_, 255, half);
389 memset(ref_ + half, 0, half);
390 } else {
391 vpx_memset16(CONVERT_TO_SHORTPTR(src_), 255 << (bit_depth_ - 8),
392 block_size_);
393 vpx_memset16(CONVERT_TO_SHORTPTR(ref_), 255 << (bit_depth_ - 8), half);
394 vpx_memset16(CONVERT_TO_SHORTPTR(ref_) + half, 0, half);
395 }
396#else
397 memset(src_, 255, block_size_);
James Zern98473442012-11-06 16:58:11 -0800398 memset(ref_, 255, half);
399 memset(ref_ + half, 0, half);
Peter de Rivaz48032bf2014-10-16 14:00:54 +0100400#endif
James Zern98473442012-11-06 16:58:11 -0800401 unsigned int sse;
James Zerncc774c82013-06-18 19:15:56 -0700402 unsigned int var;
James Zern29e1b1a2014-07-09 21:02:02 -0700403 ASM_REGISTER_STATE_CHECK(var = variance_(src_, width_, ref_, width_, &sse));
James Zern98473442012-11-06 16:58:11 -0800404 const unsigned int expected = block_size_ * 255 * 255 / 4;
405 EXPECT_EQ(expected, var);
406}
407
Scott LaVarnwayfe2cc872014-08-20 07:56:19 -0700408#if CONFIG_VP8_ENCODER
409template<typename MseFunctionType>
410class MseTest
411 : public ::testing::TestWithParam<tuple<int, int, MseFunctionType> > {
412 public:
413 virtual void SetUp() {
414 const tuple<int, int, MseFunctionType>& params = this->GetParam();
415 log2width_ = get<0>(params);
416 width_ = 1 << log2width_;
417 log2height_ = get<1>(params);
418 height_ = 1 << log2height_;
419 mse_ = get<2>(params);
420
421 rnd(ACMRandom::DeterministicSeed());
422 block_size_ = width_ * height_;
423 src_ = reinterpret_cast<uint8_t *>(vpx_memalign(16, block_size_));
424 ref_ = new uint8_t[block_size_];
425 ASSERT_TRUE(src_ != NULL);
426 ASSERT_TRUE(ref_ != NULL);
427 }
428
429 virtual void TearDown() {
430 vpx_free(src_);
431 delete[] ref_;
432 libvpx_test::ClearSystemState();
433 }
434
435 protected:
436 void RefTest_mse();
437 void RefTest_sse();
438 void MaxTest_mse();
439 void MaxTest_sse();
440
441 ACMRandom rnd;
442 uint8_t* src_;
443 uint8_t* ref_;
444 int width_, log2width_;
445 int height_, log2height_;
446 int block_size_;
447 MseFunctionType mse_;
448};
449
450template<typename MseFunctionType>
451void MseTest<MseFunctionType>::RefTest_mse() {
452 for (int i = 0; i < 10; ++i) {
453 for (int j = 0; j < block_size_; j++) {
454 src_[j] = rnd.Rand8();
455 ref_[j] = rnd.Rand8();
456 }
457 unsigned int sse1, sse2;
Peter de Rivaz48032bf2014-10-16 14:00:54 +0100458 const int stride_coeff = 1;
Scott LaVarnwayfe2cc872014-08-20 07:56:19 -0700459 ASM_REGISTER_STATE_CHECK(mse_(src_, width_, ref_, width_, &sse1));
Peter de Rivaz48032bf2014-10-16 14:00:54 +0100460 variance_ref(src_, ref_, log2width_, log2height_, stride_coeff,
461 stride_coeff, &sse2, false, VPX_BITS_8);
Scott LaVarnwayfe2cc872014-08-20 07:56:19 -0700462 EXPECT_EQ(sse1, sse2);
463 }
464}
465
466template<typename MseFunctionType>
467void MseTest<MseFunctionType>::RefTest_sse() {
468 for (int i = 0; i < 10; ++i) {
469 for (int j = 0; j < block_size_; j++) {
470 src_[j] = rnd.Rand8();
471 ref_[j] = rnd.Rand8();
472 }
473 unsigned int sse2;
474 unsigned int var1;
Peter de Rivaz48032bf2014-10-16 14:00:54 +0100475 const int stride_coeff = 1;
476 ASM_REGISTER_STATE_CHECK(var1 = mse_(src_, width_, ref_, width_));
477 variance_ref(src_, ref_, log2width_, log2height_, stride_coeff,
478 stride_coeff, &sse2, false, VPX_BITS_8);
Scott LaVarnwayfe2cc872014-08-20 07:56:19 -0700479 EXPECT_EQ(var1, sse2);
480 }
481}
482
483template<typename MseFunctionType>
484void MseTest<MseFunctionType>::MaxTest_mse() {
485 memset(src_, 255, block_size_);
486 memset(ref_, 0, block_size_);
487 unsigned int sse;
488 ASM_REGISTER_STATE_CHECK(mse_(src_, width_, ref_, width_, &sse));
489 const unsigned int expected = block_size_ * 255 * 255;
490 EXPECT_EQ(expected, sse);
491}
492
493template<typename MseFunctionType>
494void MseTest<MseFunctionType>::MaxTest_sse() {
495 memset(src_, 255, block_size_);
496 memset(ref_, 0, block_size_);
497 unsigned int var;
498 ASM_REGISTER_STATE_CHECK(var = mse_(src_, width_, ref_, width_));
499 const unsigned int expected = block_size_ * 255 * 255;
500 EXPECT_EQ(expected, var);
501}
502#endif
503
James Zerna0fcbcf2013-09-17 18:47:25 -0700504#if CONFIG_VP9_ENCODER
James Zerna0fcbcf2013-09-17 18:47:25 -0700505unsigned int subpel_avg_variance_ref(const uint8_t *ref,
506 const uint8_t *src,
507 const uint8_t *second_pred,
508 int l2w, int l2h,
509 int xoff, int yoff,
Peter de Rivaz48032bf2014-10-16 14:00:54 +0100510 unsigned int *sse_ptr,
511 bool use_high_bit_depth,
512 vpx_bit_depth_t bit_depth) {
513#if CONFIG_VP9_HIGHBITDEPTH
514 int64_t se = 0;
515 uint64_t sse = 0;
516 const int w = 1 << l2w;
517 const int h = 1 << l2h;
518 for (int y = 0; y < h; y++) {
519 for (int x = 0; x < w; x++) {
520 // bilinear interpolation at a 16th pel step
521 if (!use_high_bit_depth) {
522 const int a1 = ref[(w + 1) * (y + 0) + x + 0];
523 const int a2 = ref[(w + 1) * (y + 0) + x + 1];
524 const int b1 = ref[(w + 1) * (y + 1) + x + 0];
525 const int b2 = ref[(w + 1) * (y + 1) + x + 1];
526 const int a = a1 + (((a2 - a1) * xoff + 8) >> 4);
527 const int b = b1 + (((b2 - b1) * xoff + 8) >> 4);
528 const int r = a + (((b - a) * yoff + 8) >> 4);
529 const int diff = ((r + second_pred[w * y + x] + 1) >> 1) - src[w * y + x];
530 se += diff;
531 sse += diff * diff;
532 } else {
533 uint16_t *ref16 = CONVERT_TO_SHORTPTR(ref);
534 uint16_t *src16 = CONVERT_TO_SHORTPTR(src);
535 uint16_t *sec16 = CONVERT_TO_SHORTPTR(second_pred);
536 const int a1 = ref16[(w + 1) * (y + 0) + x + 0];
537 const int a2 = ref16[(w + 1) * (y + 0) + x + 1];
538 const int b1 = ref16[(w + 1) * (y + 1) + x + 0];
539 const int b2 = ref16[(w + 1) * (y + 1) + x + 1];
540 const int a = a1 + (((a2 - a1) * xoff + 8) >> 4);
541 const int b = b1 + (((b2 - b1) * xoff + 8) >> 4);
542 const int r = a + (((b - a) * yoff + 8) >> 4);
543 const int diff = ((r + sec16[w * y + x] + 1) >> 1) - src16[w * y + x];
544 se += diff;
545 sse += diff * diff;
546 }
547 }
548 }
549 if (bit_depth > 8) {
550 sse = ROUND_POWER_OF_TWO(sse, 2*(bit_depth-8));
551 se = ROUND_POWER_OF_TWO(se, bit_depth-8);
552 }
553#else
James Zerna0fcbcf2013-09-17 18:47:25 -0700554 int se = 0;
555 unsigned int sse = 0;
Peter de Rivaz48032bf2014-10-16 14:00:54 +0100556 const int w = 1 << l2w;
557 const int h = 1 << l2h;
James Zerna0fcbcf2013-09-17 18:47:25 -0700558 for (int y = 0; y < h; y++) {
559 for (int x = 0; x < w; x++) {
560 // bilinear interpolation at a 16th pel step
561 const int a1 = ref[(w + 1) * (y + 0) + x + 0];
562 const int a2 = ref[(w + 1) * (y + 0) + x + 1];
563 const int b1 = ref[(w + 1) * (y + 1) + x + 0];
564 const int b2 = ref[(w + 1) * (y + 1) + x + 1];
565 const int a = a1 + (((a2 - a1) * xoff + 8) >> 4);
566 const int b = b1 + (((b2 - b1) * xoff + 8) >> 4);
567 const int r = a + (((b - a) * yoff + 8) >> 4);
Peter de Rivaz48032bf2014-10-16 14:00:54 +0100568 const int diff = ((r + second_pred[w * y + x] + 1) >> 1) - src[w * y + x];
James Zerna0fcbcf2013-09-17 18:47:25 -0700569 se += diff;
570 sse += diff * diff;
571 }
572 }
Peter de Rivaz48032bf2014-10-16 14:00:54 +0100573#endif // CONFIG_VP9_HIGHBITDEPTH
James Zerna0fcbcf2013-09-17 18:47:25 -0700574 *sse_ptr = sse;
575 return sse - (((int64_t) se * se) >> (l2w + l2h));
576}
577
Ronald S. Bultje8fb6c582013-06-20 09:34:25 -0700578template<typename SubpelVarianceFunctionType>
Yaowu Xuafffa3d2013-09-05 08:45:56 -0700579class SubpelVarianceTest
580 : public ::testing::TestWithParam<tuple<int, int,
Peter de Rivaz48032bf2014-10-16 14:00:54 +0100581 SubpelVarianceFunctionType, int> > {
Ronald S. Bultje8fb6c582013-06-20 09:34:25 -0700582 public:
583 virtual void SetUp() {
Peter de Rivaz48032bf2014-10-16 14:00:54 +0100584 const tuple<int, int, SubpelVarianceFunctionType, int>& params =
Ronald S. Bultje8fb6c582013-06-20 09:34:25 -0700585 this->GetParam();
586 log2width_ = get<0>(params);
587 width_ = 1 << log2width_;
588 log2height_ = get<1>(params);
589 height_ = 1 << log2height_;
590 subpel_variance_ = get<2>(params);
Peter de Rivaz48032bf2014-10-16 14:00:54 +0100591 if (get<3>(params)) {
592 bit_depth_ = (vpx_bit_depth_t) get<3>(params);
593 use_high_bit_depth_ = true;
594 } else {
595 bit_depth_ = VPX_BITS_8;
596 use_high_bit_depth_ = false;
597 }
598 mask_ = (1 << bit_depth_)-1;
Ronald S. Bultje8fb6c582013-06-20 09:34:25 -0700599
Dmitry Kovalev202edb32014-09-04 12:24:52 -0700600 rnd_.Reset(ACMRandom::DeterministicSeed());
Ronald S. Bultje8fb6c582013-06-20 09:34:25 -0700601 block_size_ = width_ * height_;
Peter de Rivaz48032bf2014-10-16 14:00:54 +0100602#if CONFIG_VP9_HIGHBITDEPTH
603 if (!use_high_bit_depth_) {
604 src_ = reinterpret_cast<uint8_t *>(vpx_memalign(16, block_size_));
605 sec_ = reinterpret_cast<uint8_t *>(vpx_memalign(16, block_size_));
606 ref_ = new uint8_t[block_size_ + width_ + height_ + 1];
607 } else {
608 src_ = CONVERT_TO_BYTEPTR(
609 reinterpret_cast<uint16_t *>(
610 vpx_memalign(16, block_size_*sizeof(uint16_t))));
611 sec_ = CONVERT_TO_BYTEPTR(
612 reinterpret_cast<uint16_t *>(
613 vpx_memalign(16, block_size_*sizeof(uint16_t))));
614 ref_ = CONVERT_TO_BYTEPTR(
615 new uint16_t[block_size_ + width_ + height_ + 1]);
616 }
617#else
Ronald S. Bultjeac6ea2a2013-06-21 17:03:57 -0700618 src_ = reinterpret_cast<uint8_t *>(vpx_memalign(16, block_size_));
619 sec_ = reinterpret_cast<uint8_t *>(vpx_memalign(16, block_size_));
Ronald S. Bultje8fb6c582013-06-20 09:34:25 -0700620 ref_ = new uint8_t[block_size_ + width_ + height_ + 1];
Peter de Rivaz48032bf2014-10-16 14:00:54 +0100621#endif // CONFIG_VP9_HIGHBITDEPTH
Ronald S. Bultje8fb6c582013-06-20 09:34:25 -0700622 ASSERT_TRUE(src_ != NULL);
Ronald S. Bultjeac6ea2a2013-06-21 17:03:57 -0700623 ASSERT_TRUE(sec_ != NULL);
Ronald S. Bultje8fb6c582013-06-20 09:34:25 -0700624 ASSERT_TRUE(ref_ != NULL);
625 }
626
627 virtual void TearDown() {
Peter de Rivaz48032bf2014-10-16 14:00:54 +0100628#if CONFIG_VP9_HIGHBITDEPTH
629 if (!use_high_bit_depth_) {
630 vpx_free(src_);
631 delete[] ref_;
632 vpx_free(sec_);
633 } else {
634 vpx_free(CONVERT_TO_SHORTPTR(src_));
635 delete[] CONVERT_TO_SHORTPTR(ref_);
636 vpx_free(CONVERT_TO_SHORTPTR(sec_));
637 }
638#else
Ronald S. Bultjeac6ea2a2013-06-21 17:03:57 -0700639 vpx_free(src_);
Ronald S. Bultje8fb6c582013-06-20 09:34:25 -0700640 delete[] ref_;
Ronald S. Bultjeac6ea2a2013-06-21 17:03:57 -0700641 vpx_free(sec_);
Peter de Rivaz48032bf2014-10-16 14:00:54 +0100642#endif
James Zerne247ab02013-06-26 18:32:21 -0700643 libvpx_test::ClearSystemState();
Ronald S. Bultje8fb6c582013-06-20 09:34:25 -0700644 }
645
646 protected:
647 void RefTest();
Peter de Rivaz48032bf2014-10-16 14:00:54 +0100648 void ExtremeRefTest();
Ronald S. Bultje8fb6c582013-06-20 09:34:25 -0700649
Dmitry Kovalev202edb32014-09-04 12:24:52 -0700650 ACMRandom rnd_;
Ronald S. Bultje1e6a32f2013-06-20 15:59:48 -0700651 uint8_t *src_;
652 uint8_t *ref_;
653 uint8_t *sec_;
Peter de Rivaz48032bf2014-10-16 14:00:54 +0100654 bool use_high_bit_depth_;
655 vpx_bit_depth_t bit_depth_;
Ronald S. Bultje8fb6c582013-06-20 09:34:25 -0700656 int width_, log2width_;
657 int height_, log2height_;
Peter de Rivaz48032bf2014-10-16 14:00:54 +0100658 int block_size_, mask_;
Ronald S. Bultje8fb6c582013-06-20 09:34:25 -0700659 SubpelVarianceFunctionType subpel_variance_;
660};
661
662template<typename SubpelVarianceFunctionType>
663void SubpelVarianceTest<SubpelVarianceFunctionType>::RefTest() {
664 for (int x = 0; x < 16; ++x) {
665 for (int y = 0; y < 16; ++y) {
Peter de Rivaz48032bf2014-10-16 14:00:54 +0100666#if CONFIG_VP9_HIGHBITDEPTH
667 if (!use_high_bit_depth_) {
668 for (int j = 0; j < block_size_; j++) {
669 src_[j] = rnd_.Rand8();
670 }
671 for (int j = 0; j < block_size_ + width_ + height_ + 1; j++) {
672 ref_[j] = rnd_.Rand8();
673 }
674 } else {
675 for (int j = 0; j < block_size_; j++) {
676 CONVERT_TO_SHORTPTR(src_)[j] = rnd_.Rand16() & mask_;
677 }
678 for (int j = 0; j < block_size_ + width_ + height_ + 1; j++) {
679 CONVERT_TO_SHORTPTR(ref_)[j] = rnd_.Rand16() & mask_;
680 }
681 }
682#else
Ronald S. Bultje8fb6c582013-06-20 09:34:25 -0700683 for (int j = 0; j < block_size_; j++) {
Dmitry Kovalev202edb32014-09-04 12:24:52 -0700684 src_[j] = rnd_.Rand8();
Ronald S. Bultje8fb6c582013-06-20 09:34:25 -0700685 }
686 for (int j = 0; j < block_size_ + width_ + height_ + 1; j++) {
Dmitry Kovalev202edb32014-09-04 12:24:52 -0700687 ref_[j] = rnd_.Rand8();
Ronald S. Bultje8fb6c582013-06-20 09:34:25 -0700688 }
Peter de Rivaz48032bf2014-10-16 14:00:54 +0100689#endif // CONFIG_VP9_HIGHBITDEPTH
Ronald S. Bultje8fb6c582013-06-20 09:34:25 -0700690 unsigned int sse1, sse2;
James Zerncc774c82013-06-18 19:15:56 -0700691 unsigned int var1;
James Zern29e1b1a2014-07-09 21:02:02 -0700692 ASM_REGISTER_STATE_CHECK(var1 = subpel_variance_(ref_, width_ + 1, x, y,
693 src_, width_, &sse1));
Ronald S. Bultje8fb6c582013-06-20 09:34:25 -0700694 const unsigned int var2 = subpel_variance_ref(ref_, src_, log2width_,
Peter de Rivaz48032bf2014-10-16 14:00:54 +0100695 log2height_, x, y, &sse2,
696 use_high_bit_depth_,
697 bit_depth_);
698 EXPECT_EQ(sse1, sse2) << "at position " << x << ", " << y;
699 EXPECT_EQ(var1, var2) << "at position " << x << ", " << y;
700 }
701 }
702}
703
704template<typename SubpelVarianceFunctionType>
705void SubpelVarianceTest<SubpelVarianceFunctionType>::ExtremeRefTest() {
706 // Compare against reference.
707 // Src: Set the first half of values to 0, the second half to the maximum.
708 // Ref: Set the first half of values to the maximum, the second half to 0.
709 for (int x = 0; x < 16; ++x) {
710 for (int y = 0; y < 16; ++y) {
711 const int half = block_size_ / 2;
712#if CONFIG_VP9_HIGHBITDEPTH
713 if (!use_high_bit_depth_) {
714 memset(src_, 0, half);
715 memset(src_ + half, 255, half);
716 memset(ref_, 255, half);
717 memset(ref_ + half, 0, half + width_ + height_ + 1);
718 } else {
719 vpx_memset16(CONVERT_TO_SHORTPTR(src_), mask_, half);
720 vpx_memset16(CONVERT_TO_SHORTPTR(src_) + half, 0, half);
721 vpx_memset16(CONVERT_TO_SHORTPTR(ref_), 0, half);
722 vpx_memset16(CONVERT_TO_SHORTPTR(ref_) + half, mask_,
723 half + width_ + height_ + 1);
724 }
725#else
726 memset(src_, 0, half);
727 memset(src_ + half, 255, half);
728 memset(ref_, 255, half);
729 memset(ref_ + half, 0, half + width_ + height_ + 1);
730#endif // CONFIG_VP9_HIGHBITDEPTH
731 unsigned int sse1, sse2;
732 unsigned int var1;
733 ASM_REGISTER_STATE_CHECK(
734 var1 = subpel_variance_(ref_, width_ + 1, x, y, src_, width_, &sse1));
735 const unsigned int var2 =
736 subpel_variance_ref(ref_, src_, log2width_, log2height_, x, y, &sse2,
737 use_high_bit_depth_, bit_depth_);
Ronald S. Bultje8fb6c582013-06-20 09:34:25 -0700738 EXPECT_EQ(sse1, sse2) << "at position " << x << ", " << y;
739 EXPECT_EQ(var1, var2) << "at position " << x << ", " << y;
740 }
741 }
742}
743
Ronald S. Bultje1e6a32f2013-06-20 15:59:48 -0700744template<>
745void SubpelVarianceTest<vp9_subp_avg_variance_fn_t>::RefTest() {
746 for (int x = 0; x < 16; ++x) {
747 for (int y = 0; y < 16; ++y) {
Peter de Rivaz48032bf2014-10-16 14:00:54 +0100748#if CONFIG_VP9_HIGHBITDEPTH
749 if (!use_high_bit_depth_) {
750 for (int j = 0; j < block_size_; j++) {
751 src_[j] = rnd_.Rand8();
752 sec_[j] = rnd_.Rand8();
753 }
754 for (int j = 0; j < block_size_ + width_ + height_ + 1; j++) {
755 ref_[j] = rnd_.Rand8();
756 }
757 } else {
758 for (int j = 0; j < block_size_; j++) {
759 CONVERT_TO_SHORTPTR(src_)[j] = rnd_.Rand16() & mask_;
760 CONVERT_TO_SHORTPTR(sec_)[j] = rnd_.Rand16() & mask_;
761 }
762 for (int j = 0; j < block_size_ + width_ + height_ + 1; j++) {
763 CONVERT_TO_SHORTPTR(ref_)[j] = rnd_.Rand16() & mask_;
764 }
765 }
766#else
Ronald S. Bultje1e6a32f2013-06-20 15:59:48 -0700767 for (int j = 0; j < block_size_; j++) {
Dmitry Kovalev202edb32014-09-04 12:24:52 -0700768 src_[j] = rnd_.Rand8();
769 sec_[j] = rnd_.Rand8();
Ronald S. Bultje1e6a32f2013-06-20 15:59:48 -0700770 }
771 for (int j = 0; j < block_size_ + width_ + height_ + 1; j++) {
Dmitry Kovalev202edb32014-09-04 12:24:52 -0700772 ref_[j] = rnd_.Rand8();
Ronald S. Bultje1e6a32f2013-06-20 15:59:48 -0700773 }
Peter de Rivaz48032bf2014-10-16 14:00:54 +0100774#endif
Ronald S. Bultje1e6a32f2013-06-20 15:59:48 -0700775 unsigned int sse1, sse2;
James Zerncc774c82013-06-18 19:15:56 -0700776 unsigned int var1;
James Zern29e1b1a2014-07-09 21:02:02 -0700777 ASM_REGISTER_STATE_CHECK(
778 var1 = subpel_variance_(ref_, width_ + 1, x, y,
779 src_, width_, &sse1, sec_));
Ronald S. Bultje1e6a32f2013-06-20 15:59:48 -0700780 const unsigned int var2 = subpel_avg_variance_ref(ref_, src_, sec_,
781 log2width_, log2height_,
Peter de Rivaz48032bf2014-10-16 14:00:54 +0100782 x, y, &sse2,
783 use_high_bit_depth_,
784 bit_depth_);
Ronald S. Bultje1e6a32f2013-06-20 15:59:48 -0700785 EXPECT_EQ(sse1, sse2) << "at position " << x << ", " << y;
786 EXPECT_EQ(var1, var2) << "at position " << x << ", " << y;
787 }
788 }
789}
790
James Zerna0fcbcf2013-09-17 18:47:25 -0700791#endif // CONFIG_VP9_ENCODER
792
James Zern1711cf22013-02-22 16:23:36 -0800793// -----------------------------------------------------------------------------
794// VP8 test cases.
795
796namespace vp8 {
797
798#if CONFIG_VP8_ENCODER
Scott LaVarnwayfe2cc872014-08-20 07:56:19 -0700799typedef unsigned int (*vp8_sse_fn_t)(const unsigned char *src_ptr,
800 int source_stride, const unsigned char *ref_ptr, int ref_stride);
801
802typedef MseTest<vp8_sse_fn_t> VP8SseTest;
803typedef MseTest<vp8_variance_fn_t> VP8MseTest;
James Zern1711cf22013-02-22 16:23:36 -0800804typedef VarianceTest<vp8_variance_fn_t> VP8VarianceTest;
805
Scott LaVarnwayfe2cc872014-08-20 07:56:19 -0700806TEST_P(VP8SseTest, Ref_sse) { RefTest_sse(); }
807TEST_P(VP8SseTest, Max_sse) { MaxTest_sse(); }
808TEST_P(VP8MseTest, Ref_mse) { RefTest_mse(); }
809TEST_P(VP8MseTest, Max_mse) { MaxTest_mse(); }
James Zern1711cf22013-02-22 16:23:36 -0800810TEST_P(VP8VarianceTest, Zero) { ZeroTest(); }
Ronald S. Bultje8fb6c582013-06-20 09:34:25 -0700811TEST_P(VP8VarianceTest, Ref) { RefTest(); }
James Zern1711cf22013-02-22 16:23:36 -0800812TEST_P(VP8VarianceTest, OneQuarter) { OneQuarterTest(); }
813
Scott LaVarnwayfe2cc872014-08-20 07:56:19 -0700814const vp8_sse_fn_t get4x4sse_cs_c = vp8_get4x4sse_cs_c;
815INSTANTIATE_TEST_CASE_P(
816 C, VP8SseTest,
817 ::testing::Values(make_tuple(2, 2, get4x4sse_cs_c)));
818
819const vp8_variance_fn_t mse16x16_c = vp8_mse16x16_c;
820INSTANTIATE_TEST_CASE_P(
821 C, VP8MseTest,
822 ::testing::Values(make_tuple(4, 4, mse16x16_c)));
823
James Zern6e5e75f2014-05-08 14:32:32 -0700824const vp8_variance_fn_t variance4x4_c = vp8_variance4x4_c;
825const vp8_variance_fn_t variance8x8_c = vp8_variance8x8_c;
826const vp8_variance_fn_t variance8x16_c = vp8_variance8x16_c;
827const vp8_variance_fn_t variance16x8_c = vp8_variance16x8_c;
828const vp8_variance_fn_t variance16x16_c = vp8_variance16x16_c;
James Zern1711cf22013-02-22 16:23:36 -0800829INSTANTIATE_TEST_CASE_P(
830 C, VP8VarianceTest,
Peter de Rivaz48032bf2014-10-16 14:00:54 +0100831 ::testing::Values(make_tuple(2, 2, variance4x4_c, 0),
832 make_tuple(3, 3, variance8x8_c, 0),
833 make_tuple(3, 4, variance8x16_c, 0),
834 make_tuple(4, 3, variance16x8_c, 0),
835 make_tuple(4, 4, variance16x16_c, 0)));
James Zern1711cf22013-02-22 16:23:36 -0800836
James Zernd5e07a82014-02-25 23:11:49 -0800837#if HAVE_NEON
Scott LaVarnwayfe2cc872014-08-20 07:56:19 -0700838const vp8_sse_fn_t get4x4sse_cs_neon = vp8_get4x4sse_cs_neon;
839INSTANTIATE_TEST_CASE_P(
840 NEON, VP8SseTest,
841 ::testing::Values(make_tuple(2, 2, get4x4sse_cs_neon)));
842
843const vp8_variance_fn_t mse16x16_neon = vp8_mse16x16_neon;
844INSTANTIATE_TEST_CASE_P(
845 NEON, VP8MseTest,
846 ::testing::Values(make_tuple(4, 4, mse16x16_neon)));
847
James Zern6e5e75f2014-05-08 14:32:32 -0700848const vp8_variance_fn_t variance8x8_neon = vp8_variance8x8_neon;
849const vp8_variance_fn_t variance8x16_neon = vp8_variance8x16_neon;
850const vp8_variance_fn_t variance16x8_neon = vp8_variance16x8_neon;
851const vp8_variance_fn_t variance16x16_neon = vp8_variance16x16_neon;
James Zernd5e07a82014-02-25 23:11:49 -0800852INSTANTIATE_TEST_CASE_P(
853 NEON, VP8VarianceTest,
Peter de Rivaz48032bf2014-10-16 14:00:54 +0100854 ::testing::Values(make_tuple(3, 3, variance8x8_neon, 0),
855 make_tuple(3, 4, variance8x16_neon, 0),
856 make_tuple(4, 3, variance16x8_neon, 0),
857 make_tuple(4, 4, variance16x16_neon, 0)));
James Zernd5e07a82014-02-25 23:11:49 -0800858#endif
859
James Zern1711cf22013-02-22 16:23:36 -0800860#if HAVE_MMX
James Zern6e5e75f2014-05-08 14:32:32 -0700861const vp8_variance_fn_t variance4x4_mmx = vp8_variance4x4_mmx;
862const vp8_variance_fn_t variance8x8_mmx = vp8_variance8x8_mmx;
863const vp8_variance_fn_t variance8x16_mmx = vp8_variance8x16_mmx;
864const vp8_variance_fn_t variance16x8_mmx = vp8_variance16x8_mmx;
865const vp8_variance_fn_t variance16x16_mmx = vp8_variance16x16_mmx;
James Zern1711cf22013-02-22 16:23:36 -0800866INSTANTIATE_TEST_CASE_P(
867 MMX, VP8VarianceTest,
Peter de Rivaz48032bf2014-10-16 14:00:54 +0100868 ::testing::Values(make_tuple(2, 2, variance4x4_mmx, 0),
869 make_tuple(3, 3, variance8x8_mmx, 0),
870 make_tuple(3, 4, variance8x16_mmx, 0),
871 make_tuple(4, 3, variance16x8_mmx, 0),
872 make_tuple(4, 4, variance16x16_mmx, 0)));
James Zern1711cf22013-02-22 16:23:36 -0800873#endif
874
875#if HAVE_SSE2
James Zern6e5e75f2014-05-08 14:32:32 -0700876const vp8_variance_fn_t variance4x4_wmt = vp8_variance4x4_wmt;
877const vp8_variance_fn_t variance8x8_wmt = vp8_variance8x8_wmt;
878const vp8_variance_fn_t variance8x16_wmt = vp8_variance8x16_wmt;
879const vp8_variance_fn_t variance16x8_wmt = vp8_variance16x8_wmt;
880const vp8_variance_fn_t variance16x16_wmt = vp8_variance16x16_wmt;
James Zern1711cf22013-02-22 16:23:36 -0800881INSTANTIATE_TEST_CASE_P(
882 SSE2, VP8VarianceTest,
Peter de Rivaz48032bf2014-10-16 14:00:54 +0100883 ::testing::Values(make_tuple(2, 2, variance4x4_wmt, 0),
884 make_tuple(3, 3, variance8x8_wmt, 0),
885 make_tuple(3, 4, variance8x16_wmt, 0),
886 make_tuple(4, 3, variance16x8_wmt, 0),
887 make_tuple(4, 4, variance16x16_wmt, 0)));
James Zern1711cf22013-02-22 16:23:36 -0800888#endif
889#endif // CONFIG_VP8_ENCODER
890
891} // namespace vp8
892
893// -----------------------------------------------------------------------------
894// VP9 test cases.
895
896namespace vp9 {
897
898#if CONFIG_VP9_ENCODER
Dmitry Kovalev1f19ebb2014-09-06 00:10:25 -0700899TEST_P(SumOfSquaresTest, Const) { ConstTest(); }
900TEST_P(SumOfSquaresTest, Ref) { RefTest(); }
901
902INSTANTIATE_TEST_CASE_P(C, SumOfSquaresTest,
903 ::testing::Values(vp9_get_mb_ss_c));
904
James Zern1711cf22013-02-22 16:23:36 -0800905typedef VarianceTest<vp9_variance_fn_t> VP9VarianceTest;
Ronald S. Bultje8fb6c582013-06-20 09:34:25 -0700906typedef SubpelVarianceTest<vp9_subpixvariance_fn_t> VP9SubpelVarianceTest;
Ronald S. Bultje1e6a32f2013-06-20 15:59:48 -0700907typedef SubpelVarianceTest<vp9_subp_avg_variance_fn_t> VP9SubpelAvgVarianceTest;
James Zern1711cf22013-02-22 16:23:36 -0800908
909TEST_P(VP9VarianceTest, Zero) { ZeroTest(); }
Ronald S. Bultje8fb6c582013-06-20 09:34:25 -0700910TEST_P(VP9VarianceTest, Ref) { RefTest(); }
Peter de Rivaz48032bf2014-10-16 14:00:54 +0100911TEST_P(VP9VarianceTest, RefStride) { RefStrideTest(); }
Ronald S. Bultje8fb6c582013-06-20 09:34:25 -0700912TEST_P(VP9SubpelVarianceTest, Ref) { RefTest(); }
Peter de Rivaz48032bf2014-10-16 14:00:54 +0100913TEST_P(VP9SubpelVarianceTest, ExtremeRef) { ExtremeRefTest(); }
Ronald S. Bultje1e6a32f2013-06-20 15:59:48 -0700914TEST_P(VP9SubpelAvgVarianceTest, Ref) { RefTest(); }
James Zern1711cf22013-02-22 16:23:36 -0800915TEST_P(VP9VarianceTest, OneQuarter) { OneQuarterTest(); }
916
Peter de Rivaz48032bf2014-10-16 14:00:54 +0100917#if CONFIG_VP9_HIGHBITDEPTH
918typedef VarianceTest<vp9_variance_fn_t> VP9VarianceHighTest;
919typedef SubpelVarianceTest<vp9_subpixvariance_fn_t> VP9SubpelVarianceHighTest;
920typedef SubpelVarianceTest<vp9_subp_avg_variance_fn_t>
921 VP9SubpelAvgVarianceHighTest;
922
923TEST_P(VP9VarianceHighTest, Zero) { ZeroTest(); }
924TEST_P(VP9VarianceHighTest, Ref) { RefTest(); }
925TEST_P(VP9VarianceHighTest, RefStride) { RefStrideTest(); }
926TEST_P(VP9SubpelVarianceHighTest, Ref) { RefTest(); }
927TEST_P(VP9SubpelVarianceHighTest, ExtremeRef) { ExtremeRefTest(); }
928TEST_P(VP9SubpelAvgVarianceHighTest, Ref) { RefTest(); }
929TEST_P(VP9VarianceHighTest, OneQuarter) { OneQuarterTest(); }
930#endif // CONFIG_VP9_HIGHBITDEPTH
931
James Zern6e5e75f2014-05-08 14:32:32 -0700932const vp9_variance_fn_t variance4x4_c = vp9_variance4x4_c;
933const vp9_variance_fn_t variance4x8_c = vp9_variance4x8_c;
934const vp9_variance_fn_t variance8x4_c = vp9_variance8x4_c;
935const vp9_variance_fn_t variance8x8_c = vp9_variance8x8_c;
936const vp9_variance_fn_t variance8x16_c = vp9_variance8x16_c;
937const vp9_variance_fn_t variance16x8_c = vp9_variance16x8_c;
938const vp9_variance_fn_t variance16x16_c = vp9_variance16x16_c;
939const vp9_variance_fn_t variance16x32_c = vp9_variance16x32_c;
940const vp9_variance_fn_t variance32x16_c = vp9_variance32x16_c;
941const vp9_variance_fn_t variance32x32_c = vp9_variance32x32_c;
942const vp9_variance_fn_t variance32x64_c = vp9_variance32x64_c;
943const vp9_variance_fn_t variance64x32_c = vp9_variance64x32_c;
944const vp9_variance_fn_t variance64x64_c = vp9_variance64x64_c;
James Zern98473442012-11-06 16:58:11 -0800945INSTANTIATE_TEST_CASE_P(
946 C, VP9VarianceTest,
Peter de Rivaz48032bf2014-10-16 14:00:54 +0100947 ::testing::Values(make_tuple(2, 2, variance4x4_c, 0),
948 make_tuple(2, 3, variance4x8_c, 0),
949 make_tuple(3, 2, variance8x4_c, 0),
950 make_tuple(3, 3, variance8x8_c, 0),
951 make_tuple(3, 4, variance8x16_c, 0),
952 make_tuple(4, 3, variance16x8_c, 0),
953 make_tuple(4, 4, variance16x16_c, 0),
954 make_tuple(4, 5, variance16x32_c, 0),
955 make_tuple(5, 4, variance32x16_c, 0),
956 make_tuple(5, 5, variance32x32_c, 0),
957 make_tuple(5, 6, variance32x64_c, 0),
958 make_tuple(6, 5, variance64x32_c, 0),
959 make_tuple(6, 6, variance64x64_c, 0)));
960#if CONFIG_VP9_HIGHBITDEPTH
961const vp9_variance_fn_t highbd_10_variance4x4_c = vp9_highbd_10_variance4x4_c;
962const vp9_variance_fn_t highbd_10_variance4x8_c = vp9_highbd_10_variance4x8_c;
963const vp9_variance_fn_t highbd_10_variance8x4_c = vp9_highbd_10_variance8x4_c;
964const vp9_variance_fn_t highbd_10_variance8x8_c = vp9_highbd_10_variance8x8_c;
965const vp9_variance_fn_t highbd_10_variance8x16_c = vp9_highbd_10_variance8x16_c;
966const vp9_variance_fn_t highbd_10_variance16x8_c = vp9_highbd_10_variance16x8_c;
967const vp9_variance_fn_t highbd_10_variance16x16_c =
968 vp9_highbd_10_variance16x16_c;
969const vp9_variance_fn_t highbd_10_variance16x32_c =
970 vp9_highbd_10_variance16x32_c;
971const vp9_variance_fn_t highbd_10_variance32x16_c =
972 vp9_highbd_10_variance32x16_c;
973const vp9_variance_fn_t highbd_10_variance32x32_c =
974 vp9_highbd_10_variance32x32_c;
975const vp9_variance_fn_t highbd_10_variance32x64_c =
976 vp9_highbd_10_variance32x64_c;
977const vp9_variance_fn_t highbd_10_variance64x32_c =
978 vp9_highbd_10_variance64x32_c;
979const vp9_variance_fn_t highbd_10_variance64x64_c =
980 vp9_highbd_10_variance64x64_c;
981const vp9_variance_fn_t highbd_12_variance4x4_c = vp9_highbd_12_variance4x4_c;
982const vp9_variance_fn_t highbd_12_variance4x8_c = vp9_highbd_12_variance4x8_c;
983const vp9_variance_fn_t highbd_12_variance8x4_c = vp9_highbd_12_variance8x4_c;
984const vp9_variance_fn_t highbd_12_variance8x8_c = vp9_highbd_12_variance8x8_c;
985const vp9_variance_fn_t highbd_12_variance8x16_c = vp9_highbd_12_variance8x16_c;
986const vp9_variance_fn_t highbd_12_variance16x8_c = vp9_highbd_12_variance16x8_c;
987const vp9_variance_fn_t highbd_12_variance16x16_c =
988 vp9_highbd_12_variance16x16_c;
989const vp9_variance_fn_t highbd_12_variance16x32_c =
990 vp9_highbd_12_variance16x32_c;
991const vp9_variance_fn_t highbd_12_variance32x16_c =
992 vp9_highbd_12_variance32x16_c;
993const vp9_variance_fn_t highbd_12_variance32x32_c =
994 vp9_highbd_12_variance32x32_c;
995const vp9_variance_fn_t highbd_12_variance32x64_c =
996 vp9_highbd_12_variance32x64_c;
997const vp9_variance_fn_t highbd_12_variance64x32_c =
998 vp9_highbd_12_variance64x32_c;
999const vp9_variance_fn_t highbd_12_variance64x64_c =
1000 vp9_highbd_12_variance64x64_c;
1001const vp9_variance_fn_t highbd_variance4x4_c = vp9_highbd_variance4x4_c;
1002const vp9_variance_fn_t highbd_variance4x8_c = vp9_highbd_variance4x8_c;
1003const vp9_variance_fn_t highbd_variance8x4_c = vp9_highbd_variance8x4_c;
1004const vp9_variance_fn_t highbd_variance8x8_c = vp9_highbd_variance8x8_c;
1005const vp9_variance_fn_t highbd_variance8x16_c = vp9_highbd_variance8x16_c;
1006const vp9_variance_fn_t highbd_variance16x8_c = vp9_highbd_variance16x8_c;
1007const vp9_variance_fn_t highbd_variance16x16_c = vp9_highbd_variance16x16_c;
1008const vp9_variance_fn_t highbd_variance16x32_c = vp9_highbd_variance16x32_c;
1009const vp9_variance_fn_t highbd_variance32x16_c = vp9_highbd_variance32x16_c;
1010const vp9_variance_fn_t highbd_variance32x32_c = vp9_highbd_variance32x32_c;
1011const vp9_variance_fn_t highbd_variance32x64_c = vp9_highbd_variance32x64_c;
1012const vp9_variance_fn_t highbd_variance64x32_c = vp9_highbd_variance64x32_c;
1013const vp9_variance_fn_t highbd_variance64x64_c = vp9_highbd_variance64x64_c;
1014INSTANTIATE_TEST_CASE_P(
1015 C, VP9VarianceHighTest,
1016 ::testing::Values(make_tuple(2, 2, highbd_10_variance4x4_c, 10),
1017 make_tuple(2, 3, highbd_10_variance4x8_c, 10),
1018 make_tuple(3, 2, highbd_10_variance8x4_c, 10),
1019 make_tuple(3, 3, highbd_10_variance8x8_c, 10),
1020 make_tuple(3, 4, highbd_10_variance8x16_c, 10),
1021 make_tuple(4, 3, highbd_10_variance16x8_c, 10),
1022 make_tuple(4, 4, highbd_10_variance16x16_c, 10),
1023 make_tuple(4, 5, highbd_10_variance16x32_c, 10),
1024 make_tuple(5, 4, highbd_10_variance32x16_c, 10),
1025 make_tuple(5, 5, highbd_10_variance32x32_c, 10),
1026 make_tuple(5, 6, highbd_10_variance32x64_c, 10),
1027 make_tuple(6, 5, highbd_10_variance64x32_c, 10),
1028 make_tuple(6, 6, highbd_10_variance64x64_c, 10),
1029 make_tuple(2, 2, highbd_12_variance4x4_c, 12),
1030 make_tuple(2, 3, highbd_12_variance4x8_c, 12),
1031 make_tuple(3, 2, highbd_12_variance8x4_c, 12),
1032 make_tuple(3, 3, highbd_12_variance8x8_c, 12),
1033 make_tuple(3, 4, highbd_12_variance8x16_c, 12),
1034 make_tuple(4, 3, highbd_12_variance16x8_c, 12),
1035 make_tuple(4, 4, highbd_12_variance16x16_c, 12),
1036 make_tuple(4, 5, highbd_12_variance16x32_c, 12),
1037 make_tuple(5, 4, highbd_12_variance32x16_c, 12),
1038 make_tuple(5, 5, highbd_12_variance32x32_c, 12),
1039 make_tuple(5, 6, highbd_12_variance32x64_c, 12),
1040 make_tuple(6, 5, highbd_12_variance64x32_c, 12),
1041 make_tuple(6, 6, highbd_12_variance64x64_c, 12),
1042 make_tuple(2, 2, highbd_variance4x4_c, 8),
1043 make_tuple(2, 3, highbd_variance4x8_c, 8),
1044 make_tuple(3, 2, highbd_variance8x4_c, 8),
1045 make_tuple(3, 3, highbd_variance8x8_c, 8),
1046 make_tuple(3, 4, highbd_variance8x16_c, 8),
1047 make_tuple(4, 3, highbd_variance16x8_c, 8),
1048 make_tuple(4, 4, highbd_variance16x16_c, 8),
1049 make_tuple(4, 5, highbd_variance16x32_c, 8),
1050 make_tuple(5, 4, highbd_variance32x16_c, 8),
1051 make_tuple(5, 5, highbd_variance32x32_c, 8),
1052 make_tuple(5, 6, highbd_variance32x64_c, 8),
1053 make_tuple(6, 5, highbd_variance64x32_c, 8),
1054 make_tuple(6, 6, highbd_variance64x64_c, 8)));
1055#endif // CONFIG_VP9_HIGHBITDEPTH
James Zern6e5e75f2014-05-08 14:32:32 -07001056const vp9_subpixvariance_fn_t subpel_variance4x4_c =
1057 vp9_sub_pixel_variance4x4_c;
1058const vp9_subpixvariance_fn_t subpel_variance4x8_c =
1059 vp9_sub_pixel_variance4x8_c;
1060const vp9_subpixvariance_fn_t subpel_variance8x4_c =
1061 vp9_sub_pixel_variance8x4_c;
1062const vp9_subpixvariance_fn_t subpel_variance8x8_c =
1063 vp9_sub_pixel_variance8x8_c;
1064const vp9_subpixvariance_fn_t subpel_variance8x16_c =
1065 vp9_sub_pixel_variance8x16_c;
1066const vp9_subpixvariance_fn_t subpel_variance16x8_c =
1067 vp9_sub_pixel_variance16x8_c;
1068const vp9_subpixvariance_fn_t subpel_variance16x16_c =
1069 vp9_sub_pixel_variance16x16_c;
1070const vp9_subpixvariance_fn_t subpel_variance16x32_c =
1071 vp9_sub_pixel_variance16x32_c;
1072const vp9_subpixvariance_fn_t subpel_variance32x16_c =
1073 vp9_sub_pixel_variance32x16_c;
1074const vp9_subpixvariance_fn_t subpel_variance32x32_c =
1075 vp9_sub_pixel_variance32x32_c;
1076const vp9_subpixvariance_fn_t subpel_variance32x64_c =
1077 vp9_sub_pixel_variance32x64_c;
1078const vp9_subpixvariance_fn_t subpel_variance64x32_c =
1079 vp9_sub_pixel_variance64x32_c;
1080const vp9_subpixvariance_fn_t subpel_variance64x64_c =
1081 vp9_sub_pixel_variance64x64_c;
Ronald S. Bultje8fb6c582013-06-20 09:34:25 -07001082INSTANTIATE_TEST_CASE_P(
1083 C, VP9SubpelVarianceTest,
Peter de Rivaz48032bf2014-10-16 14:00:54 +01001084 ::testing::Values(make_tuple(2, 2, subpel_variance4x4_c, 0),
1085 make_tuple(2, 3, subpel_variance4x8_c, 0),
1086 make_tuple(3, 2, subpel_variance8x4_c, 0),
1087 make_tuple(3, 3, subpel_variance8x8_c, 0),
1088 make_tuple(3, 4, subpel_variance8x16_c, 0),
1089 make_tuple(4, 3, subpel_variance16x8_c, 0),
1090 make_tuple(4, 4, subpel_variance16x16_c, 0),
1091 make_tuple(4, 5, subpel_variance16x32_c, 0),
1092 make_tuple(5, 4, subpel_variance32x16_c, 0),
1093 make_tuple(5, 5, subpel_variance32x32_c, 0),
1094 make_tuple(5, 6, subpel_variance32x64_c, 0),
1095 make_tuple(6, 5, subpel_variance64x32_c, 0),
1096 make_tuple(6, 6, subpel_variance64x64_c, 0)));
James Zern6e5e75f2014-05-08 14:32:32 -07001097const vp9_subp_avg_variance_fn_t subpel_avg_variance4x4_c =
1098 vp9_sub_pixel_avg_variance4x4_c;
1099const vp9_subp_avg_variance_fn_t subpel_avg_variance4x8_c =
1100 vp9_sub_pixel_avg_variance4x8_c;
1101const vp9_subp_avg_variance_fn_t subpel_avg_variance8x4_c =
1102 vp9_sub_pixel_avg_variance8x4_c;
1103const vp9_subp_avg_variance_fn_t subpel_avg_variance8x8_c =
1104 vp9_sub_pixel_avg_variance8x8_c;
1105const vp9_subp_avg_variance_fn_t subpel_avg_variance8x16_c =
1106 vp9_sub_pixel_avg_variance8x16_c;
1107const vp9_subp_avg_variance_fn_t subpel_avg_variance16x8_c =
1108 vp9_sub_pixel_avg_variance16x8_c;
1109const vp9_subp_avg_variance_fn_t subpel_avg_variance16x16_c =
1110 vp9_sub_pixel_avg_variance16x16_c;
1111const vp9_subp_avg_variance_fn_t subpel_avg_variance16x32_c =
1112 vp9_sub_pixel_avg_variance16x32_c;
1113const vp9_subp_avg_variance_fn_t subpel_avg_variance32x16_c =
1114 vp9_sub_pixel_avg_variance32x16_c;
1115const vp9_subp_avg_variance_fn_t subpel_avg_variance32x32_c =
1116 vp9_sub_pixel_avg_variance32x32_c;
1117const vp9_subp_avg_variance_fn_t subpel_avg_variance32x64_c =
1118 vp9_sub_pixel_avg_variance32x64_c;
1119const vp9_subp_avg_variance_fn_t subpel_avg_variance64x32_c =
1120 vp9_sub_pixel_avg_variance64x32_c;
1121const vp9_subp_avg_variance_fn_t subpel_avg_variance64x64_c =
1122 vp9_sub_pixel_avg_variance64x64_c;
Ronald S. Bultje1e6a32f2013-06-20 15:59:48 -07001123INSTANTIATE_TEST_CASE_P(
1124 C, VP9SubpelAvgVarianceTest,
Peter de Rivaz48032bf2014-10-16 14:00:54 +01001125 ::testing::Values(make_tuple(2, 2, subpel_avg_variance4x4_c, 0),
1126 make_tuple(2, 3, subpel_avg_variance4x8_c, 0),
1127 make_tuple(3, 2, subpel_avg_variance8x4_c, 0),
1128 make_tuple(3, 3, subpel_avg_variance8x8_c, 0),
1129 make_tuple(3, 4, subpel_avg_variance8x16_c, 0),
1130 make_tuple(4, 3, subpel_avg_variance16x8_c, 0),
1131 make_tuple(4, 4, subpel_avg_variance16x16_c, 0),
1132 make_tuple(4, 5, subpel_avg_variance16x32_c, 0),
1133 make_tuple(5, 4, subpel_avg_variance32x16_c, 0),
1134 make_tuple(5, 5, subpel_avg_variance32x32_c, 0),
1135 make_tuple(5, 6, subpel_avg_variance32x64_c, 0),
1136 make_tuple(6, 5, subpel_avg_variance64x32_c, 0),
1137 make_tuple(6, 6, subpel_avg_variance64x64_c, 0)));
1138#if CONFIG_VP9_HIGHBITDEPTH
1139const vp9_subpixvariance_fn_t highbd_10_subpel_variance4x4_c =
1140 vp9_highbd_10_sub_pixel_variance4x4_c;
1141const vp9_subpixvariance_fn_t highbd_10_subpel_variance4x8_c =
1142 vp9_highbd_10_sub_pixel_variance4x8_c;
1143const vp9_subpixvariance_fn_t highbd_10_subpel_variance8x4_c =
1144 vp9_highbd_10_sub_pixel_variance8x4_c;
1145const vp9_subpixvariance_fn_t highbd_10_subpel_variance8x8_c =
1146 vp9_highbd_10_sub_pixel_variance8x8_c;
1147const vp9_subpixvariance_fn_t highbd_10_subpel_variance8x16_c =
1148 vp9_highbd_10_sub_pixel_variance8x16_c;
1149const vp9_subpixvariance_fn_t highbd_10_subpel_variance16x8_c =
1150 vp9_highbd_10_sub_pixel_variance16x8_c;
1151const vp9_subpixvariance_fn_t highbd_10_subpel_variance16x16_c =
1152 vp9_highbd_10_sub_pixel_variance16x16_c;
1153const vp9_subpixvariance_fn_t highbd_10_subpel_variance16x32_c =
1154 vp9_highbd_10_sub_pixel_variance16x32_c;
1155const vp9_subpixvariance_fn_t highbd_10_subpel_variance32x16_c =
1156 vp9_highbd_10_sub_pixel_variance32x16_c;
1157const vp9_subpixvariance_fn_t highbd_10_subpel_variance32x32_c =
1158 vp9_highbd_10_sub_pixel_variance32x32_c;
1159const vp9_subpixvariance_fn_t highbd_10_subpel_variance32x64_c =
1160 vp9_highbd_10_sub_pixel_variance32x64_c;
1161const vp9_subpixvariance_fn_t highbd_10_subpel_variance64x32_c =
1162 vp9_highbd_10_sub_pixel_variance64x32_c;
1163const vp9_subpixvariance_fn_t highbd_10_subpel_variance64x64_c =
1164 vp9_highbd_10_sub_pixel_variance64x64_c;
1165const vp9_subpixvariance_fn_t highbd_12_subpel_variance4x4_c =
1166 vp9_highbd_12_sub_pixel_variance4x4_c;
1167const vp9_subpixvariance_fn_t highbd_12_subpel_variance4x8_c =
1168 vp9_highbd_12_sub_pixel_variance4x8_c;
1169const vp9_subpixvariance_fn_t highbd_12_subpel_variance8x4_c =
1170 vp9_highbd_12_sub_pixel_variance8x4_c;
1171const vp9_subpixvariance_fn_t highbd_12_subpel_variance8x8_c =
1172 vp9_highbd_12_sub_pixel_variance8x8_c;
1173const vp9_subpixvariance_fn_t highbd_12_subpel_variance8x16_c =
1174 vp9_highbd_12_sub_pixel_variance8x16_c;
1175const vp9_subpixvariance_fn_t highbd_12_subpel_variance16x8_c =
1176 vp9_highbd_12_sub_pixel_variance16x8_c;
1177const vp9_subpixvariance_fn_t highbd_12_subpel_variance16x16_c =
1178 vp9_highbd_12_sub_pixel_variance16x16_c;
1179const vp9_subpixvariance_fn_t highbd_12_subpel_variance16x32_c =
1180 vp9_highbd_12_sub_pixel_variance16x32_c;
1181const vp9_subpixvariance_fn_t highbd_12_subpel_variance32x16_c =
1182 vp9_highbd_12_sub_pixel_variance32x16_c;
1183const vp9_subpixvariance_fn_t highbd_12_subpel_variance32x32_c =
1184 vp9_highbd_12_sub_pixel_variance32x32_c;
1185const vp9_subpixvariance_fn_t highbd_12_subpel_variance32x64_c =
1186 vp9_highbd_12_sub_pixel_variance32x64_c;
1187const vp9_subpixvariance_fn_t highbd_12_subpel_variance64x32_c =
1188 vp9_highbd_12_sub_pixel_variance64x32_c;
1189const vp9_subpixvariance_fn_t highbd_12_subpel_variance64x64_c =
1190 vp9_highbd_12_sub_pixel_variance64x64_c;
1191const vp9_subpixvariance_fn_t highbd_subpel_variance4x4_c =
1192 vp9_highbd_sub_pixel_variance4x4_c;
1193const vp9_subpixvariance_fn_t highbd_subpel_variance4x8_c =
1194 vp9_highbd_sub_pixel_variance4x8_c;
1195const vp9_subpixvariance_fn_t highbd_subpel_variance8x4_c =
1196 vp9_highbd_sub_pixel_variance8x4_c;
1197const vp9_subpixvariance_fn_t highbd_subpel_variance8x8_c =
1198 vp9_highbd_sub_pixel_variance8x8_c;
1199const vp9_subpixvariance_fn_t highbd_subpel_variance8x16_c =
1200 vp9_highbd_sub_pixel_variance8x16_c;
1201const vp9_subpixvariance_fn_t highbd_subpel_variance16x8_c =
1202 vp9_highbd_sub_pixel_variance16x8_c;
1203const vp9_subpixvariance_fn_t highbd_subpel_variance16x16_c =
1204 vp9_highbd_sub_pixel_variance16x16_c;
1205const vp9_subpixvariance_fn_t highbd_subpel_variance16x32_c =
1206 vp9_highbd_sub_pixel_variance16x32_c;
1207const vp9_subpixvariance_fn_t highbd_subpel_variance32x16_c =
1208 vp9_highbd_sub_pixel_variance32x16_c;
1209const vp9_subpixvariance_fn_t highbd_subpel_variance32x32_c =
1210 vp9_highbd_sub_pixel_variance32x32_c;
1211const vp9_subpixvariance_fn_t highbd_subpel_variance32x64_c =
1212 vp9_highbd_sub_pixel_variance32x64_c;
1213const vp9_subpixvariance_fn_t highbd_subpel_variance64x32_c =
1214 vp9_highbd_sub_pixel_variance64x32_c;
1215const vp9_subpixvariance_fn_t highbd_subpel_variance64x64_c =
1216 vp9_highbd_sub_pixel_variance64x64_c;
1217INSTANTIATE_TEST_CASE_P(
1218 C, VP9SubpelVarianceHighTest,
1219 ::testing::Values(make_tuple(2, 2, highbd_10_subpel_variance4x4_c, 10),
1220 make_tuple(2, 3, highbd_10_subpel_variance4x8_c, 10),
1221 make_tuple(3, 2, highbd_10_subpel_variance8x4_c, 10),
1222 make_tuple(3, 3, highbd_10_subpel_variance8x8_c, 10),
1223 make_tuple(3, 4, highbd_10_subpel_variance8x16_c, 10),
1224 make_tuple(4, 3, highbd_10_subpel_variance16x8_c, 10),
1225 make_tuple(4, 4, highbd_10_subpel_variance16x16_c, 10),
1226 make_tuple(4, 5, highbd_10_subpel_variance16x32_c, 10),
1227 make_tuple(5, 4, highbd_10_subpel_variance32x16_c, 10),
1228 make_tuple(5, 5, highbd_10_subpel_variance32x32_c, 10),
1229 make_tuple(5, 6, highbd_10_subpel_variance32x64_c, 10),
1230 make_tuple(6, 5, highbd_10_subpel_variance64x32_c, 10),
1231 make_tuple(6, 6, highbd_10_subpel_variance64x64_c, 10),
1232 make_tuple(2, 2, highbd_12_subpel_variance4x4_c, 12),
1233 make_tuple(2, 3, highbd_12_subpel_variance4x8_c, 12),
1234 make_tuple(3, 2, highbd_12_subpel_variance8x4_c, 12),
1235 make_tuple(3, 3, highbd_12_subpel_variance8x8_c, 12),
1236 make_tuple(3, 4, highbd_12_subpel_variance8x16_c, 12),
1237 make_tuple(4, 3, highbd_12_subpel_variance16x8_c, 12),
1238 make_tuple(4, 4, highbd_12_subpel_variance16x16_c, 12),
1239 make_tuple(4, 5, highbd_12_subpel_variance16x32_c, 12),
1240 make_tuple(5, 4, highbd_12_subpel_variance32x16_c, 12),
1241 make_tuple(5, 5, highbd_12_subpel_variance32x32_c, 12),
1242 make_tuple(5, 6, highbd_12_subpel_variance32x64_c, 12),
1243 make_tuple(6, 5, highbd_12_subpel_variance64x32_c, 12),
1244 make_tuple(6, 6, highbd_12_subpel_variance64x64_c, 12),
1245 make_tuple(2, 2, highbd_subpel_variance4x4_c, 8),
1246 make_tuple(2, 3, highbd_subpel_variance4x8_c, 8),
1247 make_tuple(3, 2, highbd_subpel_variance8x4_c, 8),
1248 make_tuple(3, 3, highbd_subpel_variance8x8_c, 8),
1249 make_tuple(3, 4, highbd_subpel_variance8x16_c, 8),
1250 make_tuple(4, 3, highbd_subpel_variance16x8_c, 8),
1251 make_tuple(4, 4, highbd_subpel_variance16x16_c, 8),
1252 make_tuple(4, 5, highbd_subpel_variance16x32_c, 8),
1253 make_tuple(5, 4, highbd_subpel_variance32x16_c, 8),
1254 make_tuple(5, 5, highbd_subpel_variance32x32_c, 8),
1255 make_tuple(5, 6, highbd_subpel_variance32x64_c, 8),
1256 make_tuple(6, 5, highbd_subpel_variance64x32_c, 8),
1257 make_tuple(6, 6, highbd_subpel_variance64x64_c, 8)));
1258const vp9_subp_avg_variance_fn_t highbd_10_subpel_avg_variance4x4_c =
1259 vp9_highbd_10_sub_pixel_avg_variance4x4_c;
1260const vp9_subp_avg_variance_fn_t highbd_10_subpel_avg_variance4x8_c =
1261 vp9_highbd_10_sub_pixel_avg_variance4x8_c;
1262const vp9_subp_avg_variance_fn_t highbd_10_subpel_avg_variance8x4_c =
1263 vp9_highbd_10_sub_pixel_avg_variance8x4_c;
1264const vp9_subp_avg_variance_fn_t highbd_10_subpel_avg_variance8x8_c =
1265 vp9_highbd_10_sub_pixel_avg_variance8x8_c;
1266const vp9_subp_avg_variance_fn_t highbd_10_subpel_avg_variance8x16_c =
1267 vp9_highbd_10_sub_pixel_avg_variance8x16_c;
1268const vp9_subp_avg_variance_fn_t highbd_10_subpel_avg_variance16x8_c =
1269 vp9_highbd_10_sub_pixel_avg_variance16x8_c;
1270const vp9_subp_avg_variance_fn_t highbd_10_subpel_avg_variance16x16_c =
1271 vp9_highbd_10_sub_pixel_avg_variance16x16_c;
1272const vp9_subp_avg_variance_fn_t highbd_10_subpel_avg_variance16x32_c =
1273 vp9_highbd_10_sub_pixel_avg_variance16x32_c;
1274const vp9_subp_avg_variance_fn_t highbd_10_subpel_avg_variance32x16_c =
1275 vp9_highbd_10_sub_pixel_avg_variance32x16_c;
1276const vp9_subp_avg_variance_fn_t highbd_10_subpel_avg_variance32x32_c =
1277 vp9_highbd_10_sub_pixel_avg_variance32x32_c;
1278const vp9_subp_avg_variance_fn_t highbd_10_subpel_avg_variance32x64_c =
1279 vp9_highbd_10_sub_pixel_avg_variance32x64_c;
1280const vp9_subp_avg_variance_fn_t highbd_10_subpel_avg_variance64x32_c =
1281 vp9_highbd_10_sub_pixel_avg_variance64x32_c;
1282const vp9_subp_avg_variance_fn_t highbd_10_subpel_avg_variance64x64_c =
1283 vp9_highbd_10_sub_pixel_avg_variance64x64_c;
1284const vp9_subp_avg_variance_fn_t highbd_12_subpel_avg_variance4x4_c =
1285 vp9_highbd_12_sub_pixel_avg_variance4x4_c;
1286const vp9_subp_avg_variance_fn_t highbd_12_subpel_avg_variance4x8_c =
1287 vp9_highbd_12_sub_pixel_avg_variance4x8_c;
1288const vp9_subp_avg_variance_fn_t highbd_12_subpel_avg_variance8x4_c =
1289 vp9_highbd_12_sub_pixel_avg_variance8x4_c;
1290const vp9_subp_avg_variance_fn_t highbd_12_subpel_avg_variance8x8_c =
1291 vp9_highbd_12_sub_pixel_avg_variance8x8_c;
1292const vp9_subp_avg_variance_fn_t highbd_12_subpel_avg_variance8x16_c =
1293 vp9_highbd_12_sub_pixel_avg_variance8x16_c;
1294const vp9_subp_avg_variance_fn_t highbd_12_subpel_avg_variance16x8_c =
1295 vp9_highbd_12_sub_pixel_avg_variance16x8_c;
1296const vp9_subp_avg_variance_fn_t highbd_12_subpel_avg_variance16x16_c =
1297 vp9_highbd_12_sub_pixel_avg_variance16x16_c;
1298const vp9_subp_avg_variance_fn_t highbd_12_subpel_avg_variance16x32_c =
1299 vp9_highbd_12_sub_pixel_avg_variance16x32_c;
1300const vp9_subp_avg_variance_fn_t highbd_12_subpel_avg_variance32x16_c =
1301 vp9_highbd_12_sub_pixel_avg_variance32x16_c;
1302const vp9_subp_avg_variance_fn_t highbd_12_subpel_avg_variance32x32_c =
1303 vp9_highbd_12_sub_pixel_avg_variance32x32_c;
1304const vp9_subp_avg_variance_fn_t highbd_12_subpel_avg_variance32x64_c =
1305 vp9_highbd_12_sub_pixel_avg_variance32x64_c;
1306const vp9_subp_avg_variance_fn_t highbd_12_subpel_avg_variance64x32_c =
1307 vp9_highbd_12_sub_pixel_avg_variance64x32_c;
1308const vp9_subp_avg_variance_fn_t highbd_12_subpel_avg_variance64x64_c =
1309 vp9_highbd_12_sub_pixel_avg_variance64x64_c;
1310const vp9_subp_avg_variance_fn_t highbd_subpel_avg_variance4x4_c =
1311 vp9_highbd_sub_pixel_avg_variance4x4_c;
1312const vp9_subp_avg_variance_fn_t highbd_subpel_avg_variance4x8_c =
1313 vp9_highbd_sub_pixel_avg_variance4x8_c;
1314const vp9_subp_avg_variance_fn_t highbd_subpel_avg_variance8x4_c =
1315 vp9_highbd_sub_pixel_avg_variance8x4_c;
1316const vp9_subp_avg_variance_fn_t highbd_subpel_avg_variance8x8_c =
1317 vp9_highbd_sub_pixel_avg_variance8x8_c;
1318const vp9_subp_avg_variance_fn_t highbd_subpel_avg_variance8x16_c =
1319 vp9_highbd_sub_pixel_avg_variance8x16_c;
1320const vp9_subp_avg_variance_fn_t highbd_subpel_avg_variance16x8_c =
1321 vp9_highbd_sub_pixel_avg_variance16x8_c;
1322const vp9_subp_avg_variance_fn_t highbd_subpel_avg_variance16x16_c =
1323 vp9_highbd_sub_pixel_avg_variance16x16_c;
1324const vp9_subp_avg_variance_fn_t highbd_subpel_avg_variance16x32_c =
1325 vp9_highbd_sub_pixel_avg_variance16x32_c;
1326const vp9_subp_avg_variance_fn_t highbd_subpel_avg_variance32x16_c =
1327 vp9_highbd_sub_pixel_avg_variance32x16_c;
1328const vp9_subp_avg_variance_fn_t highbd_subpel_avg_variance32x32_c =
1329 vp9_highbd_sub_pixel_avg_variance32x32_c;
1330const vp9_subp_avg_variance_fn_t highbd_subpel_avg_variance32x64_c =
1331 vp9_highbd_sub_pixel_avg_variance32x64_c;
1332const vp9_subp_avg_variance_fn_t highbd_subpel_avg_variance64x32_c =
1333 vp9_highbd_sub_pixel_avg_variance64x32_c;
1334const vp9_subp_avg_variance_fn_t highbd_subpel_avg_variance64x64_c =
1335 vp9_highbd_sub_pixel_avg_variance64x64_c;
1336INSTANTIATE_TEST_CASE_P(
1337 C, VP9SubpelAvgVarianceHighTest,
1338 ::testing::Values(
1339 make_tuple(2, 2, highbd_10_subpel_avg_variance4x4_c, 10),
1340 make_tuple(2, 3, highbd_10_subpel_avg_variance4x8_c, 10),
1341 make_tuple(3, 2, highbd_10_subpel_avg_variance8x4_c, 10),
1342 make_tuple(3, 3, highbd_10_subpel_avg_variance8x8_c, 10),
1343 make_tuple(3, 4, highbd_10_subpel_avg_variance8x16_c, 10),
1344 make_tuple(4, 3, highbd_10_subpel_avg_variance16x8_c, 10),
1345 make_tuple(4, 4, highbd_10_subpel_avg_variance16x16_c, 10),
1346 make_tuple(4, 5, highbd_10_subpel_avg_variance16x32_c, 10),
1347 make_tuple(5, 4, highbd_10_subpel_avg_variance32x16_c, 10),
1348 make_tuple(5, 5, highbd_10_subpel_avg_variance32x32_c, 10),
1349 make_tuple(5, 6, highbd_10_subpel_avg_variance32x64_c, 10),
1350 make_tuple(6, 5, highbd_10_subpel_avg_variance64x32_c, 10),
1351 make_tuple(6, 6, highbd_10_subpel_avg_variance64x64_c, 10),
1352 make_tuple(2, 2, highbd_12_subpel_avg_variance4x4_c, 12),
1353 make_tuple(2, 3, highbd_12_subpel_avg_variance4x8_c, 12),
1354 make_tuple(3, 2, highbd_12_subpel_avg_variance8x4_c, 12),
1355 make_tuple(3, 3, highbd_12_subpel_avg_variance8x8_c, 12),
1356 make_tuple(3, 4, highbd_12_subpel_avg_variance8x16_c, 12),
1357 make_tuple(4, 3, highbd_12_subpel_avg_variance16x8_c, 12),
1358 make_tuple(4, 4, highbd_12_subpel_avg_variance16x16_c, 12),
1359 make_tuple(4, 5, highbd_12_subpel_avg_variance16x32_c, 12),
1360 make_tuple(5, 4, highbd_12_subpel_avg_variance32x16_c, 12),
1361 make_tuple(5, 5, highbd_12_subpel_avg_variance32x32_c, 12),
1362 make_tuple(5, 6, highbd_12_subpel_avg_variance32x64_c, 12),
1363 make_tuple(6, 5, highbd_12_subpel_avg_variance64x32_c, 12),
1364 make_tuple(6, 6, highbd_12_subpel_avg_variance64x64_c, 12),
1365 make_tuple(2, 2, highbd_subpel_avg_variance4x4_c, 8),
1366 make_tuple(2, 3, highbd_subpel_avg_variance4x8_c, 8),
1367 make_tuple(3, 2, highbd_subpel_avg_variance8x4_c, 8),
1368 make_tuple(3, 3, highbd_subpel_avg_variance8x8_c, 8),
1369 make_tuple(3, 4, highbd_subpel_avg_variance8x16_c, 8),
1370 make_tuple(4, 3, highbd_subpel_avg_variance16x8_c, 8),
1371 make_tuple(4, 4, highbd_subpel_avg_variance16x16_c, 8),
1372 make_tuple(4, 5, highbd_subpel_avg_variance16x32_c, 8),
1373 make_tuple(5, 4, highbd_subpel_avg_variance32x16_c, 8),
1374 make_tuple(5, 5, highbd_subpel_avg_variance32x32_c, 8),
1375 make_tuple(5, 6, highbd_subpel_avg_variance32x64_c, 8),
1376 make_tuple(6, 5, highbd_subpel_avg_variance64x32_c, 8),
1377 make_tuple(6, 6, highbd_subpel_avg_variance64x64_c, 8)));
1378#endif // CONFIG_VP9_HIGHBITDEPTH
Ronald S. Bultje1e6a32f2013-06-20 15:59:48 -07001379
James Zern98473442012-11-06 16:58:11 -08001380#if HAVE_SSE2
Jim Bankoski5b307882013-08-06 08:25:10 -07001381#if CONFIG_USE_X86INC
Dmitry Kovalev1f19ebb2014-09-06 00:10:25 -07001382INSTANTIATE_TEST_CASE_P(SSE2, SumOfSquaresTest,
1383 ::testing::Values(vp9_get_mb_ss_sse2));
1384
James Zern6e5e75f2014-05-08 14:32:32 -07001385const vp9_variance_fn_t variance4x4_sse2 = vp9_variance4x4_sse2;
1386const vp9_variance_fn_t variance4x8_sse2 = vp9_variance4x8_sse2;
1387const vp9_variance_fn_t variance8x4_sse2 = vp9_variance8x4_sse2;
1388const vp9_variance_fn_t variance8x8_sse2 = vp9_variance8x8_sse2;
1389const vp9_variance_fn_t variance8x16_sse2 = vp9_variance8x16_sse2;
1390const vp9_variance_fn_t variance16x8_sse2 = vp9_variance16x8_sse2;
1391const vp9_variance_fn_t variance16x16_sse2 = vp9_variance16x16_sse2;
1392const vp9_variance_fn_t variance16x32_sse2 = vp9_variance16x32_sse2;
1393const vp9_variance_fn_t variance32x16_sse2 = vp9_variance32x16_sse2;
1394const vp9_variance_fn_t variance32x32_sse2 = vp9_variance32x32_sse2;
1395const vp9_variance_fn_t variance32x64_sse2 = vp9_variance32x64_sse2;
1396const vp9_variance_fn_t variance64x32_sse2 = vp9_variance64x32_sse2;
1397const vp9_variance_fn_t variance64x64_sse2 = vp9_variance64x64_sse2;
James Zern98473442012-11-06 16:58:11 -08001398INSTANTIATE_TEST_CASE_P(
1399 SSE2, VP9VarianceTest,
Peter de Rivaz48032bf2014-10-16 14:00:54 +01001400 ::testing::Values(make_tuple(2, 2, variance4x4_sse2, 0),
1401 make_tuple(2, 3, variance4x8_sse2, 0),
1402 make_tuple(3, 2, variance8x4_sse2, 0),
1403 make_tuple(3, 3, variance8x8_sse2, 0),
1404 make_tuple(3, 4, variance8x16_sse2, 0),
1405 make_tuple(4, 3, variance16x8_sse2, 0),
1406 make_tuple(4, 4, variance16x16_sse2, 0),
1407 make_tuple(4, 5, variance16x32_sse2, 0),
1408 make_tuple(5, 4, variance32x16_sse2, 0),
1409 make_tuple(5, 5, variance32x32_sse2, 0),
1410 make_tuple(5, 6, variance32x64_sse2, 0),
1411 make_tuple(6, 5, variance64x32_sse2, 0),
1412 make_tuple(6, 6, variance64x64_sse2, 0)));
James Zern6e5e75f2014-05-08 14:32:32 -07001413const vp9_subpixvariance_fn_t subpel_variance4x4_sse =
1414 vp9_sub_pixel_variance4x4_sse;
1415const vp9_subpixvariance_fn_t subpel_variance4x8_sse =
1416 vp9_sub_pixel_variance4x8_sse;
1417const vp9_subpixvariance_fn_t subpel_variance8x4_sse2 =
1418 vp9_sub_pixel_variance8x4_sse2;
1419const vp9_subpixvariance_fn_t subpel_variance8x8_sse2 =
1420 vp9_sub_pixel_variance8x8_sse2;
1421const vp9_subpixvariance_fn_t subpel_variance8x16_sse2 =
1422 vp9_sub_pixel_variance8x16_sse2;
1423const vp9_subpixvariance_fn_t subpel_variance16x8_sse2 =
1424 vp9_sub_pixel_variance16x8_sse2;
1425const vp9_subpixvariance_fn_t subpel_variance16x16_sse2 =
1426 vp9_sub_pixel_variance16x16_sse2;
1427const vp9_subpixvariance_fn_t subpel_variance16x32_sse2 =
1428 vp9_sub_pixel_variance16x32_sse2;
1429const vp9_subpixvariance_fn_t subpel_variance32x16_sse2 =
1430 vp9_sub_pixel_variance32x16_sse2;
1431const vp9_subpixvariance_fn_t subpel_variance32x32_sse2 =
1432 vp9_sub_pixel_variance32x32_sse2;
1433const vp9_subpixvariance_fn_t subpel_variance32x64_sse2 =
1434 vp9_sub_pixel_variance32x64_sse2;
1435const vp9_subpixvariance_fn_t subpel_variance64x32_sse2 =
1436 vp9_sub_pixel_variance64x32_sse2;
1437const vp9_subpixvariance_fn_t subpel_variance64x64_sse2 =
1438 vp9_sub_pixel_variance64x64_sse2;
Ronald S. Bultje8fb6c582013-06-20 09:34:25 -07001439INSTANTIATE_TEST_CASE_P(
1440 SSE2, VP9SubpelVarianceTest,
Peter de Rivaz48032bf2014-10-16 14:00:54 +01001441 ::testing::Values(make_tuple(2, 2, subpel_variance4x4_sse, 0),
1442 make_tuple(2, 3, subpel_variance4x8_sse, 0),
1443 make_tuple(3, 2, subpel_variance8x4_sse2, 0),
1444 make_tuple(3, 3, subpel_variance8x8_sse2, 0),
1445 make_tuple(3, 4, subpel_variance8x16_sse2, 0),
1446 make_tuple(4, 3, subpel_variance16x8_sse2, 0),
1447 make_tuple(4, 4, subpel_variance16x16_sse2, 0),
1448 make_tuple(4, 5, subpel_variance16x32_sse2, 0),
1449 make_tuple(5, 4, subpel_variance32x16_sse2, 0),
1450 make_tuple(5, 5, subpel_variance32x32_sse2, 0),
1451 make_tuple(5, 6, subpel_variance32x64_sse2, 0),
1452 make_tuple(6, 5, subpel_variance64x32_sse2, 0),
1453 make_tuple(6, 6, subpel_variance64x64_sse2, 0)));
James Zern6e5e75f2014-05-08 14:32:32 -07001454const vp9_subp_avg_variance_fn_t subpel_avg_variance4x4_sse =
1455 vp9_sub_pixel_avg_variance4x4_sse;
1456const vp9_subp_avg_variance_fn_t subpel_avg_variance4x8_sse =
1457 vp9_sub_pixel_avg_variance4x8_sse;
1458const vp9_subp_avg_variance_fn_t subpel_avg_variance8x4_sse2 =
1459 vp9_sub_pixel_avg_variance8x4_sse2;
1460const vp9_subp_avg_variance_fn_t subpel_avg_variance8x8_sse2 =
1461 vp9_sub_pixel_avg_variance8x8_sse2;
1462const vp9_subp_avg_variance_fn_t subpel_avg_variance8x16_sse2 =
1463 vp9_sub_pixel_avg_variance8x16_sse2;
1464const vp9_subp_avg_variance_fn_t subpel_avg_variance16x8_sse2 =
1465 vp9_sub_pixel_avg_variance16x8_sse2;
1466const vp9_subp_avg_variance_fn_t subpel_avg_variance16x16_sse2 =
1467 vp9_sub_pixel_avg_variance16x16_sse2;
1468const vp9_subp_avg_variance_fn_t subpel_avg_variance16x32_sse2 =
1469 vp9_sub_pixel_avg_variance16x32_sse2;
1470const vp9_subp_avg_variance_fn_t subpel_avg_variance32x16_sse2 =
1471 vp9_sub_pixel_avg_variance32x16_sse2;
1472const vp9_subp_avg_variance_fn_t subpel_avg_variance32x32_sse2 =
1473 vp9_sub_pixel_avg_variance32x32_sse2;
1474const vp9_subp_avg_variance_fn_t subpel_avg_variance32x64_sse2 =
1475 vp9_sub_pixel_avg_variance32x64_sse2;
1476const vp9_subp_avg_variance_fn_t subpel_avg_variance64x32_sse2 =
1477 vp9_sub_pixel_avg_variance64x32_sse2;
1478const vp9_subp_avg_variance_fn_t subpel_avg_variance64x64_sse2 =
1479 vp9_sub_pixel_avg_variance64x64_sse2;
Ronald S. Bultje1e6a32f2013-06-20 15:59:48 -07001480INSTANTIATE_TEST_CASE_P(
1481 SSE2, VP9SubpelAvgVarianceTest,
Peter de Rivaz48032bf2014-10-16 14:00:54 +01001482 ::testing::Values(make_tuple(2, 2, subpel_avg_variance4x4_sse, 0),
1483 make_tuple(2, 3, subpel_avg_variance4x8_sse, 0),
1484 make_tuple(3, 2, subpel_avg_variance8x4_sse2, 0),
1485 make_tuple(3, 3, subpel_avg_variance8x8_sse2, 0),
1486 make_tuple(3, 4, subpel_avg_variance8x16_sse2, 0),
1487 make_tuple(4, 3, subpel_avg_variance16x8_sse2, 0),
1488 make_tuple(4, 4, subpel_avg_variance16x16_sse2, 0),
1489 make_tuple(4, 5, subpel_avg_variance16x32_sse2, 0),
1490 make_tuple(5, 4, subpel_avg_variance32x16_sse2, 0),
1491 make_tuple(5, 5, subpel_avg_variance32x32_sse2, 0),
1492 make_tuple(5, 6, subpel_avg_variance32x64_sse2, 0),
1493 make_tuple(6, 5, subpel_avg_variance64x32_sse2, 0),
1494 make_tuple(6, 6, subpel_avg_variance64x64_sse2, 0)));
1495#if CONFIG_VP9_HIGHBITDEPTH
1496const vp9_variance_fn_t highbd_variance8x8_sse2 = vp9_highbd_variance8x8_sse2;
1497const vp9_variance_fn_t highbd_10_variance8x8_sse2 =
1498 vp9_highbd_10_variance8x8_sse2;
1499const vp9_variance_fn_t highbd_12_variance8x8_sse2 =
1500 vp9_highbd_12_variance8x8_sse2;
1501const vp9_variance_fn_t highbd_variance8x16_sse2 = vp9_highbd_variance8x16_sse2;
1502const vp9_variance_fn_t highbd_10_variance8x16_sse2 =
1503 vp9_highbd_10_variance8x16_sse2;
1504const vp9_variance_fn_t highbd_12_variance8x16_sse2 =
1505 vp9_highbd_12_variance8x16_sse2;
1506const vp9_variance_fn_t highbd_variance16x8_sse2 =
1507 vp9_highbd_variance16x8_sse2;
1508const vp9_variance_fn_t highbd_10_variance16x8_sse2 =
1509 vp9_highbd_10_variance16x8_sse2;
1510const vp9_variance_fn_t highbd_12_variance16x8_sse2 =
1511 vp9_highbd_12_variance16x8_sse2;
1512const vp9_variance_fn_t highbd_variance16x16_sse2 =
1513 vp9_highbd_variance16x16_sse2;
1514const vp9_variance_fn_t highbd_10_variance16x16_sse2 =
1515 vp9_highbd_10_variance16x16_sse2;
1516const vp9_variance_fn_t highbd_12_variance16x16_sse2 =
1517 vp9_highbd_12_variance16x16_sse2;
1518const vp9_variance_fn_t highbd_variance16x32_sse2 =
1519 vp9_highbd_variance16x32_sse2;
1520const vp9_variance_fn_t highbd_10_variance16x32_sse2 =
1521 vp9_highbd_10_variance16x32_sse2;
1522const vp9_variance_fn_t highbd_12_variance16x32_sse2 =
1523 vp9_highbd_12_variance16x32_sse2;
1524const vp9_variance_fn_t highbd_variance32x16_sse2 =
1525 vp9_highbd_variance32x16_sse2;
1526const vp9_variance_fn_t highbd_10_variance32x16_sse2 =
1527 vp9_highbd_10_variance32x16_sse2;
1528const vp9_variance_fn_t highbd_12_variance32x16_sse2 =
1529 vp9_highbd_12_variance32x16_sse2;
1530const vp9_variance_fn_t highbd_variance32x32_sse2 =
1531 vp9_highbd_variance32x32_sse2;
1532const vp9_variance_fn_t highbd_10_variance32x32_sse2 =
1533 vp9_highbd_10_variance32x32_sse2;
1534const vp9_variance_fn_t highbd_12_variance32x32_sse2 =
1535 vp9_highbd_12_variance32x32_sse2;
1536const vp9_variance_fn_t highbd_variance32x64_sse2 =
1537 vp9_highbd_variance32x64_sse2;
1538const vp9_variance_fn_t highbd_10_variance32x64_sse2 =
1539 vp9_highbd_10_variance32x64_sse2;
1540const vp9_variance_fn_t highbd_12_variance32x64_sse2 =
1541 vp9_highbd_12_variance32x64_sse2;
1542const vp9_variance_fn_t highbd_variance64x32_sse2 =
1543 vp9_highbd_variance64x32_sse2;
1544const vp9_variance_fn_t highbd_10_variance64x32_sse2 =
1545 vp9_highbd_10_variance64x32_sse2;
1546const vp9_variance_fn_t highbd_12_variance64x32_sse2 =
1547 vp9_highbd_12_variance64x32_sse2;
1548const vp9_variance_fn_t highbd_variance64x64_sse2 =
1549 vp9_highbd_variance64x64_sse2;
1550const vp9_variance_fn_t highbd_10_variance64x64_sse2 =
1551 vp9_highbd_10_variance64x64_sse2;
1552const vp9_variance_fn_t highbd_12_variance64x64_sse2 =
1553 vp9_highbd_12_variance64x64_sse2;
1554INSTANTIATE_TEST_CASE_P(
1555 SSE2, VP9VarianceHighTest,
1556 ::testing::Values(make_tuple(3, 3, highbd_10_variance8x8_sse2, 10),
1557 make_tuple(3, 4, highbd_10_variance8x16_sse2, 10),
1558 make_tuple(4, 3, highbd_10_variance16x8_sse2, 10),
1559 make_tuple(4, 4, highbd_10_variance16x16_sse2, 10),
1560 make_tuple(4, 5, highbd_10_variance16x32_sse2, 10),
1561 make_tuple(5, 4, highbd_10_variance32x16_sse2, 10),
1562 make_tuple(5, 5, highbd_10_variance32x32_sse2, 10),
1563 make_tuple(5, 6, highbd_10_variance32x64_sse2, 10),
1564 make_tuple(6, 5, highbd_10_variance64x32_sse2, 10),
1565 make_tuple(6, 6, highbd_10_variance64x64_sse2, 10),
1566 make_tuple(3, 3, highbd_12_variance8x8_sse2, 12),
1567 make_tuple(3, 4, highbd_12_variance8x16_sse2, 12),
1568 make_tuple(4, 3, highbd_12_variance16x8_sse2, 12),
1569 make_tuple(4, 4, highbd_12_variance16x16_sse2, 12),
1570 make_tuple(4, 5, highbd_12_variance16x32_sse2, 12),
1571 make_tuple(5, 4, highbd_12_variance32x16_sse2, 12),
1572 make_tuple(5, 5, highbd_12_variance32x32_sse2, 12),
1573 make_tuple(5, 6, highbd_12_variance32x64_sse2, 12),
1574 make_tuple(6, 5, highbd_12_variance64x32_sse2, 12),
1575 make_tuple(6, 6, highbd_12_variance64x64_sse2, 12),
1576 make_tuple(3, 3, highbd_variance8x8_sse2, 8),
1577 make_tuple(3, 4, highbd_variance8x16_sse2, 8),
1578 make_tuple(4, 3, highbd_variance16x8_sse2, 8),
1579 make_tuple(4, 4, highbd_variance16x16_sse2, 8),
1580 make_tuple(4, 5, highbd_variance16x32_sse2, 8),
1581 make_tuple(5, 4, highbd_variance32x16_sse2, 8),
1582 make_tuple(5, 5, highbd_variance32x32_sse2, 8),
1583 make_tuple(5, 6, highbd_variance32x64_sse2, 8),
1584 make_tuple(6, 5, highbd_variance64x32_sse2, 8),
1585 make_tuple(6, 6, highbd_variance64x64_sse2, 8)));
1586const vp9_subpixvariance_fn_t highbd_subpel_variance8x4_sse2 =
1587 vp9_highbd_sub_pixel_variance8x4_sse2;
1588const vp9_subpixvariance_fn_t highbd_subpel_variance8x8_sse2 =
1589 vp9_highbd_sub_pixel_variance8x8_sse2;
1590const vp9_subpixvariance_fn_t highbd_subpel_variance8x16_sse2 =
1591 vp9_highbd_sub_pixel_variance8x16_sse2;
1592const vp9_subpixvariance_fn_t highbd_subpel_variance16x8_sse2 =
1593 vp9_highbd_sub_pixel_variance16x8_sse2;
1594const vp9_subpixvariance_fn_t highbd_subpel_variance16x16_sse2 =
1595 vp9_highbd_sub_pixel_variance16x16_sse2;
1596const vp9_subpixvariance_fn_t highbd_subpel_variance16x32_sse2 =
1597 vp9_highbd_sub_pixel_variance16x32_sse2;
1598const vp9_subpixvariance_fn_t highbd_subpel_variance32x16_sse2 =
1599 vp9_highbd_sub_pixel_variance32x16_sse2;
1600const vp9_subpixvariance_fn_t highbd_subpel_variance32x32_sse2 =
1601 vp9_highbd_sub_pixel_variance32x32_sse2;
1602const vp9_subpixvariance_fn_t highbd_subpel_variance32x64_sse2 =
1603 vp9_highbd_sub_pixel_variance32x64_sse2;
1604const vp9_subpixvariance_fn_t highbd_subpel_variance64x32_sse2 =
1605 vp9_highbd_sub_pixel_variance64x32_sse2;
1606const vp9_subpixvariance_fn_t highbd_subpel_variance64x64_sse2 =
1607 vp9_highbd_sub_pixel_variance64x64_sse2;
1608const vp9_subpixvariance_fn_t highbd_10_subpel_variance8x4_sse2 =
1609 vp9_highbd_10_sub_pixel_variance8x4_sse2;
1610const vp9_subpixvariance_fn_t highbd_10_subpel_variance8x8_sse2 =
1611 vp9_highbd_10_sub_pixel_variance8x8_sse2;
1612const vp9_subpixvariance_fn_t highbd_10_subpel_variance8x16_sse2 =
1613 vp9_highbd_10_sub_pixel_variance8x16_sse2;
1614const vp9_subpixvariance_fn_t highbd_10_subpel_variance16x8_sse2 =
1615 vp9_highbd_10_sub_pixel_variance16x8_sse2;
1616const vp9_subpixvariance_fn_t highbd_10_subpel_variance16x16_sse2 =
1617 vp9_highbd_10_sub_pixel_variance16x16_sse2;
1618const vp9_subpixvariance_fn_t highbd_10_subpel_variance16x32_sse2 =
1619 vp9_highbd_10_sub_pixel_variance16x32_sse2;
1620const vp9_subpixvariance_fn_t highbd_10_subpel_variance32x16_sse2 =
1621 vp9_highbd_10_sub_pixel_variance32x16_sse2;
1622const vp9_subpixvariance_fn_t highbd_10_subpel_variance32x32_sse2 =
1623 vp9_highbd_10_sub_pixel_variance32x32_sse2;
1624const vp9_subpixvariance_fn_t highbd_10_subpel_variance32x64_sse2 =
1625 vp9_highbd_10_sub_pixel_variance32x64_sse2;
1626const vp9_subpixvariance_fn_t highbd_10_subpel_variance64x32_sse2 =
1627 vp9_highbd_10_sub_pixel_variance64x32_sse2;
1628const vp9_subpixvariance_fn_t highbd_10_subpel_variance64x64_sse2 =
1629 vp9_highbd_10_sub_pixel_variance64x64_sse2;
1630const vp9_subpixvariance_fn_t highbd_12_subpel_variance8x4_sse2 =
1631 vp9_highbd_12_sub_pixel_variance8x4_sse2;
1632const vp9_subpixvariance_fn_t highbd_12_subpel_variance8x8_sse2 =
1633 vp9_highbd_12_sub_pixel_variance8x8_sse2;
1634const vp9_subpixvariance_fn_t highbd_12_subpel_variance8x16_sse2 =
1635 vp9_highbd_12_sub_pixel_variance8x16_sse2;
1636const vp9_subpixvariance_fn_t highbd_12_subpel_variance16x8_sse2 =
1637 vp9_highbd_12_sub_pixel_variance16x8_sse2;
1638const vp9_subpixvariance_fn_t highbd_12_subpel_variance16x16_sse2 =
1639 vp9_highbd_12_sub_pixel_variance16x16_sse2;
1640const vp9_subpixvariance_fn_t highbd_12_subpel_variance16x32_sse2 =
1641 vp9_highbd_12_sub_pixel_variance16x32_sse2;
1642const vp9_subpixvariance_fn_t highbd_12_subpel_variance32x16_sse2 =
1643 vp9_highbd_12_sub_pixel_variance32x16_sse2;
1644const vp9_subpixvariance_fn_t highbd_12_subpel_variance32x32_sse2 =
1645 vp9_highbd_12_sub_pixel_variance32x32_sse2;
1646const vp9_subpixvariance_fn_t highbd_12_subpel_variance32x64_sse2 =
1647 vp9_highbd_12_sub_pixel_variance32x64_sse2;
1648const vp9_subpixvariance_fn_t highbd_12_subpel_variance64x32_sse2 =
1649 vp9_highbd_12_sub_pixel_variance64x32_sse2;
1650const vp9_subpixvariance_fn_t highbd_12_subpel_variance64x64_sse2 =
1651 vp9_highbd_12_sub_pixel_variance64x64_sse2;
1652INSTANTIATE_TEST_CASE_P(
1653 SSE2, VP9SubpelVarianceHighTest,
1654 ::testing::Values(make_tuple(3, 2, highbd_10_subpel_variance8x4_sse2, 10),
1655 make_tuple(3, 3, highbd_10_subpel_variance8x8_sse2, 10),
1656 make_tuple(3, 4, highbd_10_subpel_variance8x16_sse2, 10),
1657 make_tuple(4, 3, highbd_10_subpel_variance16x8_sse2, 10),
1658 make_tuple(4, 4, highbd_10_subpel_variance16x16_sse2, 10),
1659 make_tuple(4, 5, highbd_10_subpel_variance16x32_sse2, 10),
1660 make_tuple(5, 4, highbd_10_subpel_variance32x16_sse2, 10),
1661 make_tuple(5, 5, highbd_10_subpel_variance32x32_sse2, 10),
1662 make_tuple(5, 6, highbd_10_subpel_variance32x64_sse2, 10),
1663 make_tuple(6, 5, highbd_10_subpel_variance64x32_sse2, 10),
1664 make_tuple(6, 6, highbd_10_subpel_variance64x64_sse2, 10),
1665 make_tuple(3, 2, highbd_12_subpel_variance8x4_sse2, 12),
1666 make_tuple(3, 3, highbd_12_subpel_variance8x8_sse2, 12),
1667 make_tuple(3, 4, highbd_12_subpel_variance8x16_sse2, 12),
1668 make_tuple(4, 3, highbd_12_subpel_variance16x8_sse2, 12),
1669 make_tuple(4, 4, highbd_12_subpel_variance16x16_sse2, 12),
1670 make_tuple(4, 5, highbd_12_subpel_variance16x32_sse2, 12),
1671 make_tuple(5, 4, highbd_12_subpel_variance32x16_sse2, 12),
1672 make_tuple(5, 5, highbd_12_subpel_variance32x32_sse2, 12),
1673 make_tuple(5, 6, highbd_12_subpel_variance32x64_sse2, 12),
1674 make_tuple(6, 5, highbd_12_subpel_variance64x32_sse2, 12),
1675 make_tuple(6, 6, highbd_12_subpel_variance64x64_sse2, 12),
1676 make_tuple(3, 2, highbd_subpel_variance8x4_sse2, 8),
1677 make_tuple(3, 3, highbd_subpel_variance8x8_sse2, 8),
1678 make_tuple(3, 4, highbd_subpel_variance8x16_sse2, 8),
1679 make_tuple(4, 3, highbd_subpel_variance16x8_sse2, 8),
1680 make_tuple(4, 4, highbd_subpel_variance16x16_sse2, 8),
1681 make_tuple(4, 5, highbd_subpel_variance16x32_sse2, 8),
1682 make_tuple(5, 4, highbd_subpel_variance32x16_sse2, 8),
1683 make_tuple(5, 5, highbd_subpel_variance32x32_sse2, 8),
1684 make_tuple(5, 6, highbd_subpel_variance32x64_sse2, 8),
1685 make_tuple(6, 5, highbd_subpel_variance64x32_sse2, 8),
1686 make_tuple(6, 6, highbd_subpel_variance64x64_sse2, 8)));
1687const vp9_subp_avg_variance_fn_t highbd_subpel_avg_variance8x4_sse2 =
1688 vp9_highbd_sub_pixel_avg_variance8x4_sse2;
1689const vp9_subp_avg_variance_fn_t highbd_subpel_avg_variance8x8_sse2 =
1690 vp9_highbd_sub_pixel_avg_variance8x8_sse2;
1691const vp9_subp_avg_variance_fn_t highbd_subpel_avg_variance8x16_sse2 =
1692 vp9_highbd_sub_pixel_avg_variance8x16_sse2;
1693const vp9_subp_avg_variance_fn_t highbd_subpel_avg_variance16x8_sse2 =
1694 vp9_highbd_sub_pixel_avg_variance16x8_sse2;
1695const vp9_subp_avg_variance_fn_t highbd_subpel_avg_variance16x16_sse2 =
1696 vp9_highbd_sub_pixel_avg_variance16x16_sse2;
1697const vp9_subp_avg_variance_fn_t highbd_subpel_avg_variance16x32_sse2 =
1698 vp9_highbd_sub_pixel_avg_variance16x32_sse2;
1699const vp9_subp_avg_variance_fn_t highbd_subpel_avg_variance32x16_sse2 =
1700 vp9_highbd_sub_pixel_avg_variance32x16_sse2;
1701const vp9_subp_avg_variance_fn_t highbd_subpel_avg_variance32x32_sse2 =
1702 vp9_highbd_sub_pixel_avg_variance32x32_sse2;
1703const vp9_subp_avg_variance_fn_t highbd_subpel_avg_variance32x64_sse2 =
1704 vp9_highbd_sub_pixel_avg_variance32x64_sse2;
1705const vp9_subp_avg_variance_fn_t highbd_subpel_avg_variance64x32_sse2 =
1706 vp9_highbd_sub_pixel_avg_variance64x32_sse2;
1707const vp9_subp_avg_variance_fn_t highbd_subpel_avg_variance64x64_sse2 =
1708 vp9_highbd_sub_pixel_avg_variance64x64_sse2;
1709const vp9_subp_avg_variance_fn_t highbd_10_subpel_avg_variance8x4_sse2 =
1710 vp9_highbd_10_sub_pixel_avg_variance8x4_sse2;
1711const vp9_subp_avg_variance_fn_t highbd_10_subpel_avg_variance8x8_sse2 =
1712 vp9_highbd_10_sub_pixel_avg_variance8x8_sse2;
1713const vp9_subp_avg_variance_fn_t highbd_10_subpel_avg_variance8x16_sse2 =
1714 vp9_highbd_10_sub_pixel_avg_variance8x16_sse2;
1715const vp9_subp_avg_variance_fn_t highbd_10_subpel_avg_variance16x8_sse2 =
1716 vp9_highbd_10_sub_pixel_avg_variance16x8_sse2;
1717const vp9_subp_avg_variance_fn_t highbd_10_subpel_avg_variance16x16_sse2 =
1718 vp9_highbd_10_sub_pixel_avg_variance16x16_sse2;
1719const vp9_subp_avg_variance_fn_t highbd_10_subpel_avg_variance16x32_sse2 =
1720 vp9_highbd_10_sub_pixel_avg_variance16x32_sse2;
1721const vp9_subp_avg_variance_fn_t highbd_10_subpel_avg_variance32x16_sse2 =
1722 vp9_highbd_10_sub_pixel_avg_variance32x16_sse2;
1723const vp9_subp_avg_variance_fn_t highbd_10_subpel_avg_variance32x32_sse2 =
1724 vp9_highbd_10_sub_pixel_avg_variance32x32_sse2;
1725const vp9_subp_avg_variance_fn_t highbd_10_subpel_avg_variance32x64_sse2 =
1726 vp9_highbd_10_sub_pixel_avg_variance32x64_sse2;
1727const vp9_subp_avg_variance_fn_t highbd_10_subpel_avg_variance64x32_sse2 =
1728 vp9_highbd_10_sub_pixel_avg_variance64x32_sse2;
1729const vp9_subp_avg_variance_fn_t highbd_10_subpel_avg_variance64x64_sse2 =
1730 vp9_highbd_10_sub_pixel_avg_variance64x64_sse2;
1731const vp9_subp_avg_variance_fn_t highbd_12_subpel_avg_variance8x4_sse2 =
1732 vp9_highbd_12_sub_pixel_avg_variance8x4_sse2;
1733const vp9_subp_avg_variance_fn_t highbd_12_subpel_avg_variance8x8_sse2 =
1734 vp9_highbd_12_sub_pixel_avg_variance8x8_sse2;
1735const vp9_subp_avg_variance_fn_t highbd_12_subpel_avg_variance8x16_sse2 =
1736 vp9_highbd_12_sub_pixel_avg_variance8x16_sse2;
1737const vp9_subp_avg_variance_fn_t highbd_12_subpel_avg_variance16x8_sse2 =
1738 vp9_highbd_12_sub_pixel_avg_variance16x8_sse2;
1739const vp9_subp_avg_variance_fn_t highbd_12_subpel_avg_variance16x16_sse2 =
1740 vp9_highbd_12_sub_pixel_avg_variance16x16_sse2;
1741const vp9_subp_avg_variance_fn_t highbd_12_subpel_avg_variance16x32_sse2 =
1742 vp9_highbd_12_sub_pixel_avg_variance16x32_sse2;
1743const vp9_subp_avg_variance_fn_t highbd_12_subpel_avg_variance32x16_sse2 =
1744 vp9_highbd_12_sub_pixel_avg_variance32x16_sse2;
1745const vp9_subp_avg_variance_fn_t highbd_12_subpel_avg_variance32x32_sse2 =
1746 vp9_highbd_12_sub_pixel_avg_variance32x32_sse2;
1747const vp9_subp_avg_variance_fn_t highbd_12_subpel_avg_variance32x64_sse2 =
1748 vp9_highbd_12_sub_pixel_avg_variance32x64_sse2;
1749const vp9_subp_avg_variance_fn_t highbd_12_subpel_avg_variance64x32_sse2 =
1750 vp9_highbd_12_sub_pixel_avg_variance64x32_sse2;
1751const vp9_subp_avg_variance_fn_t highbd_12_subpel_avg_variance64x64_sse2 =
1752 vp9_highbd_12_sub_pixel_avg_variance64x64_sse2;
1753INSTANTIATE_TEST_CASE_P(
1754 SSE2, VP9SubpelAvgVarianceHighTest,
1755 ::testing::Values(
1756 make_tuple(3, 2, highbd_10_subpel_avg_variance8x4_sse2, 10),
1757 make_tuple(3, 3, highbd_10_subpel_avg_variance8x8_sse2, 10),
1758 make_tuple(3, 4, highbd_10_subpel_avg_variance8x16_sse2, 10),
1759 make_tuple(4, 3, highbd_10_subpel_avg_variance16x8_sse2, 10),
1760 make_tuple(4, 4, highbd_10_subpel_avg_variance16x16_sse2, 10),
1761 make_tuple(4, 5, highbd_10_subpel_avg_variance16x32_sse2, 10),
1762 make_tuple(5, 4, highbd_10_subpel_avg_variance32x16_sse2, 10),
1763 make_tuple(5, 5, highbd_10_subpel_avg_variance32x32_sse2, 10),
1764 make_tuple(5, 6, highbd_10_subpel_avg_variance32x64_sse2, 10),
1765 make_tuple(6, 5, highbd_10_subpel_avg_variance64x32_sse2, 10),
1766 make_tuple(6, 6, highbd_10_subpel_avg_variance64x64_sse2, 10),
1767 make_tuple(3, 2, highbd_12_subpel_avg_variance8x4_sse2, 12),
1768 make_tuple(3, 3, highbd_12_subpel_avg_variance8x8_sse2, 12),
1769 make_tuple(3, 4, highbd_12_subpel_avg_variance8x16_sse2, 12),
1770 make_tuple(4, 3, highbd_12_subpel_avg_variance16x8_sse2, 12),
1771 make_tuple(4, 4, highbd_12_subpel_avg_variance16x16_sse2, 12),
1772 make_tuple(4, 5, highbd_12_subpel_avg_variance16x32_sse2, 12),
1773 make_tuple(5, 4, highbd_12_subpel_avg_variance32x16_sse2, 12),
1774 make_tuple(5, 5, highbd_12_subpel_avg_variance32x32_sse2, 12),
1775 make_tuple(5, 6, highbd_12_subpel_avg_variance32x64_sse2, 12),
1776 make_tuple(6, 5, highbd_12_subpel_avg_variance64x32_sse2, 12),
1777 make_tuple(6, 6, highbd_12_subpel_avg_variance64x64_sse2, 12),
1778 make_tuple(3, 2, highbd_subpel_avg_variance8x4_sse2, 8),
1779 make_tuple(3, 3, highbd_subpel_avg_variance8x8_sse2, 8),
1780 make_tuple(3, 4, highbd_subpel_avg_variance8x16_sse2, 8),
1781 make_tuple(4, 3, highbd_subpel_avg_variance16x8_sse2, 8),
1782 make_tuple(4, 4, highbd_subpel_avg_variance16x16_sse2, 8),
1783 make_tuple(4, 5, highbd_subpel_avg_variance16x32_sse2, 8),
1784 make_tuple(5, 4, highbd_subpel_avg_variance32x16_sse2, 8),
1785 make_tuple(5, 5, highbd_subpel_avg_variance32x32_sse2, 8),
1786 make_tuple(5, 6, highbd_subpel_avg_variance32x64_sse2, 8),
1787 make_tuple(6, 5, highbd_subpel_avg_variance64x32_sse2, 8),
1788 make_tuple(6, 6, highbd_subpel_avg_variance64x64_sse2, 8)));
1789#endif // CONFIG_VP9_HIGHBITDEPTH
1790#endif // CONFIG_USE_X86INC
1791#endif // HAVE_SSE2
Ronald S. Bultje8fb6c582013-06-20 09:34:25 -07001792#if HAVE_SSSE3
Jim Bankoski5b307882013-08-06 08:25:10 -07001793#if CONFIG_USE_X86INC
1794
James Zern6e5e75f2014-05-08 14:32:32 -07001795const vp9_subpixvariance_fn_t subpel_variance4x4_ssse3 =
1796 vp9_sub_pixel_variance4x4_ssse3;
1797const vp9_subpixvariance_fn_t subpel_variance4x8_ssse3 =
1798 vp9_sub_pixel_variance4x8_ssse3;
1799const vp9_subpixvariance_fn_t subpel_variance8x4_ssse3 =
1800 vp9_sub_pixel_variance8x4_ssse3;
1801const vp9_subpixvariance_fn_t subpel_variance8x8_ssse3 =
1802 vp9_sub_pixel_variance8x8_ssse3;
1803const vp9_subpixvariance_fn_t subpel_variance8x16_ssse3 =
1804 vp9_sub_pixel_variance8x16_ssse3;
1805const vp9_subpixvariance_fn_t subpel_variance16x8_ssse3 =
1806 vp9_sub_pixel_variance16x8_ssse3;
1807const vp9_subpixvariance_fn_t subpel_variance16x16_ssse3 =
1808 vp9_sub_pixel_variance16x16_ssse3;
1809const vp9_subpixvariance_fn_t subpel_variance16x32_ssse3 =
1810 vp9_sub_pixel_variance16x32_ssse3;
1811const vp9_subpixvariance_fn_t subpel_variance32x16_ssse3 =
1812 vp9_sub_pixel_variance32x16_ssse3;
1813const vp9_subpixvariance_fn_t subpel_variance32x32_ssse3 =
1814 vp9_sub_pixel_variance32x32_ssse3;
1815const vp9_subpixvariance_fn_t subpel_variance32x64_ssse3 =
1816 vp9_sub_pixel_variance32x64_ssse3;
1817const vp9_subpixvariance_fn_t subpel_variance64x32_ssse3 =
1818 vp9_sub_pixel_variance64x32_ssse3;
1819const vp9_subpixvariance_fn_t subpel_variance64x64_ssse3 =
1820 vp9_sub_pixel_variance64x64_ssse3;
Ronald S. Bultje8fb6c582013-06-20 09:34:25 -07001821INSTANTIATE_TEST_CASE_P(
1822 SSSE3, VP9SubpelVarianceTest,
Peter de Rivaz48032bf2014-10-16 14:00:54 +01001823 ::testing::Values(make_tuple(2, 2, subpel_variance4x4_ssse3, 0),
1824 make_tuple(2, 3, subpel_variance4x8_ssse3, 0),
1825 make_tuple(3, 2, subpel_variance8x4_ssse3, 0),
1826 make_tuple(3, 3, subpel_variance8x8_ssse3, 0),
1827 make_tuple(3, 4, subpel_variance8x16_ssse3, 0),
1828 make_tuple(4, 3, subpel_variance16x8_ssse3, 0),
1829 make_tuple(4, 4, subpel_variance16x16_ssse3, 0),
1830 make_tuple(4, 5, subpel_variance16x32_ssse3, 0),
1831 make_tuple(5, 4, subpel_variance32x16_ssse3, 0),
1832 make_tuple(5, 5, subpel_variance32x32_ssse3, 0),
1833 make_tuple(5, 6, subpel_variance32x64_ssse3, 0),
1834 make_tuple(6, 5, subpel_variance64x32_ssse3, 0),
1835 make_tuple(6, 6, subpel_variance64x64_ssse3, 0)));
James Zern6e5e75f2014-05-08 14:32:32 -07001836const vp9_subp_avg_variance_fn_t subpel_avg_variance4x4_ssse3 =
1837 vp9_sub_pixel_avg_variance4x4_ssse3;
1838const vp9_subp_avg_variance_fn_t subpel_avg_variance4x8_ssse3 =
1839 vp9_sub_pixel_avg_variance4x8_ssse3;
1840const vp9_subp_avg_variance_fn_t subpel_avg_variance8x4_ssse3 =
1841 vp9_sub_pixel_avg_variance8x4_ssse3;
1842const vp9_subp_avg_variance_fn_t subpel_avg_variance8x8_ssse3 =
1843 vp9_sub_pixel_avg_variance8x8_ssse3;
1844const vp9_subp_avg_variance_fn_t subpel_avg_variance8x16_ssse3 =
1845 vp9_sub_pixel_avg_variance8x16_ssse3;
1846const vp9_subp_avg_variance_fn_t subpel_avg_variance16x8_ssse3 =
1847 vp9_sub_pixel_avg_variance16x8_ssse3;
1848const vp9_subp_avg_variance_fn_t subpel_avg_variance16x16_ssse3 =
1849 vp9_sub_pixel_avg_variance16x16_ssse3;
1850const vp9_subp_avg_variance_fn_t subpel_avg_variance16x32_ssse3 =
1851 vp9_sub_pixel_avg_variance16x32_ssse3;
1852const vp9_subp_avg_variance_fn_t subpel_avg_variance32x16_ssse3 =
1853 vp9_sub_pixel_avg_variance32x16_ssse3;
1854const vp9_subp_avg_variance_fn_t subpel_avg_variance32x32_ssse3 =
1855 vp9_sub_pixel_avg_variance32x32_ssse3;
1856const vp9_subp_avg_variance_fn_t subpel_avg_variance32x64_ssse3 =
1857 vp9_sub_pixel_avg_variance32x64_ssse3;
1858const vp9_subp_avg_variance_fn_t subpel_avg_variance64x32_ssse3 =
1859 vp9_sub_pixel_avg_variance64x32_ssse3;
1860const vp9_subp_avg_variance_fn_t subpel_avg_variance64x64_ssse3 =
1861 vp9_sub_pixel_avg_variance64x64_ssse3;
Ronald S. Bultje1e6a32f2013-06-20 15:59:48 -07001862INSTANTIATE_TEST_CASE_P(
1863 SSSE3, VP9SubpelAvgVarianceTest,
Peter de Rivaz48032bf2014-10-16 14:00:54 +01001864 ::testing::Values(make_tuple(2, 2, subpel_avg_variance4x4_ssse3, 0),
1865 make_tuple(2, 3, subpel_avg_variance4x8_ssse3, 0),
1866 make_tuple(3, 2, subpel_avg_variance8x4_ssse3, 0),
1867 make_tuple(3, 3, subpel_avg_variance8x8_ssse3, 0),
1868 make_tuple(3, 4, subpel_avg_variance8x16_ssse3, 0),
1869 make_tuple(4, 3, subpel_avg_variance16x8_ssse3, 0),
1870 make_tuple(4, 4, subpel_avg_variance16x16_ssse3, 0),
1871 make_tuple(4, 5, subpel_avg_variance16x32_ssse3, 0),
1872 make_tuple(5, 4, subpel_avg_variance32x16_ssse3, 0),
1873 make_tuple(5, 5, subpel_avg_variance32x32_ssse3, 0),
1874 make_tuple(5, 6, subpel_avg_variance32x64_ssse3, 0),
1875 make_tuple(6, 5, subpel_avg_variance64x32_ssse3, 0),
1876 make_tuple(6, 6, subpel_avg_variance64x64_ssse3, 0)));
1877#endif // CONFIG_USE_X86INC
1878#endif // HAVE_SSSE3
James Zern520cb3f2014-06-08 18:25:37 -07001879
1880#if HAVE_AVX2
levytamar8269a5f5e2014-07-24 00:20:19 -07001881
James Zern520cb3f2014-06-08 18:25:37 -07001882const vp9_variance_fn_t variance16x16_avx2 = vp9_variance16x16_avx2;
1883const vp9_variance_fn_t variance32x16_avx2 = vp9_variance32x16_avx2;
1884const vp9_variance_fn_t variance32x32_avx2 = vp9_variance32x32_avx2;
1885const vp9_variance_fn_t variance64x32_avx2 = vp9_variance64x32_avx2;
1886const vp9_variance_fn_t variance64x64_avx2 = vp9_variance64x64_avx2;
1887INSTANTIATE_TEST_CASE_P(
1888 AVX2, VP9VarianceTest,
Peter de Rivaz48032bf2014-10-16 14:00:54 +01001889 ::testing::Values(make_tuple(4, 4, variance16x16_avx2, 0),
1890 make_tuple(5, 4, variance32x16_avx2, 0),
1891 make_tuple(5, 5, variance32x32_avx2, 0),
1892 make_tuple(6, 5, variance64x32_avx2, 0),
1893 make_tuple(6, 6, variance64x64_avx2, 0)));
James Zern520cb3f2014-06-08 18:25:37 -07001894
1895const vp9_subpixvariance_fn_t subpel_variance32x32_avx2 =
1896 vp9_sub_pixel_variance32x32_avx2;
1897const vp9_subpixvariance_fn_t subpel_variance64x64_avx2 =
1898 vp9_sub_pixel_variance64x64_avx2;
1899INSTANTIATE_TEST_CASE_P(
levytamar8269a5f5e2014-07-24 00:20:19 -07001900 AVX2, VP9SubpelVarianceTest,
Peter de Rivaz48032bf2014-10-16 14:00:54 +01001901 ::testing::Values(make_tuple(5, 5, subpel_variance32x32_avx2, 0),
1902 make_tuple(6, 6, subpel_variance64x64_avx2, 0)));
James Zern520cb3f2014-06-08 18:25:37 -07001903
1904const vp9_subp_avg_variance_fn_t subpel_avg_variance32x32_avx2 =
1905 vp9_sub_pixel_avg_variance32x32_avx2;
1906const vp9_subp_avg_variance_fn_t subpel_avg_variance64x64_avx2 =
1907 vp9_sub_pixel_avg_variance64x64_avx2;
1908INSTANTIATE_TEST_CASE_P(
levytamar8269a5f5e2014-07-24 00:20:19 -07001909 AVX2, VP9SubpelAvgVarianceTest,
Peter de Rivaz48032bf2014-10-16 14:00:54 +01001910 ::testing::Values(make_tuple(5, 5, subpel_avg_variance32x32_avx2, 0),
1911 make_tuple(6, 6, subpel_avg_variance64x64_avx2, 0)));
James Zern520cb3f2014-06-08 18:25:37 -07001912#endif // HAVE_AVX2
Scott LaVarnway521cf7e2014-07-29 16:47:34 -07001913#if HAVE_NEON
Scott LaVarnway98165ec2014-08-01 11:35:55 -07001914const vp9_variance_fn_t variance8x8_neon = vp9_variance8x8_neon;
Scott LaVarnway521cf7e2014-07-29 16:47:34 -07001915const vp9_variance_fn_t variance16x16_neon = vp9_variance16x16_neon;
Scott LaVarnwayd39448e2014-07-31 08:00:36 -07001916const vp9_variance_fn_t variance32x32_neon = vp9_variance32x32_neon;
Frank Galligan74d40cd2015-01-13 11:15:24 -08001917const vp9_variance_fn_t variance32x64_neon = vp9_variance32x64_neon;
1918const vp9_variance_fn_t variance64x32_neon = vp9_variance64x32_neon;
1919const vp9_variance_fn_t variance64x64_neon = vp9_variance64x64_neon;
Scott LaVarnway521cf7e2014-07-29 16:47:34 -07001920INSTANTIATE_TEST_CASE_P(
1921 NEON, VP9VarianceTest,
Peter de Rivaz48032bf2014-10-16 14:00:54 +01001922 ::testing::Values(make_tuple(3, 3, variance8x8_neon, 0),
1923 make_tuple(4, 4, variance16x16_neon, 0),
Frank Galligan74d40cd2015-01-13 11:15:24 -08001924 make_tuple(5, 5, variance32x32_neon, 0),
1925 make_tuple(5, 6, variance32x64_neon, 0),
1926 make_tuple(6, 5, variance64x32_neon, 0),
1927 make_tuple(6, 6, variance64x64_neon, 0)));
Scott LaVarnway521cf7e2014-07-29 16:47:34 -07001928
Scott LaVarnway98165ec2014-08-01 11:35:55 -07001929const vp9_subpixvariance_fn_t subpel_variance8x8_neon =
1930 vp9_sub_pixel_variance8x8_neon;
Scott LaVarnway521cf7e2014-07-29 16:47:34 -07001931const vp9_subpixvariance_fn_t subpel_variance16x16_neon =
1932 vp9_sub_pixel_variance16x16_neon;
Scott LaVarnwayd39448e2014-07-31 08:00:36 -07001933const vp9_subpixvariance_fn_t subpel_variance32x32_neon =
1934 vp9_sub_pixel_variance32x32_neon;
Frank Galliganec1d8382015-01-13 23:01:06 -08001935const vp9_subpixvariance_fn_t subpel_variance64x64_neon =
1936 vp9_sub_pixel_variance64x64_neon;
Scott LaVarnway521cf7e2014-07-29 16:47:34 -07001937INSTANTIATE_TEST_CASE_P(
1938 NEON, VP9SubpelVarianceTest,
Peter de Rivaz48032bf2014-10-16 14:00:54 +01001939 ::testing::Values(make_tuple(3, 3, subpel_variance8x8_neon, 0),
1940 make_tuple(4, 4, subpel_variance16x16_neon, 0),
Frank Galliganec1d8382015-01-13 23:01:06 -08001941 make_tuple(5, 5, subpel_variance32x32_neon, 0),
1942 make_tuple(6, 6, subpel_variance64x64_neon, 0)));
Scott LaVarnway521cf7e2014-07-29 16:47:34 -07001943#endif // HAVE_NEON
James Zern1711cf22013-02-22 16:23:36 -08001944#endif // CONFIG_VP9_ENCODER
1945
1946} // namespace vp9
James Zern98473442012-11-06 16:58:11 -08001947} // namespace