blob: b891e9988215ae39367fb83267578fa3d25e0e01 [file] [log] [blame]
Yi Luo229690a2016-06-13 17:01:17 -07001/*
Yaowu Xu2ab7ff02016-09-02 12:04:54 -07002 * Copyright (c) 2016, Alliance for Open Media. All rights reserved
Yi Luo229690a2016-06-13 17:01:17 -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.
Yi Luo229690a2016-06-13 17:01:17 -070010 */
11
12#include "third_party/googletest/src/include/gtest/gtest.h"
13
Yaowu Xuf883b422016-08-30 14:01:10 -070014#include "./av1_rtcd.h"
Yi Luo229690a2016-06-13 17:01:17 -070015#include "test/acm_random.h"
16#include "test/clear_system_state.h"
17#include "test/register_state_check.h"
18#include "test/util.h"
19
20namespace {
21
22using std::tr1::tuple;
Yaowu Xuc27fc142016-08-22 16:08:15 -070023using libaom_test::ACMRandom;
Yi Luo229690a2016-06-13 17:01:17 -070024
clang-format3a826f12016-08-11 17:46:05 -070025typedef void (*conv_filter_t)(const uint8_t *, int, uint8_t *, int, int, int,
26 const InterpFilterParams, const int, int, int);
Yaowu Xuf883b422016-08-30 14:01:10 -070027#if CONFIG_AOM_HIGHBITDEPTH
clang-format3a826f12016-08-11 17:46:05 -070028typedef void (*hbd_conv_filter_t)(const uint16_t *, int, uint16_t *, int, int,
29 int, const InterpFilterParams, const int, int,
30 int, int);
Yi Luo8cacca72016-07-08 15:41:59 -070031#endif
32
Yi Luo229690a2016-06-13 17:01:17 -070033// Test parameter list:
Yi Luo81ad9532016-06-21 12:17:39 -070034// <convolve_horiz_func, convolve_vert_func,
35// <width, height>, filter_params, subpel_x_q4, avg>
Yi Luo229690a2016-06-13 17:01:17 -070036typedef tuple<int, int> BlockDimension;
James Zern7b9407a2016-05-18 23:48:05 -070037typedef tuple<conv_filter_t, conv_filter_t, BlockDimension, InterpFilter, int,
clang-format67948d32016-09-07 22:40:40 -070038 int>
39 ConvParams;
Yaowu Xuf883b422016-08-30 14:01:10 -070040#if CONFIG_AOM_HIGHBITDEPTH
Yi Luo8cacca72016-07-08 15:41:59 -070041// Test parameter list:
42// <convolve_horiz_func, convolve_vert_func,
43// <width, height>, filter_params, subpel_x_q4, avg, bit_dpeth>
44typedef tuple<hbd_conv_filter_t, hbd_conv_filter_t, BlockDimension,
clang-format67948d32016-09-07 22:40:40 -070045 InterpFilter, int, int, int>
46 HbdConvParams;
Yi Luo8cacca72016-07-08 15:41:59 -070047#endif
Yi Luo229690a2016-06-13 17:01:17 -070048
49// Note:
50// src_ and src_ref_ have special boundary requirement
51// dst_ and dst_ref_ don't
52const size_t maxWidth = 256;
53const size_t maxHeight = 256;
54const size_t maxBlockSize = maxWidth * maxHeight;
55const int horizOffset = 32;
56const int vertiOffset = 32;
57const int stride = 128;
58const int x_step_q4 = 16;
59
Yaowu Xuf883b422016-08-30 14:01:10 -070060class AV1ConvolveOptimzTest : public ::testing::TestWithParam<ConvParams> {
Yi Luo229690a2016-06-13 17:01:17 -070061 public:
Yaowu Xuf883b422016-08-30 14:01:10 -070062 virtual ~AV1ConvolveOptimzTest() {}
Yi Luo229690a2016-06-13 17:01:17 -070063 virtual void SetUp() {
Yi Luo81ad9532016-06-21 12:17:39 -070064 conv_horiz_ = GET_PARAM(0);
65 conv_vert_ = GET_PARAM(1);
66 BlockDimension block = GET_PARAM(2);
Yi Luo229690a2016-06-13 17:01:17 -070067 width_ = std::tr1::get<0>(block);
68 height_ = std::tr1::get<1>(block);
Yi Luo81ad9532016-06-21 12:17:39 -070069 filter_ = GET_PARAM(3);
70 subpel_ = GET_PARAM(4);
71 avg_ = GET_PARAM(5);
Yi Luo229690a2016-06-13 17:01:17 -070072
73 alloc_ = new uint8_t[maxBlockSize * 4];
74 src_ = alloc_ + (vertiOffset * maxWidth);
75 src_ += horizOffset;
76 src_ref_ = src_ + maxBlockSize;
77
78 dst_ = alloc_ + 2 * maxBlockSize;
79 dst_ref_ = alloc_ + 3 * maxBlockSize;
80 }
81
82 virtual void TearDown() {
83 delete[] alloc_;
Yaowu Xuc27fc142016-08-22 16:08:15 -070084 libaom_test::ClearSystemState();
Yi Luo229690a2016-06-13 17:01:17 -070085 }
86
87 protected:
88 void RunHorizFilterBitExactCheck();
Yi Luo81ad9532016-06-21 12:17:39 -070089 void RunVertFilterBitExactCheck();
Yi Luo229690a2016-06-13 17:01:17 -070090
91 private:
Urvang Joshid71a2312016-07-14 12:33:48 -070092 void PrepFilterBuffer();
Yi Luo8cacca72016-07-08 15:41:59 -070093 void DiffFilterBuffer();
Yi Luo81ad9532016-06-21 12:17:39 -070094 conv_filter_t conv_horiz_;
95 conv_filter_t conv_vert_;
Yi Luo229690a2016-06-13 17:01:17 -070096 uint8_t *alloc_;
97 uint8_t *src_;
98 uint8_t *dst_;
99 uint8_t *src_ref_;
100 uint8_t *dst_ref_;
101 int width_;
102 int height_;
103 int filter_;
104 int subpel_;
105 int avg_;
106};
107
Urvang Joshid71a2312016-07-14 12:33:48 -0700108void AV1ConvolveOptimzTest::PrepFilterBuffer() {
Yi Luo229690a2016-06-13 17:01:17 -0700109 int r, c;
110 ACMRandom rnd(ACMRandom::DeterministicSeed());
111
Yi Luo81ad9532016-06-21 12:17:39 -0700112 memset(alloc_, 0, 4 * maxBlockSize * sizeof(alloc_[0]));
Yi Luo229690a2016-06-13 17:01:17 -0700113
Yi Luo8cacca72016-07-08 15:41:59 -0700114 uint8_t *src_ptr = src_;
115 uint8_t *dst_ptr = dst_;
116 uint8_t *src_ref_ptr = src_ref_;
117 uint8_t *dst_ref_ptr = dst_ref_;
Yi Luo229690a2016-06-13 17:01:17 -0700118
119 for (r = 0; r < height_; ++r) {
120 for (c = 0; c < width_; ++c) {
121 src_ptr[c] = rnd.Rand8();
122 src_ref_ptr[c] = src_ptr[c];
123 dst_ptr[c] = rnd.Rand8();
124 dst_ref_ptr[c] = dst_ptr[c];
125 }
126 src_ptr += stride;
127 src_ref_ptr += stride;
128 dst_ptr += stride;
129 dst_ref_ptr += stride;
130 }
131}
132
Yaowu Xuf883b422016-08-30 14:01:10 -0700133void AV1ConvolveOptimzTest::DiffFilterBuffer() {
Yi Luo229690a2016-06-13 17:01:17 -0700134 int r, c;
Yi Luo8cacca72016-07-08 15:41:59 -0700135 const uint8_t *dst_ptr = dst_;
136 const uint8_t *dst_ref_ptr = dst_ref_;
137 for (r = 0; r < height_; ++r) {
138 for (c = 0; c < width_; ++c) {
Yi Luo229690a2016-06-13 17:01:17 -0700139 EXPECT_EQ((uint8_t)dst_ref_ptr[c], (uint8_t)dst_ptr[c])
clang-format3a826f12016-08-11 17:46:05 -0700140 << "Error at row: " << r << " col: " << c << " "
141 << "w = " << width_ << " "
142 << "h = " << height_ << " "
143 << "filter group index = " << filter_ << " "
144 << "filter index = " << subpel_;
Yi Luo229690a2016-06-13 17:01:17 -0700145 }
146 dst_ptr += stride;
147 dst_ref_ptr += stride;
148 }
149}
150
Yaowu Xuf883b422016-08-30 14:01:10 -0700151void AV1ConvolveOptimzTest::RunHorizFilterBitExactCheck() {
Urvang Joshid71a2312016-07-14 12:33:48 -0700152 PrepFilterBuffer();
Yi Luo229690a2016-06-13 17:01:17 -0700153
Yaowu Xuf883b422016-08-30 14:01:10 -0700154 InterpFilterParams filter_params = av1_get_interp_filter_params(filter_);
Yi Luo229690a2016-06-13 17:01:17 -0700155
Yaowu Xuf883b422016-08-30 14:01:10 -0700156 av1_convolve_horiz_c(src_ref_, stride, dst_ref_, stride, width_, height_,
157 filter_params, subpel_, x_step_q4, avg_);
Yi Luo229690a2016-06-13 17:01:17 -0700158
clang-format3a826f12016-08-11 17:46:05 -0700159 conv_horiz_(src_, stride, dst_, stride, width_, height_, filter_params,
160 subpel_, x_step_q4, avg_);
Yi Luo229690a2016-06-13 17:01:17 -0700161
Yi Luo8cacca72016-07-08 15:41:59 -0700162 DiffFilterBuffer();
Yi Luo229690a2016-06-13 17:01:17 -0700163
164 // Note:
165 // Here we need calculate a height which is different from the specified one
166 // and test again.
167 int intermediate_height =
168 (((height_ - 1) * 16 + subpel_) >> SUBPEL_BITS) + filter_params.taps;
Urvang Joshid71a2312016-07-14 12:33:48 -0700169 PrepFilterBuffer();
Yi Luo229690a2016-06-13 17:01:17 -0700170
Yaowu Xuf883b422016-08-30 14:01:10 -0700171 av1_convolve_horiz_c(src_ref_, stride, dst_ref_, stride, width_,
172 intermediate_height, filter_params, subpel_, x_step_q4,
173 avg_);
Yi Luo229690a2016-06-13 17:01:17 -0700174
clang-format3a826f12016-08-11 17:46:05 -0700175 conv_horiz_(src_, stride, dst_, stride, width_, intermediate_height,
176 filter_params, subpel_, x_step_q4, avg_);
Yi Luo229690a2016-06-13 17:01:17 -0700177
Yi Luo8cacca72016-07-08 15:41:59 -0700178 DiffFilterBuffer();
Yi Luo229690a2016-06-13 17:01:17 -0700179}
180
Yaowu Xuf883b422016-08-30 14:01:10 -0700181void AV1ConvolveOptimzTest::RunVertFilterBitExactCheck() {
Urvang Joshid71a2312016-07-14 12:33:48 -0700182 PrepFilterBuffer();
Yi Luo81ad9532016-06-21 12:17:39 -0700183
Yaowu Xuf883b422016-08-30 14:01:10 -0700184 InterpFilterParams filter_params = av1_get_interp_filter_params(filter_);
Yi Luo81ad9532016-06-21 12:17:39 -0700185
Yaowu Xuf883b422016-08-30 14:01:10 -0700186 av1_convolve_vert_c(src_ref_, stride, dst_ref_, stride, width_, height_,
187 filter_params, subpel_, x_step_q4, avg_);
Yi Luo81ad9532016-06-21 12:17:39 -0700188
clang-format3a826f12016-08-11 17:46:05 -0700189 conv_vert_(src_, stride, dst_, stride, width_, height_, filter_params,
190 subpel_, x_step_q4, avg_);
Yi Luo81ad9532016-06-21 12:17:39 -0700191
Yi Luo8cacca72016-07-08 15:41:59 -0700192 DiffFilterBuffer();
Yi Luo81ad9532016-06-21 12:17:39 -0700193}
194
Yaowu Xuf883b422016-08-30 14:01:10 -0700195TEST_P(AV1ConvolveOptimzTest, HorizBitExactCheck) {
Yi Luo229690a2016-06-13 17:01:17 -0700196 RunHorizFilterBitExactCheck();
197}
Yaowu Xuf883b422016-08-30 14:01:10 -0700198TEST_P(AV1ConvolveOptimzTest, VerticalBitExactCheck) {
Yi Luo81ad9532016-06-21 12:17:39 -0700199 RunVertFilterBitExactCheck();
200}
Yi Luo229690a2016-06-13 17:01:17 -0700201
202using std::tr1::make_tuple;
203
Yi Luo8cacca72016-07-08 15:41:59 -0700204#if (HAVE_SSSE3 || HAVE_SSE4_1) && CONFIG_EXT_INTERP
Yi Luo229690a2016-06-13 17:01:17 -0700205const BlockDimension kBlockDim[] = {
clang-format3a826f12016-08-11 17:46:05 -0700206 make_tuple(2, 2), make_tuple(2, 4), make_tuple(4, 4),
207 make_tuple(4, 8), make_tuple(8, 4), make_tuple(8, 8),
208 make_tuple(8, 16), make_tuple(16, 8), make_tuple(16, 16),
209 make_tuple(16, 32), make_tuple(32, 16), make_tuple(32, 32),
210 make_tuple(32, 64), make_tuple(64, 32), make_tuple(64, 64),
211 make_tuple(64, 128), make_tuple(128, 64), make_tuple(128, 128),
Yi Luo229690a2016-06-13 17:01:17 -0700212};
Sarah Parker95763742016-06-28 17:13:03 -0700213
Yi Luo229690a2016-06-13 17:01:17 -0700214// 10/12-tap filters
James Zern7b9407a2016-05-18 23:48:05 -0700215const InterpFilter kFilter[] = { 6, 4, 2 };
Yi Luo229690a2016-06-13 17:01:17 -0700216
clang-format3a826f12016-08-11 17:46:05 -0700217const int kSubpelQ4[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15 };
Yi Luo229690a2016-06-13 17:01:17 -0700218
clang-format3a826f12016-08-11 17:46:05 -0700219const int kAvg[] = { 0, 1 };
Yi Luo8cacca72016-07-08 15:41:59 -0700220#endif
Yi Luo229690a2016-06-13 17:01:17 -0700221
Yi Luo8cacca72016-07-08 15:41:59 -0700222#if HAVE_SSSE3 && CONFIG_EXT_INTERP
Yi Luo229690a2016-06-13 17:01:17 -0700223INSTANTIATE_TEST_CASE_P(
Yaowu Xuf883b422016-08-30 14:01:10 -0700224 SSSE3, AV1ConvolveOptimzTest,
225 ::testing::Combine(::testing::Values(av1_convolve_horiz_ssse3),
226 ::testing::Values(av1_convolve_vert_ssse3),
clang-format3a826f12016-08-11 17:46:05 -0700227 ::testing::ValuesIn(kBlockDim),
228 ::testing::ValuesIn(kFilter),
229 ::testing::ValuesIn(kSubpelQ4),
230 ::testing::ValuesIn(kAvg)));
Yi Luo229690a2016-06-13 17:01:17 -0700231#endif // HAVE_SSSE3 && CONFIG_EXT_INTERP
Yi Luo8cacca72016-07-08 15:41:59 -0700232
Yaowu Xuf883b422016-08-30 14:01:10 -0700233#if CONFIG_AOM_HIGHBITDEPTH
Yi Luo8cacca72016-07-08 15:41:59 -0700234typedef ::testing::TestWithParam<HbdConvParams> TestWithHbdConvParams;
Yaowu Xuf883b422016-08-30 14:01:10 -0700235class AV1HbdConvolveOptimzTest : public TestWithHbdConvParams {
Yi Luo8cacca72016-07-08 15:41:59 -0700236 public:
Yaowu Xuf883b422016-08-30 14:01:10 -0700237 virtual ~AV1HbdConvolveOptimzTest() {}
Yi Luo8cacca72016-07-08 15:41:59 -0700238 virtual void SetUp() {
239 conv_horiz_ = GET_PARAM(0);
240 conv_vert_ = GET_PARAM(1);
241 BlockDimension block = GET_PARAM(2);
242 width_ = std::tr1::get<0>(block);
243 height_ = std::tr1::get<1>(block);
244 filter_ = GET_PARAM(3);
245 subpel_ = GET_PARAM(4);
246 avg_ = GET_PARAM(5);
247 bit_depth_ = GET_PARAM(6);
248
249 alloc_ = new uint16_t[maxBlockSize * 4];
250 src_ = alloc_ + (vertiOffset * maxWidth);
251 src_ += horizOffset;
252 src_ref_ = src_ + maxBlockSize;
253
254 dst_ = alloc_ + 2 * maxBlockSize;
255 dst_ref_ = alloc_ + 3 * maxBlockSize;
256 }
257
258 virtual void TearDown() {
259 delete[] alloc_;
Yaowu Xuc27fc142016-08-22 16:08:15 -0700260 libaom_test::ClearSystemState();
Yi Luo8cacca72016-07-08 15:41:59 -0700261 }
262
263 protected:
264 void RunHorizFilterBitExactCheck();
265 void RunVertFilterBitExactCheck();
266
267 private:
Urvang Joshid71a2312016-07-14 12:33:48 -0700268 void PrepFilterBuffer();
Yi Luo8cacca72016-07-08 15:41:59 -0700269 void DiffFilterBuffer();
270 hbd_conv_filter_t conv_horiz_;
271 hbd_conv_filter_t conv_vert_;
272 uint16_t *alloc_;
273 uint16_t *src_;
274 uint16_t *dst_;
275 uint16_t *src_ref_;
276 uint16_t *dst_ref_;
277 int width_;
278 int height_;
279 int filter_;
280 int subpel_;
281 int avg_;
282 int bit_depth_;
283};
284
Urvang Joshid71a2312016-07-14 12:33:48 -0700285void AV1HbdConvolveOptimzTest::PrepFilterBuffer() {
Yi Luo8cacca72016-07-08 15:41:59 -0700286 int r, c;
287 ACMRandom rnd(ACMRandom::DeterministicSeed());
288
289 memset(alloc_, 0, 4 * maxBlockSize * sizeof(alloc_[0]));
290
291 uint16_t *src_ptr = src_;
292 uint16_t *dst_ptr = dst_;
293 uint16_t *dst_ref_ptr = dst_ref_;
294 uint16_t hbd_mask = (1 << bit_depth_) - 1;
295
296 for (r = 0; r < height_; ++r) {
297 for (c = 0; c < width_; ++c) {
298 src_ptr[c] = rnd.Rand16() & hbd_mask;
299 dst_ptr[c] = rnd.Rand16() & hbd_mask;
300 dst_ref_ptr[c] = dst_ptr[c];
301 }
302 src_ptr += stride;
303 dst_ptr += stride;
304 dst_ref_ptr += stride;
305 }
306}
307
Yaowu Xuf883b422016-08-30 14:01:10 -0700308void AV1HbdConvolveOptimzTest::DiffFilterBuffer() {
Yi Luo8cacca72016-07-08 15:41:59 -0700309 int r, c;
310 const uint16_t *dst_ptr = dst_;
311 const uint16_t *dst_ref_ptr = dst_ref_;
312 for (r = 0; r < height_; ++r) {
313 for (c = 0; c < width_; ++c) {
314 EXPECT_EQ((uint16_t)dst_ref_ptr[c], (uint16_t)dst_ptr[c])
clang-format3a826f12016-08-11 17:46:05 -0700315 << "Error at row: " << r << " col: " << c << " "
316 << "w = " << width_ << " "
317 << "h = " << height_ << " "
318 << "filter group index = " << filter_ << " "
319 << "filter index = " << subpel_ << " "
320 << "bit depth = " << bit_depth_;
Yi Luo8cacca72016-07-08 15:41:59 -0700321 }
322 dst_ptr += stride;
323 dst_ref_ptr += stride;
324 }
325}
326
Yaowu Xuf883b422016-08-30 14:01:10 -0700327void AV1HbdConvolveOptimzTest::RunHorizFilterBitExactCheck() {
Urvang Joshid71a2312016-07-14 12:33:48 -0700328 PrepFilterBuffer();
Yi Luo8cacca72016-07-08 15:41:59 -0700329
Yaowu Xuf883b422016-08-30 14:01:10 -0700330 InterpFilterParams filter_params = av1_get_interp_filter_params(filter_);
Yi Luo8cacca72016-07-08 15:41:59 -0700331
Yaowu Xuf883b422016-08-30 14:01:10 -0700332 av1_highbd_convolve_horiz_c(src_, stride, dst_ref_, stride, width_, height_,
333 filter_params, subpel_, x_step_q4, avg_,
334 bit_depth_);
Yi Luo8cacca72016-07-08 15:41:59 -0700335
clang-format3a826f12016-08-11 17:46:05 -0700336 conv_horiz_(src_, stride, dst_, stride, width_, height_, filter_params,
337 subpel_, x_step_q4, avg_, bit_depth_);
Yi Luo8cacca72016-07-08 15:41:59 -0700338
339 DiffFilterBuffer();
340
341 // Note:
342 // Here we need calculate a height which is different from the specified one
343 // and test again.
344 int intermediate_height =
345 (((height_ - 1) * 16 + subpel_) >> SUBPEL_BITS) + filter_params.taps;
Urvang Joshid71a2312016-07-14 12:33:48 -0700346 PrepFilterBuffer();
Yi Luo8cacca72016-07-08 15:41:59 -0700347
Yaowu Xuf883b422016-08-30 14:01:10 -0700348 av1_highbd_convolve_horiz_c(src_, stride, dst_ref_, stride, width_,
349 intermediate_height, filter_params, subpel_,
350 x_step_q4, avg_, bit_depth_);
Yi Luo8cacca72016-07-08 15:41:59 -0700351
352 conv_horiz_(src_, stride, dst_, stride, width_, intermediate_height,
353 filter_params, subpel_, x_step_q4, avg_, bit_depth_);
354
355 DiffFilterBuffer();
356}
357
Yaowu Xuf883b422016-08-30 14:01:10 -0700358void AV1HbdConvolveOptimzTest::RunVertFilterBitExactCheck() {
Urvang Joshid71a2312016-07-14 12:33:48 -0700359 PrepFilterBuffer();
Yi Luo8cacca72016-07-08 15:41:59 -0700360
Yaowu Xuf883b422016-08-30 14:01:10 -0700361 InterpFilterParams filter_params = av1_get_interp_filter_params(filter_);
Yi Luo8cacca72016-07-08 15:41:59 -0700362
Yaowu Xuf883b422016-08-30 14:01:10 -0700363 av1_highbd_convolve_vert_c(src_, stride, dst_ref_, stride, width_, height_,
364 filter_params, subpel_, x_step_q4, avg_,
365 bit_depth_);
Yi Luo8cacca72016-07-08 15:41:59 -0700366
clang-format3a826f12016-08-11 17:46:05 -0700367 conv_vert_(src_, stride, dst_, stride, width_, height_, filter_params,
368 subpel_, x_step_q4, avg_, bit_depth_);
Yi Luo8cacca72016-07-08 15:41:59 -0700369
370 DiffFilterBuffer();
371}
372
Yaowu Xuf883b422016-08-30 14:01:10 -0700373TEST_P(AV1HbdConvolveOptimzTest, HorizBitExactCheck) {
Yi Luo8cacca72016-07-08 15:41:59 -0700374 RunHorizFilterBitExactCheck();
375}
Yaowu Xuf883b422016-08-30 14:01:10 -0700376TEST_P(AV1HbdConvolveOptimzTest, VertBitExactCheck) {
Yi Luo8cacca72016-07-08 15:41:59 -0700377 RunVertFilterBitExactCheck();
378}
379
380#if HAVE_SSE4_1 && CONFIG_EXT_INTERP
381
clang-format3a826f12016-08-11 17:46:05 -0700382const int kBitdepth[] = { 10, 12 };
Yi Luo8cacca72016-07-08 15:41:59 -0700383
384INSTANTIATE_TEST_CASE_P(
Yaowu Xuf883b422016-08-30 14:01:10 -0700385 SSE4_1, AV1HbdConvolveOptimzTest,
386 ::testing::Combine(::testing::Values(av1_highbd_convolve_horiz_sse4_1),
387 ::testing::Values(av1_highbd_convolve_vert_sse4_1),
clang-format3a826f12016-08-11 17:46:05 -0700388 ::testing::ValuesIn(kBlockDim),
389 ::testing::ValuesIn(kFilter),
390 ::testing::ValuesIn(kSubpelQ4),
391 ::testing::ValuesIn(kAvg),
392 ::testing::ValuesIn(kBitdepth)));
Yi Luo8cacca72016-07-08 15:41:59 -0700393#endif // HAVE_SSE4_1 && CONFIG_EXT_INTERP
Yaowu Xuf883b422016-08-30 14:01:10 -0700394#endif // CONFIG_AOM_HIGHBITDEPTH
Yi Luo229690a2016-06-13 17:01:17 -0700395} // namespace