• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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