1ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org/*
2d851b91d14ef0bd71acdce7b90c9a8f1af1181adjohannkoenig@chromium.org *  Copyright (c) 2013 The WebM project authors. All Rights Reserved.
3d851b91d14ef0bd71acdce7b90c9a8f1af1181adjohannkoenig@chromium.org *
4d851b91d14ef0bd71acdce7b90c9a8f1af1181adjohannkoenig@chromium.org *  Use of this source code is governed by a BSD-style license
5d851b91d14ef0bd71acdce7b90c9a8f1af1181adjohannkoenig@chromium.org *  that can be found in the LICENSE file in the root of the source
6d851b91d14ef0bd71acdce7b90c9a8f1af1181adjohannkoenig@chromium.org *  tree. An additional intellectual property rights grant can be found
7d851b91d14ef0bd71acdce7b90c9a8f1af1181adjohannkoenig@chromium.org *  in the file PATENTS.  All contributing project authors may
8d851b91d14ef0bd71acdce7b90c9a8f1af1181adjohannkoenig@chromium.org *  be found in the AUTHORS file in the root of the source tree.
9d851b91d14ef0bd71acdce7b90c9a8f1af1181adjohannkoenig@chromium.org */
10ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org
11ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org#include <math.h>
12ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org#include <stdlib.h>
13ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org#include <string.h>
14ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org#include "test/acm_random.h"
157c1508f4449fe8184aa045737c20ba37e603dd03fgalligan@chromium.org#include "test/clear_system_state.h"
16d348b8d765c019ee7250075d663a83db00c65c08tomfinegan@chromium.org#include "test/register_state_check.h"
17ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org#include "test/util.h"
18ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org#include "third_party/googletest/src/include/gtest/gtest.h"
19ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org#include "./vpx_config.h"
206fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org#include "./vp8_rtcd.h"
21ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org#include "vpx/vpx_integer.h"
22ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org#include "vpx_mem/vpx_mem.h"
23ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org
24ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.orgnamespace {
25ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org
26ac4e313c19203132648a2a271703b6ee76fe4284johannkoenig@chromium.orgtypedef void (*SixtapPredictFunc)(uint8_t *src_ptr,
27ac4e313c19203132648a2a271703b6ee76fe4284johannkoenig@chromium.org                                  int src_pixels_per_line,
28ac4e313c19203132648a2a271703b6ee76fe4284johannkoenig@chromium.org                                  int xoffset,
29ac4e313c19203132648a2a271703b6ee76fe4284johannkoenig@chromium.org                                  int yoffset,
30ac4e313c19203132648a2a271703b6ee76fe4284johannkoenig@chromium.org                                  uint8_t *dst_ptr,
31ac4e313c19203132648a2a271703b6ee76fe4284johannkoenig@chromium.org                                  int dst_pitch);
32ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org
33ac4e313c19203132648a2a271703b6ee76fe4284johannkoenig@chromium.orgtypedef std::tr1::tuple<int, int, SixtapPredictFunc> SixtapPredictParam;
34d851b91d14ef0bd71acdce7b90c9a8f1af1181adjohannkoenig@chromium.org
35d851b91d14ef0bd71acdce7b90c9a8f1af1181adjohannkoenig@chromium.orgclass SixtapPredictTest
36ac4e313c19203132648a2a271703b6ee76fe4284johannkoenig@chromium.org    : public ::testing::TestWithParam<SixtapPredictParam> {
37ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org public:
38ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org  static void SetUpTestCase() {
39ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org    src_ = reinterpret_cast<uint8_t*>(vpx_memalign(kDataAlignment, kSrcSize));
40ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org    dst_ = reinterpret_cast<uint8_t*>(vpx_memalign(kDataAlignment, kDstSize));
41ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org    dst_c_ = reinterpret_cast<uint8_t*>(vpx_memalign(kDataAlignment, kDstSize));
42ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org  }
43ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org
44ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org  static void TearDownTestCase() {
45ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org    vpx_free(src_);
46ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org    src_ = NULL;
47ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org    vpx_free(dst_);
48ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org    dst_ = NULL;
49ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org    vpx_free(dst_c_);
50ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org    dst_c_ = NULL;
51ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org  }
52ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org
537c1508f4449fe8184aa045737c20ba37e603dd03fgalligan@chromium.org  virtual void TearDown() {
547c1508f4449fe8184aa045737c20ba37e603dd03fgalligan@chromium.org    libvpx_test::ClearSystemState();
557c1508f4449fe8184aa045737c20ba37e603dd03fgalligan@chromium.org  }
567c1508f4449fe8184aa045737c20ba37e603dd03fgalligan@chromium.org
57ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org protected:
58ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org  // Make test arrays big enough for 16x16 functions. Six-tap filters
59ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org  // need 5 extra pixels outside of the macroblock.
60ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org  static const int kSrcStride = 21;
61ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org  static const int kDstStride = 16;
62ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org  static const int kDataAlignment = 16;
63ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org  static const int kSrcSize = kSrcStride * kSrcStride + 1;
64ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org  static const int kDstSize = kDstStride * kDstStride;
65ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org
66ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org  virtual void SetUp() {
67ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org    width_ = GET_PARAM(0);
68ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org    height_ = GET_PARAM(1);
69ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org    sixtap_predict_ = GET_PARAM(2);
704b95526e5c4eb4fecde1cd642cf991a82c51b9f2johannkoenig@chromium.org    memset(src_, 0, kSrcSize);
714b95526e5c4eb4fecde1cd642cf991a82c51b9f2johannkoenig@chromium.org    memset(dst_, 0, kDstSize);
724b95526e5c4eb4fecde1cd642cf991a82c51b9f2johannkoenig@chromium.org    memset(dst_c_, 0, kDstSize);
73ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org  }
74ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org
75ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org  int width_;
76ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org  int height_;
77ac4e313c19203132648a2a271703b6ee76fe4284johannkoenig@chromium.org  SixtapPredictFunc sixtap_predict_;
78ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org  // The src stores the macroblock we will filter on, and makes it 1 byte larger
79ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org  // in order to test unaligned access. The result is stored in dst and dst_c(c
80ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org  // reference code result).
81ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org  static uint8_t* src_;
82ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org  static uint8_t* dst_;
83ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org  static uint8_t* dst_c_;
84ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org};
85ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org
86ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.orguint8_t* SixtapPredictTest::src_ = NULL;
87ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.orguint8_t* SixtapPredictTest::dst_ = NULL;
88ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.orguint8_t* SixtapPredictTest::dst_c_ = NULL;
89ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org
90ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.orgTEST_P(SixtapPredictTest, TestWithPresetData) {
91ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org  // Test input
92ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org  static const uint8_t test_data[kSrcSize] = {
93ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org    216, 184, 4, 191, 82, 92, 41, 0, 1, 226, 236, 172, 20, 182, 42, 226, 177,
94ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org    79, 94, 77, 179, 203, 206, 198, 22, 192, 19, 75, 17, 192, 44, 233, 120,
95ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org    48, 168, 203, 141, 210, 203, 143, 180, 184, 59, 201, 110, 102, 171, 32,
96ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org    182, 10, 109, 105, 213, 60, 47, 236, 253, 67, 55, 14, 3, 99, 247, 124,
97ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org    148, 159, 71, 34, 114, 19, 177, 38, 203, 237, 239, 58, 83, 155, 91, 10,
98ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org    166, 201, 115, 124, 5, 163, 104, 2, 231, 160, 16, 234, 4, 8, 103, 153,
99ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org    167, 174, 187, 26, 193, 109, 64, 141, 90, 48, 200, 174, 204, 36, 184,
100ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org    114, 237, 43, 238, 242, 207, 86, 245, 182, 247, 6, 161, 251, 14, 8, 148,
101ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org    182, 182, 79, 208, 120, 188, 17, 6, 23, 65, 206, 197, 13, 242, 126, 128,
102ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org    224, 170, 110, 211, 121, 197, 200, 47, 188, 207, 208, 184, 221, 216, 76,
103ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org    148, 143, 156, 100, 8, 89, 117, 14, 112, 183, 221, 54, 197, 208, 180, 69,
104ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org    176, 94, 180, 131, 215, 121, 76, 7, 54, 28, 216, 238, 249, 176, 58, 142,
105ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org    64, 215, 242, 72, 49, 104, 87, 161, 32, 52, 216, 230, 4, 141, 44, 181,
106ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org    235, 224, 57, 195, 89, 134, 203, 144, 162, 163, 126, 156, 84, 185, 42,
107ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org    148, 145, 29, 221, 194, 134, 52, 100, 166, 105, 60, 140, 110, 201, 184,
108ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org    35, 181, 153, 93, 121, 243, 227, 68, 131, 134, 232, 2, 35, 60, 187, 77,
109ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org    209, 76, 106, 174, 15, 241, 227, 115, 151, 77, 175, 36, 187, 121, 221,
110ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org    223, 47, 118, 61, 168, 105, 32, 237, 236, 167, 213, 238, 202, 17, 170,
111ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org    24, 226, 247, 131, 145, 6, 116, 117, 121, 11, 194, 41, 48, 126, 162, 13,
112ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org    93, 209, 131, 154, 122, 237, 187, 103, 217, 99, 60, 200, 45, 78, 115, 69,
113ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org    49, 106, 200, 194, 112, 60, 56, 234, 72, 251, 19, 120, 121, 182, 134, 215,
114ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org    135, 10, 114, 2, 247, 46, 105, 209, 145, 165, 153, 191, 243, 12, 5, 36,
115ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org    119, 206, 231, 231, 11, 32, 209, 83, 27, 229, 204, 149, 155, 83, 109, 35,
116ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org    93, 223, 37, 84, 14, 142, 37, 160, 52, 191, 96, 40, 204, 101, 77, 67, 52,
117ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org    53, 43, 63, 85, 253, 147, 113, 226, 96, 6, 125, 179, 115, 161, 17, 83,
118ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org    198, 101, 98, 85, 139, 3, 137, 75, 99, 178, 23, 201, 255, 91, 253, 52,
119ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org    134, 60, 138, 131, 208, 251, 101, 48, 2, 227, 228, 118, 132, 245, 202,
120ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org    75, 91, 44, 160, 231, 47, 41, 50, 147, 220, 74, 92, 219, 165, 89, 16
121ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org  };
122ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org
123ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org  // Expected result
124ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org  static const uint8_t expected_dst[kDstSize] = {
125ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org    117, 102, 74, 135, 42, 98, 175, 206, 70, 73, 222, 197, 50, 24, 39, 49, 38,
126ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org    105, 90, 47, 169, 40, 171, 215, 200, 73, 109, 141, 53, 85, 177, 164, 79,
127ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org    208, 124, 89, 212, 18, 81, 145, 151, 164, 217, 153, 91, 154, 102, 102,
128ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org    159, 75, 164, 152, 136, 51, 213, 219, 186, 116, 193, 224, 186, 36, 231,
129ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org    208, 84, 211, 155, 167, 35, 59, 42, 76, 216, 149, 73, 201, 78, 149, 184,
130ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org    100, 96, 196, 189, 198, 188, 235, 195, 117, 129, 120, 129, 49, 25, 133,
131ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org    113, 69, 221, 114, 70, 143, 99, 157, 108, 189, 140, 78, 6, 55, 65, 240,
132ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org    255, 245, 184, 72, 90, 100, 116, 131, 39, 60, 234, 167, 33, 160, 88, 185,
133ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org    200, 157, 159, 176, 127, 151, 138, 102, 168, 106, 170, 86, 82, 219, 189,
134ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org    76, 33, 115, 197, 106, 96, 198, 136, 97, 141, 237, 151, 98, 137, 191,
135ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org    185, 2, 57, 95, 142, 91, 255, 185, 97, 137, 76, 162, 94, 173, 131, 193,
136ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org    161, 81, 106, 72, 135, 222, 234, 137, 66, 137, 106, 243, 210, 147, 95,
137ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org    15, 137, 110, 85, 66, 16, 96, 167, 147, 150, 173, 203, 140, 118, 196,
138ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org    84, 147, 160, 19, 95, 101, 123, 74, 132, 202, 82, 166, 12, 131, 166,
139ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org    189, 170, 159, 85, 79, 66, 57, 152, 132, 203, 194, 0, 1, 56, 146, 180,
140ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org    224, 156, 28, 83, 181, 79, 76, 80, 46, 160, 175, 59, 106, 43, 87, 75,
141ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org    136, 85, 189, 46, 71, 200, 90
142ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org  };
143ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org
144ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org  uint8_t *src = const_cast<uint8_t*>(test_data);
145ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org
14695aa45d73048f952dcaad0037429cc6751b34f2fjohannkoenig@google.com  ASM_REGISTER_STATE_CHECK(
14795aa45d73048f952dcaad0037429cc6751b34f2fjohannkoenig@google.com      sixtap_predict_(&src[kSrcStride * 2 + 2 + 1], kSrcStride,
14895aa45d73048f952dcaad0037429cc6751b34f2fjohannkoenig@google.com                      2, 2, dst_, kDstStride));
149ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org
150ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org  for (int i = 0; i < height_; ++i)
151ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org    for (int j = 0; j < width_; ++j)
152ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org      ASSERT_EQ(expected_dst[i * kDstStride + j], dst_[i * kDstStride + j])
153ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org          << "i==" << (i * width_ + j);
154ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org}
155ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org
156ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.orgusing libvpx_test::ACMRandom;
157ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org
158ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.orgTEST_P(SixtapPredictTest, TestWithRandomData) {
159ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org  ACMRandom rnd(ACMRandom::DeterministicSeed());
160ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org  for (int i = 0; i < kSrcSize; ++i)
161ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org    src_[i] = rnd.Rand8();
162ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org
163ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org  // Run tests for all possible offsets.
164ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org  for (int xoffset = 0; xoffset < 8; ++xoffset) {
165ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org    for (int yoffset = 0; yoffset < 8; ++yoffset) {
166ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org      // Call c reference function.
167ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org      // Move start point to next pixel to test if the function reads
168ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org      // unaligned data correctly.
169ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org      vp8_sixtap_predict16x16_c(&src_[kSrcStride * 2 + 2 + 1], kSrcStride,
170ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org                                xoffset, yoffset, dst_c_, kDstStride);
171ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org
172ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org      // Run test.
17395aa45d73048f952dcaad0037429cc6751b34f2fjohannkoenig@google.com      ASM_REGISTER_STATE_CHECK(
174d348b8d765c019ee7250075d663a83db00c65c08tomfinegan@chromium.org          sixtap_predict_(&src_[kSrcStride * 2 + 2 + 1], kSrcStride,
175d348b8d765c019ee7250075d663a83db00c65c08tomfinegan@chromium.org                          xoffset, yoffset, dst_, kDstStride));
176ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org
177ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org      for (int i = 0; i < height_; ++i)
178ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org        for (int j = 0; j < width_; ++j)
179ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org          ASSERT_EQ(dst_c_[i * kDstStride + j], dst_[i * kDstStride + j])
180ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org              << "i==" << (i * width_ + j);
181ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org    }
182ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org  }
183ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org}
184ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org
185ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.orgusing std::tr1::make_tuple;
186ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org
187ac4e313c19203132648a2a271703b6ee76fe4284johannkoenig@chromium.orgconst SixtapPredictFunc sixtap_16x16_c = vp8_sixtap_predict16x16_c;
188ac4e313c19203132648a2a271703b6ee76fe4284johannkoenig@chromium.orgconst SixtapPredictFunc sixtap_8x8_c = vp8_sixtap_predict8x8_c;
189ac4e313c19203132648a2a271703b6ee76fe4284johannkoenig@chromium.orgconst SixtapPredictFunc sixtap_8x4_c = vp8_sixtap_predict8x4_c;
190ac4e313c19203132648a2a271703b6ee76fe4284johannkoenig@chromium.orgconst SixtapPredictFunc sixtap_4x4_c = vp8_sixtap_predict4x4_c;
191ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.orgINSTANTIATE_TEST_CASE_P(
192ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org    C, SixtapPredictTest, ::testing::Values(
193ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org        make_tuple(16, 16, sixtap_16x16_c),
194ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org        make_tuple(8, 8, sixtap_8x8_c),
195ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org        make_tuple(8, 4, sixtap_8x4_c),
196ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org        make_tuple(4, 4, sixtap_4x4_c)));
197411971f94253c85e1866c281860d6344f6aa0c78fgalligan@chromium.org#if HAVE_NEON
198ac4e313c19203132648a2a271703b6ee76fe4284johannkoenig@chromium.orgconst SixtapPredictFunc sixtap_16x16_neon = vp8_sixtap_predict16x16_neon;
199ac4e313c19203132648a2a271703b6ee76fe4284johannkoenig@chromium.orgconst SixtapPredictFunc sixtap_8x8_neon = vp8_sixtap_predict8x8_neon;
200ac4e313c19203132648a2a271703b6ee76fe4284johannkoenig@chromium.orgconst SixtapPredictFunc sixtap_8x4_neon = vp8_sixtap_predict8x4_neon;
201411971f94253c85e1866c281860d6344f6aa0c78fgalligan@chromium.orgINSTANTIATE_TEST_CASE_P(
20293a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org    DISABLED_NEON, SixtapPredictTest, ::testing::Values(
203411971f94253c85e1866c281860d6344f6aa0c78fgalligan@chromium.org        make_tuple(16, 16, sixtap_16x16_neon),
204411971f94253c85e1866c281860d6344f6aa0c78fgalligan@chromium.org        make_tuple(8, 8, sixtap_8x8_neon),
205411971f94253c85e1866c281860d6344f6aa0c78fgalligan@chromium.org        make_tuple(8, 4, sixtap_8x4_neon)));
206411971f94253c85e1866c281860d6344f6aa0c78fgalligan@chromium.org#endif
207ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org#if HAVE_MMX
208ac4e313c19203132648a2a271703b6ee76fe4284johannkoenig@chromium.orgconst SixtapPredictFunc sixtap_16x16_mmx = vp8_sixtap_predict16x16_mmx;
209ac4e313c19203132648a2a271703b6ee76fe4284johannkoenig@chromium.orgconst SixtapPredictFunc sixtap_8x8_mmx = vp8_sixtap_predict8x8_mmx;
210ac4e313c19203132648a2a271703b6ee76fe4284johannkoenig@chromium.orgconst SixtapPredictFunc sixtap_8x4_mmx = vp8_sixtap_predict8x4_mmx;
211ac4e313c19203132648a2a271703b6ee76fe4284johannkoenig@chromium.orgconst SixtapPredictFunc sixtap_4x4_mmx = vp8_sixtap_predict4x4_mmx;
212ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.orgINSTANTIATE_TEST_CASE_P(
213ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org    MMX, SixtapPredictTest, ::testing::Values(
214ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org        make_tuple(16, 16, sixtap_16x16_mmx),
215ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org        make_tuple(8, 8, sixtap_8x8_mmx),
216ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org        make_tuple(8, 4, sixtap_8x4_mmx),
217ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org        make_tuple(4, 4, sixtap_4x4_mmx)));
218ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org#endif
219ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org#if HAVE_SSE2
220ac4e313c19203132648a2a271703b6ee76fe4284johannkoenig@chromium.orgconst SixtapPredictFunc sixtap_16x16_sse2 = vp8_sixtap_predict16x16_sse2;
221ac4e313c19203132648a2a271703b6ee76fe4284johannkoenig@chromium.orgconst SixtapPredictFunc sixtap_8x8_sse2 = vp8_sixtap_predict8x8_sse2;
222ac4e313c19203132648a2a271703b6ee76fe4284johannkoenig@chromium.orgconst SixtapPredictFunc sixtap_8x4_sse2 = vp8_sixtap_predict8x4_sse2;
223ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.orgINSTANTIATE_TEST_CASE_P(
224ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org    SSE2, SixtapPredictTest, ::testing::Values(
225ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org        make_tuple(16, 16, sixtap_16x16_sse2),
226ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org        make_tuple(8, 8, sixtap_8x8_sse2),
227ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org        make_tuple(8, 4, sixtap_8x4_sse2)));
228ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org#endif
229ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org#if HAVE_SSSE3
230ac4e313c19203132648a2a271703b6ee76fe4284johannkoenig@chromium.orgconst SixtapPredictFunc sixtap_16x16_ssse3 = vp8_sixtap_predict16x16_ssse3;
231ac4e313c19203132648a2a271703b6ee76fe4284johannkoenig@chromium.orgconst SixtapPredictFunc sixtap_8x8_ssse3 = vp8_sixtap_predict8x8_ssse3;
232ac4e313c19203132648a2a271703b6ee76fe4284johannkoenig@chromium.orgconst SixtapPredictFunc sixtap_8x4_ssse3 = vp8_sixtap_predict8x4_ssse3;
233ac4e313c19203132648a2a271703b6ee76fe4284johannkoenig@chromium.orgconst SixtapPredictFunc sixtap_4x4_ssse3 = vp8_sixtap_predict4x4_ssse3;
234ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.orgINSTANTIATE_TEST_CASE_P(
235ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org    SSSE3, SixtapPredictTest, ::testing::Values(
236ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org        make_tuple(16, 16, sixtap_16x16_ssse3),
237ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org        make_tuple(8, 8, sixtap_8x8_ssse3),
238ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org        make_tuple(8, 4, sixtap_8x4_ssse3),
239ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org        make_tuple(4, 4, sixtap_4x4_ssse3)));
240ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org#endif
241ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org}  // namespace
242