2 * Copyright (c) 2017, 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.
12 #include "third_party/googletest/src/googletest/include/gtest/gtest.h"
14 #include "config/av1_rtcd.h"
16 #include "aom_ports/aom_timer.h"
17 #include "test/util.h"
18 #include "test/acm_random.h"
20 using ::testing::make_tuple
;
22 using libaom_test::ACMRandom
;
24 #define NUM_ITERATIONS (100)
25 #define NUM_ITERATIONS_SPEED (INT16_MAX)
27 #define ALL_CFL_TX_SIZES(function) \
28 make_tuple(TX_4X4, &function), make_tuple(TX_4X8, &function), \
29 make_tuple(TX_4X16, &function), make_tuple(TX_8X4, &function), \
30 make_tuple(TX_8X8, &function), make_tuple(TX_8X16, &function), \
31 make_tuple(TX_8X32, &function), make_tuple(TX_16X4, &function), \
32 make_tuple(TX_16X8, &function), make_tuple(TX_16X16, &function), \
33 make_tuple(TX_16X32, &function), make_tuple(TX_32X8, &function), \
34 make_tuple(TX_32X16, &function), make_tuple(TX_32X32, &function)
36 #define ALL_CFL_TX_SIZES_SUBSAMPLE(fun420, fun422, fun444) \
37 make_tuple(TX_4X4, &fun420, &fun422, &fun444), \
38 make_tuple(TX_4X8, &fun420, &fun422, &fun444), \
39 make_tuple(TX_4X16, &fun420, &fun422, &fun444), \
40 make_tuple(TX_8X4, &fun420, &fun422, &fun444), \
41 make_tuple(TX_8X8, &fun420, &fun422, &fun444), \
42 make_tuple(TX_8X16, &fun420, &fun422, &fun444), \
43 make_tuple(TX_8X32, &fun420, &fun422, &fun444), \
44 make_tuple(TX_16X4, &fun420, &fun422, &fun444), \
45 make_tuple(TX_16X8, &fun420, &fun422, &fun444), \
46 make_tuple(TX_16X16, &fun420, &fun422, &fun444), \
47 make_tuple(TX_16X32, &fun420, &fun422, &fun444), \
48 make_tuple(TX_32X8, &fun420, &fun422, &fun444), \
49 make_tuple(TX_32X16, &fun420, &fun422, &fun444), \
50 make_tuple(TX_32X32, &fun420, &fun422, &fun444)
55 static void assert_eq(const A
*a
, const A
*b
, int width
, int height
) {
56 for (int j
= 0; j
< height
; j
++) {
57 for (int i
= 0; i
< width
; i
++) {
58 ASSERT_EQ(a
[j
* CFL_BUF_LINE
+ i
], b
[j
* CFL_BUF_LINE
+ i
]);
63 static void assertFaster(int ref_elapsed_time
, int elapsed_time
) {
64 EXPECT_GT(ref_elapsed_time
, elapsed_time
)
65 << "Error: CFLSubtractSpeedTest, SIMD slower than C." << std::endl
66 << "C time: " << ref_elapsed_time
<< " us" << std::endl
67 << "SIMD time: " << elapsed_time
<< " us" << std::endl
;
70 static void printSpeed(int ref_elapsed_time
, int elapsed_time
, int width
,
72 std::cout
.precision(2);
73 std::cout
<< "[ ] " << width
<< "x" << height
74 << ": C time = " << ref_elapsed_time
75 << " us, SIMD time = " << elapsed_time
<< " us"
76 << " (~" << ref_elapsed_time
/ (double)elapsed_time
<< "x) "
83 void init(TX_SIZE tx
) {
85 width
= tx_size_wide
[tx_size
];
86 height
= tx_size_high
[tx_size
];
87 rnd(ACMRandom::DeterministicSeed());
98 class CFLTestWithData
: public CFLTest
{
100 virtual ~CFLTestWithData() {}
103 I data
[CFL_BUF_SQUARE
];
104 I data_ref
[CFL_BUF_SQUARE
];
105 void randData(I (ACMRandom::*random
)()) {
106 for (int j
= 0; j
< this->height
; j
++) {
107 for (int i
= 0; i
< this->width
; i
++) {
108 const I d
= (this->rnd
.*random
)();
109 data
[j
* CFL_BUF_LINE
+ i
] = d
;
110 data_ref
[j
* CFL_BUF_LINE
+ i
] = d
;
116 template <typename I
>
117 class CFLTestWithAlignedData
: public CFLTest
{
119 CFLTestWithAlignedData() {
121 reinterpret_cast<I
*>(aom_memalign(32, sizeof(I
) * CFL_BUF_SQUARE
));
123 reinterpret_cast<I
*>(aom_memalign(32, sizeof(I
) * CFL_BUF_SQUARE
));
124 sub_luma_pels_ref
= reinterpret_cast<int16_t *>(
125 aom_memalign(32, sizeof(int16_t) * CFL_BUF_SQUARE
));
126 sub_luma_pels
= reinterpret_cast<int16_t *>(
127 aom_memalign(32, sizeof(int16_t) * CFL_BUF_SQUARE
));
128 memset(chroma_pels_ref
, 0, sizeof(I
) * CFL_BUF_SQUARE
);
129 memset(chroma_pels
, 0, sizeof(I
) * CFL_BUF_SQUARE
);
130 memset(sub_luma_pels_ref
, 0, sizeof(int16_t) * CFL_BUF_SQUARE
);
131 memset(sub_luma_pels
, 0, sizeof(int16_t) * CFL_BUF_SQUARE
);
133 ~CFLTestWithAlignedData() {
134 aom_free(chroma_pels_ref
);
135 aom_free(sub_luma_pels_ref
);
136 aom_free(chroma_pels
);
137 aom_free(sub_luma_pels
);
143 int16_t *sub_luma_pels_ref
;
144 int16_t *sub_luma_pels
;
147 void randData(int bd
) {
148 alpha_q3
= this->rnd(33) - 16;
149 dc
= this->rnd(1 << bd
);
150 for (int j
= 0; j
< this->height
; j
++) {
151 for (int i
= 0; i
< this->width
; i
++) {
152 chroma_pels
[j
* CFL_BUF_LINE
+ i
] = dc
;
153 chroma_pels_ref
[j
* CFL_BUF_LINE
+ i
] = dc
;
154 sub_luma_pels_ref
[j
* CFL_BUF_LINE
+ i
] =
155 sub_luma_pels
[j
* CFL_BUF_LINE
+ i
] = this->rnd(1 << (bd
+ 3));
161 typedef cfl_subtract_average_fn (*sub_avg_fn
)(TX_SIZE tx_size
);
162 typedef ::testing::tuple
<TX_SIZE
, sub_avg_fn
> sub_avg_param
;
163 class CFLSubAvgTest
: public ::testing::TestWithParam
<sub_avg_param
>,
164 public CFLTestWithData
<int16_t> {
166 virtual void SetUp() {
167 CFLTest::init(::testing::get
<0>(this->GetParam()));
168 sub_avg
= ::testing::get
<1>(this->GetParam())(tx_size
);
169 sub_avg_ref
= get_subtract_average_fn_c(tx_size
);
171 virtual ~CFLSubAvgTest() {}
174 cfl_subtract_average_fn sub_avg
;
175 cfl_subtract_average_fn sub_avg_ref
;
178 TEST_P(CFLSubAvgTest
, SubAvgTest
) {
179 for (int it
= 0; it
< NUM_ITERATIONS
; it
++) {
180 randData(&ACMRandom::Rand15Signed
);
181 sub_avg((uint16_t *)data
, data
);
182 sub_avg_ref((uint16_t *)data_ref
, data_ref
);
183 assert_eq
<int16_t>(data
, data_ref
, width
, height
);
187 TEST_P(CFLSubAvgTest
, DISABLED_SubAvgSpeedTest
) {
188 aom_usec_timer ref_timer
;
189 aom_usec_timer timer
;
190 randData(&ACMRandom::Rand15Signed
);
191 aom_usec_timer_start(&ref_timer
);
192 for (int k
= 0; k
< NUM_ITERATIONS_SPEED
; k
++) {
193 sub_avg_ref((uint16_t *)data_ref
, data_ref
);
195 aom_usec_timer_mark(&ref_timer
);
196 int ref_elapsed_time
= (int)aom_usec_timer_elapsed(&ref_timer
);
197 aom_usec_timer_start(&timer
);
198 for (int k
= 0; k
< NUM_ITERATIONS_SPEED
; k
++) {
199 sub_avg((uint16_t *)data
, data
);
201 aom_usec_timer_mark(&timer
);
202 int elapsed_time
= (int)aom_usec_timer_elapsed(&timer
);
203 printSpeed(ref_elapsed_time
, elapsed_time
, width
, height
);
204 assertFaster(ref_elapsed_time
, elapsed_time
);
207 template <typename S
, typename T
, typename I
>
208 class CFLSubsampleTest
: public ::testing::TestWithParam
<S
>,
209 public CFLTestWithData
<I
> {
211 virtual void SetUp() {
212 CFLTest::init(::testing::get
<0>(this->GetParam()));
213 fun_420
= ::testing::get
<1>(this->GetParam())(this->tx_size
);
214 fun_422
= ::testing::get
<2>(this->GetParam())(this->tx_size
);
215 fun_444
= ::testing::get
<3>(this->GetParam())(this->tx_size
);
226 void subsampleTest(T fun
, T fun_ref
, int sub_width
, int sub_height
,
227 I (ACMRandom::*random
)()) {
228 uint16_t sub_luma_pels
[CFL_BUF_SQUARE
];
229 uint16_t sub_luma_pels_ref
[CFL_BUF_SQUARE
];
231 for (int it
= 0; it
< NUM_ITERATIONS
; it
++) {
232 CFLTestWithData
<I
>::randData(random
);
233 fun(this->data
, CFL_BUF_LINE
, sub_luma_pels
);
234 fun_ref(this->data_ref
, CFL_BUF_LINE
, sub_luma_pels_ref
);
235 assert_eq
<uint16_t>(sub_luma_pels
, sub_luma_pels_ref
, sub_width
,
240 void subsampleSpeedTest(T fun
, T fun_ref
, I (ACMRandom::*random
)()) {
241 uint16_t sub_luma_pels
[CFL_BUF_SQUARE
];
242 uint16_t sub_luma_pels_ref
[CFL_BUF_SQUARE
];
243 aom_usec_timer ref_timer
;
244 aom_usec_timer timer
;
246 CFLTestWithData
<I
>::randData(random
);
247 aom_usec_timer_start(&ref_timer
);
248 for (int k
= 0; k
< NUM_ITERATIONS_SPEED
; k
++) {
249 fun_ref(this->data_ref
, CFL_BUF_LINE
, sub_luma_pels
);
251 aom_usec_timer_mark(&ref_timer
);
252 int ref_elapsed_time
= (int)aom_usec_timer_elapsed(&ref_timer
);
253 aom_usec_timer_start(&timer
);
254 for (int k
= 0; k
< NUM_ITERATIONS_SPEED
; k
++) {
255 fun(this->data
, CFL_BUF_LINE
, sub_luma_pels_ref
);
257 aom_usec_timer_mark(&timer
);
258 int elapsed_time
= (int)aom_usec_timer_elapsed(&timer
);
259 printSpeed(ref_elapsed_time
, elapsed_time
, this->width
, this->height
);
260 assertFaster(ref_elapsed_time
, elapsed_time
);
264 typedef cfl_subsample_lbd_fn (*get_subsample_lbd_fn
)(TX_SIZE tx_size
);
265 typedef ::testing::tuple
<TX_SIZE
, get_subsample_lbd_fn
, get_subsample_lbd_fn
,
266 get_subsample_lbd_fn
>
268 class CFLSubsampleLBDTest
269 : public CFLSubsampleTest
<subsample_lbd_param
, cfl_subsample_lbd_fn
,
272 virtual ~CFLSubsampleLBDTest() {}
273 virtual void SetUp() {
274 CFLSubsampleTest::SetUp();
275 fun_420_ref
= cfl_get_luma_subsampling_420_lbd_c(tx_size
);
276 fun_422_ref
= cfl_get_luma_subsampling_422_lbd_c(tx_size
);
277 fun_444_ref
= cfl_get_luma_subsampling_444_lbd_c(tx_size
);
281 TEST_P(CFLSubsampleLBDTest
, SubsampleLBD420Test
) {
282 subsampleTest(fun_420
, fun_420_ref
, width
>> 1, height
>> 1,
286 TEST_P(CFLSubsampleLBDTest
, DISABLED_SubsampleLBD420SpeedTest
) {
287 subsampleSpeedTest(fun_420
, fun_420_ref
, &ACMRandom::Rand8
);
290 TEST_P(CFLSubsampleLBDTest
, SubsampleLBD422Test
) {
291 subsampleTest(fun_422
, fun_422_ref
, width
>> 1, height
, &ACMRandom::Rand8
);
294 TEST_P(CFLSubsampleLBDTest
, DISABLED_SubsampleLBD422SpeedTest
) {
295 subsampleSpeedTest(fun_422
, fun_422_ref
, &ACMRandom::Rand8
);
298 TEST_P(CFLSubsampleLBDTest
, SubsampleLBD444Test
) {
299 subsampleTest(fun_444
, fun_444_ref
, width
, height
, &ACMRandom::Rand8
);
302 TEST_P(CFLSubsampleLBDTest
, DISABLED_SubsampleLBD444SpeedTest
) {
303 subsampleSpeedTest(fun_444
, fun_444_ref
, &ACMRandom::Rand8
);
306 typedef cfl_subsample_hbd_fn (*get_subsample_hbd_fn
)(TX_SIZE tx_size
);
307 typedef ::testing::tuple
<TX_SIZE
, get_subsample_hbd_fn
, get_subsample_hbd_fn
,
308 get_subsample_hbd_fn
>
310 class CFLSubsampleHBDTest
311 : public CFLSubsampleTest
<subsample_hbd_param
, cfl_subsample_hbd_fn
,
314 virtual ~CFLSubsampleHBDTest() {}
315 virtual void SetUp() {
316 CFLSubsampleTest::SetUp();
317 fun_420_ref
= cfl_get_luma_subsampling_420_hbd_c(tx_size
);
318 fun_422_ref
= cfl_get_luma_subsampling_422_hbd_c(tx_size
);
319 fun_444_ref
= cfl_get_luma_subsampling_444_hbd_c(tx_size
);
323 TEST_P(CFLSubsampleHBDTest
, SubsampleHBD420Test
) {
324 subsampleTest(fun_420
, fun_420_ref
, width
>> 1, height
>> 1,
328 TEST_P(CFLSubsampleHBDTest
, DISABLED_SubsampleHBD420SpeedTest
) {
329 subsampleSpeedTest(fun_420
, fun_420_ref
, &ACMRandom::Rand12
);
332 TEST_P(CFLSubsampleHBDTest
, SubsampleHBD422Test
) {
333 subsampleTest(fun_422
, fun_422_ref
, width
>> 1, height
, &ACMRandom::Rand12
);
336 TEST_P(CFLSubsampleHBDTest
, DISABLED_SubsampleHBD422SpeedTest
) {
337 subsampleSpeedTest(fun_422
, fun_422_ref
, &ACMRandom::Rand12
);
340 TEST_P(CFLSubsampleHBDTest
, SubsampleHBD444Test
) {
341 subsampleTest(fun_444
, fun_444_ref
, width
, height
, &ACMRandom::Rand12
);
344 TEST_P(CFLSubsampleHBDTest
, DISABLED_SubsampleHBD444SpeedTest
) {
345 subsampleSpeedTest(fun_444
, fun_444_ref
, &ACMRandom::Rand12
);
348 typedef cfl_predict_lbd_fn (*get_predict_fn
)(TX_SIZE tx_size
);
349 typedef ::testing::tuple
<TX_SIZE
, get_predict_fn
> predict_param
;
350 class CFLPredictTest
: public ::testing::TestWithParam
<predict_param
>,
351 public CFLTestWithAlignedData
<uint8_t> {
353 virtual void SetUp() {
354 CFLTest::init(::testing::get
<0>(this->GetParam()));
355 predict
= ::testing::get
<1>(this->GetParam())(tx_size
);
356 predict_ref
= get_predict_lbd_fn_c(tx_size
);
358 virtual ~CFLPredictTest() {}
361 cfl_predict_lbd_fn predict
;
362 cfl_predict_lbd_fn predict_ref
;
365 TEST_P(CFLPredictTest
, PredictTest
) {
366 for (int it
= 0; it
< NUM_ITERATIONS
; it
++) {
368 predict(sub_luma_pels
, chroma_pels
, CFL_BUF_LINE
, alpha_q3
);
369 predict_ref(sub_luma_pels_ref
, chroma_pels_ref
, CFL_BUF_LINE
, alpha_q3
);
370 assert_eq
<uint8_t>(chroma_pels
, chroma_pels_ref
, width
, height
);
373 TEST_P(CFLPredictTest
, DISABLED_PredictSpeedTest
) {
374 aom_usec_timer ref_timer
;
375 aom_usec_timer timer
;
377 aom_usec_timer_start(&ref_timer
);
378 for (int k
= 0; k
< NUM_ITERATIONS_SPEED
; k
++) {
379 predict_ref(sub_luma_pels_ref
, chroma_pels_ref
, CFL_BUF_LINE
, alpha_q3
);
381 aom_usec_timer_mark(&ref_timer
);
382 int ref_elapsed_time
= (int)aom_usec_timer_elapsed(&ref_timer
);
384 aom_usec_timer_start(&timer
);
385 for (int k
= 0; k
< NUM_ITERATIONS_SPEED
; k
++) {
386 predict(sub_luma_pels
, chroma_pels
, CFL_BUF_LINE
, alpha_q3
);
388 aom_usec_timer_mark(&timer
);
389 int elapsed_time
= (int)aom_usec_timer_elapsed(&timer
);
390 printSpeed(ref_elapsed_time
, elapsed_time
, width
, height
);
391 assertFaster(ref_elapsed_time
, elapsed_time
);
394 typedef cfl_predict_hbd_fn (*get_predict_fn_hbd
)(TX_SIZE tx_size
);
395 typedef ::testing::tuple
<TX_SIZE
, get_predict_fn_hbd
> predict_param_hbd
;
396 class CFLPredictHBDTest
: public ::testing::TestWithParam
<predict_param_hbd
>,
397 public CFLTestWithAlignedData
<uint16_t> {
399 virtual void SetUp() {
400 CFLTest::init(::testing::get
<0>(this->GetParam()));
401 predict
= ::testing::get
<1>(this->GetParam())(tx_size
);
402 predict_ref
= get_predict_hbd_fn_c(tx_size
);
404 virtual ~CFLPredictHBDTest() {}
407 cfl_predict_hbd_fn predict
;
408 cfl_predict_hbd_fn predict_ref
;
411 TEST_P(CFLPredictHBDTest
, PredictHBDTest
) {
413 for (int it
= 0; it
< NUM_ITERATIONS
; it
++) {
415 predict(sub_luma_pels
, chroma_pels
, CFL_BUF_LINE
, alpha_q3
, bd
);
416 predict_ref(sub_luma_pels_ref
, chroma_pels_ref
, CFL_BUF_LINE
, alpha_q3
, bd
);
417 assert_eq
<uint16_t>(chroma_pels
, chroma_pels_ref
, width
, height
);
420 TEST_P(CFLPredictHBDTest
, DISABLED_PredictHBDSpeedTest
) {
421 aom_usec_timer ref_timer
;
422 aom_usec_timer timer
;
425 aom_usec_timer_start(&ref_timer
);
426 for (int k
= 0; k
< NUM_ITERATIONS_SPEED
; k
++) {
427 predict_ref(sub_luma_pels_ref
, chroma_pels_ref
, CFL_BUF_LINE
, alpha_q3
, bd
);
429 aom_usec_timer_mark(&ref_timer
);
430 int ref_elapsed_time
= (int)aom_usec_timer_elapsed(&ref_timer
);
432 aom_usec_timer_start(&timer
);
433 for (int k
= 0; k
< NUM_ITERATIONS_SPEED
; k
++) {
434 predict(sub_luma_pels
, chroma_pels
, CFL_BUF_LINE
, alpha_q3
, bd
);
436 aom_usec_timer_mark(&timer
);
437 int elapsed_time
= (int)aom_usec_timer_elapsed(&timer
);
438 printSpeed(ref_elapsed_time
, elapsed_time
, width
, height
);
439 assertFaster(ref_elapsed_time
, elapsed_time
);
443 const sub_avg_param sub_avg_sizes_sse2
[] = { ALL_CFL_TX_SIZES(
444 get_subtract_average_fn_sse2
) };
446 INSTANTIATE_TEST_CASE_P(SSE2
, CFLSubAvgTest
,
447 ::testing::ValuesIn(sub_avg_sizes_sse2
));
452 const subsample_lbd_param subsample_lbd_sizes_ssse3
[] = {
453 ALL_CFL_TX_SIZES_SUBSAMPLE(cfl_get_luma_subsampling_420_lbd_ssse3
,
454 cfl_get_luma_subsampling_422_lbd_ssse3
,
455 cfl_get_luma_subsampling_444_lbd_ssse3
)
458 const subsample_hbd_param subsample_hbd_sizes_ssse3
[] = {
459 ALL_CFL_TX_SIZES_SUBSAMPLE(cfl_get_luma_subsampling_420_hbd_ssse3
,
460 cfl_get_luma_subsampling_422_hbd_ssse3
,
461 cfl_get_luma_subsampling_444_hbd_ssse3
)
464 const predict_param predict_sizes_ssse3
[] = { ALL_CFL_TX_SIZES(
465 get_predict_lbd_fn_ssse3
) };
467 const predict_param_hbd predict_sizes_hbd_ssse3
[] = { ALL_CFL_TX_SIZES(
468 get_predict_hbd_fn_ssse3
) };
470 INSTANTIATE_TEST_CASE_P(SSSE3
, CFLSubsampleLBDTest
,
471 ::testing::ValuesIn(subsample_lbd_sizes_ssse3
));
473 INSTANTIATE_TEST_CASE_P(SSSE3
, CFLSubsampleHBDTest
,
474 ::testing::ValuesIn(subsample_hbd_sizes_ssse3
));
476 INSTANTIATE_TEST_CASE_P(SSSE3
, CFLPredictTest
,
477 ::testing::ValuesIn(predict_sizes_ssse3
));
479 INSTANTIATE_TEST_CASE_P(SSSE3
, CFLPredictHBDTest
,
480 ::testing::ValuesIn(predict_sizes_hbd_ssse3
));
484 const sub_avg_param sub_avg_sizes_avx2
[] = { ALL_CFL_TX_SIZES(
485 get_subtract_average_fn_avx2
) };
487 const subsample_lbd_param subsample_lbd_sizes_avx2
[] = {
488 ALL_CFL_TX_SIZES_SUBSAMPLE(cfl_get_luma_subsampling_420_lbd_avx2
,
489 cfl_get_luma_subsampling_422_lbd_avx2
,
490 cfl_get_luma_subsampling_444_lbd_avx2
)
493 const subsample_hbd_param subsample_hbd_sizes_avx2
[] = {
494 ALL_CFL_TX_SIZES_SUBSAMPLE(cfl_get_luma_subsampling_420_hbd_avx2
,
495 cfl_get_luma_subsampling_422_hbd_avx2
,
496 cfl_get_luma_subsampling_444_hbd_avx2
)
499 const predict_param predict_sizes_avx2
[] = { ALL_CFL_TX_SIZES(
500 get_predict_lbd_fn_avx2
) };
502 const predict_param_hbd predict_sizes_hbd_avx2
[] = { ALL_CFL_TX_SIZES(
503 get_predict_hbd_fn_avx2
) };
505 INSTANTIATE_TEST_CASE_P(AVX2
, CFLSubAvgTest
,
506 ::testing::ValuesIn(sub_avg_sizes_avx2
));
508 INSTANTIATE_TEST_CASE_P(AVX2
, CFLSubsampleLBDTest
,
509 ::testing::ValuesIn(subsample_lbd_sizes_avx2
));
511 INSTANTIATE_TEST_CASE_P(AVX2
, CFLSubsampleHBDTest
,
512 ::testing::ValuesIn(subsample_hbd_sizes_avx2
));
514 INSTANTIATE_TEST_CASE_P(AVX2
, CFLPredictTest
,
515 ::testing::ValuesIn(predict_sizes_avx2
));
517 INSTANTIATE_TEST_CASE_P(AVX2
, CFLPredictHBDTest
,
518 ::testing::ValuesIn(predict_sizes_hbd_avx2
));
523 const sub_avg_param sub_avg_sizes_neon
[] = { ALL_CFL_TX_SIZES(
524 get_subtract_average_fn_neon
) };
526 const subsample_lbd_param subsample_lbd_sizes_neon
[] = {
527 ALL_CFL_TX_SIZES_SUBSAMPLE(cfl_get_luma_subsampling_420_lbd_neon
,
528 cfl_get_luma_subsampling_422_lbd_neon
,
529 cfl_get_luma_subsampling_444_lbd_neon
)
532 const subsample_hbd_param subsample_hbd_sizes_neon
[] = {
533 ALL_CFL_TX_SIZES_SUBSAMPLE(cfl_get_luma_subsampling_420_hbd_neon
,
534 cfl_get_luma_subsampling_422_hbd_neon
,
535 cfl_get_luma_subsampling_444_hbd_neon
)
538 const predict_param predict_sizes_neon
[] = { ALL_CFL_TX_SIZES(
539 get_predict_lbd_fn_neon
) };
541 const predict_param_hbd predict_sizes_hbd_neon
[] = { ALL_CFL_TX_SIZES(
542 get_predict_hbd_fn_neon
) };
544 INSTANTIATE_TEST_CASE_P(NEON
, CFLSubAvgTest
,
545 ::testing::ValuesIn(sub_avg_sizes_neon
));
547 INSTANTIATE_TEST_CASE_P(NEON
, CFLSubsampleLBDTest
,
548 ::testing::ValuesIn(subsample_lbd_sizes_neon
));
550 INSTANTIATE_TEST_CASE_P(NEON
, CFLSubsampleHBDTest
,
551 ::testing::ValuesIn(subsample_hbd_sizes_neon
));
553 INSTANTIATE_TEST_CASE_P(NEON
, CFLPredictTest
,
554 ::testing::ValuesIn(predict_sizes_neon
));
556 INSTANTIATE_TEST_CASE_P(NEON
, CFLPredictHBDTest
,
557 ::testing::ValuesIn(predict_sizes_hbd_neon
));
561 const sub_avg_param sub_avg_sizes_vsx
[] = { ALL_CFL_TX_SIZES(
562 get_subtract_average_fn_vsx
) };
564 INSTANTIATE_TEST_CASE_P(VSX
, CFLSubAvgTest
,
565 ::testing::ValuesIn(sub_avg_sizes_vsx
));