2 * Copyright (c) 2016, Alliance for Open Media. All rights reserved
4 * 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.
16 #include "third_party/googletest/src/googletest/include/gtest/gtest.h"
18 #include "./aom_config.h"
19 #include "./aom_dsp_rtcd.h"
20 #include "test/acm_random.h"
21 #include "test/clear_system_state.h"
22 #include "test/register_state_check.h"
23 #include "test/util.h"
24 #include "aom/aom_codec.h"
25 #include "aom_mem/aom_mem.h"
26 #include "aom_ports/mem.h"
28 typedef unsigned int (*SadMxNFunc
)(const uint8_t *src_ptr
, int src_stride
,
29 const uint8_t *ref_ptr
, int ref_stride
);
30 typedef std::tr1::tuple
<int, int, SadMxNFunc
, int> SadMxNParam
;
32 typedef uint32_t (*SadMxNAvgFunc
)(const uint8_t *src_ptr
, int src_stride
,
33 const uint8_t *ref_ptr
, int ref_stride
,
34 const uint8_t *second_pred
);
35 typedef std::tr1::tuple
<int, int, SadMxNAvgFunc
, int> SadMxNAvgParam
;
38 typedef void (*JntCompAvgFunc
)(uint8_t *comp_pred
, const uint8_t *pred
,
39 int width
, int height
, const uint8_t *ref
,
41 const JNT_COMP_PARAMS
*jcp_param
);
42 typedef std::tr1::tuple
<int, int, JntCompAvgFunc
, int> JntCompAvgParam
;
44 typedef unsigned int (*JntSadMxhFunc
)(const uint8_t *src_ptr
, int src_stride
,
45 const uint8_t *ref_ptr
, int ref_stride
,
46 int width
, int height
);
47 typedef std::tr1::tuple
<int, int, JntSadMxhFunc
, int> JntSadMxhParam
;
49 typedef uint32_t (*JntSadMxNAvgFunc
)(const uint8_t *src_ptr
, int src_stride
,
50 const uint8_t *ref_ptr
, int ref_stride
,
51 const uint8_t *second_pred
,
52 const JNT_COMP_PARAMS
*jcp_param
);
53 typedef std::tr1::tuple
<int, int, JntSadMxNAvgFunc
, int> JntSadMxNAvgParam
;
54 #endif // CONFIG_JNT_COMP
56 typedef void (*SadMxNx4Func
)(const uint8_t *src_ptr
, int src_stride
,
57 const uint8_t *const ref_ptr
[], int ref_stride
,
59 typedef std::tr1::tuple
<int, int, SadMxNx4Func
, int> SadMxNx4Param
;
61 using libaom_test::ACMRandom
;
64 class SADTestBase
: public ::testing::Test
{
66 SADTestBase(int width
, int height
, int bit_depth
)
67 : width_(width
), height_(height
), bd_(bit_depth
) {}
69 static void SetUpTestCase() {
70 source_data8_
= reinterpret_cast<uint8_t *>(
71 aom_memalign(kDataAlignment
, kDataBlockSize
));
72 reference_data8_
= reinterpret_cast<uint8_t *>(
73 aom_memalign(kDataAlignment
, kDataBufferSize
));
75 reinterpret_cast<uint8_t *>(aom_memalign(kDataAlignment
, 128 * 128));
78 reinterpret_cast<uint8_t *>(aom_memalign(kDataAlignment
, 128 * 128));
80 reinterpret_cast<uint8_t *>(aom_memalign(kDataAlignment
, 128 * 128));
82 source_data16_
= reinterpret_cast<uint16_t *>(
83 aom_memalign(kDataAlignment
, kDataBlockSize
* sizeof(uint16_t)));
84 reference_data16_
= reinterpret_cast<uint16_t *>(
85 aom_memalign(kDataAlignment
, kDataBufferSize
* sizeof(uint16_t)));
86 second_pred16_
= reinterpret_cast<uint16_t *>(
87 aom_memalign(kDataAlignment
, 128 * 128 * sizeof(uint16_t)));
89 comp_pred16_
= reinterpret_cast<uint16_t *>(
90 aom_memalign(kDataAlignment
, 128 * 128 * sizeof(uint16_t)));
91 comp_pred16_test_
= reinterpret_cast<uint16_t *>(
92 aom_memalign(kDataAlignment
, 128 * 128 * sizeof(uint16_t)));
96 static void TearDownTestCase() {
97 aom_free(source_data8_
);
99 aom_free(reference_data8_
);
100 reference_data8_
= NULL
;
101 aom_free(second_pred8_
);
102 second_pred8_
= NULL
;
104 aom_free(comp_pred8_
);
106 aom_free(comp_pred8_test_
);
107 comp_pred8_test_
= NULL
;
109 aom_free(source_data16_
);
110 source_data16_
= NULL
;
111 aom_free(reference_data16_
);
112 reference_data16_
= NULL
;
113 aom_free(second_pred16_
);
114 second_pred16_
= NULL
;
116 aom_free(comp_pred16_
);
118 aom_free(comp_pred16_test_
);
119 comp_pred16_test_
= NULL
;
123 virtual void TearDown() { libaom_test::ClearSystemState(); }
126 // Handle up to 4 128x128 blocks, with stride up to 256
127 static const int kDataAlignment
= 16;
128 static const int kDataBlockSize
= 128 * 256;
129 static const int kDataBufferSize
= 4 * kDataBlockSize
;
131 virtual void SetUp() {
133 use_high_bit_depth_
= false;
134 bit_depth_
= AOM_BITS_8
;
135 source_data_
= source_data8_
;
136 reference_data_
= reference_data8_
;
137 second_pred_
= second_pred8_
;
139 comp_pred_
= comp_pred8_
;
140 comp_pred_test_
= comp_pred8_test_
;
143 use_high_bit_depth_
= true;
144 bit_depth_
= static_cast<aom_bit_depth_t
>(bd_
);
145 source_data_
= CONVERT_TO_BYTEPTR(source_data16_
);
146 reference_data_
= CONVERT_TO_BYTEPTR(reference_data16_
);
147 second_pred_
= CONVERT_TO_BYTEPTR(second_pred16_
);
149 comp_pred_
= CONVERT_TO_BYTEPTR(comp_pred16_
);
150 comp_pred_test_
= CONVERT_TO_BYTEPTR(comp_pred16_test_
);
153 mask_
= (1 << bit_depth_
) - 1;
154 source_stride_
= (width_
+ 31) & ~31;
155 reference_stride_
= width_
* 2;
156 rnd_
.Reset(ACMRandom::DeterministicSeed());
159 virtual uint8_t *GetReference(int block_idx
) {
160 if (use_high_bit_depth_
)
161 return CONVERT_TO_BYTEPTR(CONVERT_TO_SHORTPTR(reference_data_
) +
162 block_idx
* kDataBlockSize
);
163 return reference_data_
+ block_idx
* kDataBlockSize
;
166 // Sum of Absolute Differences. Given two blocks, calculate the absolute
167 // difference between two pixels in the same relative location; accumulate.
168 unsigned int ReferenceSAD(int block_idx
) {
169 unsigned int sad
= 0;
170 const uint8_t *const reference8
= GetReference(block_idx
);
171 const uint8_t *const source8
= source_data_
;
172 const uint16_t *const reference16
=
173 CONVERT_TO_SHORTPTR(GetReference(block_idx
));
174 const uint16_t *const source16
= CONVERT_TO_SHORTPTR(source_data_
);
175 for (int h
= 0; h
< height_
; ++h
) {
176 for (int w
= 0; w
< width_
; ++w
) {
177 if (!use_high_bit_depth_
) {
178 sad
+= abs(source8
[h
* source_stride_
+ w
] -
179 reference8
[h
* reference_stride_
+ w
]);
181 sad
+= abs(source16
[h
* source_stride_
+ w
] -
182 reference16
[h
* reference_stride_
+ w
]);
189 // Sum of Absolute Differences Average. Given two blocks, and a prediction
190 // calculate the absolute difference between one pixel and average of the
191 // corresponding and predicted pixels; accumulate.
192 unsigned int ReferenceSADavg(int block_idx
) {
193 unsigned int sad
= 0;
194 const uint8_t *const reference8
= GetReference(block_idx
);
195 const uint8_t *const source8
= source_data_
;
196 const uint8_t *const second_pred8
= second_pred_
;
197 const uint16_t *const reference16
=
198 CONVERT_TO_SHORTPTR(GetReference(block_idx
));
199 const uint16_t *const source16
= CONVERT_TO_SHORTPTR(source_data_
);
200 const uint16_t *const second_pred16
= CONVERT_TO_SHORTPTR(second_pred_
);
201 for (int h
= 0; h
< height_
; ++h
) {
202 for (int w
= 0; w
< width_
; ++w
) {
203 if (!use_high_bit_depth_
) {
204 const int tmp
= second_pred8
[h
* width_
+ w
] +
205 reference8
[h
* reference_stride_
+ w
];
206 const uint8_t comp_pred
= ROUND_POWER_OF_TWO(tmp
, 1);
207 sad
+= abs(source8
[h
* source_stride_
+ w
] - comp_pred
);
209 const int tmp
= second_pred16
[h
* width_
+ w
] +
210 reference16
[h
* reference_stride_
+ w
];
211 const uint16_t comp_pred
= ROUND_POWER_OF_TWO(tmp
, 1);
212 sad
+= abs(source16
[h
* source_stride_
+ w
] - comp_pred
);
220 void ReferenceJntCompAvg(int block_idx
) {
221 const uint8_t *const reference8
= GetReference(block_idx
);
222 const uint8_t *const second_pred8
= second_pred_
;
223 uint8_t *const comp_pred8
= comp_pred_
;
224 const uint16_t *const reference16
=
225 CONVERT_TO_SHORTPTR(GetReference(block_idx
));
226 const uint16_t *const second_pred16
= CONVERT_TO_SHORTPTR(second_pred_
);
227 uint16_t *const comp_pred16
= CONVERT_TO_SHORTPTR(comp_pred_
);
228 for (int h
= 0; h
< height_
; ++h
) {
229 for (int w
= 0; w
< width_
; ++w
) {
230 if (!use_high_bit_depth_
) {
232 second_pred8
[h
* width_
+ w
] * jcp_param_
.bck_offset
+
233 reference8
[h
* reference_stride_
+ w
] * jcp_param_
.fwd_offset
;
234 comp_pred8
[h
* width_
+ w
] = ROUND_POWER_OF_TWO(tmp
, 4);
237 second_pred16
[h
* width_
+ w
] * jcp_param_
.bck_offset
+
238 reference16
[h
* reference_stride_
+ w
] * jcp_param_
.fwd_offset
;
239 comp_pred16
[h
* width_
+ w
] = ROUND_POWER_OF_TWO(tmp
, 4);
245 unsigned int ReferenceJntSADavg(int block_idx
) {
246 unsigned int sad
= 0;
247 const uint8_t *const reference8
= GetReference(block_idx
);
248 const uint8_t *const source8
= source_data_
;
249 const uint8_t *const second_pred8
= second_pred_
;
250 const uint16_t *const reference16
=
251 CONVERT_TO_SHORTPTR(GetReference(block_idx
));
252 const uint16_t *const source16
= CONVERT_TO_SHORTPTR(source_data_
);
253 const uint16_t *const second_pred16
= CONVERT_TO_SHORTPTR(second_pred_
);
254 for (int h
= 0; h
< height_
; ++h
) {
255 for (int w
= 0; w
< width_
; ++w
) {
256 if (!use_high_bit_depth_
) {
258 second_pred8
[h
* width_
+ w
] * jcp_param_
.bck_offset
+
259 reference8
[h
* reference_stride_
+ w
] * jcp_param_
.fwd_offset
;
260 const uint8_t comp_pred
= ROUND_POWER_OF_TWO(tmp
, 4);
261 sad
+= abs(source8
[h
* source_stride_
+ w
] - comp_pred
);
264 second_pred16
[h
* width_
+ w
] * jcp_param_
.bck_offset
+
265 reference16
[h
* reference_stride_
+ w
] * jcp_param_
.fwd_offset
;
266 const uint16_t comp_pred
= ROUND_POWER_OF_TWO(tmp
, 4);
267 sad
+= abs(source16
[h
* source_stride_
+ w
] - comp_pred
);
273 #endif // CONFIG_JNT_COMP
275 void FillConstant(uint8_t *data
, int stride
, uint16_t fill_constant
) {
276 uint8_t *data8
= data
;
277 uint16_t *data16
= CONVERT_TO_SHORTPTR(data
);
278 for (int h
= 0; h
< height_
; ++h
) {
279 for (int w
= 0; w
< width_
; ++w
) {
280 if (!use_high_bit_depth_
) {
281 data8
[h
* stride
+ w
] = static_cast<uint8_t>(fill_constant
);
283 data16
[h
* stride
+ w
] = fill_constant
;
289 void FillRandom(uint8_t *data
, int stride
) {
290 uint8_t *data8
= data
;
291 uint16_t *data16
= CONVERT_TO_SHORTPTR(data
);
292 for (int h
= 0; h
< height_
; ++h
) {
293 for (int w
= 0; w
< width_
; ++w
) {
294 if (!use_high_bit_depth_
) {
295 data8
[h
* stride
+ w
] = rnd_
.Rand8();
297 data16
[h
* stride
+ w
] = rnd_
.Rand16() & mask_
;
303 int width_
, height_
, mask_
, bd_
;
304 aom_bit_depth_t bit_depth_
;
305 static uint8_t *source_data_
;
306 static uint8_t *reference_data_
;
307 static uint8_t *second_pred_
;
309 bool use_high_bit_depth_
;
310 static uint8_t *source_data8_
;
311 static uint8_t *reference_data8_
;
312 static uint8_t *second_pred8_
;
313 static uint16_t *source_data16_
;
314 static uint16_t *reference_data16_
;
315 static uint16_t *second_pred16_
;
316 int reference_stride_
;
318 static uint8_t *comp_pred_
;
319 static uint8_t *comp_pred8_
;
320 static uint16_t *comp_pred16_
;
321 static uint8_t *comp_pred_test_
;
322 static uint8_t *comp_pred8_test_
;
323 static uint16_t *comp_pred16_test_
;
324 JNT_COMP_PARAMS jcp_param_
;
330 class SADx4Test
: public ::testing::WithParamInterface
<SadMxNx4Param
>,
333 SADx4Test() : SADTestBase(GET_PARAM(0), GET_PARAM(1), GET_PARAM(3)) {}
336 void SADs(unsigned int *results
) {
337 const uint8_t *references
[] = { GetReference(0), GetReference(1),
338 GetReference(2), GetReference(3) };
340 ASM_REGISTER_STATE_CHECK(GET_PARAM(2)(
341 source_data_
, source_stride_
, references
, reference_stride_
, results
));
345 unsigned int reference_sad
, exp_sad
[4];
348 for (int block
= 0; block
< 4; ++block
) {
349 reference_sad
= ReferenceSAD(block
);
351 EXPECT_EQ(reference_sad
, exp_sad
[block
]) << "block " << block
;
356 class SADTest
: public ::testing::WithParamInterface
<SadMxNParam
>,
359 SADTest() : SADTestBase(GET_PARAM(0), GET_PARAM(1), GET_PARAM(3)) {}
362 unsigned int SAD(int block_idx
) {
364 const uint8_t *const reference
= GetReference(block_idx
);
366 ASM_REGISTER_STATE_CHECK(ret
= GET_PARAM(2)(source_data_
, source_stride_
,
367 reference
, reference_stride_
));
372 const unsigned int reference_sad
= ReferenceSAD(0);
373 const unsigned int exp_sad
= SAD(0);
375 ASSERT_EQ(reference_sad
, exp_sad
);
379 int test_count
= 20000000;
380 while (test_count
> 0) {
387 class SADavgTest
: public ::testing::WithParamInterface
<SadMxNAvgParam
>,
390 SADavgTest() : SADTestBase(GET_PARAM(0), GET_PARAM(1), GET_PARAM(3)) {}
393 unsigned int SAD_avg(int block_idx
) {
395 const uint8_t *const reference
= GetReference(block_idx
);
397 ASM_REGISTER_STATE_CHECK(ret
= GET_PARAM(2)(source_data_
, source_stride_
,
398 reference
, reference_stride_
,
404 const unsigned int reference_sad
= ReferenceSADavg(0);
405 const unsigned int exp_sad
= SAD_avg(0);
407 ASSERT_EQ(reference_sad
, exp_sad
);
412 class JntCompAvgTest
: public ::testing::WithParamInterface
<JntCompAvgParam
>,
415 JntCompAvgTest() : SADTestBase(GET_PARAM(0), GET_PARAM(1), GET_PARAM(3)) {}
418 void jnt_comp_avg(int block_idx
) {
419 const uint8_t *const reference
= GetReference(block_idx
);
421 ASM_REGISTER_STATE_CHECK(GET_PARAM(2)(comp_pred_test_
, second_pred_
, width_
,
422 height_
, reference
, reference_stride_
,
426 void CheckCompAvg() {
427 for (int j
= 0; j
< 2; ++j
) {
428 for (int i
= 0; i
< 4; ++i
) {
429 jcp_param_
.fwd_offset
= quant_dist_lookup_table
[j
][i
][0];
430 jcp_param_
.bck_offset
= quant_dist_lookup_table
[j
][i
][1];
432 ReferenceJntCompAvg(0);
435 for (int y
= 0; y
< height_
; ++y
)
436 for (int x
= 0; x
< width_
; ++x
)
437 ASSERT_EQ(comp_pred_
[y
* width_
+ x
],
438 comp_pred_test_
[y
* width_
+ x
]);
444 class JntSADTest
: public ::testing::WithParamInterface
<JntSadMxhParam
>,
447 JntSADTest() : SADTestBase(GET_PARAM(0), GET_PARAM(1), GET_PARAM(3)) {}
450 unsigned int SAD(int block_idx
) {
452 const uint8_t *const reference
= GetReference(block_idx
);
454 ASM_REGISTER_STATE_CHECK(ret
= GET_PARAM(2)(source_data_
, source_stride_
,
455 reference
, reference_stride_
,
456 GET_PARAM(0), GET_PARAM(1)));
461 const unsigned int reference_sad
= ReferenceSAD(0);
462 const unsigned int exp_sad
= SAD(0);
464 ASSERT_EQ(reference_sad
, exp_sad
);
468 int test_count
= 20000000;
469 while (test_count
> 0) {
476 class JntSADavgTest
: public ::testing::WithParamInterface
<JntSadMxNAvgParam
>,
479 JntSADavgTest() : SADTestBase(GET_PARAM(0), GET_PARAM(1), GET_PARAM(3)) {}
482 unsigned int jnt_SAD_avg(int block_idx
) {
484 const uint8_t *const reference
= GetReference(block_idx
);
486 ASM_REGISTER_STATE_CHECK(ret
= GET_PARAM(2)(source_data_
, source_stride_
,
487 reference
, reference_stride_
,
488 second_pred_
, &jcp_param_
));
493 for (int j
= 0; j
< 2; ++j
) {
494 for (int i
= 0; i
< 4; ++i
) {
495 jcp_param_
.fwd_offset
= quant_dist_lookup_table
[j
][i
][0];
496 jcp_param_
.bck_offset
= quant_dist_lookup_table
[j
][i
][1];
498 const unsigned int reference_sad
= ReferenceJntSADavg(0);
499 const unsigned int exp_sad
= jnt_SAD_avg(0);
501 ASSERT_EQ(reference_sad
, exp_sad
);
506 #endif // CONFIG_JNT_COMP
508 uint8_t *SADTestBase::source_data_
= NULL
;
509 uint8_t *SADTestBase::reference_data_
= NULL
;
510 uint8_t *SADTestBase::second_pred_
= NULL
;
512 uint8_t *SADTestBase::comp_pred_
= NULL
;
513 uint8_t *SADTestBase::comp_pred_test_
= NULL
;
515 uint8_t *SADTestBase::source_data8_
= NULL
;
516 uint8_t *SADTestBase::reference_data8_
= NULL
;
517 uint8_t *SADTestBase::second_pred8_
= NULL
;
519 uint8_t *SADTestBase::comp_pred8_
= NULL
;
520 uint8_t *SADTestBase::comp_pred8_test_
= NULL
;
522 uint16_t *SADTestBase::source_data16_
= NULL
;
523 uint16_t *SADTestBase::reference_data16_
= NULL
;
524 uint16_t *SADTestBase::second_pred16_
= NULL
;
526 uint16_t *SADTestBase::comp_pred16_
= NULL
;
527 uint16_t *SADTestBase::comp_pred16_test_
= NULL
;
530 TEST_P(SADTest
, MaxRef
) {
531 FillConstant(source_data_
, source_stride_
, 0);
532 FillConstant(reference_data_
, reference_stride_
, mask_
);
536 TEST_P(SADTest
, MaxSrc
) {
537 FillConstant(source_data_
, source_stride_
, mask_
);
538 FillConstant(reference_data_
, reference_stride_
, 0);
542 TEST_P(SADTest
, ShortRef
) {
543 const int tmp_stride
= reference_stride_
;
544 reference_stride_
>>= 1;
545 FillRandom(source_data_
, source_stride_
);
546 FillRandom(reference_data_
, reference_stride_
);
548 reference_stride_
= tmp_stride
;
551 TEST_P(SADTest
, UnalignedRef
) {
552 // The reference frame, but not the source frame, may be unaligned for
553 // certain types of searches.
554 const int tmp_stride
= reference_stride_
;
555 reference_stride_
-= 1;
556 FillRandom(source_data_
, source_stride_
);
557 FillRandom(reference_data_
, reference_stride_
);
559 reference_stride_
= tmp_stride
;
562 TEST_P(SADTest
, ShortSrc
) {
563 const int tmp_stride
= source_stride_
;
564 source_stride_
>>= 1;
565 int test_count
= 2000;
566 while (test_count
> 0) {
567 FillRandom(source_data_
, source_stride_
);
568 FillRandom(reference_data_
, reference_stride_
);
572 source_stride_
= tmp_stride
;
575 #define SPEED_TEST (0)
577 TEST_P(SADTest
, Speed
) {
578 const int tmp_stride
= source_stride_
;
579 source_stride_
>>= 1;
580 FillRandom(source_data_
, source_stride_
);
581 FillRandom(reference_data_
, reference_stride_
);
583 source_stride_
= tmp_stride
;
587 TEST_P(SADavgTest
, MaxRef
) {
588 FillConstant(source_data_
, source_stride_
, 0);
589 FillConstant(reference_data_
, reference_stride_
, mask_
);
590 FillConstant(second_pred_
, width_
, 0);
593 TEST_P(SADavgTest
, MaxSrc
) {
594 FillConstant(source_data_
, source_stride_
, mask_
);
595 FillConstant(reference_data_
, reference_stride_
, 0);
596 FillConstant(second_pred_
, width_
, 0);
600 TEST_P(SADavgTest
, ShortRef
) {
601 const int tmp_stride
= reference_stride_
;
602 reference_stride_
>>= 1;
603 FillRandom(source_data_
, source_stride_
);
604 FillRandom(reference_data_
, reference_stride_
);
605 FillRandom(second_pred_
, width_
);
607 reference_stride_
= tmp_stride
;
610 TEST_P(SADavgTest
, UnalignedRef
) {
611 // The reference frame, but not the source frame, may be unaligned for
612 // certain types of searches.
613 const int tmp_stride
= reference_stride_
;
614 reference_stride_
-= 1;
615 FillRandom(source_data_
, source_stride_
);
616 FillRandom(reference_data_
, reference_stride_
);
617 FillRandom(second_pred_
, width_
);
619 reference_stride_
= tmp_stride
;
622 TEST_P(SADavgTest
, ShortSrc
) {
623 const int tmp_stride
= source_stride_
;
624 source_stride_
>>= 1;
625 int test_count
= 2000;
626 while (test_count
> 0) {
627 FillRandom(source_data_
, source_stride_
);
628 FillRandom(reference_data_
, reference_stride_
);
629 FillRandom(second_pred_
, width_
);
633 source_stride_
= tmp_stride
;
637 TEST_P(JntCompAvgTest
, MaxRef
) {
638 FillConstant(reference_data_
, reference_stride_
, mask_
);
639 FillConstant(second_pred_
, width_
, 0);
643 TEST_P(JntCompAvgTest
, MaxSecondPred
) {
644 FillConstant(reference_data_
, reference_stride_
, 0);
645 FillConstant(second_pred_
, width_
, mask_
);
649 TEST_P(JntCompAvgTest
, ShortRef
) {
650 const int tmp_stride
= reference_stride_
;
651 reference_stride_
>>= 1;
652 FillRandom(reference_data_
, reference_stride_
);
653 FillRandom(second_pred_
, width_
);
655 reference_stride_
= tmp_stride
;
658 TEST_P(JntCompAvgTest
, UnalignedRef
) {
659 // The reference frame, but not the source frame, may be unaligned for
660 // certain types of searches.
661 const int tmp_stride
= reference_stride_
;
662 reference_stride_
-= 1;
663 FillRandom(reference_data_
, reference_stride_
);
664 FillRandom(second_pred_
, width_
);
666 reference_stride_
= tmp_stride
;
669 TEST_P(JntSADTest
, MaxRef
) {
670 FillConstant(source_data_
, source_stride_
, 0);
671 FillConstant(reference_data_
, reference_stride_
, mask_
);
675 TEST_P(JntSADTest
, MaxSrc
) {
676 FillConstant(source_data_
, source_stride_
, mask_
);
677 FillConstant(reference_data_
, reference_stride_
, 0);
681 TEST_P(JntSADTest
, ShortRef
) {
682 const int tmp_stride
= reference_stride_
;
683 reference_stride_
>>= 1;
684 FillRandom(source_data_
, source_stride_
);
685 FillRandom(reference_data_
, reference_stride_
);
687 reference_stride_
= tmp_stride
;
690 TEST_P(JntSADTest
, UnalignedRef
) {
691 // The reference frame, but not the source frame, may be unaligned for
692 // certain types of searches.
693 const int tmp_stride
= reference_stride_
;
694 reference_stride_
-= 1;
695 FillRandom(source_data_
, source_stride_
);
696 FillRandom(reference_data_
, reference_stride_
);
698 reference_stride_
= tmp_stride
;
701 TEST_P(JntSADTest
, ShortSrc
) {
702 const int tmp_stride
= source_stride_
;
703 source_stride_
>>= 1;
704 int test_count
= 2000;
705 while (test_count
> 0) {
706 FillRandom(source_data_
, source_stride_
);
707 FillRandom(reference_data_
, reference_stride_
);
711 source_stride_
= tmp_stride
;
714 TEST_P(JntSADavgTest
, MaxRef
) {
715 FillConstant(source_data_
, source_stride_
, 0);
716 FillConstant(reference_data_
, reference_stride_
, mask_
);
717 FillConstant(second_pred_
, width_
, 0);
720 TEST_P(JntSADavgTest
, MaxSrc
) {
721 FillConstant(source_data_
, source_stride_
, mask_
);
722 FillConstant(reference_data_
, reference_stride_
, 0);
723 FillConstant(second_pred_
, width_
, 0);
727 TEST_P(JntSADavgTest
, ShortRef
) {
728 const int tmp_stride
= reference_stride_
;
729 reference_stride_
>>= 1;
730 FillRandom(source_data_
, source_stride_
);
731 FillRandom(reference_data_
, reference_stride_
);
732 FillRandom(second_pred_
, width_
);
734 reference_stride_
= tmp_stride
;
737 TEST_P(JntSADavgTest
, UnalignedRef
) {
738 // The reference frame, but not the source frame, may be unaligned for
739 // certain types of searches.
740 const int tmp_stride
= reference_stride_
;
741 reference_stride_
-= 1;
742 FillRandom(source_data_
, source_stride_
);
743 FillRandom(reference_data_
, reference_stride_
);
744 FillRandom(second_pred_
, width_
);
746 reference_stride_
= tmp_stride
;
749 TEST_P(JntSADavgTest
, ShortSrc
) {
750 const int tmp_stride
= source_stride_
;
751 source_stride_
>>= 1;
752 int test_count
= 2000;
753 while (test_count
> 0) {
754 FillRandom(source_data_
, source_stride_
);
755 FillRandom(reference_data_
, reference_stride_
);
756 FillRandom(second_pred_
, width_
);
760 source_stride_
= tmp_stride
;
762 #endif // CONFIG_JNT_COMP
764 TEST_P(SADx4Test
, MaxRef
) {
765 FillConstant(source_data_
, source_stride_
, 0);
766 FillConstant(GetReference(0), reference_stride_
, mask_
);
767 FillConstant(GetReference(1), reference_stride_
, mask_
);
768 FillConstant(GetReference(2), reference_stride_
, mask_
);
769 FillConstant(GetReference(3), reference_stride_
, mask_
);
773 TEST_P(SADx4Test
, MaxSrc
) {
774 FillConstant(source_data_
, source_stride_
, mask_
);
775 FillConstant(GetReference(0), reference_stride_
, 0);
776 FillConstant(GetReference(1), reference_stride_
, 0);
777 FillConstant(GetReference(2), reference_stride_
, 0);
778 FillConstant(GetReference(3), reference_stride_
, 0);
782 TEST_P(SADx4Test
, ShortRef
) {
783 int tmp_stride
= reference_stride_
;
784 reference_stride_
>>= 1;
785 FillRandom(source_data_
, source_stride_
);
786 FillRandom(GetReference(0), reference_stride_
);
787 FillRandom(GetReference(1), reference_stride_
);
788 FillRandom(GetReference(2), reference_stride_
);
789 FillRandom(GetReference(3), reference_stride_
);
791 reference_stride_
= tmp_stride
;
794 TEST_P(SADx4Test
, UnalignedRef
) {
795 // The reference frame, but not the source frame, may be unaligned for
796 // certain types of searches.
797 int tmp_stride
= reference_stride_
;
798 reference_stride_
-= 1;
799 FillRandom(source_data_
, source_stride_
);
800 FillRandom(GetReference(0), reference_stride_
);
801 FillRandom(GetReference(1), reference_stride_
);
802 FillRandom(GetReference(2), reference_stride_
);
803 FillRandom(GetReference(3), reference_stride_
);
805 reference_stride_
= tmp_stride
;
808 TEST_P(SADx4Test
, ShortSrc
) {
809 int tmp_stride
= source_stride_
;
810 source_stride_
>>= 1;
811 int test_count
= 1000;
812 while (test_count
> 0) {
813 FillRandom(source_data_
, source_stride_
);
814 FillRandom(GetReference(0), reference_stride_
);
815 FillRandom(GetReference(1), reference_stride_
);
816 FillRandom(GetReference(2), reference_stride_
);
817 FillRandom(GetReference(3), reference_stride_
);
821 source_stride_
= tmp_stride
;
824 TEST_P(SADx4Test
, SrcAlignedByWidth
) {
825 uint8_t *tmp_source_data
= source_data_
;
826 source_data_
+= width_
;
827 FillRandom(source_data_
, source_stride_
);
828 FillRandom(GetReference(0), reference_stride_
);
829 FillRandom(GetReference(1), reference_stride_
);
830 FillRandom(GetReference(2), reference_stride_
);
831 FillRandom(GetReference(3), reference_stride_
);
833 source_data_
= tmp_source_data
;
836 using std::tr1::make_tuple
;
838 //------------------------------------------------------------------------------
840 const SadMxNParam c_tests
[] = {
841 #if CONFIG_AV1 && CONFIG_EXT_PARTITION
842 make_tuple(128, 128, &aom_sad128x128_c
, -1),
843 make_tuple(128, 64, &aom_sad128x64_c
, -1),
844 make_tuple(64, 128, &aom_sad64x128_c
, -1),
845 #endif // CONFIG_AV1 && CONFIG_EXT_PARTITION
846 make_tuple(64, 64, &aom_sad64x64_c
, -1),
847 make_tuple(64, 32, &aom_sad64x32_c
, -1),
848 make_tuple(32, 64, &aom_sad32x64_c
, -1),
849 make_tuple(32, 32, &aom_sad32x32_c
, -1),
850 make_tuple(32, 16, &aom_sad32x16_c
, -1),
851 make_tuple(16, 32, &aom_sad16x32_c
, -1),
852 make_tuple(16, 16, &aom_sad16x16_c
, -1),
853 make_tuple(16, 8, &aom_sad16x8_c
, -1),
854 make_tuple(8, 16, &aom_sad8x16_c
, -1),
855 make_tuple(8, 8, &aom_sad8x8_c
, -1),
856 make_tuple(8, 4, &aom_sad8x4_c
, -1),
857 make_tuple(4, 8, &aom_sad4x8_c
, -1),
858 make_tuple(4, 4, &aom_sad4x4_c
, -1),
859 #if CONFIG_AV1 && CONFIG_EXT_PARTITION
860 make_tuple(128, 128, &aom_highbd_sad128x128_c
, 8),
861 make_tuple(128, 64, &aom_highbd_sad128x64_c
, 8),
862 make_tuple(64, 128, &aom_highbd_sad64x128_c
, 8),
863 #endif // CONFIG_AV1 && CONFIG_EXT_PARTITION
864 make_tuple(64, 64, &aom_highbd_sad64x64_c
, 8),
865 make_tuple(64, 32, &aom_highbd_sad64x32_c
, 8),
866 make_tuple(32, 64, &aom_highbd_sad32x64_c
, 8),
867 make_tuple(32, 32, &aom_highbd_sad32x32_c
, 8),
868 make_tuple(32, 16, &aom_highbd_sad32x16_c
, 8),
869 make_tuple(16, 32, &aom_highbd_sad16x32_c
, 8),
870 make_tuple(16, 16, &aom_highbd_sad16x16_c
, 8),
871 make_tuple(16, 8, &aom_highbd_sad16x8_c
, 8),
872 make_tuple(8, 16, &aom_highbd_sad8x16_c
, 8),
873 make_tuple(8, 8, &aom_highbd_sad8x8_c
, 8),
874 make_tuple(8, 4, &aom_highbd_sad8x4_c
, 8),
875 make_tuple(4, 8, &aom_highbd_sad4x8_c
, 8),
876 make_tuple(4, 4, &aom_highbd_sad4x4_c
, 8),
877 #if CONFIG_AV1 && CONFIG_EXT_PARTITION
878 make_tuple(128, 128, &aom_highbd_sad128x128_c
, 10),
879 make_tuple(128, 64, &aom_highbd_sad128x64_c
, 10),
880 make_tuple(64, 128, &aom_highbd_sad64x128_c
, 10),
881 #endif // CONFIG_AV1 && CONFIG_EXT_PARTITION
882 make_tuple(64, 64, &aom_highbd_sad64x64_c
, 10),
883 make_tuple(64, 32, &aom_highbd_sad64x32_c
, 10),
884 make_tuple(32, 64, &aom_highbd_sad32x64_c
, 10),
885 make_tuple(32, 32, &aom_highbd_sad32x32_c
, 10),
886 make_tuple(32, 16, &aom_highbd_sad32x16_c
, 10),
887 make_tuple(16, 32, &aom_highbd_sad16x32_c
, 10),
888 make_tuple(16, 16, &aom_highbd_sad16x16_c
, 10),
889 make_tuple(16, 8, &aom_highbd_sad16x8_c
, 10),
890 make_tuple(8, 16, &aom_highbd_sad8x16_c
, 10),
891 make_tuple(8, 8, &aom_highbd_sad8x8_c
, 10),
892 make_tuple(8, 4, &aom_highbd_sad8x4_c
, 10),
893 make_tuple(4, 8, &aom_highbd_sad4x8_c
, 10),
894 make_tuple(4, 4, &aom_highbd_sad4x4_c
, 10),
895 #if CONFIG_AV1 && CONFIG_EXT_PARTITION
896 make_tuple(128, 128, &aom_highbd_sad128x128_c
, 12),
897 make_tuple(128, 64, &aom_highbd_sad128x64_c
, 12),
898 make_tuple(64, 128, &aom_highbd_sad64x128_c
, 12),
899 #endif // CONFIG_AV1 && CONFIG_EXT_PARTITION
900 make_tuple(64, 64, &aom_highbd_sad64x64_c
, 12),
901 make_tuple(64, 32, &aom_highbd_sad64x32_c
, 12),
902 make_tuple(32, 64, &aom_highbd_sad32x64_c
, 12),
903 make_tuple(32, 32, &aom_highbd_sad32x32_c
, 12),
904 make_tuple(32, 16, &aom_highbd_sad32x16_c
, 12),
905 make_tuple(16, 32, &aom_highbd_sad16x32_c
, 12),
906 make_tuple(16, 16, &aom_highbd_sad16x16_c
, 12),
907 make_tuple(16, 8, &aom_highbd_sad16x8_c
, 12),
908 make_tuple(8, 16, &aom_highbd_sad8x16_c
, 12),
909 make_tuple(8, 8, &aom_highbd_sad8x8_c
, 12),
910 make_tuple(8, 4, &aom_highbd_sad8x4_c
, 12),
911 make_tuple(4, 8, &aom_highbd_sad4x8_c
, 12),
912 make_tuple(4, 4, &aom_highbd_sad4x4_c
, 12),
914 INSTANTIATE_TEST_CASE_P(C
, SADTest
, ::testing::ValuesIn(c_tests
));
916 const SadMxNAvgParam avg_c_tests
[] = {
917 #if CONFIG_AV1 && CONFIG_EXT_PARTITION
918 make_tuple(128, 128, &aom_sad128x128_avg_c
, -1),
919 make_tuple(128, 64, &aom_sad128x64_avg_c
, -1),
920 make_tuple(64, 128, &aom_sad64x128_avg_c
, -1),
921 #endif // CONFIG_AV1 && CONFIG_EXT_PARTITION
922 make_tuple(64, 64, &aom_sad64x64_avg_c
, -1),
923 make_tuple(64, 32, &aom_sad64x32_avg_c
, -1),
924 make_tuple(32, 64, &aom_sad32x64_avg_c
, -1),
925 make_tuple(32, 32, &aom_sad32x32_avg_c
, -1),
926 make_tuple(32, 16, &aom_sad32x16_avg_c
, -1),
927 make_tuple(16, 32, &aom_sad16x32_avg_c
, -1),
928 make_tuple(16, 16, &aom_sad16x16_avg_c
, -1),
929 make_tuple(16, 8, &aom_sad16x8_avg_c
, -1),
930 make_tuple(8, 16, &aom_sad8x16_avg_c
, -1),
931 make_tuple(8, 8, &aom_sad8x8_avg_c
, -1),
932 make_tuple(8, 4, &aom_sad8x4_avg_c
, -1),
933 make_tuple(4, 8, &aom_sad4x8_avg_c
, -1),
934 make_tuple(4, 4, &aom_sad4x4_avg_c
, -1),
935 #if CONFIG_AV1 && CONFIG_EXT_PARTITION
936 make_tuple(128, 128, &aom_highbd_sad128x128_avg_c
, 8),
937 make_tuple(128, 64, &aom_highbd_sad128x64_avg_c
, 8),
938 make_tuple(64, 128, &aom_highbd_sad64x128_avg_c
, 8),
939 #endif // CONFIG_AV1 && CONFIG_EXT_PARTITION
940 make_tuple(64, 64, &aom_highbd_sad64x64_avg_c
, 8),
941 make_tuple(64, 32, &aom_highbd_sad64x32_avg_c
, 8),
942 make_tuple(32, 64, &aom_highbd_sad32x64_avg_c
, 8),
943 make_tuple(32, 32, &aom_highbd_sad32x32_avg_c
, 8),
944 make_tuple(32, 16, &aom_highbd_sad32x16_avg_c
, 8),
945 make_tuple(16, 32, &aom_highbd_sad16x32_avg_c
, 8),
946 make_tuple(16, 16, &aom_highbd_sad16x16_avg_c
, 8),
947 make_tuple(16, 8, &aom_highbd_sad16x8_avg_c
, 8),
948 make_tuple(8, 16, &aom_highbd_sad8x16_avg_c
, 8),
949 make_tuple(8, 8, &aom_highbd_sad8x8_avg_c
, 8),
950 make_tuple(8, 4, &aom_highbd_sad8x4_avg_c
, 8),
951 make_tuple(4, 8, &aom_highbd_sad4x8_avg_c
, 8),
952 make_tuple(4, 4, &aom_highbd_sad4x4_avg_c
, 8),
953 #if CONFIG_AV1 && CONFIG_EXT_PARTITION
954 make_tuple(128, 128, &aom_highbd_sad128x128_avg_c
, 10),
955 make_tuple(128, 64, &aom_highbd_sad128x64_avg_c
, 10),
956 make_tuple(64, 128, &aom_highbd_sad64x128_avg_c
, 10),
957 #endif // CONFIG_AV1 && CONFIG_EXT_PARTITION
958 make_tuple(64, 64, &aom_highbd_sad64x64_avg_c
, 10),
959 make_tuple(64, 32, &aom_highbd_sad64x32_avg_c
, 10),
960 make_tuple(32, 64, &aom_highbd_sad32x64_avg_c
, 10),
961 make_tuple(32, 32, &aom_highbd_sad32x32_avg_c
, 10),
962 make_tuple(32, 16, &aom_highbd_sad32x16_avg_c
, 10),
963 make_tuple(16, 32, &aom_highbd_sad16x32_avg_c
, 10),
964 make_tuple(16, 16, &aom_highbd_sad16x16_avg_c
, 10),
965 make_tuple(16, 8, &aom_highbd_sad16x8_avg_c
, 10),
966 make_tuple(8, 16, &aom_highbd_sad8x16_avg_c
, 10),
967 make_tuple(8, 8, &aom_highbd_sad8x8_avg_c
, 10),
968 make_tuple(8, 4, &aom_highbd_sad8x4_avg_c
, 10),
969 make_tuple(4, 8, &aom_highbd_sad4x8_avg_c
, 10),
970 make_tuple(4, 4, &aom_highbd_sad4x4_avg_c
, 10),
971 #if CONFIG_AV1 && CONFIG_EXT_PARTITION
972 make_tuple(128, 128, &aom_highbd_sad128x128_avg_c
, 12),
973 make_tuple(128, 64, &aom_highbd_sad128x64_avg_c
, 12),
974 make_tuple(64, 128, &aom_highbd_sad64x128_avg_c
, 12),
975 #endif // CONFIG_AV1 && CONFIG_EXT_PARTITION
976 make_tuple(64, 64, &aom_highbd_sad64x64_avg_c
, 12),
977 make_tuple(64, 32, &aom_highbd_sad64x32_avg_c
, 12),
978 make_tuple(32, 64, &aom_highbd_sad32x64_avg_c
, 12),
979 make_tuple(32, 32, &aom_highbd_sad32x32_avg_c
, 12),
980 make_tuple(32, 16, &aom_highbd_sad32x16_avg_c
, 12),
981 make_tuple(16, 32, &aom_highbd_sad16x32_avg_c
, 12),
982 make_tuple(16, 16, &aom_highbd_sad16x16_avg_c
, 12),
983 make_tuple(16, 8, &aom_highbd_sad16x8_avg_c
, 12),
984 make_tuple(8, 16, &aom_highbd_sad8x16_avg_c
, 12),
985 make_tuple(8, 8, &aom_highbd_sad8x8_avg_c
, 12),
986 make_tuple(8, 4, &aom_highbd_sad8x4_avg_c
, 12),
987 make_tuple(4, 8, &aom_highbd_sad4x8_avg_c
, 12),
988 make_tuple(4, 4, &aom_highbd_sad4x4_avg_c
, 12),
990 INSTANTIATE_TEST_CASE_P(C
, SADavgTest
, ::testing::ValuesIn(avg_c_tests
));
993 // TODO(chengchen): add highbd tests
994 const JntCompAvgParam jnt_comp_avg_c_tests
[] = {
995 #if CONFIG_AV1 && CONFIG_EXT_PARTITION
996 make_tuple(128, 128, &aom_jnt_comp_avg_pred_c
, -1),
997 make_tuple(128, 64, &aom_jnt_comp_avg_pred_c
, -1),
998 make_tuple(64, 128, &aom_jnt_comp_avg_pred_c
, -1),
999 #endif // CONFIG_AV1 && CONFIG_EXT_PARTITION
1000 make_tuple(64, 64, &aom_jnt_comp_avg_pred_c
, -1),
1001 make_tuple(64, 32, &aom_jnt_comp_avg_pred_c
, -1),
1002 make_tuple(32, 64, &aom_jnt_comp_avg_pred_c
, -1),
1003 make_tuple(32, 32, &aom_jnt_comp_avg_pred_c
, -1),
1004 make_tuple(32, 16, &aom_jnt_comp_avg_pred_c
, -1),
1005 make_tuple(16, 32, &aom_jnt_comp_avg_pred_c
, -1),
1006 make_tuple(16, 16, &aom_jnt_comp_avg_pred_c
, -1),
1007 make_tuple(16, 8, &aom_jnt_comp_avg_pred_c
, -1),
1008 make_tuple(8, 16, &aom_jnt_comp_avg_pred_c
, -1),
1009 make_tuple(8, 8, &aom_jnt_comp_avg_pred_c
, -1),
1010 make_tuple(8, 4, &aom_jnt_comp_avg_pred_c
, -1),
1011 make_tuple(4, 8, &aom_jnt_comp_avg_pred_c
, -1),
1012 make_tuple(4, 4, &aom_jnt_comp_avg_pred_c
, -1),
1015 INSTANTIATE_TEST_CASE_P(C
, JntCompAvgTest
,
1016 ::testing::ValuesIn(jnt_comp_avg_c_tests
));
1018 const JntSadMxNAvgParam jnt_avg_c_tests
[] = {
1019 #if CONFIG_AV1 && CONFIG_EXT_PARTITION
1020 make_tuple(128, 128, &aom_jnt_sad128x128_avg_c
, -1),
1021 make_tuple(128, 64, &aom_jnt_sad128x64_avg_c
, -1),
1022 make_tuple(64, 128, &aom_jnt_sad64x128_avg_c
, -1),
1023 #endif // CONFIG_AV1 && CONFIG_EXT_PARTITION
1024 make_tuple(64, 64, &aom_jnt_sad64x64_avg_c
, -1),
1025 make_tuple(64, 32, &aom_jnt_sad64x32_avg_c
, -1),
1026 make_tuple(32, 64, &aom_jnt_sad32x64_avg_c
, -1),
1027 make_tuple(32, 32, &aom_jnt_sad32x32_avg_c
, -1),
1028 make_tuple(32, 16, &aom_jnt_sad32x16_avg_c
, -1),
1029 make_tuple(16, 32, &aom_jnt_sad16x32_avg_c
, -1),
1030 make_tuple(16, 16, &aom_jnt_sad16x16_avg_c
, -1),
1031 make_tuple(16, 8, &aom_jnt_sad16x8_avg_c
, -1),
1032 make_tuple(8, 16, &aom_jnt_sad8x16_avg_c
, -1),
1033 make_tuple(8, 8, &aom_jnt_sad8x8_avg_c
, -1),
1034 make_tuple(8, 4, &aom_jnt_sad8x4_avg_c
, -1),
1035 make_tuple(4, 8, &aom_jnt_sad4x8_avg_c
, -1),
1036 make_tuple(4, 4, &aom_jnt_sad4x4_avg_c
, -1),
1038 INSTANTIATE_TEST_CASE_P(C
, JntSADavgTest
, ::testing::ValuesIn(jnt_avg_c_tests
));
1039 #endif // CONFIG_JNT_COMP
1041 const SadMxNx4Param x4d_c_tests
[] = {
1042 #if CONFIG_AV1 && CONFIG_EXT_PARTITION
1043 make_tuple(128, 128, &aom_sad128x128x4d_c
, -1),
1044 make_tuple(128, 64, &aom_sad128x64x4d_c
, -1),
1045 make_tuple(64, 128, &aom_sad64x128x4d_c
, -1),
1046 #endif // CONFIG_AV1 && CONFIG_EXT_PARTITION
1047 make_tuple(64, 64, &aom_sad64x64x4d_c
, -1),
1048 make_tuple(64, 32, &aom_sad64x32x4d_c
, -1),
1049 make_tuple(32, 64, &aom_sad32x64x4d_c
, -1),
1050 make_tuple(32, 32, &aom_sad32x32x4d_c
, -1),
1051 make_tuple(32, 16, &aom_sad32x16x4d_c
, -1),
1052 make_tuple(16, 32, &aom_sad16x32x4d_c
, -1),
1053 make_tuple(16, 16, &aom_sad16x16x4d_c
, -1),
1054 make_tuple(16, 8, &aom_sad16x8x4d_c
, -1),
1055 make_tuple(8, 16, &aom_sad8x16x4d_c
, -1),
1056 make_tuple(8, 8, &aom_sad8x8x4d_c
, -1),
1057 make_tuple(8, 4, &aom_sad8x4x4d_c
, -1),
1058 make_tuple(4, 8, &aom_sad4x8x4d_c
, -1),
1059 make_tuple(4, 4, &aom_sad4x4x4d_c
, -1),
1060 #if CONFIG_AV1 && CONFIG_EXT_PARTITION
1061 make_tuple(128, 128, &aom_highbd_sad128x128x4d_c
, 8),
1062 make_tuple(128, 64, &aom_highbd_sad128x64x4d_c
, 8),
1063 make_tuple(64, 128, &aom_highbd_sad64x128x4d_c
, 8),
1064 #endif // CONFIG_AV1 && CONFIG_EXT_PARTITION
1065 make_tuple(64, 64, &aom_highbd_sad64x64x4d_c
, 8),
1066 make_tuple(64, 32, &aom_highbd_sad64x32x4d_c
, 8),
1067 make_tuple(32, 64, &aom_highbd_sad32x64x4d_c
, 8),
1068 make_tuple(32, 32, &aom_highbd_sad32x32x4d_c
, 8),
1069 make_tuple(32, 16, &aom_highbd_sad32x16x4d_c
, 8),
1070 make_tuple(16, 32, &aom_highbd_sad16x32x4d_c
, 8),
1071 make_tuple(16, 16, &aom_highbd_sad16x16x4d_c
, 8),
1072 make_tuple(16, 8, &aom_highbd_sad16x8x4d_c
, 8),
1073 make_tuple(8, 16, &aom_highbd_sad8x16x4d_c
, 8),
1074 make_tuple(8, 8, &aom_highbd_sad8x8x4d_c
, 8),
1075 make_tuple(8, 4, &aom_highbd_sad8x4x4d_c
, 8),
1076 make_tuple(4, 8, &aom_highbd_sad4x8x4d_c
, 8),
1077 make_tuple(4, 4, &aom_highbd_sad4x4x4d_c
, 8),
1078 #if CONFIG_AV1 && CONFIG_EXT_PARTITION
1079 make_tuple(128, 128, &aom_highbd_sad128x128x4d_c
, 10),
1080 make_tuple(128, 64, &aom_highbd_sad128x64x4d_c
, 10),
1081 make_tuple(64, 128, &aom_highbd_sad64x128x4d_c
, 10),
1082 #endif // CONFIG_AV1 && CONFIG_EXT_PARTITION
1083 make_tuple(64, 64, &aom_highbd_sad64x64x4d_c
, 10),
1084 make_tuple(64, 32, &aom_highbd_sad64x32x4d_c
, 10),
1085 make_tuple(32, 64, &aom_highbd_sad32x64x4d_c
, 10),
1086 make_tuple(32, 32, &aom_highbd_sad32x32x4d_c
, 10),
1087 make_tuple(32, 16, &aom_highbd_sad32x16x4d_c
, 10),
1088 make_tuple(16, 32, &aom_highbd_sad16x32x4d_c
, 10),
1089 make_tuple(16, 16, &aom_highbd_sad16x16x4d_c
, 10),
1090 make_tuple(16, 8, &aom_highbd_sad16x8x4d_c
, 10),
1091 make_tuple(8, 16, &aom_highbd_sad8x16x4d_c
, 10),
1092 make_tuple(8, 8, &aom_highbd_sad8x8x4d_c
, 10),
1093 make_tuple(8, 4, &aom_highbd_sad8x4x4d_c
, 10),
1094 make_tuple(4, 8, &aom_highbd_sad4x8x4d_c
, 10),
1095 make_tuple(4, 4, &aom_highbd_sad4x4x4d_c
, 10),
1096 #if CONFIG_AV1 && CONFIG_EXT_PARTITION
1097 make_tuple(128, 128, &aom_highbd_sad128x128x4d_c
, 12),
1098 make_tuple(128, 64, &aom_highbd_sad128x64x4d_c
, 12),
1099 make_tuple(64, 128, &aom_highbd_sad64x128x4d_c
, 12),
1100 #endif // CONFIG_AV1 && CONFIG_EXT_PARTITION
1101 make_tuple(64, 64, &aom_highbd_sad64x64x4d_c
, 12),
1102 make_tuple(64, 32, &aom_highbd_sad64x32x4d_c
, 12),
1103 make_tuple(32, 64, &aom_highbd_sad32x64x4d_c
, 12),
1104 make_tuple(32, 32, &aom_highbd_sad32x32x4d_c
, 12),
1105 make_tuple(32, 16, &aom_highbd_sad32x16x4d_c
, 12),
1106 make_tuple(16, 32, &aom_highbd_sad16x32x4d_c
, 12),
1107 make_tuple(16, 16, &aom_highbd_sad16x16x4d_c
, 12),
1108 make_tuple(16, 8, &aom_highbd_sad16x8x4d_c
, 12),
1109 make_tuple(8, 16, &aom_highbd_sad8x16x4d_c
, 12),
1110 make_tuple(8, 8, &aom_highbd_sad8x8x4d_c
, 12),
1111 make_tuple(8, 4, &aom_highbd_sad8x4x4d_c
, 12),
1112 make_tuple(4, 8, &aom_highbd_sad4x8x4d_c
, 12),
1113 make_tuple(4, 4, &aom_highbd_sad4x4x4d_c
, 12),
1115 INSTANTIATE_TEST_CASE_P(C
, SADx4Test
, ::testing::ValuesIn(x4d_c_tests
));
1117 //------------------------------------------------------------------------------
1120 const SadMxNParam neon_tests
[] = {
1121 make_tuple(64, 64, &aom_sad64x64_neon
, -1),
1122 make_tuple(32, 32, &aom_sad32x32_neon
, -1),
1123 make_tuple(16, 16, &aom_sad16x16_neon
, -1),
1124 make_tuple(16, 8, &aom_sad16x8_neon
, -1),
1125 make_tuple(8, 16, &aom_sad8x16_neon
, -1),
1126 make_tuple(8, 8, &aom_sad8x8_neon
, -1),
1127 make_tuple(4, 4, &aom_sad4x4_neon
, -1),
1129 INSTANTIATE_TEST_CASE_P(NEON
, SADTest
, ::testing::ValuesIn(neon_tests
));
1131 const SadMxNx4Param x4d_neon_tests
[] = {
1132 make_tuple(64, 64, &aom_sad64x64x4d_neon
, -1),
1133 make_tuple(32, 32, &aom_sad32x32x4d_neon
, -1),
1134 make_tuple(16, 16, &aom_sad16x16x4d_neon
, -1),
1136 INSTANTIATE_TEST_CASE_P(NEON
, SADx4Test
, ::testing::ValuesIn(x4d_neon_tests
));
1139 //------------------------------------------------------------------------------
1142 const SadMxNParam sse2_tests
[] = {
1143 #if CONFIG_AV1 && CONFIG_EXT_PARTITION
1144 make_tuple(128, 128, &aom_sad128x128_sse2
, -1),
1145 make_tuple(128, 64, &aom_sad128x64_sse2
, -1),
1146 make_tuple(64, 128, &aom_sad64x128_sse2
, -1),
1147 #endif // CONFIG_AV1 && CONFIG_EXT_PARTITION
1148 make_tuple(64, 64, &aom_sad64x64_sse2
, -1),
1149 make_tuple(64, 32, &aom_sad64x32_sse2
, -1),
1150 make_tuple(32, 64, &aom_sad32x64_sse2
, -1),
1151 make_tuple(32, 32, &aom_sad32x32_sse2
, -1),
1152 make_tuple(32, 16, &aom_sad32x16_sse2
, -1),
1153 make_tuple(16, 32, &aom_sad16x32_sse2
, -1),
1154 make_tuple(16, 16, &aom_sad16x16_sse2
, -1),
1155 make_tuple(16, 8, &aom_sad16x8_sse2
, -1),
1156 make_tuple(8, 16, &aom_sad8x16_sse2
, -1),
1157 make_tuple(8, 8, &aom_sad8x8_sse2
, -1),
1158 make_tuple(8, 4, &aom_sad8x4_sse2
, -1),
1159 make_tuple(4, 8, &aom_sad4x8_sse2
, -1),
1160 make_tuple(4, 4, &aom_sad4x4_sse2
, -1),
1161 make_tuple(64, 64, &aom_highbd_sad64x64_sse2
, 8),
1162 make_tuple(64, 32, &aom_highbd_sad64x32_sse2
, 8),
1163 make_tuple(32, 64, &aom_highbd_sad32x64_sse2
, 8),
1164 make_tuple(32, 32, &aom_highbd_sad32x32_sse2
, 8),
1165 make_tuple(32, 16, &aom_highbd_sad32x16_sse2
, 8),
1166 make_tuple(16, 32, &aom_highbd_sad16x32_sse2
, 8),
1167 make_tuple(16, 16, &aom_highbd_sad16x16_sse2
, 8),
1168 make_tuple(16, 8, &aom_highbd_sad16x8_sse2
, 8),
1169 make_tuple(8, 16, &aom_highbd_sad8x16_sse2
, 8),
1170 make_tuple(8, 8, &aom_highbd_sad8x8_sse2
, 8),
1171 make_tuple(8, 4, &aom_highbd_sad8x4_sse2
, 8),
1172 make_tuple(64, 64, &aom_highbd_sad64x64_sse2
, 10),
1173 make_tuple(64, 32, &aom_highbd_sad64x32_sse2
, 10),
1174 make_tuple(32, 64, &aom_highbd_sad32x64_sse2
, 10),
1175 make_tuple(32, 32, &aom_highbd_sad32x32_sse2
, 10),
1176 make_tuple(32, 16, &aom_highbd_sad32x16_sse2
, 10),
1177 make_tuple(16, 32, &aom_highbd_sad16x32_sse2
, 10),
1178 make_tuple(16, 16, &aom_highbd_sad16x16_sse2
, 10),
1179 make_tuple(16, 8, &aom_highbd_sad16x8_sse2
, 10),
1180 make_tuple(8, 16, &aom_highbd_sad8x16_sse2
, 10),
1181 make_tuple(8, 8, &aom_highbd_sad8x8_sse2
, 10),
1182 make_tuple(8, 4, &aom_highbd_sad8x4_sse2
, 10),
1183 make_tuple(64, 64, &aom_highbd_sad64x64_sse2
, 12),
1184 make_tuple(64, 32, &aom_highbd_sad64x32_sse2
, 12),
1185 make_tuple(32, 64, &aom_highbd_sad32x64_sse2
, 12),
1186 make_tuple(32, 32, &aom_highbd_sad32x32_sse2
, 12),
1187 make_tuple(32, 16, &aom_highbd_sad32x16_sse2
, 12),
1188 make_tuple(16, 32, &aom_highbd_sad16x32_sse2
, 12),
1189 make_tuple(16, 16, &aom_highbd_sad16x16_sse2
, 12),
1190 make_tuple(16, 8, &aom_highbd_sad16x8_sse2
, 12),
1191 make_tuple(8, 16, &aom_highbd_sad8x16_sse2
, 12),
1192 make_tuple(8, 8, &aom_highbd_sad8x8_sse2
, 12),
1193 make_tuple(8, 4, &aom_highbd_sad8x4_sse2
, 12),
1195 INSTANTIATE_TEST_CASE_P(SSE2
, SADTest
, ::testing::ValuesIn(sse2_tests
));
1197 const SadMxNAvgParam avg_sse2_tests
[] = {
1198 #if CONFIG_AV1 && CONFIG_EXT_PARTITION
1199 make_tuple(128, 128, &aom_sad128x128_avg_sse2
, -1),
1200 make_tuple(128, 64, &aom_sad128x64_avg_sse2
, -1),
1201 make_tuple(64, 128, &aom_sad64x128_avg_sse2
, -1),
1202 #endif // CONFIG_AV1 && CONFIG_EXT_PARTITION
1203 make_tuple(64, 64, &aom_sad64x64_avg_sse2
, -1),
1204 make_tuple(64, 32, &aom_sad64x32_avg_sse2
, -1),
1205 make_tuple(32, 64, &aom_sad32x64_avg_sse2
, -1),
1206 make_tuple(32, 32, &aom_sad32x32_avg_sse2
, -1),
1207 make_tuple(32, 16, &aom_sad32x16_avg_sse2
, -1),
1208 make_tuple(16, 32, &aom_sad16x32_avg_sse2
, -1),
1209 make_tuple(16, 16, &aom_sad16x16_avg_sse2
, -1),
1210 make_tuple(16, 8, &aom_sad16x8_avg_sse2
, -1),
1211 make_tuple(8, 16, &aom_sad8x16_avg_sse2
, -1),
1212 make_tuple(8, 8, &aom_sad8x8_avg_sse2
, -1),
1213 make_tuple(8, 4, &aom_sad8x4_avg_sse2
, -1),
1214 make_tuple(4, 8, &aom_sad4x8_avg_sse2
, -1),
1215 make_tuple(4, 4, &aom_sad4x4_avg_sse2
, -1),
1216 make_tuple(64, 64, &aom_highbd_sad64x64_avg_sse2
, 8),
1217 make_tuple(64, 32, &aom_highbd_sad64x32_avg_sse2
, 8),
1218 make_tuple(32, 64, &aom_highbd_sad32x64_avg_sse2
, 8),
1219 make_tuple(32, 32, &aom_highbd_sad32x32_avg_sse2
, 8),
1220 make_tuple(32, 16, &aom_highbd_sad32x16_avg_sse2
, 8),
1221 make_tuple(16, 32, &aom_highbd_sad16x32_avg_sse2
, 8),
1222 make_tuple(16, 16, &aom_highbd_sad16x16_avg_sse2
, 8),
1223 make_tuple(16, 8, &aom_highbd_sad16x8_avg_sse2
, 8),
1224 make_tuple(8, 16, &aom_highbd_sad8x16_avg_sse2
, 8),
1225 make_tuple(8, 8, &aom_highbd_sad8x8_avg_sse2
, 8),
1226 make_tuple(8, 4, &aom_highbd_sad8x4_avg_sse2
, 8),
1227 make_tuple(64, 64, &aom_highbd_sad64x64_avg_sse2
, 10),
1228 make_tuple(64, 32, &aom_highbd_sad64x32_avg_sse2
, 10),
1229 make_tuple(32, 64, &aom_highbd_sad32x64_avg_sse2
, 10),
1230 make_tuple(32, 32, &aom_highbd_sad32x32_avg_sse2
, 10),
1231 make_tuple(32, 16, &aom_highbd_sad32x16_avg_sse2
, 10),
1232 make_tuple(16, 32, &aom_highbd_sad16x32_avg_sse2
, 10),
1233 make_tuple(16, 16, &aom_highbd_sad16x16_avg_sse2
, 10),
1234 make_tuple(16, 8, &aom_highbd_sad16x8_avg_sse2
, 10),
1235 make_tuple(8, 16, &aom_highbd_sad8x16_avg_sse2
, 10),
1236 make_tuple(8, 8, &aom_highbd_sad8x8_avg_sse2
, 10),
1237 make_tuple(8, 4, &aom_highbd_sad8x4_avg_sse2
, 10),
1238 make_tuple(64, 64, &aom_highbd_sad64x64_avg_sse2
, 12),
1239 make_tuple(64, 32, &aom_highbd_sad64x32_avg_sse2
, 12),
1240 make_tuple(32, 64, &aom_highbd_sad32x64_avg_sse2
, 12),
1241 make_tuple(32, 32, &aom_highbd_sad32x32_avg_sse2
, 12),
1242 make_tuple(32, 16, &aom_highbd_sad32x16_avg_sse2
, 12),
1243 make_tuple(16, 32, &aom_highbd_sad16x32_avg_sse2
, 12),
1244 make_tuple(16, 16, &aom_highbd_sad16x16_avg_sse2
, 12),
1245 make_tuple(16, 8, &aom_highbd_sad16x8_avg_sse2
, 12),
1246 make_tuple(8, 16, &aom_highbd_sad8x16_avg_sse2
, 12),
1247 make_tuple(8, 8, &aom_highbd_sad8x8_avg_sse2
, 12),
1248 make_tuple(8, 4, &aom_highbd_sad8x4_avg_sse2
, 12),
1250 INSTANTIATE_TEST_CASE_P(SSE2
, SADavgTest
, ::testing::ValuesIn(avg_sse2_tests
));
1252 const SadMxNx4Param x4d_sse2_tests
[] = {
1253 #if CONFIG_AV1 && CONFIG_EXT_PARTITION
1254 make_tuple(128, 128, &aom_sad128x128x4d_sse2
, -1),
1255 make_tuple(128, 64, &aom_sad128x64x4d_sse2
, -1),
1256 make_tuple(64, 128, &aom_sad64x128x4d_sse2
, -1),
1257 #endif // CONFIG_AV1 && CONFIG_EXT_PARTITION
1258 make_tuple(64, 64, &aom_sad64x64x4d_sse2
, -1),
1259 make_tuple(64, 32, &aom_sad64x32x4d_sse2
, -1),
1260 make_tuple(32, 64, &aom_sad32x64x4d_sse2
, -1),
1261 make_tuple(32, 32, &aom_sad32x32x4d_sse2
, -1),
1262 make_tuple(32, 16, &aom_sad32x16x4d_sse2
, -1),
1263 make_tuple(16, 32, &aom_sad16x32x4d_sse2
, -1),
1264 make_tuple(16, 16, &aom_sad16x16x4d_sse2
, -1),
1265 make_tuple(16, 8, &aom_sad16x8x4d_sse2
, -1),
1266 make_tuple(8, 16, &aom_sad8x16x4d_sse2
, -1),
1267 make_tuple(8, 8, &aom_sad8x8x4d_sse2
, -1),
1268 make_tuple(8, 4, &aom_sad8x4x4d_sse2
, -1),
1269 make_tuple(4, 8, &aom_sad4x8x4d_sse2
, -1),
1270 make_tuple(4, 4, &aom_sad4x4x4d_sse2
, -1),
1271 make_tuple(64, 64, &aom_highbd_sad64x64x4d_sse2
, 8),
1272 make_tuple(64, 32, &aom_highbd_sad64x32x4d_sse2
, 8),
1273 make_tuple(32, 64, &aom_highbd_sad32x64x4d_sse2
, 8),
1274 make_tuple(32, 32, &aom_highbd_sad32x32x4d_sse2
, 8),
1275 make_tuple(32, 16, &aom_highbd_sad32x16x4d_sse2
, 8),
1276 make_tuple(16, 32, &aom_highbd_sad16x32x4d_sse2
, 8),
1277 make_tuple(16, 16, &aom_highbd_sad16x16x4d_sse2
, 8),
1278 make_tuple(16, 8, &aom_highbd_sad16x8x4d_sse2
, 8),
1279 make_tuple(8, 16, &aom_highbd_sad8x16x4d_sse2
, 8),
1280 make_tuple(8, 8, &aom_highbd_sad8x8x4d_sse2
, 8),
1281 make_tuple(8, 4, &aom_highbd_sad8x4x4d_sse2
, 8),
1282 make_tuple(4, 8, &aom_highbd_sad4x8x4d_sse2
, 8),
1283 make_tuple(4, 4, &aom_highbd_sad4x4x4d_sse2
, 8),
1284 make_tuple(64, 64, &aom_highbd_sad64x64x4d_sse2
, 10),
1285 make_tuple(64, 32, &aom_highbd_sad64x32x4d_sse2
, 10),
1286 make_tuple(32, 64, &aom_highbd_sad32x64x4d_sse2
, 10),
1287 make_tuple(32, 32, &aom_highbd_sad32x32x4d_sse2
, 10),
1288 make_tuple(32, 16, &aom_highbd_sad32x16x4d_sse2
, 10),
1289 make_tuple(16, 32, &aom_highbd_sad16x32x4d_sse2
, 10),
1290 make_tuple(16, 16, &aom_highbd_sad16x16x4d_sse2
, 10),
1291 make_tuple(16, 8, &aom_highbd_sad16x8x4d_sse2
, 10),
1292 make_tuple(8, 16, &aom_highbd_sad8x16x4d_sse2
, 10),
1293 make_tuple(8, 8, &aom_highbd_sad8x8x4d_sse2
, 10),
1294 make_tuple(8, 4, &aom_highbd_sad8x4x4d_sse2
, 10),
1295 make_tuple(4, 8, &aom_highbd_sad4x8x4d_sse2
, 10),
1296 make_tuple(4, 4, &aom_highbd_sad4x4x4d_sse2
, 10),
1297 make_tuple(64, 64, &aom_highbd_sad64x64x4d_sse2
, 12),
1298 make_tuple(64, 32, &aom_highbd_sad64x32x4d_sse2
, 12),
1299 make_tuple(32, 64, &aom_highbd_sad32x64x4d_sse2
, 12),
1300 make_tuple(32, 32, &aom_highbd_sad32x32x4d_sse2
, 12),
1301 make_tuple(32, 16, &aom_highbd_sad32x16x4d_sse2
, 12),
1302 make_tuple(16, 32, &aom_highbd_sad16x32x4d_sse2
, 12),
1303 make_tuple(16, 16, &aom_highbd_sad16x16x4d_sse2
, 12),
1304 make_tuple(16, 8, &aom_highbd_sad16x8x4d_sse2
, 12),
1305 make_tuple(8, 16, &aom_highbd_sad8x16x4d_sse2
, 12),
1306 make_tuple(8, 8, &aom_highbd_sad8x8x4d_sse2
, 12),
1307 make_tuple(8, 4, &aom_highbd_sad8x4x4d_sse2
, 12),
1308 make_tuple(4, 8, &aom_highbd_sad4x8x4d_sse2
, 12),
1309 make_tuple(4, 4, &aom_highbd_sad4x4x4d_sse2
, 12),
1311 INSTANTIATE_TEST_CASE_P(SSE2
, SADx4Test
, ::testing::ValuesIn(x4d_sse2_tests
));
1314 const JntSadMxhParam jnt_sad_sse2_tests
[] = {
1315 make_tuple(4, 4, &aom_sad4xh_sse2
, -1),
1316 make_tuple(4, 8, &aom_sad4xh_sse2
, -1),
1317 make_tuple(8, 4, &aom_sad8xh_sse2
, -1),
1318 make_tuple(8, 8, &aom_sad8xh_sse2
, -1),
1319 make_tuple(8, 16, &aom_sad8xh_sse2
, -1),
1320 make_tuple(16, 8, &aom_sad16xh_sse2
, -1),
1321 make_tuple(16, 16, &aom_sad16xh_sse2
, -1),
1322 make_tuple(16, 32, &aom_sad16xh_sse2
, -1),
1323 make_tuple(32, 16, &aom_sad32xh_sse2
, -1),
1324 make_tuple(32, 32, &aom_sad32xh_sse2
, -1),
1325 make_tuple(32, 64, &aom_sad32xh_sse2
, -1),
1326 make_tuple(64, 32, &aom_sad64xh_sse2
, -1),
1327 make_tuple(64, 64, &aom_sad64xh_sse2
, -1),
1328 #if CONFIG_EXT_PARTITION
1329 make_tuple(128, 128, &aom_sad128xh_sse2
, -1),
1330 make_tuple(128, 64, &aom_sad128xh_sse2
, -1),
1331 make_tuple(64, 128, &aom_sad64xh_sse2
, -1),
1332 #endif // CONFIG_EXT_PARTITION
1333 #if CONFIG_EXT_PARTITION_TYPES
1334 make_tuple(4, 16, &aom_sad4xh_sse2
, -1),
1335 make_tuple(16, 4, &aom_sad16xh_sse2
, -1),
1336 make_tuple(8, 32, &aom_sad8xh_sse2
, -1),
1337 make_tuple(32, 8, &aom_sad32xh_sse2
, -1),
1338 make_tuple(16, 64, &aom_sad16xh_sse2
, -1),
1339 make_tuple(64, 16, &aom_sad64xh_sse2
, -1),
1340 make_tuple(32, 128, &aom_sad32xh_sse2
, -1),
1341 make_tuple(128, 32, &aom_sad128xh_sse2
, -1),
1342 #endif // CONFIG_EXT_PARTITION_TYPES
1344 INSTANTIATE_TEST_CASE_P(SSE2
, JntSADTest
,
1345 ::testing::ValuesIn(jnt_sad_sse2_tests
));
1346 #endif // CONFIG_JNT_COMP
1351 // Only functions are x3, which do not have tests.
1356 const JntCompAvgParam jnt_comp_avg_ssse3_tests
[] = {
1357 #if CONFIG_AV1 && CONFIG_EXT_PARTITION
1358 make_tuple(128, 128, &aom_jnt_comp_avg_pred_ssse3
, -1),
1359 make_tuple(128, 64, &aom_jnt_comp_avg_pred_ssse3
, -1),
1360 make_tuple(64, 128, &aom_jnt_comp_avg_pred_ssse3
, -1),
1361 #endif // CONFIG_AV1 && CONFIG_EXT_PARTITION
1362 make_tuple(64, 64, &aom_jnt_comp_avg_pred_ssse3
, -1),
1363 make_tuple(64, 32, &aom_jnt_comp_avg_pred_ssse3
, -1),
1364 make_tuple(32, 64, &aom_jnt_comp_avg_pred_ssse3
, -1),
1365 make_tuple(32, 32, &aom_jnt_comp_avg_pred_ssse3
, -1),
1366 make_tuple(32, 16, &aom_jnt_comp_avg_pred_ssse3
, -1),
1367 make_tuple(16, 32, &aom_jnt_comp_avg_pred_ssse3
, -1),
1368 make_tuple(16, 16, &aom_jnt_comp_avg_pred_ssse3
, -1),
1369 make_tuple(16, 8, &aom_jnt_comp_avg_pred_ssse3
, -1),
1370 make_tuple(8, 16, &aom_jnt_comp_avg_pred_ssse3
, -1),
1371 make_tuple(8, 8, &aom_jnt_comp_avg_pred_ssse3
, -1),
1372 make_tuple(8, 4, &aom_jnt_comp_avg_pred_ssse3
, -1),
1373 make_tuple(4, 8, &aom_jnt_comp_avg_pred_ssse3
, -1),
1374 make_tuple(4, 4, &aom_jnt_comp_avg_pred_ssse3
, -1),
1375 make_tuple(16, 16, &aom_jnt_comp_avg_pred_ssse3
, -1),
1378 INSTANTIATE_TEST_CASE_P(SSSE3
, JntCompAvgTest
,
1379 ::testing::ValuesIn(jnt_comp_avg_ssse3_tests
));
1381 const JntSadMxNAvgParam jnt_avg_ssse3_tests
[] = {
1382 #if CONFIG_AV1 && CONFIG_EXT_PARTITION
1383 make_tuple(128, 128, &aom_jnt_sad128x128_avg_ssse3
, -1),
1384 make_tuple(128, 64, &aom_jnt_sad128x64_avg_ssse3
, -1),
1385 make_tuple(64, 128, &aom_jnt_sad64x128_avg_ssse3
, -1),
1386 #endif // CONFIG_AV1 && CONFIG_EXT_PARTITION
1387 make_tuple(64, 64, &aom_jnt_sad64x64_avg_ssse3
, -1),
1388 make_tuple(64, 32, &aom_jnt_sad64x32_avg_ssse3
, -1),
1389 make_tuple(32, 64, &aom_jnt_sad32x64_avg_ssse3
, -1),
1390 make_tuple(32, 32, &aom_jnt_sad32x32_avg_ssse3
, -1),
1391 make_tuple(32, 16, &aom_jnt_sad32x16_avg_ssse3
, -1),
1392 make_tuple(16, 32, &aom_jnt_sad16x32_avg_ssse3
, -1),
1393 make_tuple(16, 16, &aom_jnt_sad16x16_avg_ssse3
, -1),
1394 make_tuple(16, 8, &aom_jnt_sad16x8_avg_ssse3
, -1),
1395 make_tuple(8, 16, &aom_jnt_sad8x16_avg_ssse3
, -1),
1396 make_tuple(8, 8, &aom_jnt_sad8x8_avg_ssse3
, -1),
1397 make_tuple(8, 4, &aom_jnt_sad8x4_avg_ssse3
, -1),
1398 make_tuple(4, 8, &aom_jnt_sad4x8_avg_ssse3
, -1),
1399 make_tuple(4, 4, &aom_jnt_sad4x4_avg_ssse3
, -1),
1401 INSTANTIATE_TEST_CASE_P(SSSE3
, JntSADavgTest
,
1402 ::testing::ValuesIn(jnt_avg_ssse3_tests
));
1403 #endif // CONFIG_JNT_COMP
1404 #endif // HAVE_SSSE3
1407 // Only functions are x8, which do not have tests.
1408 #endif // HAVE_SSE4_1
1411 const SadMxNParam avx2_tests
[] = {
1412 #if CONFIG_EXT_PARTITION
1413 make_tuple(64, 128, &aom_sad64x128_avx2
, -1),
1414 make_tuple(128, 64, &aom_sad128x64_avx2
, -1),
1415 make_tuple(128, 128, &aom_sad128x128_avx2
, -1),
1417 make_tuple(64, 64, &aom_sad64x64_avx2
, -1),
1418 make_tuple(64, 32, &aom_sad64x32_avx2
, -1),
1419 make_tuple(32, 64, &aom_sad32x64_avx2
, -1),
1420 make_tuple(32, 32, &aom_sad32x32_avx2
, -1),
1421 make_tuple(32, 16, &aom_sad32x16_avx2
, -1),
1422 #if CONFIG_EXT_PARTITION
1423 make_tuple(128, 128, &aom_highbd_sad128x128_avx2
, 8),
1424 make_tuple(128, 128, &aom_highbd_sad128x128_avx2
, 10),
1425 make_tuple(128, 128, &aom_highbd_sad128x128_avx2
, 12),
1426 make_tuple(128, 64, &aom_highbd_sad128x64_avx2
, 8),
1427 make_tuple(128, 64, &aom_highbd_sad128x64_avx2
, 10),
1428 make_tuple(128, 64, &aom_highbd_sad128x64_avx2
, 12),
1429 make_tuple(64, 128, &aom_highbd_sad64x128_avx2
, 8),
1430 make_tuple(64, 128, &aom_highbd_sad64x128_avx2
, 10),
1431 make_tuple(64, 128, &aom_highbd_sad64x128_avx2
, 12),
1433 make_tuple(64, 64, &aom_highbd_sad64x64_avx2
, 8),
1434 make_tuple(64, 64, &aom_highbd_sad64x64_avx2
, 10),
1435 make_tuple(64, 64, &aom_highbd_sad64x64_avx2
, 12),
1436 make_tuple(64, 32, &aom_highbd_sad64x32_avx2
, 8),
1437 make_tuple(64, 32, &aom_highbd_sad64x32_avx2
, 10),
1438 make_tuple(64, 32, &aom_highbd_sad64x32_avx2
, 12),
1439 make_tuple(32, 64, &aom_highbd_sad32x64_avx2
, 8),
1440 make_tuple(32, 64, &aom_highbd_sad32x64_avx2
, 10),
1441 make_tuple(32, 64, &aom_highbd_sad32x64_avx2
, 12),
1442 make_tuple(32, 32, &aom_highbd_sad32x32_avx2
, 8),
1443 make_tuple(32, 32, &aom_highbd_sad32x32_avx2
, 10),
1444 make_tuple(32, 32, &aom_highbd_sad32x32_avx2
, 12),
1445 make_tuple(32, 16, &aom_highbd_sad32x16_avx2
, 8),
1446 make_tuple(32, 16, &aom_highbd_sad32x16_avx2
, 10),
1447 make_tuple(32, 16, &aom_highbd_sad32x16_avx2
, 12),
1448 make_tuple(16, 32, &aom_highbd_sad16x32_avx2
, 8),
1449 make_tuple(16, 32, &aom_highbd_sad16x32_avx2
, 10),
1450 make_tuple(16, 32, &aom_highbd_sad16x32_avx2
, 12),
1451 make_tuple(16, 16, &aom_highbd_sad16x16_avx2
, 8),
1452 make_tuple(16, 16, &aom_highbd_sad16x16_avx2
, 10),
1453 make_tuple(16, 16, &aom_highbd_sad16x16_avx2
, 12),
1454 make_tuple(16, 8, &aom_highbd_sad16x8_avx2
, 8),
1455 make_tuple(16, 8, &aom_highbd_sad16x8_avx2
, 10),
1456 make_tuple(16, 8, &aom_highbd_sad16x8_avx2
, 12),
1458 INSTANTIATE_TEST_CASE_P(AVX2
, SADTest
, ::testing::ValuesIn(avx2_tests
));
1460 const SadMxNAvgParam avg_avx2_tests
[] = {
1461 #if CONFIG_EXT_PARTITION
1462 make_tuple(64, 128, &aom_sad64x128_avg_avx2
, -1),
1463 make_tuple(128, 64, &aom_sad128x64_avg_avx2
, -1),
1464 make_tuple(128, 128, &aom_sad128x128_avg_avx2
, -1),
1466 make_tuple(64, 64, &aom_sad64x64_avg_avx2
, -1),
1467 make_tuple(64, 32, &aom_sad64x32_avg_avx2
, -1),
1468 make_tuple(32, 64, &aom_sad32x64_avg_avx2
, -1),
1469 make_tuple(32, 32, &aom_sad32x32_avg_avx2
, -1),
1470 make_tuple(32, 16, &aom_sad32x16_avg_avx2
, -1),
1471 #if CONFIG_EXT_PARTITION
1472 make_tuple(128, 128, &aom_highbd_sad128x128_avg_avx2
, 8),
1473 make_tuple(128, 128, &aom_highbd_sad128x128_avg_avx2
, 10),
1474 make_tuple(128, 128, &aom_highbd_sad128x128_avg_avx2
, 12),
1475 make_tuple(128, 64, &aom_highbd_sad128x64_avg_avx2
, 8),
1476 make_tuple(128, 64, &aom_highbd_sad128x64_avg_avx2
, 10),
1477 make_tuple(128, 64, &aom_highbd_sad128x64_avg_avx2
, 12),
1478 make_tuple(64, 128, &aom_highbd_sad64x128_avg_avx2
, 8),
1479 make_tuple(64, 128, &aom_highbd_sad64x128_avg_avx2
, 10),
1480 make_tuple(64, 128, &aom_highbd_sad64x128_avg_avx2
, 12),
1482 make_tuple(64, 64, &aom_highbd_sad64x64_avg_avx2
, 8),
1483 make_tuple(64, 64, &aom_highbd_sad64x64_avg_avx2
, 10),
1484 make_tuple(64, 64, &aom_highbd_sad64x64_avg_avx2
, 12),
1485 make_tuple(64, 32, &aom_highbd_sad64x32_avg_avx2
, 8),
1486 make_tuple(64, 32, &aom_highbd_sad64x32_avg_avx2
, 10),
1487 make_tuple(64, 32, &aom_highbd_sad64x32_avg_avx2
, 12),
1488 make_tuple(32, 64, &aom_highbd_sad32x64_avg_avx2
, 8),
1489 make_tuple(32, 64, &aom_highbd_sad32x64_avg_avx2
, 10),
1490 make_tuple(32, 64, &aom_highbd_sad32x64_avg_avx2
, 12),
1491 make_tuple(32, 32, &aom_highbd_sad32x32_avg_avx2
, 8),
1492 make_tuple(32, 32, &aom_highbd_sad32x32_avg_avx2
, 10),
1493 make_tuple(32, 32, &aom_highbd_sad32x32_avg_avx2
, 12),
1494 make_tuple(32, 16, &aom_highbd_sad32x16_avg_avx2
, 8),
1495 make_tuple(32, 16, &aom_highbd_sad32x16_avg_avx2
, 10),
1496 make_tuple(32, 16, &aom_highbd_sad32x16_avg_avx2
, 12),
1497 make_tuple(16, 32, &aom_highbd_sad16x32_avg_avx2
, 8),
1498 make_tuple(16, 32, &aom_highbd_sad16x32_avg_avx2
, 10),
1499 make_tuple(16, 32, &aom_highbd_sad16x32_avg_avx2
, 12),
1500 make_tuple(16, 16, &aom_highbd_sad16x16_avg_avx2
, 8),
1501 make_tuple(16, 16, &aom_highbd_sad16x16_avg_avx2
, 10),
1502 make_tuple(16, 16, &aom_highbd_sad16x16_avg_avx2
, 12),
1503 make_tuple(16, 8, &aom_highbd_sad16x8_avg_avx2
, 8),
1504 make_tuple(16, 8, &aom_highbd_sad16x8_avg_avx2
, 10),
1505 make_tuple(16, 8, &aom_highbd_sad16x8_avg_avx2
, 12),
1507 INSTANTIATE_TEST_CASE_P(AVX2
, SADavgTest
, ::testing::ValuesIn(avg_avx2_tests
));
1509 const SadMxNx4Param x4d_avx2_tests
[] = {
1510 #if CONFIG_EXT_PARTITION
1511 make_tuple(64, 128, &aom_sad64x128x4d_avx2
, -1),
1512 make_tuple(128, 64, &aom_sad128x64x4d_avx2
, -1),
1513 make_tuple(128, 128, &aom_sad128x128x4d_avx2
, -1),
1515 make_tuple(64, 64, &aom_sad64x64x4d_avx2
, -1),
1516 make_tuple(32, 64, &aom_sad32x64x4d_avx2
, -1),
1517 make_tuple(64, 32, &aom_sad64x32x4d_avx2
, -1),
1518 make_tuple(32, 32, &aom_sad32x32x4d_avx2
, -1),
1519 #if CONFIG_EXT_PARTITION
1520 make_tuple(128, 128, &aom_highbd_sad128x128x4d_avx2
, 8),
1521 make_tuple(128, 128, &aom_highbd_sad128x128x4d_avx2
, 10),
1522 make_tuple(128, 128, &aom_highbd_sad128x128x4d_avx2
, 12),
1523 make_tuple(128, 64, &aom_highbd_sad128x64x4d_avx2
, 8),
1524 make_tuple(128, 64, &aom_highbd_sad128x64x4d_avx2
, 10),
1525 make_tuple(128, 64, &aom_highbd_sad128x64x4d_avx2
, 12),
1526 make_tuple(64, 128, &aom_highbd_sad64x128x4d_avx2
, 8),
1527 make_tuple(64, 128, &aom_highbd_sad64x128x4d_avx2
, 10),
1528 make_tuple(64, 128, &aom_highbd_sad64x128x4d_avx2
, 12),
1530 make_tuple(64, 64, &aom_highbd_sad64x64x4d_avx2
, 8),
1531 make_tuple(64, 64, &aom_highbd_sad64x64x4d_avx2
, 10),
1532 make_tuple(64, 64, &aom_highbd_sad64x64x4d_avx2
, 12),
1533 make_tuple(64, 32, &aom_highbd_sad64x32x4d_avx2
, 8),
1534 make_tuple(64, 32, &aom_highbd_sad64x32x4d_avx2
, 10),
1535 make_tuple(64, 32, &aom_highbd_sad64x32x4d_avx2
, 12),
1536 make_tuple(32, 64, &aom_highbd_sad32x64x4d_avx2
, 8),
1537 make_tuple(32, 64, &aom_highbd_sad32x64x4d_avx2
, 10),
1538 make_tuple(32, 64, &aom_highbd_sad32x64x4d_avx2
, 12),
1539 make_tuple(32, 32, &aom_highbd_sad32x32x4d_avx2
, 8),
1540 make_tuple(32, 32, &aom_highbd_sad32x32x4d_avx2
, 10),
1541 make_tuple(32, 32, &aom_highbd_sad32x32x4d_avx2
, 12),
1542 make_tuple(32, 16, &aom_highbd_sad32x16x4d_avx2
, 8),
1543 make_tuple(32, 16, &aom_highbd_sad32x16x4d_avx2
, 10),
1544 make_tuple(32, 16, &aom_highbd_sad32x16x4d_avx2
, 12),
1545 make_tuple(16, 32, &aom_highbd_sad16x32x4d_avx2
, 8),
1546 make_tuple(16, 32, &aom_highbd_sad16x32x4d_avx2
, 10),
1547 make_tuple(16, 32, &aom_highbd_sad16x32x4d_avx2
, 12),
1548 make_tuple(16, 16, &aom_highbd_sad16x16x4d_avx2
, 8),
1549 make_tuple(16, 16, &aom_highbd_sad16x16x4d_avx2
, 10),
1550 make_tuple(16, 16, &aom_highbd_sad16x16x4d_avx2
, 12),
1551 make_tuple(16, 8, &aom_highbd_sad16x8x4d_avx2
, 8),
1552 make_tuple(16, 8, &aom_highbd_sad16x8x4d_avx2
, 10),
1553 make_tuple(16, 8, &aom_highbd_sad16x8x4d_avx2
, 12),
1555 INSTANTIATE_TEST_CASE_P(AVX2
, SADx4Test
, ::testing::ValuesIn(x4d_avx2_tests
));
1558 //------------------------------------------------------------------------------
1561 const SadMxNParam msa_tests
[] = {
1562 make_tuple(64, 64, &aom_sad64x64_msa
, -1),
1563 make_tuple(64, 32, &aom_sad64x32_msa
, -1),
1564 make_tuple(32, 64, &aom_sad32x64_msa
, -1),
1565 make_tuple(32, 32, &aom_sad32x32_msa
, -1),
1566 make_tuple(32, 16, &aom_sad32x16_msa
, -1),
1567 make_tuple(16, 32, &aom_sad16x32_msa
, -1),
1568 make_tuple(16, 16, &aom_sad16x16_msa
, -1),
1569 make_tuple(16, 8, &aom_sad16x8_msa
, -1),
1570 make_tuple(8, 16, &aom_sad8x16_msa
, -1),
1571 make_tuple(8, 8, &aom_sad8x8_msa
, -1),
1572 make_tuple(8, 4, &aom_sad8x4_msa
, -1),
1573 make_tuple(4, 8, &aom_sad4x8_msa
, -1),
1574 make_tuple(4, 4, &aom_sad4x4_msa
, -1),
1576 INSTANTIATE_TEST_CASE_P(MSA
, SADTest
, ::testing::ValuesIn(msa_tests
));
1578 const SadMxNAvgParam avg_msa_tests
[] = {
1579 make_tuple(64, 64, &aom_sad64x64_avg_msa
, -1),
1580 make_tuple(64, 32, &aom_sad64x32_avg_msa
, -1),
1581 make_tuple(32, 64, &aom_sad32x64_avg_msa
, -1),
1582 make_tuple(32, 32, &aom_sad32x32_avg_msa
, -1),
1583 make_tuple(32, 16, &aom_sad32x16_avg_msa
, -1),
1584 make_tuple(16, 32, &aom_sad16x32_avg_msa
, -1),
1585 make_tuple(16, 16, &aom_sad16x16_avg_msa
, -1),
1586 make_tuple(16, 8, &aom_sad16x8_avg_msa
, -1),
1587 make_tuple(8, 16, &aom_sad8x16_avg_msa
, -1),
1588 make_tuple(8, 8, &aom_sad8x8_avg_msa
, -1),
1589 make_tuple(8, 4, &aom_sad8x4_avg_msa
, -1),
1590 make_tuple(4, 8, &aom_sad4x8_avg_msa
, -1),
1591 make_tuple(4, 4, &aom_sad4x4_avg_msa
, -1),
1593 INSTANTIATE_TEST_CASE_P(MSA
, SADavgTest
, ::testing::ValuesIn(avg_msa_tests
));
1595 const SadMxNx4Param x4d_msa_tests
[] = {
1596 make_tuple(64, 64, &aom_sad64x64x4d_msa
, -1),
1597 make_tuple(64, 32, &aom_sad64x32x4d_msa
, -1),
1598 make_tuple(32, 64, &aom_sad32x64x4d_msa
, -1),
1599 make_tuple(32, 32, &aom_sad32x32x4d_msa
, -1),
1600 make_tuple(32, 16, &aom_sad32x16x4d_msa
, -1),
1601 make_tuple(16, 32, &aom_sad16x32x4d_msa
, -1),
1602 make_tuple(16, 16, &aom_sad16x16x4d_msa
, -1),
1603 make_tuple(16, 8, &aom_sad16x8x4d_msa
, -1),
1604 make_tuple(8, 16, &aom_sad8x16x4d_msa
, -1),
1605 make_tuple(8, 8, &aom_sad8x8x4d_msa
, -1),
1606 make_tuple(8, 4, &aom_sad8x4x4d_msa
, -1),
1607 make_tuple(4, 8, &aom_sad4x8x4d_msa
, -1),
1608 make_tuple(4, 4, &aom_sad4x4x4d_msa
, -1),
1610 INSTANTIATE_TEST_CASE_P(MSA
, SADx4Test
, ::testing::ValuesIn(x4d_msa_tests
));