blob: ef637fb16b5cfefe3e9fe20f82092ad30cf60d57 [file] [log] [blame]
Johannfbea8972012-06-28 11:43:58 -07001/*
Yaowu Xu2ab7ff02016-09-02 12:04:54 -07002 * Copyright (c) 2016, Alliance for Open Media. All rights reserved
Johannfbea8972012-06-28 11:43:58 -07003 *
Yaowu Xu2ab7ff02016-09-02 12:04:54 -07004 * This source code is subject to the terms of the BSD 2 Clause License and
5 * the Alliance for Open Media Patent License 1.0. If the BSD 2 Clause License
6 * was not distributed with this source code in the LICENSE file, you can
7 * obtain it at www.aomedia.org/license/software. If the Alliance for Open
8 * Media Patent License 1.0 was not distributed with this source code in the
9 * PATENTS file, you can obtain it at www.aomedia.org/license/patent.
10*/
Johannfbea8972012-06-28 11:43:58 -070011
Johannfbea8972012-06-28 11:43:58 -070012#include <string.h>
13#include <limits.h>
14#include <stdio.h>
15
Tom Finegan7a07ece2017-02-07 17:14:05 -080016#include "third_party/googletest/src/googletest/include/gtest/gtest.h"
Jingning Han097d59c2015-07-29 14:51:36 -070017
Yaowu Xuf883b422016-08-30 14:01:10 -070018#include "./aom_config.h"
19#include "./aom_dsp_rtcd.h"
Johannfbea8972012-06-28 11:43:58 -070020#include "test/acm_random.h"
James Zern5b756742013-06-17 22:58:40 -070021#include "test/clear_system_state.h"
James Zerneebb6482012-11-27 13:08:05 -080022#include "test/register_state_check.h"
Johannfbea8972012-06-28 11:43:58 -070023#include "test/util.h"
Yaowu Xuf883b422016-08-30 14:01:10 -070024#include "aom/aom_codec.h"
25#include "aom_mem/aom_mem.h"
Yaowu Xuc27fc142016-08-22 16:08:15 -070026#include "aom_ports/mem.h"
Johannfbea8972012-06-28 11:43:58 -070027
clang-format3a826f12016-08-11 17:46:05 -070028typedef unsigned int (*SadMxNFunc)(const uint8_t *src_ptr, int src_stride,
29 const uint8_t *ref_ptr, int ref_stride);
Peter de Rivaz7eee4872014-10-16 13:41:55 +010030typedef std::tr1::tuple<int, int, SadMxNFunc, int> SadMxNParam;
Johannd5d92892015-04-17 16:11:38 -040031
clang-format3a826f12016-08-11 17:46:05 -070032typedef uint32_t (*SadMxNAvgFunc)(const uint8_t *src_ptr, int src_stride,
33 const uint8_t *ref_ptr, int ref_stride,
Johannd5d92892015-04-17 16:11:38 -040034 const uint8_t *second_pred);
35typedef std::tr1::tuple<int, int, SadMxNAvgFunc, int> SadMxNAvgParam;
Johannfbea8972012-06-28 11:43:58 -070036
clang-format3a826f12016-08-11 17:46:05 -070037typedef void (*SadMxNx4Func)(const uint8_t *src_ptr, int src_stride,
38 const uint8_t *const ref_ptr[], int ref_stride,
Peter de Rivaz7eee4872014-10-16 13:41:55 +010039 uint32_t *sad_array);
40typedef std::tr1::tuple<int, int, SadMxNx4Func, int> SadMxNx4Param;
John Koleszar1cfc86e2013-03-01 12:43:41 -080041
Yaowu Xuc27fc142016-08-22 16:08:15 -070042using libaom_test::ACMRandom;
Johannfbea8972012-06-28 11:43:58 -070043
44namespace {
John Koleszar1cfc86e2013-03-01 12:43:41 -080045class SADTestBase : public ::testing::Test {
James Zern10f8b362012-08-27 17:13:09 -070046 public:
clang-format3a826f12016-08-11 17:46:05 -070047 SADTestBase(int width, int height, int bit_depth)
48 : width_(width), height_(height), bd_(bit_depth) {}
John Koleszar1cfc86e2013-03-01 12:43:41 -080049
James Zern10f8b362012-08-27 17:13:09 -070050 static void SetUpTestCase() {
clang-format3a826f12016-08-11 17:46:05 -070051 source_data8_ = reinterpret_cast<uint8_t *>(
Yaowu Xuf883b422016-08-30 14:01:10 -070052 aom_memalign(kDataAlignment, kDataBlockSize));
clang-format3a826f12016-08-11 17:46:05 -070053 reference_data8_ = reinterpret_cast<uint8_t *>(
Yaowu Xuf883b422016-08-30 14:01:10 -070054 aom_memalign(kDataAlignment, kDataBufferSize));
clang-format3a826f12016-08-11 17:46:05 -070055 second_pred8_ =
Yaowu Xuf883b422016-08-30 14:01:10 -070056 reinterpret_cast<uint8_t *>(aom_memalign(kDataAlignment, 128 * 128));
clang-format3a826f12016-08-11 17:46:05 -070057 source_data16_ = reinterpret_cast<uint16_t *>(
Yaowu Xuf883b422016-08-30 14:01:10 -070058 aom_memalign(kDataAlignment, kDataBlockSize * sizeof(uint16_t)));
clang-format3a826f12016-08-11 17:46:05 -070059 reference_data16_ = reinterpret_cast<uint16_t *>(
Yaowu Xuf883b422016-08-30 14:01:10 -070060 aom_memalign(kDataAlignment, kDataBufferSize * sizeof(uint16_t)));
clang-format3a826f12016-08-11 17:46:05 -070061 second_pred16_ = reinterpret_cast<uint16_t *>(
Yaowu Xuf883b422016-08-30 14:01:10 -070062 aom_memalign(kDataAlignment, 128 * 128 * sizeof(uint16_t)));
James Zern10f8b362012-08-27 17:13:09 -070063 }
64
65 static void TearDownTestCase() {
Yaowu Xuf883b422016-08-30 14:01:10 -070066 aom_free(source_data8_);
Peter de Rivaz7eee4872014-10-16 13:41:55 +010067 source_data8_ = NULL;
Yaowu Xuf883b422016-08-30 14:01:10 -070068 aom_free(reference_data8_);
Peter de Rivaz7eee4872014-10-16 13:41:55 +010069 reference_data8_ = NULL;
Yaowu Xuf883b422016-08-30 14:01:10 -070070 aom_free(second_pred8_);
Peter de Rivaz7eee4872014-10-16 13:41:55 +010071 second_pred8_ = NULL;
Yaowu Xuf883b422016-08-30 14:01:10 -070072 aom_free(source_data16_);
Peter de Rivaz7eee4872014-10-16 13:41:55 +010073 source_data16_ = NULL;
Yaowu Xuf883b422016-08-30 14:01:10 -070074 aom_free(reference_data16_);
Peter de Rivaz7eee4872014-10-16 13:41:55 +010075 reference_data16_ = NULL;
Yaowu Xuf883b422016-08-30 14:01:10 -070076 aom_free(second_pred16_);
Peter de Rivaz7eee4872014-10-16 13:41:55 +010077 second_pred16_ = NULL;
James Zern10f8b362012-08-27 17:13:09 -070078 }
79
Yaowu Xuc27fc142016-08-22 16:08:15 -070080 virtual void TearDown() { libaom_test::ClearSystemState(); }
James Zern5b756742013-06-17 22:58:40 -070081
James Zern10f8b362012-08-27 17:13:09 -070082 protected:
Geza Lore697bf5b2016-03-02 11:12:52 +000083 // Handle up to 4 128x128 blocks, with stride up to 256
James Zern10f8b362012-08-27 17:13:09 -070084 static const int kDataAlignment = 16;
Geza Lore697bf5b2016-03-02 11:12:52 +000085 static const int kDataBlockSize = 128 * 256;
John Koleszar1cfc86e2013-03-01 12:43:41 -080086 static const int kDataBufferSize = 4 * kDataBlockSize;
James Zern10f8b362012-08-27 17:13:09 -070087
Johannfbea8972012-06-28 11:43:58 -070088 virtual void SetUp() {
Peter de Rivaz7eee4872014-10-16 13:41:55 +010089 if (bd_ == -1) {
90 use_high_bit_depth_ = false;
Yaowu Xuf883b422016-08-30 14:01:10 -070091 bit_depth_ = AOM_BITS_8;
Peter de Rivaz7eee4872014-10-16 13:41:55 +010092 source_data_ = source_data8_;
93 reference_data_ = reference_data8_;
94 second_pred_ = second_pred8_;
Yaowu Xuf883b422016-08-30 14:01:10 -070095#if CONFIG_AOM_HIGHBITDEPTH
Peter de Rivaz7eee4872014-10-16 13:41:55 +010096 } else {
97 use_high_bit_depth_ = true;
Yaowu Xuf883b422016-08-30 14:01:10 -070098 bit_depth_ = static_cast<aom_bit_depth_t>(bd_);
Peter de Rivaz7eee4872014-10-16 13:41:55 +010099 source_data_ = CONVERT_TO_BYTEPTR(source_data16_);
100 reference_data_ = CONVERT_TO_BYTEPTR(reference_data16_);
101 second_pred_ = CONVERT_TO_BYTEPTR(second_pred16_);
Yaowu Xuf883b422016-08-30 14:01:10 -0700102#endif // CONFIG_AOM_HIGHBITDEPTH
Peter de Rivaz7eee4872014-10-16 13:41:55 +0100103 }
Peter de Rivaz7eee4872014-10-16 13:41:55 +0100104 mask_ = (1 << bit_depth_) - 1;
John Koleszar6b653cb2013-02-28 17:03:02 -0800105 source_stride_ = (width_ + 31) & ~31;
Johannfbea8972012-06-28 11:43:58 -0700106 reference_stride_ = width_ * 2;
107 rnd_.Reset(ACMRandom::DeterministicSeed());
108 }
109
Peter de Rivaz7eee4872014-10-16 13:41:55 +0100110 virtual uint8_t *GetReference(int block_idx) {
Yaowu Xuf883b422016-08-30 14:01:10 -0700111#if CONFIG_AOM_HIGHBITDEPTH
Johannd5d92892015-04-17 16:11:38 -0400112 if (use_high_bit_depth_)
Peter de Rivaz7eee4872014-10-16 13:41:55 +0100113 return CONVERT_TO_BYTEPTR(CONVERT_TO_SHORTPTR(reference_data_) +
114 block_idx * kDataBlockSize);
Yaowu Xuf883b422016-08-30 14:01:10 -0700115#endif // CONFIG_AOM_HIGHBITDEPTH
John Koleszar1cfc86e2013-03-01 12:43:41 -0800116 return reference_data_ + block_idx * kDataBlockSize;
Johannfbea8972012-06-28 11:43:58 -0700117 }
118
119 // Sum of Absolute Differences. Given two blocks, calculate the absolute
120 // difference between two pixels in the same relative location; accumulate.
Johannd5d92892015-04-17 16:11:38 -0400121 unsigned int ReferenceSAD(int block_idx) {
Johannfbea8972012-06-28 11:43:58 -0700122 unsigned int sad = 0;
clang-format3a826f12016-08-11 17:46:05 -0700123 const uint8_t *const reference8 = GetReference(block_idx);
124 const uint8_t *const source8 = source_data_;
Yaowu Xuf883b422016-08-30 14:01:10 -0700125#if CONFIG_AOM_HIGHBITDEPTH
clang-format3a826f12016-08-11 17:46:05 -0700126 const uint16_t *const reference16 =
127 CONVERT_TO_SHORTPTR(GetReference(block_idx));
128 const uint16_t *const source16 = CONVERT_TO_SHORTPTR(source_data_);
Yaowu Xuf883b422016-08-30 14:01:10 -0700129#endif // CONFIG_AOM_HIGHBITDEPTH
Johannfbea8972012-06-28 11:43:58 -0700130 for (int h = 0; h < height_; ++h) {
131 for (int w = 0; w < width_; ++w) {
Peter de Rivaz7eee4872014-10-16 13:41:55 +0100132 if (!use_high_bit_depth_) {
Johannd5d92892015-04-17 16:11:38 -0400133 sad += abs(source8[h * source_stride_ + w] -
134 reference8[h * reference_stride_ + w]);
Yaowu Xuf883b422016-08-30 14:01:10 -0700135#if CONFIG_AOM_HIGHBITDEPTH
Peter de Rivaz7eee4872014-10-16 13:41:55 +0100136 } else {
Johannd5d92892015-04-17 16:11:38 -0400137 sad += abs(source16[h * source_stride_ + w] -
138 reference16[h * reference_stride_ + w]);
Yaowu Xuf883b422016-08-30 14:01:10 -0700139#endif // CONFIG_AOM_HIGHBITDEPTH
Peter de Rivaz7eee4872014-10-16 13:41:55 +0100140 }
Jim Bankoskia16794d2014-05-15 08:31:20 -0700141 }
Johannfbea8972012-06-28 11:43:58 -0700142 }
143 return sad;
144 }
145
Peter de Rivaz7eee4872014-10-16 13:41:55 +0100146 // Sum of Absolute Differences Average. Given two blocks, and a prediction
147 // calculate the absolute difference between one pixel and average of the
148 // corresponding and predicted pixels; accumulate.
Johannd5d92892015-04-17 16:11:38 -0400149 unsigned int ReferenceSADavg(int block_idx) {
Peter de Rivaz7eee4872014-10-16 13:41:55 +0100150 unsigned int sad = 0;
Johannd5d92892015-04-17 16:11:38 -0400151 const uint8_t *const reference8 = GetReference(block_idx);
152 const uint8_t *const source8 = source_data_;
153 const uint8_t *const second_pred8 = second_pred_;
Yaowu Xuf883b422016-08-30 14:01:10 -0700154#if CONFIG_AOM_HIGHBITDEPTH
Johannd5d92892015-04-17 16:11:38 -0400155 const uint16_t *const reference16 =
156 CONVERT_TO_SHORTPTR(GetReference(block_idx));
157 const uint16_t *const source16 = CONVERT_TO_SHORTPTR(source_data_);
158 const uint16_t *const second_pred16 = CONVERT_TO_SHORTPTR(second_pred_);
Yaowu Xuf883b422016-08-30 14:01:10 -0700159#endif // CONFIG_AOM_HIGHBITDEPTH
Johannfbea8972012-06-28 11:43:58 -0700160 for (int h = 0; h < height_; ++h) {
161 for (int w = 0; w < width_; ++w) {
Peter de Rivaz7eee4872014-10-16 13:41:55 +0100162 if (!use_high_bit_depth_) {
163 const int tmp = second_pred8[h * width_ + w] +
clang-format3a826f12016-08-11 17:46:05 -0700164 reference8[h * reference_stride_ + w];
Peter de Rivaz7eee4872014-10-16 13:41:55 +0100165 const uint8_t comp_pred = ROUND_POWER_OF_TWO(tmp, 1);
166 sad += abs(source8[h * source_stride_ + w] - comp_pred);
Yaowu Xuf883b422016-08-30 14:01:10 -0700167#if CONFIG_AOM_HIGHBITDEPTH
Peter de Rivaz7eee4872014-10-16 13:41:55 +0100168 } else {
169 const int tmp = second_pred16[h * width_ + w] +
clang-format3a826f12016-08-11 17:46:05 -0700170 reference16[h * reference_stride_ + w];
Peter de Rivaz7eee4872014-10-16 13:41:55 +0100171 const uint16_t comp_pred = ROUND_POWER_OF_TWO(tmp, 1);
172 sad += abs(source16[h * source_stride_ + w] - comp_pred);
Yaowu Xuf883b422016-08-30 14:01:10 -0700173#endif // CONFIG_AOM_HIGHBITDEPTH
Peter de Rivaz7eee4872014-10-16 13:41:55 +0100174 }
Peter de Rivaz7eee4872014-10-16 13:41:55 +0100175 }
176 }
177 return sad;
178 }
179
180 void FillConstant(uint8_t *data, int stride, uint16_t fill_constant) {
Peter de Rivaz7eee4872014-10-16 13:41:55 +0100181 uint8_t *data8 = data;
Yaowu Xuf883b422016-08-30 14:01:10 -0700182#if CONFIG_AOM_HIGHBITDEPTH
Peter de Rivaz7eee4872014-10-16 13:41:55 +0100183 uint16_t *data16 = CONVERT_TO_SHORTPTR(data);
Yaowu Xuf883b422016-08-30 14:01:10 -0700184#endif // CONFIG_AOM_HIGHBITDEPTH
Peter de Rivaz7eee4872014-10-16 13:41:55 +0100185 for (int h = 0; h < height_; ++h) {
186 for (int w = 0; w < width_; ++w) {
Peter de Rivaz7eee4872014-10-16 13:41:55 +0100187 if (!use_high_bit_depth_) {
Deb Mukherjee00c385f2014-11-14 15:12:01 -0800188 data8[h * stride + w] = static_cast<uint8_t>(fill_constant);
Yaowu Xuf883b422016-08-30 14:01:10 -0700189#if CONFIG_AOM_HIGHBITDEPTH
Peter de Rivaz7eee4872014-10-16 13:41:55 +0100190 } else {
191 data16[h * stride + w] = fill_constant;
Yaowu Xuf883b422016-08-30 14:01:10 -0700192#endif // CONFIG_AOM_HIGHBITDEPTH
Peter de Rivaz7eee4872014-10-16 13:41:55 +0100193 }
Johannfbea8972012-06-28 11:43:58 -0700194 }
195 }
196 }
197
198 void FillRandom(uint8_t *data, int stride) {
Peter de Rivaz7eee4872014-10-16 13:41:55 +0100199 uint8_t *data8 = data;
Yaowu Xuf883b422016-08-30 14:01:10 -0700200#if CONFIG_AOM_HIGHBITDEPTH
Peter de Rivaz7eee4872014-10-16 13:41:55 +0100201 uint16_t *data16 = CONVERT_TO_SHORTPTR(data);
Yaowu Xuf883b422016-08-30 14:01:10 -0700202#endif // CONFIG_AOM_HIGHBITDEPTH
Johannfbea8972012-06-28 11:43:58 -0700203 for (int h = 0; h < height_; ++h) {
204 for (int w = 0; w < width_; ++w) {
Peter de Rivaz7eee4872014-10-16 13:41:55 +0100205 if (!use_high_bit_depth_) {
206 data8[h * stride + w] = rnd_.Rand8();
Yaowu Xuf883b422016-08-30 14:01:10 -0700207#if CONFIG_AOM_HIGHBITDEPTH
Peter de Rivaz7eee4872014-10-16 13:41:55 +0100208 } else {
209 data16[h * stride + w] = rnd_.Rand16() & mask_;
Yaowu Xuf883b422016-08-30 14:01:10 -0700210#endif // CONFIG_AOM_HIGHBITDEPTH
Peter de Rivaz7eee4872014-10-16 13:41:55 +0100211 }
Johannfbea8972012-06-28 11:43:58 -0700212 }
213 }
214 }
215
Peter de Rivaz7eee4872014-10-16 13:41:55 +0100216 int width_, height_, mask_, bd_;
Yaowu Xuf883b422016-08-30 14:01:10 -0700217 aom_bit_depth_t bit_depth_;
Peter de Rivaz7eee4872014-10-16 13:41:55 +0100218 static uint8_t *source_data_;
219 static uint8_t *reference_data_;
220 static uint8_t *second_pred_;
John Koleszar1cfc86e2013-03-01 12:43:41 -0800221 int source_stride_;
Peter de Rivaz7eee4872014-10-16 13:41:55 +0100222 bool use_high_bit_depth_;
223 static uint8_t *source_data8_;
224 static uint8_t *reference_data8_;
225 static uint8_t *second_pred8_;
226 static uint16_t *source_data16_;
227 static uint16_t *reference_data16_;
228 static uint16_t *second_pred16_;
John Koleszar1cfc86e2013-03-01 12:43:41 -0800229 int reference_stride_;
230
231 ACMRandom rnd_;
232};
233
clang-format3a826f12016-08-11 17:46:05 -0700234class SADx4Test : public SADTestBase,
235 public ::testing::WithParamInterface<SadMxNx4Param> {
John Koleszar1cfc86e2013-03-01 12:43:41 -0800236 public:
Peter de Rivaz7eee4872014-10-16 13:41:55 +0100237 SADx4Test() : SADTestBase(GET_PARAM(0), GET_PARAM(1), GET_PARAM(3)) {}
John Koleszar1cfc86e2013-03-01 12:43:41 -0800238
239 protected:
240 void SADs(unsigned int *results) {
clang-format3a826f12016-08-11 17:46:05 -0700241 const uint8_t *references[] = { GetReference(0), GetReference(1),
242 GetReference(2), GetReference(3) };
John Koleszar1cfc86e2013-03-01 12:43:41 -0800243
clang-format3a826f12016-08-11 17:46:05 -0700244 ASM_REGISTER_STATE_CHECK(GET_PARAM(2)(
245 source_data_, source_stride_, references, reference_stride_, results));
John Koleszar1cfc86e2013-03-01 12:43:41 -0800246 }
247
248 void CheckSADs() {
249 unsigned int reference_sad, exp_sad[4];
250
251 SADs(exp_sad);
Deb Mukherjeefc882922014-05-13 10:11:42 -0700252 for (int block = 0; block < 4; ++block) {
Johannd5d92892015-04-17 16:11:38 -0400253 reference_sad = ReferenceSAD(block);
John Koleszar1cfc86e2013-03-01 12:43:41 -0800254
Deb Mukherjeefc882922014-05-13 10:11:42 -0700255 EXPECT_EQ(reference_sad, exp_sad[block]) << "block " << block;
John Koleszar1cfc86e2013-03-01 12:43:41 -0800256 }
257 }
258};
259
clang-format3a826f12016-08-11 17:46:05 -0700260class SADTest : public SADTestBase,
261 public ::testing::WithParamInterface<SadMxNParam> {
Deb Mukherjeefc882922014-05-13 10:11:42 -0700262 public:
Peter de Rivaz7eee4872014-10-16 13:41:55 +0100263 SADTest() : SADTestBase(GET_PARAM(0), GET_PARAM(1), GET_PARAM(3)) {}
Deb Mukherjeefc882922014-05-13 10:11:42 -0700264
265 protected:
Deb Mukherjeefc882922014-05-13 10:11:42 -0700266 unsigned int SAD(int block_idx) {
267 unsigned int ret;
Peter de Rivaz7eee4872014-10-16 13:41:55 +0100268 const uint8_t *const reference = GetReference(block_idx);
Deb Mukherjeefc882922014-05-13 10:11:42 -0700269
James Zern29e1b1a2014-07-09 21:02:02 -0700270 ASM_REGISTER_STATE_CHECK(ret = GET_PARAM(2)(source_data_, source_stride_,
271 reference, reference_stride_));
Deb Mukherjeefc882922014-05-13 10:11:42 -0700272 return ret;
273 }
274
275 void CheckSAD() {
Johannd5d92892015-04-17 16:11:38 -0400276 const unsigned int reference_sad = ReferenceSAD(0);
Deb Mukherjeefc882922014-05-13 10:11:42 -0700277 const unsigned int exp_sad = SAD(0);
278
279 ASSERT_EQ(reference_sad, exp_sad);
280 }
Yi Luoe9832582016-11-29 19:38:12 -0800281
282 void SpeedSAD() {
283 int test_count = 20000000;
284 while (test_count > 0) {
285 SAD(0);
286 test_count -= 1;
287 }
288 }
Deb Mukherjeefc882922014-05-13 10:11:42 -0700289};
Peter de Rivaz7eee4872014-10-16 13:41:55 +0100290
clang-format3a826f12016-08-11 17:46:05 -0700291class SADavgTest : public SADTestBase,
292 public ::testing::WithParamInterface<SadMxNAvgParam> {
Peter de Rivaz7eee4872014-10-16 13:41:55 +0100293 public:
Johannd5d92892015-04-17 16:11:38 -0400294 SADavgTest() : SADTestBase(GET_PARAM(0), GET_PARAM(1), GET_PARAM(3)) {}
Peter de Rivaz7eee4872014-10-16 13:41:55 +0100295
296 protected:
297 unsigned int SAD_avg(int block_idx) {
298 unsigned int ret;
299 const uint8_t *const reference = GetReference(block_idx);
300
301 ASM_REGISTER_STATE_CHECK(ret = GET_PARAM(2)(source_data_, source_stride_,
302 reference, reference_stride_,
303 second_pred_));
304 return ret;
305 }
306
307 void CheckSAD() {
Johannd5d92892015-04-17 16:11:38 -0400308 const unsigned int reference_sad = ReferenceSADavg(0);
Peter de Rivaz7eee4872014-10-16 13:41:55 +0100309 const unsigned int exp_sad = SAD_avg(0);
310
311 ASSERT_EQ(reference_sad, exp_sad);
312 }
313};
Deb Mukherjeefc882922014-05-13 10:11:42 -0700314
Peter de Rivaz7eee4872014-10-16 13:41:55 +0100315uint8_t *SADTestBase::source_data_ = NULL;
316uint8_t *SADTestBase::reference_data_ = NULL;
317uint8_t *SADTestBase::second_pred_ = NULL;
Peter de Rivaz7eee4872014-10-16 13:41:55 +0100318uint8_t *SADTestBase::source_data8_ = NULL;
319uint8_t *SADTestBase::reference_data8_ = NULL;
320uint8_t *SADTestBase::second_pred8_ = NULL;
321uint16_t *SADTestBase::source_data16_ = NULL;
322uint16_t *SADTestBase::reference_data16_ = NULL;
323uint16_t *SADTestBase::second_pred16_ = NULL;
James Zern10f8b362012-08-27 17:13:09 -0700324
Johannfbea8972012-06-28 11:43:58 -0700325TEST_P(SADTest, MaxRef) {
326 FillConstant(source_data_, source_stride_, 0);
Peter de Rivaz7eee4872014-10-16 13:41:55 +0100327 FillConstant(reference_data_, reference_stride_, mask_);
Johannd5d92892015-04-17 16:11:38 -0400328 CheckSAD();
Johannfbea8972012-06-28 11:43:58 -0700329}
330
Deb Mukherjeefc882922014-05-13 10:11:42 -0700331TEST_P(SADTest, MaxSrc) {
Peter de Rivaz7eee4872014-10-16 13:41:55 +0100332 FillConstant(source_data_, source_stride_, mask_);
Deb Mukherjeefc882922014-05-13 10:11:42 -0700333 FillConstant(reference_data_, reference_stride_, 0);
Johannd5d92892015-04-17 16:11:38 -0400334 CheckSAD();
Deb Mukherjeefc882922014-05-13 10:11:42 -0700335}
336
337TEST_P(SADTest, ShortRef) {
Johannd5d92892015-04-17 16:11:38 -0400338 const int tmp_stride = reference_stride_;
Deb Mukherjeefc882922014-05-13 10:11:42 -0700339 reference_stride_ >>= 1;
340 FillRandom(source_data_, source_stride_);
341 FillRandom(reference_data_, reference_stride_);
Johannd5d92892015-04-17 16:11:38 -0400342 CheckSAD();
Deb Mukherjeefc882922014-05-13 10:11:42 -0700343 reference_stride_ = tmp_stride;
344}
345
346TEST_P(SADTest, UnalignedRef) {
347 // The reference frame, but not the source frame, may be unaligned for
348 // certain types of searches.
349 const int tmp_stride = reference_stride_;
350 reference_stride_ -= 1;
351 FillRandom(source_data_, source_stride_);
352 FillRandom(reference_data_, reference_stride_);
Johannd5d92892015-04-17 16:11:38 -0400353 CheckSAD();
Deb Mukherjeefc882922014-05-13 10:11:42 -0700354 reference_stride_ = tmp_stride;
355}
356
357TEST_P(SADTest, ShortSrc) {
358 const int tmp_stride = source_stride_;
359 source_stride_ >>= 1;
Yi Luoe9832582016-11-29 19:38:12 -0800360 int test_count = 2000;
361 while (test_count > 0) {
362 FillRandom(source_data_, source_stride_);
363 FillRandom(reference_data_, reference_stride_);
364 CheckSAD();
365 test_count -= 1;
366 }
Deb Mukherjeefc882922014-05-13 10:11:42 -0700367 source_stride_ = tmp_stride;
368}
Peter de Rivaz7eee4872014-10-16 13:41:55 +0100369
Yi Luoe9832582016-11-29 19:38:12 -0800370#define SPEED_TEST (0)
371#if SPEED_TEST
372TEST_P(SADTest, Speed) {
373 const int tmp_stride = source_stride_;
374 source_stride_ >>= 1;
375 FillRandom(source_data_, source_stride_);
376 FillRandom(reference_data_, reference_stride_);
377 SpeedSAD();
378 source_stride_ = tmp_stride;
379}
380#endif
381
Johannd5d92892015-04-17 16:11:38 -0400382TEST_P(SADavgTest, MaxRef) {
Peter de Rivaz7eee4872014-10-16 13:41:55 +0100383 FillConstant(source_data_, source_stride_, 0);
384 FillConstant(reference_data_, reference_stride_, mask_);
385 FillConstant(second_pred_, width_, 0);
386 CheckSAD();
387}
Johannd5d92892015-04-17 16:11:38 -0400388TEST_P(SADavgTest, MaxSrc) {
Peter de Rivaz7eee4872014-10-16 13:41:55 +0100389 FillConstant(source_data_, source_stride_, mask_);
390 FillConstant(reference_data_, reference_stride_, 0);
391 FillConstant(second_pred_, width_, 0);
392 CheckSAD();
393}
394
Johannd5d92892015-04-17 16:11:38 -0400395TEST_P(SADavgTest, ShortRef) {
Peter de Rivaz7eee4872014-10-16 13:41:55 +0100396 const int tmp_stride = reference_stride_;
397 reference_stride_ >>= 1;
398 FillRandom(source_data_, source_stride_);
399 FillRandom(reference_data_, reference_stride_);
400 FillRandom(second_pred_, width_);
401 CheckSAD();
402 reference_stride_ = tmp_stride;
403}
404
Johannd5d92892015-04-17 16:11:38 -0400405TEST_P(SADavgTest, UnalignedRef) {
Peter de Rivaz7eee4872014-10-16 13:41:55 +0100406 // The reference frame, but not the source frame, may be unaligned for
407 // certain types of searches.
408 const int tmp_stride = reference_stride_;
409 reference_stride_ -= 1;
410 FillRandom(source_data_, source_stride_);
411 FillRandom(reference_data_, reference_stride_);
412 FillRandom(second_pred_, width_);
413 CheckSAD();
414 reference_stride_ = tmp_stride;
415}
416
Johannd5d92892015-04-17 16:11:38 -0400417TEST_P(SADavgTest, ShortSrc) {
Peter de Rivaz7eee4872014-10-16 13:41:55 +0100418 const int tmp_stride = source_stride_;
419 source_stride_ >>= 1;
Yi Luoe9832582016-11-29 19:38:12 -0800420 int test_count = 2000;
421 while (test_count > 0) {
422 FillRandom(source_data_, source_stride_);
423 FillRandom(reference_data_, reference_stride_);
424 FillRandom(second_pred_, width_);
425 CheckSAD();
426 test_count -= 1;
427 }
Peter de Rivaz7eee4872014-10-16 13:41:55 +0100428 source_stride_ = tmp_stride;
429}
Deb Mukherjeefc882922014-05-13 10:11:42 -0700430
John Koleszar1cfc86e2013-03-01 12:43:41 -0800431TEST_P(SADx4Test, MaxRef) {
432 FillConstant(source_data_, source_stride_, 0);
Peter de Rivaz7eee4872014-10-16 13:41:55 +0100433 FillConstant(GetReference(0), reference_stride_, mask_);
434 FillConstant(GetReference(1), reference_stride_, mask_);
435 FillConstant(GetReference(2), reference_stride_, mask_);
436 FillConstant(GetReference(3), reference_stride_, mask_);
John Koleszar1cfc86e2013-03-01 12:43:41 -0800437 CheckSADs();
438}
439
John Koleszar1cfc86e2013-03-01 12:43:41 -0800440TEST_P(SADx4Test, MaxSrc) {
Peter de Rivaz7eee4872014-10-16 13:41:55 +0100441 FillConstant(source_data_, source_stride_, mask_);
John Koleszar1cfc86e2013-03-01 12:43:41 -0800442 FillConstant(GetReference(0), reference_stride_, 0);
443 FillConstant(GetReference(1), reference_stride_, 0);
444 FillConstant(GetReference(2), reference_stride_, 0);
445 FillConstant(GetReference(3), reference_stride_, 0);
446 CheckSADs();
447}
448
John Koleszar1cfc86e2013-03-01 12:43:41 -0800449TEST_P(SADx4Test, ShortRef) {
450 int tmp_stride = reference_stride_;
451 reference_stride_ >>= 1;
452 FillRandom(source_data_, source_stride_);
453 FillRandom(GetReference(0), reference_stride_);
454 FillRandom(GetReference(1), reference_stride_);
455 FillRandom(GetReference(2), reference_stride_);
456 FillRandom(GetReference(3), reference_stride_);
457 CheckSADs();
458 reference_stride_ = tmp_stride;
459}
460
John Koleszar1cfc86e2013-03-01 12:43:41 -0800461TEST_P(SADx4Test, UnalignedRef) {
462 // The reference frame, but not the source frame, may be unaligned for
463 // certain types of searches.
464 int tmp_stride = reference_stride_;
465 reference_stride_ -= 1;
466 FillRandom(source_data_, source_stride_);
467 FillRandom(GetReference(0), reference_stride_);
468 FillRandom(GetReference(1), reference_stride_);
469 FillRandom(GetReference(2), reference_stride_);
470 FillRandom(GetReference(3), reference_stride_);
471 CheckSADs();
472 reference_stride_ = tmp_stride;
473}
474
John Koleszar1cfc86e2013-03-01 12:43:41 -0800475TEST_P(SADx4Test, ShortSrc) {
476 int tmp_stride = source_stride_;
477 source_stride_ >>= 1;
Yi Luoe9832582016-11-29 19:38:12 -0800478 int test_count = 1000;
479 while (test_count > 0) {
480 FillRandom(source_data_, source_stride_);
481 FillRandom(GetReference(0), reference_stride_);
482 FillRandom(GetReference(1), reference_stride_);
483 FillRandom(GetReference(2), reference_stride_);
484 FillRandom(GetReference(3), reference_stride_);
485 CheckSADs();
486 test_count -= 1;
487 }
John Koleszar1cfc86e2013-03-01 12:43:41 -0800488 source_stride_ = tmp_stride;
489}
490
Peter de Rivaz7eee4872014-10-16 13:41:55 +0100491TEST_P(SADx4Test, SrcAlignedByWidth) {
clang-format3a826f12016-08-11 17:46:05 -0700492 uint8_t *tmp_source_data = source_data_;
Peter de Rivaz7eee4872014-10-16 13:41:55 +0100493 source_data_ += width_;
494 FillRandom(source_data_, source_stride_);
495 FillRandom(GetReference(0), reference_stride_);
496 FillRandom(GetReference(1), reference_stride_);
497 FillRandom(GetReference(2), reference_stride_);
498 FillRandom(GetReference(3), reference_stride_);
499 CheckSADs();
500 source_data_ = tmp_source_data;
501}
502
James Zern12ddb752012-08-15 11:54:41 -0700503using std::tr1::make_tuple;
504
James Zernd7cff282014-02-27 12:49:02 -0800505//------------------------------------------------------------------------------
506// C functions
James Zern18e733b2014-07-16 18:59:28 -0700507const SadMxNParam c_tests[] = {
Yaowu Xuf883b422016-08-30 14:01:10 -0700508#if CONFIG_AV1 && CONFIG_EXT_PARTITION
509 make_tuple(128, 128, &aom_sad128x128_c, -1),
510 make_tuple(128, 64, &aom_sad128x64_c, -1),
511 make_tuple(64, 128, &aom_sad64x128_c, -1),
512#endif // CONFIG_AV1 && CONFIG_EXT_PARTITION
513 make_tuple(64, 64, &aom_sad64x64_c, -1),
514 make_tuple(64, 32, &aom_sad64x32_c, -1),
515 make_tuple(32, 64, &aom_sad32x64_c, -1),
516 make_tuple(32, 32, &aom_sad32x32_c, -1),
517 make_tuple(32, 16, &aom_sad32x16_c, -1),
518 make_tuple(16, 32, &aom_sad16x32_c, -1),
519 make_tuple(16, 16, &aom_sad16x16_c, -1),
520 make_tuple(16, 8, &aom_sad16x8_c, -1),
521 make_tuple(8, 16, &aom_sad8x16_c, -1),
522 make_tuple(8, 8, &aom_sad8x8_c, -1),
523 make_tuple(8, 4, &aom_sad8x4_c, -1),
524 make_tuple(4, 8, &aom_sad4x8_c, -1),
525 make_tuple(4, 4, &aom_sad4x4_c, -1),
526#if CONFIG_AOM_HIGHBITDEPTH
527#if CONFIG_AV1 && CONFIG_EXT_PARTITION
528 make_tuple(128, 128, &aom_highbd_sad128x128_c, 8),
529 make_tuple(128, 64, &aom_highbd_sad128x64_c, 8),
530 make_tuple(64, 128, &aom_highbd_sad64x128_c, 8),
531#endif // CONFIG_AV1 && CONFIG_EXT_PARTITION
532 make_tuple(64, 64, &aom_highbd_sad64x64_c, 8),
533 make_tuple(64, 32, &aom_highbd_sad64x32_c, 8),
534 make_tuple(32, 64, &aom_highbd_sad32x64_c, 8),
535 make_tuple(32, 32, &aom_highbd_sad32x32_c, 8),
536 make_tuple(32, 16, &aom_highbd_sad32x16_c, 8),
537 make_tuple(16, 32, &aom_highbd_sad16x32_c, 8),
538 make_tuple(16, 16, &aom_highbd_sad16x16_c, 8),
539 make_tuple(16, 8, &aom_highbd_sad16x8_c, 8),
540 make_tuple(8, 16, &aom_highbd_sad8x16_c, 8),
541 make_tuple(8, 8, &aom_highbd_sad8x8_c, 8),
542 make_tuple(8, 4, &aom_highbd_sad8x4_c, 8),
543 make_tuple(4, 8, &aom_highbd_sad4x8_c, 8),
544 make_tuple(4, 4, &aom_highbd_sad4x4_c, 8),
545#if CONFIG_AV1 && CONFIG_EXT_PARTITION
546 make_tuple(128, 128, &aom_highbd_sad128x128_c, 10),
547 make_tuple(128, 64, &aom_highbd_sad128x64_c, 10),
548 make_tuple(64, 128, &aom_highbd_sad64x128_c, 10),
549#endif // CONFIG_AV1 && CONFIG_EXT_PARTITION
550 make_tuple(64, 64, &aom_highbd_sad64x64_c, 10),
551 make_tuple(64, 32, &aom_highbd_sad64x32_c, 10),
552 make_tuple(32, 64, &aom_highbd_sad32x64_c, 10),
553 make_tuple(32, 32, &aom_highbd_sad32x32_c, 10),
554 make_tuple(32, 16, &aom_highbd_sad32x16_c, 10),
555 make_tuple(16, 32, &aom_highbd_sad16x32_c, 10),
556 make_tuple(16, 16, &aom_highbd_sad16x16_c, 10),
557 make_tuple(16, 8, &aom_highbd_sad16x8_c, 10),
558 make_tuple(8, 16, &aom_highbd_sad8x16_c, 10),
559 make_tuple(8, 8, &aom_highbd_sad8x8_c, 10),
560 make_tuple(8, 4, &aom_highbd_sad8x4_c, 10),
561 make_tuple(4, 8, &aom_highbd_sad4x8_c, 10),
562 make_tuple(4, 4, &aom_highbd_sad4x4_c, 10),
563#if CONFIG_AV1 && CONFIG_EXT_PARTITION
564 make_tuple(128, 128, &aom_highbd_sad128x128_c, 12),
565 make_tuple(128, 64, &aom_highbd_sad128x64_c, 12),
566 make_tuple(64, 128, &aom_highbd_sad64x128_c, 12),
567#endif // CONFIG_AV1 && CONFIG_EXT_PARTITION
568 make_tuple(64, 64, &aom_highbd_sad64x64_c, 12),
569 make_tuple(64, 32, &aom_highbd_sad64x32_c, 12),
570 make_tuple(32, 64, &aom_highbd_sad32x64_c, 12),
571 make_tuple(32, 32, &aom_highbd_sad32x32_c, 12),
572 make_tuple(32, 16, &aom_highbd_sad32x16_c, 12),
573 make_tuple(16, 32, &aom_highbd_sad16x32_c, 12),
574 make_tuple(16, 16, &aom_highbd_sad16x16_c, 12),
575 make_tuple(16, 8, &aom_highbd_sad16x8_c, 12),
576 make_tuple(8, 16, &aom_highbd_sad8x16_c, 12),
577 make_tuple(8, 8, &aom_highbd_sad8x8_c, 12),
578 make_tuple(8, 4, &aom_highbd_sad8x4_c, 12),
579 make_tuple(4, 8, &aom_highbd_sad4x8_c, 12),
580 make_tuple(4, 4, &aom_highbd_sad4x4_c, 12),
581#endif // CONFIG_AOM_HIGHBITDEPTH
Deb Mukherjeefc882922014-05-13 10:11:42 -0700582};
583INSTANTIATE_TEST_CASE_P(C, SADTest, ::testing::ValuesIn(c_tests));
Deb Mukherjeefc882922014-05-13 10:11:42 -0700584
Johannd5d92892015-04-17 16:11:38 -0400585const SadMxNAvgParam avg_c_tests[] = {
Yaowu Xuf883b422016-08-30 14:01:10 -0700586#if CONFIG_AV1 && CONFIG_EXT_PARTITION
587 make_tuple(128, 128, &aom_sad128x128_avg_c, -1),
588 make_tuple(128, 64, &aom_sad128x64_avg_c, -1),
589 make_tuple(64, 128, &aom_sad64x128_avg_c, -1),
590#endif // CONFIG_AV1 && CONFIG_EXT_PARTITION
591 make_tuple(64, 64, &aom_sad64x64_avg_c, -1),
592 make_tuple(64, 32, &aom_sad64x32_avg_c, -1),
593 make_tuple(32, 64, &aom_sad32x64_avg_c, -1),
594 make_tuple(32, 32, &aom_sad32x32_avg_c, -1),
595 make_tuple(32, 16, &aom_sad32x16_avg_c, -1),
596 make_tuple(16, 32, &aom_sad16x32_avg_c, -1),
597 make_tuple(16, 16, &aom_sad16x16_avg_c, -1),
598 make_tuple(16, 8, &aom_sad16x8_avg_c, -1),
599 make_tuple(8, 16, &aom_sad8x16_avg_c, -1),
600 make_tuple(8, 8, &aom_sad8x8_avg_c, -1),
601 make_tuple(8, 4, &aom_sad8x4_avg_c, -1),
602 make_tuple(4, 8, &aom_sad4x8_avg_c, -1),
603 make_tuple(4, 4, &aom_sad4x4_avg_c, -1),
604#if CONFIG_AOM_HIGHBITDEPTH
605#if CONFIG_AV1 && CONFIG_EXT_PARTITION
606 make_tuple(128, 128, &aom_highbd_sad128x128_avg_c, 8),
607 make_tuple(128, 64, &aom_highbd_sad128x64_avg_c, 8),
608 make_tuple(64, 128, &aom_highbd_sad64x128_avg_c, 8),
609#endif // CONFIG_AV1 && CONFIG_EXT_PARTITION
610 make_tuple(64, 64, &aom_highbd_sad64x64_avg_c, 8),
611 make_tuple(64, 32, &aom_highbd_sad64x32_avg_c, 8),
612 make_tuple(32, 64, &aom_highbd_sad32x64_avg_c, 8),
613 make_tuple(32, 32, &aom_highbd_sad32x32_avg_c, 8),
614 make_tuple(32, 16, &aom_highbd_sad32x16_avg_c, 8),
615 make_tuple(16, 32, &aom_highbd_sad16x32_avg_c, 8),
616 make_tuple(16, 16, &aom_highbd_sad16x16_avg_c, 8),
617 make_tuple(16, 8, &aom_highbd_sad16x8_avg_c, 8),
618 make_tuple(8, 16, &aom_highbd_sad8x16_avg_c, 8),
619 make_tuple(8, 8, &aom_highbd_sad8x8_avg_c, 8),
620 make_tuple(8, 4, &aom_highbd_sad8x4_avg_c, 8),
621 make_tuple(4, 8, &aom_highbd_sad4x8_avg_c, 8),
622 make_tuple(4, 4, &aom_highbd_sad4x4_avg_c, 8),
623#if CONFIG_AV1 && CONFIG_EXT_PARTITION
624 make_tuple(128, 128, &aom_highbd_sad128x128_avg_c, 10),
625 make_tuple(128, 64, &aom_highbd_sad128x64_avg_c, 10),
626 make_tuple(64, 128, &aom_highbd_sad64x128_avg_c, 10),
627#endif // CONFIG_AV1 && CONFIG_EXT_PARTITION
628 make_tuple(64, 64, &aom_highbd_sad64x64_avg_c, 10),
629 make_tuple(64, 32, &aom_highbd_sad64x32_avg_c, 10),
630 make_tuple(32, 64, &aom_highbd_sad32x64_avg_c, 10),
631 make_tuple(32, 32, &aom_highbd_sad32x32_avg_c, 10),
632 make_tuple(32, 16, &aom_highbd_sad32x16_avg_c, 10),
633 make_tuple(16, 32, &aom_highbd_sad16x32_avg_c, 10),
634 make_tuple(16, 16, &aom_highbd_sad16x16_avg_c, 10),
635 make_tuple(16, 8, &aom_highbd_sad16x8_avg_c, 10),
636 make_tuple(8, 16, &aom_highbd_sad8x16_avg_c, 10),
637 make_tuple(8, 8, &aom_highbd_sad8x8_avg_c, 10),
638 make_tuple(8, 4, &aom_highbd_sad8x4_avg_c, 10),
639 make_tuple(4, 8, &aom_highbd_sad4x8_avg_c, 10),
640 make_tuple(4, 4, &aom_highbd_sad4x4_avg_c, 10),
641#if CONFIG_AV1 && CONFIG_EXT_PARTITION
642 make_tuple(128, 128, &aom_highbd_sad128x128_avg_c, 12),
643 make_tuple(128, 64, &aom_highbd_sad128x64_avg_c, 12),
644 make_tuple(64, 128, &aom_highbd_sad64x128_avg_c, 12),
645#endif // CONFIG_AV1 && CONFIG_EXT_PARTITION
646 make_tuple(64, 64, &aom_highbd_sad64x64_avg_c, 12),
647 make_tuple(64, 32, &aom_highbd_sad64x32_avg_c, 12),
648 make_tuple(32, 64, &aom_highbd_sad32x64_avg_c, 12),
649 make_tuple(32, 32, &aom_highbd_sad32x32_avg_c, 12),
650 make_tuple(32, 16, &aom_highbd_sad32x16_avg_c, 12),
651 make_tuple(16, 32, &aom_highbd_sad16x32_avg_c, 12),
652 make_tuple(16, 16, &aom_highbd_sad16x16_avg_c, 12),
653 make_tuple(16, 8, &aom_highbd_sad16x8_avg_c, 12),
654 make_tuple(8, 16, &aom_highbd_sad8x16_avg_c, 12),
655 make_tuple(8, 8, &aom_highbd_sad8x8_avg_c, 12),
656 make_tuple(8, 4, &aom_highbd_sad8x4_avg_c, 12),
657 make_tuple(4, 8, &aom_highbd_sad4x8_avg_c, 12),
658 make_tuple(4, 4, &aom_highbd_sad4x4_avg_c, 12),
659#endif // CONFIG_AOM_HIGHBITDEPTH
Johannd5d92892015-04-17 16:11:38 -0400660};
661INSTANTIATE_TEST_CASE_P(C, SADavgTest, ::testing::ValuesIn(avg_c_tests));
662
Johannd5d92892015-04-17 16:11:38 -0400663const SadMxNx4Param x4d_c_tests[] = {
Yaowu Xuf883b422016-08-30 14:01:10 -0700664#if CONFIG_AV1 && CONFIG_EXT_PARTITION
665 make_tuple(128, 128, &aom_sad128x128x4d_c, -1),
666 make_tuple(128, 64, &aom_sad128x64x4d_c, -1),
667 make_tuple(64, 128, &aom_sad64x128x4d_c, -1),
668#endif // CONFIG_AV1 && CONFIG_EXT_PARTITION
669 make_tuple(64, 64, &aom_sad64x64x4d_c, -1),
670 make_tuple(64, 32, &aom_sad64x32x4d_c, -1),
671 make_tuple(32, 64, &aom_sad32x64x4d_c, -1),
672 make_tuple(32, 32, &aom_sad32x32x4d_c, -1),
673 make_tuple(32, 16, &aom_sad32x16x4d_c, -1),
674 make_tuple(16, 32, &aom_sad16x32x4d_c, -1),
675 make_tuple(16, 16, &aom_sad16x16x4d_c, -1),
676 make_tuple(16, 8, &aom_sad16x8x4d_c, -1),
677 make_tuple(8, 16, &aom_sad8x16x4d_c, -1),
678 make_tuple(8, 8, &aom_sad8x8x4d_c, -1),
679 make_tuple(8, 4, &aom_sad8x4x4d_c, -1),
680 make_tuple(4, 8, &aom_sad4x8x4d_c, -1),
681 make_tuple(4, 4, &aom_sad4x4x4d_c, -1),
682#if CONFIG_AOM_HIGHBITDEPTH
683#if CONFIG_AV1 && CONFIG_EXT_PARTITION
684 make_tuple(128, 128, &aom_highbd_sad128x128x4d_c, 8),
685 make_tuple(128, 64, &aom_highbd_sad128x64x4d_c, 8),
686 make_tuple(64, 128, &aom_highbd_sad64x128x4d_c, 8),
687#endif // CONFIG_AV1 && CONFIG_EXT_PARTITION
688 make_tuple(64, 64, &aom_highbd_sad64x64x4d_c, 8),
689 make_tuple(64, 32, &aom_highbd_sad64x32x4d_c, 8),
690 make_tuple(32, 64, &aom_highbd_sad32x64x4d_c, 8),
691 make_tuple(32, 32, &aom_highbd_sad32x32x4d_c, 8),
692 make_tuple(32, 16, &aom_highbd_sad32x16x4d_c, 8),
693 make_tuple(16, 32, &aom_highbd_sad16x32x4d_c, 8),
694 make_tuple(16, 16, &aom_highbd_sad16x16x4d_c, 8),
695 make_tuple(16, 8, &aom_highbd_sad16x8x4d_c, 8),
696 make_tuple(8, 16, &aom_highbd_sad8x16x4d_c, 8),
697 make_tuple(8, 8, &aom_highbd_sad8x8x4d_c, 8),
698 make_tuple(8, 4, &aom_highbd_sad8x4x4d_c, 8),
699 make_tuple(4, 8, &aom_highbd_sad4x8x4d_c, 8),
700 make_tuple(4, 4, &aom_highbd_sad4x4x4d_c, 8),
701#if CONFIG_AV1 && CONFIG_EXT_PARTITION
702 make_tuple(128, 128, &aom_highbd_sad128x128x4d_c, 10),
703 make_tuple(128, 64, &aom_highbd_sad128x64x4d_c, 10),
704 make_tuple(64, 128, &aom_highbd_sad64x128x4d_c, 10),
705#endif // CONFIG_AV1 && CONFIG_EXT_PARTITION
706 make_tuple(64, 64, &aom_highbd_sad64x64x4d_c, 10),
707 make_tuple(64, 32, &aom_highbd_sad64x32x4d_c, 10),
708 make_tuple(32, 64, &aom_highbd_sad32x64x4d_c, 10),
709 make_tuple(32, 32, &aom_highbd_sad32x32x4d_c, 10),
710 make_tuple(32, 16, &aom_highbd_sad32x16x4d_c, 10),
711 make_tuple(16, 32, &aom_highbd_sad16x32x4d_c, 10),
712 make_tuple(16, 16, &aom_highbd_sad16x16x4d_c, 10),
713 make_tuple(16, 8, &aom_highbd_sad16x8x4d_c, 10),
714 make_tuple(8, 16, &aom_highbd_sad8x16x4d_c, 10),
715 make_tuple(8, 8, &aom_highbd_sad8x8x4d_c, 10),
716 make_tuple(8, 4, &aom_highbd_sad8x4x4d_c, 10),
717 make_tuple(4, 8, &aom_highbd_sad4x8x4d_c, 10),
718 make_tuple(4, 4, &aom_highbd_sad4x4x4d_c, 10),
719#if CONFIG_AV1 && CONFIG_EXT_PARTITION
720 make_tuple(128, 128, &aom_highbd_sad128x128x4d_c, 12),
721 make_tuple(128, 64, &aom_highbd_sad128x64x4d_c, 12),
722 make_tuple(64, 128, &aom_highbd_sad64x128x4d_c, 12),
723#endif // CONFIG_AV1 && CONFIG_EXT_PARTITION
724 make_tuple(64, 64, &aom_highbd_sad64x64x4d_c, 12),
725 make_tuple(64, 32, &aom_highbd_sad64x32x4d_c, 12),
726 make_tuple(32, 64, &aom_highbd_sad32x64x4d_c, 12),
727 make_tuple(32, 32, &aom_highbd_sad32x32x4d_c, 12),
728 make_tuple(32, 16, &aom_highbd_sad32x16x4d_c, 12),
729 make_tuple(16, 32, &aom_highbd_sad16x32x4d_c, 12),
730 make_tuple(16, 16, &aom_highbd_sad16x16x4d_c, 12),
731 make_tuple(16, 8, &aom_highbd_sad16x8x4d_c, 12),
732 make_tuple(8, 16, &aom_highbd_sad8x16x4d_c, 12),
733 make_tuple(8, 8, &aom_highbd_sad8x8x4d_c, 12),
734 make_tuple(8, 4, &aom_highbd_sad8x4x4d_c, 12),
735 make_tuple(4, 8, &aom_highbd_sad4x8x4d_c, 12),
736 make_tuple(4, 4, &aom_highbd_sad4x4x4d_c, 12),
737#endif // CONFIG_AOM_HIGHBITDEPTH
Johannd5d92892015-04-17 16:11:38 -0400738};
739INSTANTIATE_TEST_CASE_P(C, SADx4Test, ::testing::ValuesIn(x4d_c_tests));
John Koleszar1cfc86e2013-03-01 12:43:41 -0800740
James Zernd7cff282014-02-27 12:49:02 -0800741//------------------------------------------------------------------------------
742// ARM functions
Johannfbea8972012-06-28 11:43:58 -0700743#if HAVE_MEDIA
Johannd5d92892015-04-17 16:11:38 -0400744const SadMxNParam media_tests[] = {
Yaowu Xuf883b422016-08-30 14:01:10 -0700745 make_tuple(16, 16, &aom_sad16x16_media, -1),
Johannd5d92892015-04-17 16:11:38 -0400746};
747INSTANTIATE_TEST_CASE_P(MEDIA, SADTest, ::testing::ValuesIn(media_tests));
Deb Mukherjeefc882922014-05-13 10:11:42 -0700748#endif // HAVE_MEDIA
James Zern5f1486f2014-02-27 14:03:21 -0800749
Johannfbea8972012-06-28 11:43:58 -0700750#if HAVE_NEON
Johannd5d92892015-04-17 16:11:38 -0400751const SadMxNParam neon_tests[] = {
Yaowu Xuf883b422016-08-30 14:01:10 -0700752 make_tuple(64, 64, &aom_sad64x64_neon, -1),
753 make_tuple(32, 32, &aom_sad32x32_neon, -1),
754 make_tuple(16, 16, &aom_sad16x16_neon, -1),
755 make_tuple(16, 8, &aom_sad16x8_neon, -1),
756 make_tuple(8, 16, &aom_sad8x16_neon, -1),
757 make_tuple(8, 8, &aom_sad8x8_neon, -1),
758 make_tuple(4, 4, &aom_sad4x4_neon, -1),
Scott LaVarnway696fa522014-07-16 12:54:46 -0700759};
Johannd5d92892015-04-17 16:11:38 -0400760INSTANTIATE_TEST_CASE_P(NEON, SADTest, ::testing::ValuesIn(neon_tests));
761
Johannd5d92892015-04-17 16:11:38 -0400762const SadMxNx4Param x4d_neon_tests[] = {
Yaowu Xuf883b422016-08-30 14:01:10 -0700763 make_tuple(64, 64, &aom_sad64x64x4d_neon, -1),
764 make_tuple(32, 32, &aom_sad32x32x4d_neon, -1),
765 make_tuple(16, 16, &aom_sad16x16x4d_neon, -1),
Johannd5d92892015-04-17 16:11:38 -0400766};
767INSTANTIATE_TEST_CASE_P(NEON, SADx4Test, ::testing::ValuesIn(x4d_neon_tests));
Deb Mukherjeefc882922014-05-13 10:11:42 -0700768#endif // HAVE_NEON
Johannfbea8972012-06-28 11:43:58 -0700769
James Zernd7cff282014-02-27 12:49:02 -0800770//------------------------------------------------------------------------------
771// x86 functions
Johannfbea8972012-06-28 11:43:58 -0700772#if HAVE_SSE2
James Zern18e733b2014-07-16 18:59:28 -0700773const SadMxNParam sse2_tests[] = {
Yaowu Xuf883b422016-08-30 14:01:10 -0700774#if CONFIG_AV1 && CONFIG_EXT_PARTITION
775 make_tuple(128, 128, &aom_sad128x128_sse2, -1),
776 make_tuple(128, 64, &aom_sad128x64_sse2, -1),
777 make_tuple(64, 128, &aom_sad64x128_sse2, -1),
778#endif // CONFIG_AV1 && CONFIG_EXT_PARTITION
779 make_tuple(64, 64, &aom_sad64x64_sse2, -1),
780 make_tuple(64, 32, &aom_sad64x32_sse2, -1),
781 make_tuple(32, 64, &aom_sad32x64_sse2, -1),
782 make_tuple(32, 32, &aom_sad32x32_sse2, -1),
783 make_tuple(32, 16, &aom_sad32x16_sse2, -1),
784 make_tuple(16, 32, &aom_sad16x32_sse2, -1),
785 make_tuple(16, 16, &aom_sad16x16_sse2, -1),
786 make_tuple(16, 8, &aom_sad16x8_sse2, -1),
787 make_tuple(8, 16, &aom_sad8x16_sse2, -1),
788 make_tuple(8, 8, &aom_sad8x8_sse2, -1),
789 make_tuple(8, 4, &aom_sad8x4_sse2, -1),
790 make_tuple(4, 8, &aom_sad4x8_sse2, -1),
791 make_tuple(4, 4, &aom_sad4x4_sse2, -1),
792#if CONFIG_AOM_HIGHBITDEPTH
793 make_tuple(64, 64, &aom_highbd_sad64x64_sse2, 8),
794 make_tuple(64, 32, &aom_highbd_sad64x32_sse2, 8),
795 make_tuple(32, 64, &aom_highbd_sad32x64_sse2, 8),
796 make_tuple(32, 32, &aom_highbd_sad32x32_sse2, 8),
797 make_tuple(32, 16, &aom_highbd_sad32x16_sse2, 8),
798 make_tuple(16, 32, &aom_highbd_sad16x32_sse2, 8),
799 make_tuple(16, 16, &aom_highbd_sad16x16_sse2, 8),
800 make_tuple(16, 8, &aom_highbd_sad16x8_sse2, 8),
801 make_tuple(8, 16, &aom_highbd_sad8x16_sse2, 8),
802 make_tuple(8, 8, &aom_highbd_sad8x8_sse2, 8),
803 make_tuple(8, 4, &aom_highbd_sad8x4_sse2, 8),
804 make_tuple(64, 64, &aom_highbd_sad64x64_sse2, 10),
805 make_tuple(64, 32, &aom_highbd_sad64x32_sse2, 10),
806 make_tuple(32, 64, &aom_highbd_sad32x64_sse2, 10),
807 make_tuple(32, 32, &aom_highbd_sad32x32_sse2, 10),
808 make_tuple(32, 16, &aom_highbd_sad32x16_sse2, 10),
809 make_tuple(16, 32, &aom_highbd_sad16x32_sse2, 10),
810 make_tuple(16, 16, &aom_highbd_sad16x16_sse2, 10),
811 make_tuple(16, 8, &aom_highbd_sad16x8_sse2, 10),
812 make_tuple(8, 16, &aom_highbd_sad8x16_sse2, 10),
813 make_tuple(8, 8, &aom_highbd_sad8x8_sse2, 10),
814 make_tuple(8, 4, &aom_highbd_sad8x4_sse2, 10),
815 make_tuple(64, 64, &aom_highbd_sad64x64_sse2, 12),
816 make_tuple(64, 32, &aom_highbd_sad64x32_sse2, 12),
817 make_tuple(32, 64, &aom_highbd_sad32x64_sse2, 12),
818 make_tuple(32, 32, &aom_highbd_sad32x32_sse2, 12),
819 make_tuple(32, 16, &aom_highbd_sad32x16_sse2, 12),
820 make_tuple(16, 32, &aom_highbd_sad16x32_sse2, 12),
821 make_tuple(16, 16, &aom_highbd_sad16x16_sse2, 12),
822 make_tuple(16, 8, &aom_highbd_sad16x8_sse2, 12),
823 make_tuple(8, 16, &aom_highbd_sad8x16_sse2, 12),
824 make_tuple(8, 8, &aom_highbd_sad8x8_sse2, 12),
825 make_tuple(8, 4, &aom_highbd_sad8x4_sse2, 12),
826#endif // CONFIG_AOM_HIGHBITDEPTH
Deb Mukherjeefc882922014-05-13 10:11:42 -0700827};
828INSTANTIATE_TEST_CASE_P(SSE2, SADTest, ::testing::ValuesIn(sse2_tests));
Deb Mukherjeefc882922014-05-13 10:11:42 -0700829
Johannd5d92892015-04-17 16:11:38 -0400830const SadMxNAvgParam avg_sse2_tests[] = {
Yaowu Xuf883b422016-08-30 14:01:10 -0700831#if CONFIG_AV1 && CONFIG_EXT_PARTITION
832 make_tuple(128, 128, &aom_sad128x128_avg_sse2, -1),
833 make_tuple(128, 64, &aom_sad128x64_avg_sse2, -1),
834 make_tuple(64, 128, &aom_sad64x128_avg_sse2, -1),
835#endif // CONFIG_AV1 && CONFIG_EXT_PARTITION
836 make_tuple(64, 64, &aom_sad64x64_avg_sse2, -1),
837 make_tuple(64, 32, &aom_sad64x32_avg_sse2, -1),
838 make_tuple(32, 64, &aom_sad32x64_avg_sse2, -1),
839 make_tuple(32, 32, &aom_sad32x32_avg_sse2, -1),
840 make_tuple(32, 16, &aom_sad32x16_avg_sse2, -1),
841 make_tuple(16, 32, &aom_sad16x32_avg_sse2, -1),
842 make_tuple(16, 16, &aom_sad16x16_avg_sse2, -1),
843 make_tuple(16, 8, &aom_sad16x8_avg_sse2, -1),
844 make_tuple(8, 16, &aom_sad8x16_avg_sse2, -1),
845 make_tuple(8, 8, &aom_sad8x8_avg_sse2, -1),
846 make_tuple(8, 4, &aom_sad8x4_avg_sse2, -1),
847 make_tuple(4, 8, &aom_sad4x8_avg_sse2, -1),
848 make_tuple(4, 4, &aom_sad4x4_avg_sse2, -1),
849#if CONFIG_AOM_HIGHBITDEPTH
850 make_tuple(64, 64, &aom_highbd_sad64x64_avg_sse2, 8),
851 make_tuple(64, 32, &aom_highbd_sad64x32_avg_sse2, 8),
852 make_tuple(32, 64, &aom_highbd_sad32x64_avg_sse2, 8),
853 make_tuple(32, 32, &aom_highbd_sad32x32_avg_sse2, 8),
854 make_tuple(32, 16, &aom_highbd_sad32x16_avg_sse2, 8),
855 make_tuple(16, 32, &aom_highbd_sad16x32_avg_sse2, 8),
856 make_tuple(16, 16, &aom_highbd_sad16x16_avg_sse2, 8),
857 make_tuple(16, 8, &aom_highbd_sad16x8_avg_sse2, 8),
858 make_tuple(8, 16, &aom_highbd_sad8x16_avg_sse2, 8),
859 make_tuple(8, 8, &aom_highbd_sad8x8_avg_sse2, 8),
860 make_tuple(8, 4, &aom_highbd_sad8x4_avg_sse2, 8),
861 make_tuple(64, 64, &aom_highbd_sad64x64_avg_sse2, 10),
862 make_tuple(64, 32, &aom_highbd_sad64x32_avg_sse2, 10),
863 make_tuple(32, 64, &aom_highbd_sad32x64_avg_sse2, 10),
864 make_tuple(32, 32, &aom_highbd_sad32x32_avg_sse2, 10),
865 make_tuple(32, 16, &aom_highbd_sad32x16_avg_sse2, 10),
866 make_tuple(16, 32, &aom_highbd_sad16x32_avg_sse2, 10),
867 make_tuple(16, 16, &aom_highbd_sad16x16_avg_sse2, 10),
868 make_tuple(16, 8, &aom_highbd_sad16x8_avg_sse2, 10),
869 make_tuple(8, 16, &aom_highbd_sad8x16_avg_sse2, 10),
870 make_tuple(8, 8, &aom_highbd_sad8x8_avg_sse2, 10),
871 make_tuple(8, 4, &aom_highbd_sad8x4_avg_sse2, 10),
872 make_tuple(64, 64, &aom_highbd_sad64x64_avg_sse2, 12),
873 make_tuple(64, 32, &aom_highbd_sad64x32_avg_sse2, 12),
874 make_tuple(32, 64, &aom_highbd_sad32x64_avg_sse2, 12),
875 make_tuple(32, 32, &aom_highbd_sad32x32_avg_sse2, 12),
876 make_tuple(32, 16, &aom_highbd_sad32x16_avg_sse2, 12),
877 make_tuple(16, 32, &aom_highbd_sad16x32_avg_sse2, 12),
878 make_tuple(16, 16, &aom_highbd_sad16x16_avg_sse2, 12),
879 make_tuple(16, 8, &aom_highbd_sad16x8_avg_sse2, 12),
880 make_tuple(8, 16, &aom_highbd_sad8x16_avg_sse2, 12),
881 make_tuple(8, 8, &aom_highbd_sad8x8_avg_sse2, 12),
882 make_tuple(8, 4, &aom_highbd_sad8x4_avg_sse2, 12),
883#endif // CONFIG_AOM_HIGHBITDEPTH
Johannd5d92892015-04-17 16:11:38 -0400884};
885INSTANTIATE_TEST_CASE_P(SSE2, SADavgTest, ::testing::ValuesIn(avg_sse2_tests));
886
Johannd5d92892015-04-17 16:11:38 -0400887const SadMxNx4Param x4d_sse2_tests[] = {
Yaowu Xuf883b422016-08-30 14:01:10 -0700888#if CONFIG_AV1 && CONFIG_EXT_PARTITION
889 make_tuple(128, 128, &aom_sad128x128x4d_sse2, -1),
890 make_tuple(128, 64, &aom_sad128x64x4d_sse2, -1),
891 make_tuple(64, 128, &aom_sad64x128x4d_sse2, -1),
892#endif // CONFIG_AV1 && CONFIG_EXT_PARTITION
893 make_tuple(64, 64, &aom_sad64x64x4d_sse2, -1),
894 make_tuple(64, 32, &aom_sad64x32x4d_sse2, -1),
895 make_tuple(32, 64, &aom_sad32x64x4d_sse2, -1),
896 make_tuple(32, 32, &aom_sad32x32x4d_sse2, -1),
897 make_tuple(32, 16, &aom_sad32x16x4d_sse2, -1),
898 make_tuple(16, 32, &aom_sad16x32x4d_sse2, -1),
899 make_tuple(16, 16, &aom_sad16x16x4d_sse2, -1),
900 make_tuple(16, 8, &aom_sad16x8x4d_sse2, -1),
901 make_tuple(8, 16, &aom_sad8x16x4d_sse2, -1),
902 make_tuple(8, 8, &aom_sad8x8x4d_sse2, -1),
903 make_tuple(8, 4, &aom_sad8x4x4d_sse2, -1),
904 make_tuple(4, 8, &aom_sad4x8x4d_sse2, -1),
905 make_tuple(4, 4, &aom_sad4x4x4d_sse2, -1),
906#if CONFIG_AOM_HIGHBITDEPTH
907 make_tuple(64, 64, &aom_highbd_sad64x64x4d_sse2, 8),
908 make_tuple(64, 32, &aom_highbd_sad64x32x4d_sse2, 8),
909 make_tuple(32, 64, &aom_highbd_sad32x64x4d_sse2, 8),
910 make_tuple(32, 32, &aom_highbd_sad32x32x4d_sse2, 8),
911 make_tuple(32, 16, &aom_highbd_sad32x16x4d_sse2, 8),
912 make_tuple(16, 32, &aom_highbd_sad16x32x4d_sse2, 8),
913 make_tuple(16, 16, &aom_highbd_sad16x16x4d_sse2, 8),
914 make_tuple(16, 8, &aom_highbd_sad16x8x4d_sse2, 8),
915 make_tuple(8, 16, &aom_highbd_sad8x16x4d_sse2, 8),
916 make_tuple(8, 8, &aom_highbd_sad8x8x4d_sse2, 8),
917 make_tuple(8, 4, &aom_highbd_sad8x4x4d_sse2, 8),
918 make_tuple(4, 8, &aom_highbd_sad4x8x4d_sse2, 8),
919 make_tuple(4, 4, &aom_highbd_sad4x4x4d_sse2, 8),
920 make_tuple(64, 64, &aom_highbd_sad64x64x4d_sse2, 10),
921 make_tuple(64, 32, &aom_highbd_sad64x32x4d_sse2, 10),
922 make_tuple(32, 64, &aom_highbd_sad32x64x4d_sse2, 10),
923 make_tuple(32, 32, &aom_highbd_sad32x32x4d_sse2, 10),
924 make_tuple(32, 16, &aom_highbd_sad32x16x4d_sse2, 10),
925 make_tuple(16, 32, &aom_highbd_sad16x32x4d_sse2, 10),
926 make_tuple(16, 16, &aom_highbd_sad16x16x4d_sse2, 10),
927 make_tuple(16, 8, &aom_highbd_sad16x8x4d_sse2, 10),
928 make_tuple(8, 16, &aom_highbd_sad8x16x4d_sse2, 10),
929 make_tuple(8, 8, &aom_highbd_sad8x8x4d_sse2, 10),
930 make_tuple(8, 4, &aom_highbd_sad8x4x4d_sse2, 10),
931 make_tuple(4, 8, &aom_highbd_sad4x8x4d_sse2, 10),
932 make_tuple(4, 4, &aom_highbd_sad4x4x4d_sse2, 10),
933 make_tuple(64, 64, &aom_highbd_sad64x64x4d_sse2, 12),
934 make_tuple(64, 32, &aom_highbd_sad64x32x4d_sse2, 12),
935 make_tuple(32, 64, &aom_highbd_sad32x64x4d_sse2, 12),
936 make_tuple(32, 32, &aom_highbd_sad32x32x4d_sse2, 12),
937 make_tuple(32, 16, &aom_highbd_sad32x16x4d_sse2, 12),
938 make_tuple(16, 32, &aom_highbd_sad16x32x4d_sse2, 12),
939 make_tuple(16, 16, &aom_highbd_sad16x16x4d_sse2, 12),
940 make_tuple(16, 8, &aom_highbd_sad16x8x4d_sse2, 12),
941 make_tuple(8, 16, &aom_highbd_sad8x16x4d_sse2, 12),
942 make_tuple(8, 8, &aom_highbd_sad8x8x4d_sse2, 12),
943 make_tuple(8, 4, &aom_highbd_sad8x4x4d_sse2, 12),
944 make_tuple(4, 8, &aom_highbd_sad4x8x4d_sse2, 12),
945 make_tuple(4, 4, &aom_highbd_sad4x4x4d_sse2, 12),
946#endif // CONFIG_AOM_HIGHBITDEPTH
Johannd5d92892015-04-17 16:11:38 -0400947};
948INSTANTIATE_TEST_CASE_P(SSE2, SADx4Test, ::testing::ValuesIn(x4d_sse2_tests));
Deb Mukherjeefc882922014-05-13 10:11:42 -0700949#endif // HAVE_SSE2
John Koleszar1cfc86e2013-03-01 12:43:41 -0800950
951#if HAVE_SSE3
Johannd5d92892015-04-17 16:11:38 -0400952// Only functions are x3, which do not have tests.
Deb Mukherjeefc882922014-05-13 10:11:42 -0700953#endif // HAVE_SSE3
John Koleszar6b653cb2013-02-28 17:03:02 -0800954
Johannfbea8972012-06-28 11:43:58 -0700955#if HAVE_SSSE3
Johannd5d92892015-04-17 16:11:38 -0400956// Only functions are x3, which do not have tests.
Deb Mukherjeefc882922014-05-13 10:11:42 -0700957#endif // HAVE_SSSE3
Johannfbea8972012-06-28 11:43:58 -0700958
Johannd5d92892015-04-17 16:11:38 -0400959#if HAVE_SSE4_1
960// Only functions are x8, which do not have tests.
961#endif // HAVE_SSE4_1
James Zernd3ff0092014-06-08 18:25:37 -0700962
Johannd5d92892015-04-17 16:11:38 -0400963#if HAVE_AVX2
Johannd5d92892015-04-17 16:11:38 -0400964const SadMxNParam avx2_tests[] = {
Yi Luo1f496242016-11-09 13:39:51 -0800965#if CONFIG_EXT_PARTITION
966 make_tuple(64, 128, &aom_sad64x128_avx2, -1),
967 make_tuple(128, 64, &aom_sad128x64_avx2, -1),
968 make_tuple(128, 128, &aom_sad128x128_avx2, -1),
969#endif
Yaowu Xuf883b422016-08-30 14:01:10 -0700970 make_tuple(64, 64, &aom_sad64x64_avx2, -1),
971 make_tuple(64, 32, &aom_sad64x32_avx2, -1),
972 make_tuple(32, 64, &aom_sad32x64_avx2, -1),
973 make_tuple(32, 32, &aom_sad32x32_avx2, -1),
974 make_tuple(32, 16, &aom_sad32x16_avx2, -1),
Yi Luoe9832582016-11-29 19:38:12 -0800975#if CONFIG_AOM_HIGHBITDEPTH
976#if CONFIG_EXT_PARTITION
977 make_tuple(128, 128, &aom_highbd_sad128x128_avx2, 8),
978 make_tuple(128, 128, &aom_highbd_sad128x128_avx2, 10),
979 make_tuple(128, 128, &aom_highbd_sad128x128_avx2, 12),
980 make_tuple(128, 64, &aom_highbd_sad128x64_avx2, 8),
981 make_tuple(128, 64, &aom_highbd_sad128x64_avx2, 10),
982 make_tuple(128, 64, &aom_highbd_sad128x64_avx2, 12),
983 make_tuple(64, 128, &aom_highbd_sad64x128_avx2, 8),
984 make_tuple(64, 128, &aom_highbd_sad64x128_avx2, 10),
985 make_tuple(64, 128, &aom_highbd_sad64x128_avx2, 12),
986#endif
987 make_tuple(64, 64, &aom_highbd_sad64x64_avx2, 8),
988 make_tuple(64, 64, &aom_highbd_sad64x64_avx2, 10),
989 make_tuple(64, 64, &aom_highbd_sad64x64_avx2, 12),
990 make_tuple(64, 32, &aom_highbd_sad64x32_avx2, 8),
991 make_tuple(64, 32, &aom_highbd_sad64x32_avx2, 10),
992 make_tuple(64, 32, &aom_highbd_sad64x32_avx2, 12),
993 make_tuple(32, 64, &aom_highbd_sad32x64_avx2, 8),
994 make_tuple(32, 64, &aom_highbd_sad32x64_avx2, 10),
995 make_tuple(32, 64, &aom_highbd_sad32x64_avx2, 12),
996 make_tuple(32, 32, &aom_highbd_sad32x32_avx2, 8),
997 make_tuple(32, 32, &aom_highbd_sad32x32_avx2, 10),
998 make_tuple(32, 32, &aom_highbd_sad32x32_avx2, 12),
999 make_tuple(32, 16, &aom_highbd_sad32x16_avx2, 8),
1000 make_tuple(32, 16, &aom_highbd_sad32x16_avx2, 10),
1001 make_tuple(32, 16, &aom_highbd_sad32x16_avx2, 12),
1002 make_tuple(16, 32, &aom_highbd_sad16x32_avx2, 8),
1003 make_tuple(16, 32, &aom_highbd_sad16x32_avx2, 10),
1004 make_tuple(16, 32, &aom_highbd_sad16x32_avx2, 12),
1005 make_tuple(16, 16, &aom_highbd_sad16x16_avx2, 8),
1006 make_tuple(16, 16, &aom_highbd_sad16x16_avx2, 10),
1007 make_tuple(16, 16, &aom_highbd_sad16x16_avx2, 12),
1008 make_tuple(16, 8, &aom_highbd_sad16x8_avx2, 8),
1009 make_tuple(16, 8, &aom_highbd_sad16x8_avx2, 10),
1010 make_tuple(16, 8, &aom_highbd_sad16x8_avx2, 12),
1011#endif
Johannd5d92892015-04-17 16:11:38 -04001012};
1013INSTANTIATE_TEST_CASE_P(AVX2, SADTest, ::testing::ValuesIn(avx2_tests));
1014
Johannd5d92892015-04-17 16:11:38 -04001015const SadMxNAvgParam avg_avx2_tests[] = {
Yi Luo9e218742016-11-22 11:50:12 -08001016#if CONFIG_EXT_PARTITION
1017 make_tuple(64, 128, &aom_sad64x128_avg_avx2, -1),
1018 make_tuple(128, 64, &aom_sad128x64_avg_avx2, -1),
1019 make_tuple(128, 128, &aom_sad128x128_avg_avx2, -1),
1020#endif
Yaowu Xuf883b422016-08-30 14:01:10 -07001021 make_tuple(64, 64, &aom_sad64x64_avg_avx2, -1),
1022 make_tuple(64, 32, &aom_sad64x32_avg_avx2, -1),
1023 make_tuple(32, 64, &aom_sad32x64_avg_avx2, -1),
1024 make_tuple(32, 32, &aom_sad32x32_avg_avx2, -1),
1025 make_tuple(32, 16, &aom_sad32x16_avg_avx2, -1),
Yi Luoe9832582016-11-29 19:38:12 -08001026#if CONFIG_AOM_HIGHBITDEPTH
1027#if CONFIG_EXT_PARTITION
1028 make_tuple(128, 128, &aom_highbd_sad128x128_avg_avx2, 8),
1029 make_tuple(128, 128, &aom_highbd_sad128x128_avg_avx2, 10),
1030 make_tuple(128, 128, &aom_highbd_sad128x128_avg_avx2, 12),
1031 make_tuple(128, 64, &aom_highbd_sad128x64_avg_avx2, 8),
1032 make_tuple(128, 64, &aom_highbd_sad128x64_avg_avx2, 10),
1033 make_tuple(128, 64, &aom_highbd_sad128x64_avg_avx2, 12),
1034 make_tuple(64, 128, &aom_highbd_sad64x128_avg_avx2, 8),
1035 make_tuple(64, 128, &aom_highbd_sad64x128_avg_avx2, 10),
1036 make_tuple(64, 128, &aom_highbd_sad64x128_avg_avx2, 12),
1037#endif
1038 make_tuple(64, 64, &aom_highbd_sad64x64_avg_avx2, 8),
1039 make_tuple(64, 64, &aom_highbd_sad64x64_avg_avx2, 10),
1040 make_tuple(64, 64, &aom_highbd_sad64x64_avg_avx2, 12),
1041 make_tuple(64, 32, &aom_highbd_sad64x32_avg_avx2, 8),
1042 make_tuple(64, 32, &aom_highbd_sad64x32_avg_avx2, 10),
1043 make_tuple(64, 32, &aom_highbd_sad64x32_avg_avx2, 12),
1044 make_tuple(32, 64, &aom_highbd_sad32x64_avg_avx2, 8),
1045 make_tuple(32, 64, &aom_highbd_sad32x64_avg_avx2, 10),
1046 make_tuple(32, 64, &aom_highbd_sad32x64_avg_avx2, 12),
1047 make_tuple(32, 32, &aom_highbd_sad32x32_avg_avx2, 8),
1048 make_tuple(32, 32, &aom_highbd_sad32x32_avg_avx2, 10),
1049 make_tuple(32, 32, &aom_highbd_sad32x32_avg_avx2, 12),
1050 make_tuple(32, 16, &aom_highbd_sad32x16_avg_avx2, 8),
1051 make_tuple(32, 16, &aom_highbd_sad32x16_avg_avx2, 10),
1052 make_tuple(32, 16, &aom_highbd_sad32x16_avg_avx2, 12),
1053 make_tuple(16, 32, &aom_highbd_sad16x32_avg_avx2, 8),
1054 make_tuple(16, 32, &aom_highbd_sad16x32_avg_avx2, 10),
1055 make_tuple(16, 32, &aom_highbd_sad16x32_avg_avx2, 12),
1056 make_tuple(16, 16, &aom_highbd_sad16x16_avg_avx2, 8),
1057 make_tuple(16, 16, &aom_highbd_sad16x16_avg_avx2, 10),
1058 make_tuple(16, 16, &aom_highbd_sad16x16_avg_avx2, 12),
1059 make_tuple(16, 8, &aom_highbd_sad16x8_avg_avx2, 8),
1060 make_tuple(16, 8, &aom_highbd_sad16x8_avg_avx2, 10),
1061 make_tuple(16, 8, &aom_highbd_sad16x8_avg_avx2, 12),
1062#endif
Johannd5d92892015-04-17 16:11:38 -04001063};
1064INSTANTIATE_TEST_CASE_P(AVX2, SADavgTest, ::testing::ValuesIn(avg_avx2_tests));
1065
Johannd5d92892015-04-17 16:11:38 -04001066const SadMxNx4Param x4d_avx2_tests[] = {
Yi Luo9e218742016-11-22 11:50:12 -08001067#if CONFIG_EXT_PARTITION
1068 make_tuple(64, 128, &aom_sad64x128x4d_avx2, -1),
1069 make_tuple(128, 64, &aom_sad128x64x4d_avx2, -1),
1070 make_tuple(128, 128, &aom_sad128x128x4d_avx2, -1),
1071#endif
Yaowu Xuf883b422016-08-30 14:01:10 -07001072 make_tuple(64, 64, &aom_sad64x64x4d_avx2, -1),
Yi Luo9e218742016-11-22 11:50:12 -08001073 make_tuple(32, 64, &aom_sad32x64x4d_avx2, -1),
1074 make_tuple(64, 32, &aom_sad64x32x4d_avx2, -1),
Yaowu Xuf883b422016-08-30 14:01:10 -07001075 make_tuple(32, 32, &aom_sad32x32x4d_avx2, -1),
Yi Luoe9832582016-11-29 19:38:12 -08001076#if CONFIG_AOM_HIGHBITDEPTH
1077#if CONFIG_EXT_PARTITION
1078 make_tuple(128, 128, &aom_highbd_sad128x128x4d_avx2, 8),
1079 make_tuple(128, 128, &aom_highbd_sad128x128x4d_avx2, 10),
1080 make_tuple(128, 128, &aom_highbd_sad128x128x4d_avx2, 12),
1081 make_tuple(128, 64, &aom_highbd_sad128x64x4d_avx2, 8),
1082 make_tuple(128, 64, &aom_highbd_sad128x64x4d_avx2, 10),
1083 make_tuple(128, 64, &aom_highbd_sad128x64x4d_avx2, 12),
1084 make_tuple(64, 128, &aom_highbd_sad64x128x4d_avx2, 8),
1085 make_tuple(64, 128, &aom_highbd_sad64x128x4d_avx2, 10),
1086 make_tuple(64, 128, &aom_highbd_sad64x128x4d_avx2, 12),
1087#endif
1088 make_tuple(64, 64, &aom_highbd_sad64x64x4d_avx2, 8),
1089 make_tuple(64, 64, &aom_highbd_sad64x64x4d_avx2, 10),
1090 make_tuple(64, 64, &aom_highbd_sad64x64x4d_avx2, 12),
1091 make_tuple(64, 32, &aom_highbd_sad64x32x4d_avx2, 8),
1092 make_tuple(64, 32, &aom_highbd_sad64x32x4d_avx2, 10),
1093 make_tuple(64, 32, &aom_highbd_sad64x32x4d_avx2, 12),
1094 make_tuple(32, 64, &aom_highbd_sad32x64x4d_avx2, 8),
1095 make_tuple(32, 64, &aom_highbd_sad32x64x4d_avx2, 10),
1096 make_tuple(32, 64, &aom_highbd_sad32x64x4d_avx2, 12),
1097 make_tuple(32, 32, &aom_highbd_sad32x32x4d_avx2, 8),
1098 make_tuple(32, 32, &aom_highbd_sad32x32x4d_avx2, 10),
1099 make_tuple(32, 32, &aom_highbd_sad32x32x4d_avx2, 12),
1100 make_tuple(32, 16, &aom_highbd_sad32x16x4d_avx2, 8),
1101 make_tuple(32, 16, &aom_highbd_sad32x16x4d_avx2, 10),
1102 make_tuple(32, 16, &aom_highbd_sad32x16x4d_avx2, 12),
1103 make_tuple(16, 32, &aom_highbd_sad16x32x4d_avx2, 8),
1104 make_tuple(16, 32, &aom_highbd_sad16x32x4d_avx2, 10),
1105 make_tuple(16, 32, &aom_highbd_sad16x32x4d_avx2, 12),
1106 make_tuple(16, 16, &aom_highbd_sad16x16x4d_avx2, 8),
1107 make_tuple(16, 16, &aom_highbd_sad16x16x4d_avx2, 10),
1108 make_tuple(16, 16, &aom_highbd_sad16x16x4d_avx2, 12),
1109 make_tuple(16, 8, &aom_highbd_sad16x8x4d_avx2, 8),
1110 make_tuple(16, 8, &aom_highbd_sad16x8x4d_avx2, 10),
1111 make_tuple(16, 8, &aom_highbd_sad16x8x4d_avx2, 12),
1112#endif
Johannd5d92892015-04-17 16:11:38 -04001113};
1114INSTANTIATE_TEST_CASE_P(AVX2, SADx4Test, ::testing::ValuesIn(x4d_avx2_tests));
1115#endif // HAVE_AVX2
Frank Galligan54fa9562015-01-24 12:11:16 -08001116
Parag Salasakarbc3ec8e2015-07-01 11:19:42 +05301117//------------------------------------------------------------------------------
1118// MIPS functions
1119#if HAVE_MSA
Parag Salasakarbc3ec8e2015-07-01 11:19:42 +05301120const SadMxNParam msa_tests[] = {
Yaowu Xuf883b422016-08-30 14:01:10 -07001121 make_tuple(64, 64, &aom_sad64x64_msa, -1),
1122 make_tuple(64, 32, &aom_sad64x32_msa, -1),
1123 make_tuple(32, 64, &aom_sad32x64_msa, -1),
1124 make_tuple(32, 32, &aom_sad32x32_msa, -1),
1125 make_tuple(32, 16, &aom_sad32x16_msa, -1),
1126 make_tuple(16, 32, &aom_sad16x32_msa, -1),
1127 make_tuple(16, 16, &aom_sad16x16_msa, -1),
1128 make_tuple(16, 8, &aom_sad16x8_msa, -1),
1129 make_tuple(8, 16, &aom_sad8x16_msa, -1),
1130 make_tuple(8, 8, &aom_sad8x8_msa, -1),
1131 make_tuple(8, 4, &aom_sad8x4_msa, -1),
1132 make_tuple(4, 8, &aom_sad4x8_msa, -1),
1133 make_tuple(4, 4, &aom_sad4x4_msa, -1),
Parag Salasakarbc3ec8e2015-07-01 11:19:42 +05301134};
1135INSTANTIATE_TEST_CASE_P(MSA, SADTest, ::testing::ValuesIn(msa_tests));
1136
Parag Salasakarbc3ec8e2015-07-01 11:19:42 +05301137const SadMxNAvgParam avg_msa_tests[] = {
Yaowu Xuf883b422016-08-30 14:01:10 -07001138 make_tuple(64, 64, &aom_sad64x64_avg_msa, -1),
1139 make_tuple(64, 32, &aom_sad64x32_avg_msa, -1),
1140 make_tuple(32, 64, &aom_sad32x64_avg_msa, -1),
1141 make_tuple(32, 32, &aom_sad32x32_avg_msa, -1),
1142 make_tuple(32, 16, &aom_sad32x16_avg_msa, -1),
1143 make_tuple(16, 32, &aom_sad16x32_avg_msa, -1),
1144 make_tuple(16, 16, &aom_sad16x16_avg_msa, -1),
1145 make_tuple(16, 8, &aom_sad16x8_avg_msa, -1),
1146 make_tuple(8, 16, &aom_sad8x16_avg_msa, -1),
1147 make_tuple(8, 8, &aom_sad8x8_avg_msa, -1),
1148 make_tuple(8, 4, &aom_sad8x4_avg_msa, -1),
1149 make_tuple(4, 8, &aom_sad4x8_avg_msa, -1),
1150 make_tuple(4, 4, &aom_sad4x4_avg_msa, -1),
Parag Salasakarbc3ec8e2015-07-01 11:19:42 +05301151};
1152INSTANTIATE_TEST_CASE_P(MSA, SADavgTest, ::testing::ValuesIn(avg_msa_tests));
1153
Parag Salasakarbc3ec8e2015-07-01 11:19:42 +05301154const SadMxNx4Param x4d_msa_tests[] = {
Yaowu Xuf883b422016-08-30 14:01:10 -07001155 make_tuple(64, 64, &aom_sad64x64x4d_msa, -1),
1156 make_tuple(64, 32, &aom_sad64x32x4d_msa, -1),
1157 make_tuple(32, 64, &aom_sad32x64x4d_msa, -1),
1158 make_tuple(32, 32, &aom_sad32x32x4d_msa, -1),
1159 make_tuple(32, 16, &aom_sad32x16x4d_msa, -1),
1160 make_tuple(16, 32, &aom_sad16x32x4d_msa, -1),
1161 make_tuple(16, 16, &aom_sad16x16x4d_msa, -1),
1162 make_tuple(16, 8, &aom_sad16x8x4d_msa, -1),
1163 make_tuple(8, 16, &aom_sad8x16x4d_msa, -1),
1164 make_tuple(8, 8, &aom_sad8x8x4d_msa, -1),
1165 make_tuple(8, 4, &aom_sad8x4x4d_msa, -1),
1166 make_tuple(4, 8, &aom_sad4x8x4d_msa, -1),
1167 make_tuple(4, 4, &aom_sad4x4x4d_msa, -1),
Parag Salasakarbc3ec8e2015-07-01 11:19:42 +05301168};
1169INSTANTIATE_TEST_CASE_P(MSA, SADx4Test, ::testing::ValuesIn(x4d_msa_tests));
1170#endif // HAVE_MSA
1171
Johannfbea8972012-06-28 11:43:58 -07001172} // namespace