1 /*
2 * Copyright (c) 2018, Alliance for Open Media. All rights reserved
3 *
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.
10 */
11
12 #include "test/comp_avg_pred_test.h"
13
14 using libaom_test::ACMRandom;
15 using libaom_test::AV1DISTWTDCOMPAVG::AV1DISTWTDCOMPAVGTest;
16 using libaom_test::AV1DISTWTDCOMPAVG::DistWtdCompAvgParam;
17 GTEST_ALLOW_UNINSTANTIATED_PARAMETERIZED_TEST(AV1DISTWTDCOMPAVGTest);
18 using libaom_test::AV1DISTWTDCOMPAVG::AV1DISTWTDCOMPAVGUPSAMPLEDTest;
19 GTEST_ALLOW_UNINSTANTIATED_PARAMETERIZED_TEST(AV1DISTWTDCOMPAVGUPSAMPLEDTest);
20 using libaom_test::AV1DISTWTDCOMPAVG::DistWtdCompAvgTest;
21 GTEST_ALLOW_UNINSTANTIATED_PARAMETERIZED_TEST(DistWtdCompAvgTest);
22 #if CONFIG_AV1_HIGHBITDEPTH
23 using libaom_test::AV1DISTWTDCOMPAVG::AV1HighBDDISTWTDCOMPAVGTest;
24 GTEST_ALLOW_UNINSTANTIATED_PARAMETERIZED_TEST(AV1HighBDDISTWTDCOMPAVGTest);
25 using libaom_test::AV1DISTWTDCOMPAVG::AV1HighBDDISTWTDCOMPAVGUPSAMPLEDTest;
26 GTEST_ALLOW_UNINSTANTIATED_PARAMETERIZED_TEST(
27 AV1HighBDDISTWTDCOMPAVGUPSAMPLEDTest);
28 #endif
29 using std::make_tuple;
30 using std::tuple;
31
32 uint8_t *DistWtdCompAvgTest::reference_data_ = nullptr;
33 uint8_t *DistWtdCompAvgTest::second_pred_ = nullptr;
34 uint8_t *DistWtdCompAvgTest::comp_pred_ = nullptr;
35 uint8_t *DistWtdCompAvgTest::comp_pred_test_ = nullptr;
36 uint8_t *DistWtdCompAvgTest::reference_data8_ = nullptr;
37 uint8_t *DistWtdCompAvgTest::second_pred8_ = nullptr;
38 uint8_t *DistWtdCompAvgTest::comp_pred8_ = nullptr;
39 uint8_t *DistWtdCompAvgTest::comp_pred8_test_ = nullptr;
40 uint16_t *DistWtdCompAvgTest::reference_data16_ = nullptr;
41 uint16_t *DistWtdCompAvgTest::second_pred16_ = nullptr;
42 uint16_t *DistWtdCompAvgTest::comp_pred16_ = nullptr;
43 uint16_t *DistWtdCompAvgTest::comp_pred16_test_ = nullptr;
44
45 namespace {
46
TEST_P(AV1DISTWTDCOMPAVGTest,DISABLED_Speed)47 TEST_P(AV1DISTWTDCOMPAVGTest, DISABLED_Speed) { RunSpeedTest(GET_PARAM(0)); }
48
TEST_P(AV1DISTWTDCOMPAVGTest,CheckOutput)49 TEST_P(AV1DISTWTDCOMPAVGTest, CheckOutput) { RunCheckOutput(GET_PARAM(0)); }
50
51 #if HAVE_SSSE3
52 INSTANTIATE_TEST_SUITE_P(SSSE3, AV1DISTWTDCOMPAVGTest,
53 libaom_test::AV1DISTWTDCOMPAVG::BuildParams(
54 aom_dist_wtd_comp_avg_pred_ssse3));
55 #endif
56
TEST_P(AV1DISTWTDCOMPAVGUPSAMPLEDTest,DISABLED_Speed)57 TEST_P(AV1DISTWTDCOMPAVGUPSAMPLEDTest, DISABLED_Speed) {
58 RunSpeedTest(GET_PARAM(0));
59 }
60
TEST_P(AV1DISTWTDCOMPAVGUPSAMPLEDTest,CheckOutput)61 TEST_P(AV1DISTWTDCOMPAVGUPSAMPLEDTest, CheckOutput) {
62 RunCheckOutput(GET_PARAM(0));
63 }
64
65 #if HAVE_SSSE3
66 INSTANTIATE_TEST_SUITE_P(SSSE3, AV1DISTWTDCOMPAVGUPSAMPLEDTest,
67 libaom_test::AV1DISTWTDCOMPAVG::BuildParams(
68 aom_dist_wtd_comp_avg_upsampled_pred_ssse3));
69 #endif
70
71 #if HAVE_NEON
72 INSTANTIATE_TEST_SUITE_P(NEON, AV1DISTWTDCOMPAVGUPSAMPLEDTest,
73 libaom_test::AV1DISTWTDCOMPAVG::BuildParams(
74 aom_dist_wtd_comp_avg_upsampled_pred_neon));
75 #endif // HAVE_NEON
76
TEST_P(DistWtdCompAvgTest,MaxRef)77 TEST_P(DistWtdCompAvgTest, MaxRef) {
78 FillConstant(reference_data_, reference_stride_, mask_);
79 FillConstant(second_pred_, width_, 0);
80 CheckCompAvg();
81 }
82
TEST_P(DistWtdCompAvgTest,MaxSecondPred)83 TEST_P(DistWtdCompAvgTest, MaxSecondPred) {
84 FillConstant(reference_data_, reference_stride_, 0);
85 FillConstant(second_pred_, width_, mask_);
86 CheckCompAvg();
87 }
88
TEST_P(DistWtdCompAvgTest,ShortRef)89 TEST_P(DistWtdCompAvgTest, ShortRef) {
90 const int tmp_stride = reference_stride_;
91 reference_stride_ >>= 1;
92 FillRandom(reference_data_, reference_stride_);
93 FillRandom(second_pred_, width_);
94 CheckCompAvg();
95 reference_stride_ = tmp_stride;
96 }
97
TEST_P(DistWtdCompAvgTest,UnalignedRef)98 TEST_P(DistWtdCompAvgTest, UnalignedRef) {
99 // The reference frame, but not the source frame, may be unaligned for
100 // certain types of searches.
101 const int tmp_stride = reference_stride_;
102 reference_stride_ -= 1;
103 FillRandom(reference_data_, reference_stride_);
104 FillRandom(second_pred_, width_);
105 CheckCompAvg();
106 reference_stride_ = tmp_stride;
107 }
108
109 // TODO(chengchen): add highbd tests
110 const DistWtdCompAvgParam dist_wtd_comp_avg_c_tests[] = {
111 make_tuple(128, 128, &aom_dist_wtd_comp_avg_pred_c, -1),
112 make_tuple(128, 64, &aom_dist_wtd_comp_avg_pred_c, -1),
113 make_tuple(64, 128, &aom_dist_wtd_comp_avg_pred_c, -1),
114 make_tuple(64, 64, &aom_dist_wtd_comp_avg_pred_c, -1),
115 make_tuple(64, 32, &aom_dist_wtd_comp_avg_pred_c, -1),
116 make_tuple(32, 64, &aom_dist_wtd_comp_avg_pred_c, -1),
117 make_tuple(32, 32, &aom_dist_wtd_comp_avg_pred_c, -1),
118 make_tuple(32, 16, &aom_dist_wtd_comp_avg_pred_c, -1),
119 make_tuple(16, 32, &aom_dist_wtd_comp_avg_pred_c, -1),
120 make_tuple(16, 16, &aom_dist_wtd_comp_avg_pred_c, -1),
121 make_tuple(16, 8, &aom_dist_wtd_comp_avg_pred_c, -1),
122 make_tuple(8, 16, &aom_dist_wtd_comp_avg_pred_c, -1),
123 make_tuple(8, 8, &aom_dist_wtd_comp_avg_pred_c, -1),
124 make_tuple(8, 4, &aom_dist_wtd_comp_avg_pred_c, -1),
125 make_tuple(4, 8, &aom_dist_wtd_comp_avg_pred_c, -1),
126 make_tuple(4, 4, &aom_dist_wtd_comp_avg_pred_c, -1),
127
128 #if !CONFIG_REALTIME_ONLY
129 make_tuple(64, 16, &aom_dist_wtd_comp_avg_pred_c, -1),
130 make_tuple(16, 64, &aom_dist_wtd_comp_avg_pred_c, -1),
131 make_tuple(32, 8, &aom_dist_wtd_comp_avg_pred_c, -1),
132 make_tuple(8, 32, &aom_dist_wtd_comp_avg_pred_c, -1),
133 make_tuple(16, 4, &aom_dist_wtd_comp_avg_pred_c, -1),
134 make_tuple(4, 16, &aom_dist_wtd_comp_avg_pred_c, -1),
135 #endif
136 };
137
138 INSTANTIATE_TEST_SUITE_P(C, DistWtdCompAvgTest,
139 ::testing::ValuesIn(dist_wtd_comp_avg_c_tests));
140
141 #if HAVE_SSSE3
142 const DistWtdCompAvgParam dist_wtd_comp_avg_ssse3_tests[] = {
143 make_tuple(128, 128, &aom_dist_wtd_comp_avg_pred_ssse3, -1),
144 make_tuple(128, 64, &aom_dist_wtd_comp_avg_pred_ssse3, -1),
145 make_tuple(64, 128, &aom_dist_wtd_comp_avg_pred_ssse3, -1),
146 make_tuple(64, 64, &aom_dist_wtd_comp_avg_pred_ssse3, -1),
147 make_tuple(64, 32, &aom_dist_wtd_comp_avg_pred_ssse3, -1),
148 make_tuple(32, 64, &aom_dist_wtd_comp_avg_pred_ssse3, -1),
149 make_tuple(32, 32, &aom_dist_wtd_comp_avg_pred_ssse3, -1),
150 make_tuple(32, 16, &aom_dist_wtd_comp_avg_pred_ssse3, -1),
151 make_tuple(16, 32, &aom_dist_wtd_comp_avg_pred_ssse3, -1),
152 make_tuple(16, 16, &aom_dist_wtd_comp_avg_pred_ssse3, -1),
153 make_tuple(16, 8, &aom_dist_wtd_comp_avg_pred_ssse3, -1),
154 make_tuple(8, 16, &aom_dist_wtd_comp_avg_pred_ssse3, -1),
155 make_tuple(8, 8, &aom_dist_wtd_comp_avg_pred_ssse3, -1),
156 make_tuple(8, 4, &aom_dist_wtd_comp_avg_pred_ssse3, -1),
157 make_tuple(4, 8, &aom_dist_wtd_comp_avg_pred_ssse3, -1),
158 make_tuple(4, 4, &aom_dist_wtd_comp_avg_pred_ssse3, -1),
159 make_tuple(16, 16, &aom_dist_wtd_comp_avg_pred_ssse3, -1),
160 #if !CONFIG_REALTIME_ONLY
161 make_tuple(64, 16, &aom_dist_wtd_comp_avg_pred_ssse3, -1),
162 make_tuple(16, 64, &aom_dist_wtd_comp_avg_pred_ssse3, -1),
163 make_tuple(32, 8, &aom_dist_wtd_comp_avg_pred_ssse3, -1),
164 make_tuple(8, 32, &aom_dist_wtd_comp_avg_pred_ssse3, -1),
165 make_tuple(16, 4, &aom_dist_wtd_comp_avg_pred_ssse3, -1),
166 make_tuple(4, 16, &aom_dist_wtd_comp_avg_pred_ssse3, -1),
167 #endif
168 };
169
170 INSTANTIATE_TEST_SUITE_P(SSSE3, DistWtdCompAvgTest,
171 ::testing::ValuesIn(dist_wtd_comp_avg_ssse3_tests));
172 #endif // HAVE_SSSE3
173
174 #if HAVE_NEON
175 const DistWtdCompAvgParam dist_wtd_comp_avg_neon_tests[] = {
176 make_tuple(128, 128, &aom_dist_wtd_comp_avg_pred_neon, -1),
177 make_tuple(128, 64, &aom_dist_wtd_comp_avg_pred_neon, -1),
178 make_tuple(64, 128, &aom_dist_wtd_comp_avg_pred_neon, -1),
179 make_tuple(64, 64, &aom_dist_wtd_comp_avg_pred_neon, -1),
180 make_tuple(64, 32, &aom_dist_wtd_comp_avg_pred_neon, -1),
181 make_tuple(32, 64, &aom_dist_wtd_comp_avg_pred_neon, -1),
182 make_tuple(32, 32, &aom_dist_wtd_comp_avg_pred_neon, -1),
183 make_tuple(32, 16, &aom_dist_wtd_comp_avg_pred_neon, -1),
184 make_tuple(16, 32, &aom_dist_wtd_comp_avg_pred_neon, -1),
185 make_tuple(16, 16, &aom_dist_wtd_comp_avg_pred_neon, -1),
186 make_tuple(16, 8, &aom_dist_wtd_comp_avg_pred_neon, -1),
187 make_tuple(8, 16, &aom_dist_wtd_comp_avg_pred_neon, -1),
188 make_tuple(8, 8, &aom_dist_wtd_comp_avg_pred_neon, -1),
189 make_tuple(8, 4, &aom_dist_wtd_comp_avg_pred_neon, -1),
190 make_tuple(4, 8, &aom_dist_wtd_comp_avg_pred_neon, -1),
191 make_tuple(4, 4, &aom_dist_wtd_comp_avg_pred_neon, -1),
192 #if !CONFIG_REALTIME_ONLY
193 make_tuple(64, 16, &aom_dist_wtd_comp_avg_pred_neon, -1),
194 make_tuple(16, 64, &aom_dist_wtd_comp_avg_pred_neon, -1),
195 make_tuple(32, 8, &aom_dist_wtd_comp_avg_pred_neon, -1),
196 make_tuple(8, 32, &aom_dist_wtd_comp_avg_pred_neon, -1),
197 make_tuple(16, 4, &aom_dist_wtd_comp_avg_pred_neon, -1),
198 make_tuple(4, 16, &aom_dist_wtd_comp_avg_pred_neon, -1),
199 #endif // !CONFIG_REALTIME_ONLY
200 };
201
202 INSTANTIATE_TEST_SUITE_P(NEON, DistWtdCompAvgTest,
203 ::testing::ValuesIn(dist_wtd_comp_avg_neon_tests));
204 #endif // HAVE_NEON
205
206 #if CONFIG_AV1_HIGHBITDEPTH
TEST_P(AV1HighBDDISTWTDCOMPAVGTest,DISABLED_Speed)207 TEST_P(AV1HighBDDISTWTDCOMPAVGTest, DISABLED_Speed) {
208 RunSpeedTest(GET_PARAM(1));
209 }
210
TEST_P(AV1HighBDDISTWTDCOMPAVGTest,CheckOutput)211 TEST_P(AV1HighBDDISTWTDCOMPAVGTest, CheckOutput) {
212 RunCheckOutput(GET_PARAM(1));
213 }
214
215 #if HAVE_SSE2
216 INSTANTIATE_TEST_SUITE_P(SSE2, AV1HighBDDISTWTDCOMPAVGTest,
217 libaom_test::AV1DISTWTDCOMPAVG::BuildParams(
218 aom_highbd_dist_wtd_comp_avg_pred_sse2, 1));
219 #endif
220
221 #if HAVE_NEON
222 INSTANTIATE_TEST_SUITE_P(NEON, AV1HighBDDISTWTDCOMPAVGTest,
223 libaom_test::AV1DISTWTDCOMPAVG::BuildParams(
224 aom_highbd_dist_wtd_comp_avg_pred_neon, 1));
225 #endif
226
TEST_P(AV1HighBDDISTWTDCOMPAVGUPSAMPLEDTest,DISABLED_Speed)227 TEST_P(AV1HighBDDISTWTDCOMPAVGUPSAMPLEDTest, DISABLED_Speed) {
228 RunSpeedTest(GET_PARAM(1));
229 }
230
TEST_P(AV1HighBDDISTWTDCOMPAVGUPSAMPLEDTest,CheckOutput)231 TEST_P(AV1HighBDDISTWTDCOMPAVGUPSAMPLEDTest, CheckOutput) {
232 RunCheckOutput(GET_PARAM(1));
233 }
234
235 #if HAVE_SSE2
236 INSTANTIATE_TEST_SUITE_P(SSE2, AV1HighBDDISTWTDCOMPAVGUPSAMPLEDTest,
237 libaom_test::AV1DISTWTDCOMPAVG::BuildParams(
238 aom_highbd_dist_wtd_comp_avg_upsampled_pred_sse2));
239 #endif
240
241 #if HAVE_NEON
242 INSTANTIATE_TEST_SUITE_P(NEON, AV1HighBDDISTWTDCOMPAVGUPSAMPLEDTest,
243 libaom_test::AV1DISTWTDCOMPAVG::BuildParams(
244 aom_highbd_dist_wtd_comp_avg_upsampled_pred_neon));
245 #endif
246
247 #endif // CONFIG_AV1_HIGHBITDEPTH
248
249 } // namespace
250