Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(53)

Side by Side Diff: source/libvpx/test/lpf_8_test.cc

Issue 1124333011: libvpx: Pull from upstream (Closed) Base URL: https://chromium.googlesource.com/chromium/deps/libvpx.git@master
Patch Set: only update to last nights LKGR Created 5 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « source/libvpx/test/fdct8x8_test.cc ('k') | source/libvpx/test/partial_idct_test.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 /* 1 /*
2 * Copyright (c) 2014 The WebM project authors. All Rights Reserved. 2 * Copyright (c) 2014 The WebM project authors. All Rights Reserved.
3 * 3 *
4 * Use of this source code is governed by a BSD-style license 4 * Use of this source code is governed by a BSD-style license
5 * that can be found in the LICENSE file in the root of the source 5 * that can be found in the LICENSE file in the root of the source
6 * tree. An additional intellectual property rights grant can be found 6 * tree. An additional intellectual property rights grant can be found
7 * in the file PATENTS. All contributing project authors may 7 * in the file PATENTS. All contributing project authors may
8 * be found in the AUTHORS file in the root of the source tree. 8 * be found in the AUTHORS file in the root of the source tree.
9 */ 9 */
10 10
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after
45 #else 45 #else
46 typedef void (*loop_op_t)(uint8_t *s, int p, const uint8_t *blimit, 46 typedef void (*loop_op_t)(uint8_t *s, int p, const uint8_t *blimit,
47 const uint8_t *limit, const uint8_t *thresh, 47 const uint8_t *limit, const uint8_t *thresh,
48 int count); 48 int count);
49 typedef void (*dual_loop_op_t)(uint8_t *s, int p, const uint8_t *blimit0, 49 typedef void (*dual_loop_op_t)(uint8_t *s, int p, const uint8_t *blimit0,
50 const uint8_t *limit0, const uint8_t *thresh0, 50 const uint8_t *limit0, const uint8_t *thresh0,
51 const uint8_t *blimit1, const uint8_t *limit1, 51 const uint8_t *blimit1, const uint8_t *limit1,
52 const uint8_t *thresh1); 52 const uint8_t *thresh1);
53 #endif // CONFIG_VP9_HIGHBITDEPTH 53 #endif // CONFIG_VP9_HIGHBITDEPTH
54 54
55 typedef std::tr1::tuple<loop_op_t, loop_op_t, int> loop8_param_t; 55 typedef std::tr1::tuple<loop_op_t, loop_op_t, int, int> loop8_param_t;
56 typedef std::tr1::tuple<dual_loop_op_t, dual_loop_op_t, int> dualloop8_param_t; 56 typedef std::tr1::tuple<dual_loop_op_t, dual_loop_op_t, int> dualloop8_param_t;
57 57
58 #if HAVE_SSE2 58 #if HAVE_SSE2
59 #if CONFIG_VP9_HIGHBITDEPTH 59 #if CONFIG_VP9_HIGHBITDEPTH
60 void wrapper_vertical_16_sse2(uint16_t *s, int p, const uint8_t *blimit, 60 void wrapper_vertical_16_sse2(uint16_t *s, int p, const uint8_t *blimit,
61 const uint8_t *limit, const uint8_t *thresh, 61 const uint8_t *limit, const uint8_t *thresh,
62 int count, int bd) { 62 int count, int bd) {
63 vp9_highbd_lpf_vertical_16_sse2(s, p, blimit, limit, thresh, bd); 63 vp9_highbd_lpf_vertical_16_sse2(s, p, blimit, limit, thresh, bd);
64 } 64 }
65 65
(...skipping 71 matching lines...) Expand 10 before | Expand all | Expand 10 after
137 #endif // CONFIG_VP9_HIGHBITDEPTH 137 #endif // CONFIG_VP9_HIGHBITDEPTH
138 #endif // HAVE_NEON_ASM 138 #endif // HAVE_NEON_ASM
139 139
140 class Loop8Test6Param : public ::testing::TestWithParam<loop8_param_t> { 140 class Loop8Test6Param : public ::testing::TestWithParam<loop8_param_t> {
141 public: 141 public:
142 virtual ~Loop8Test6Param() {} 142 virtual ~Loop8Test6Param() {}
143 virtual void SetUp() { 143 virtual void SetUp() {
144 loopfilter_op_ = GET_PARAM(0); 144 loopfilter_op_ = GET_PARAM(0);
145 ref_loopfilter_op_ = GET_PARAM(1); 145 ref_loopfilter_op_ = GET_PARAM(1);
146 bit_depth_ = GET_PARAM(2); 146 bit_depth_ = GET_PARAM(2);
147 count_ = GET_PARAM(3);
147 mask_ = (1 << bit_depth_) - 1; 148 mask_ = (1 << bit_depth_) - 1;
148 } 149 }
149 150
150 virtual void TearDown() { libvpx_test::ClearSystemState(); } 151 virtual void TearDown() { libvpx_test::ClearSystemState(); }
151 152
152 protected: 153 protected:
153 int bit_depth_; 154 int bit_depth_;
155 int count_;
154 int mask_; 156 int mask_;
155 loop_op_t loopfilter_op_; 157 loop_op_t loopfilter_op_;
156 loop_op_t ref_loopfilter_op_; 158 loop_op_t ref_loopfilter_op_;
157 }; 159 };
158 160
159 class Loop8Test9Param : public ::testing::TestWithParam<dualloop8_param_t> { 161 class Loop8Test9Param : public ::testing::TestWithParam<dualloop8_param_t> {
160 public: 162 public:
161 virtual ~Loop8Test9Param() {} 163 virtual ~Loop8Test9Param() {}
162 virtual void SetUp() { 164 virtual void SetUp() {
163 loopfilter_op_ = GET_PARAM(0); 165 loopfilter_op_ = GET_PARAM(0);
164 ref_loopfilter_op_ = GET_PARAM(1); 166 ref_loopfilter_op_ = GET_PARAM(1);
165 bit_depth_ = GET_PARAM(2); 167 bit_depth_ = GET_PARAM(2);
166 mask_ = (1 << bit_depth_) - 1; 168 mask_ = (1 << bit_depth_) - 1;
167 } 169 }
168 170
169 virtual void TearDown() { libvpx_test::ClearSystemState(); } 171 virtual void TearDown() { libvpx_test::ClearSystemState(); }
170 172
171 protected: 173 protected:
172 int bit_depth_; 174 int bit_depth_;
173 int mask_; 175 int mask_;
174 dual_loop_op_t loopfilter_op_; 176 dual_loop_op_t loopfilter_op_;
175 dual_loop_op_t ref_loopfilter_op_; 177 dual_loop_op_t ref_loopfilter_op_;
176 }; 178 };
177 179
178 TEST_P(Loop8Test6Param, OperationCheck) { 180 TEST_P(Loop8Test6Param, OperationCheck) {
179 ACMRandom rnd(ACMRandom::DeterministicSeed()); 181 ACMRandom rnd(ACMRandom::DeterministicSeed());
180 const int count_test_block = number_of_iterations; 182 const int count_test_block = number_of_iterations;
181 #if CONFIG_VP9_HIGHBITDEPTH 183 #if CONFIG_VP9_HIGHBITDEPTH
182 int32_t bd = bit_depth_; 184 int32_t bd = bit_depth_;
183 DECLARE_ALIGNED_ARRAY(16, uint16_t, s, kNumCoeffs); 185 DECLARE_ALIGNED(16, uint16_t, s[kNumCoeffs]);
184 DECLARE_ALIGNED_ARRAY(16, uint16_t, ref_s, kNumCoeffs); 186 DECLARE_ALIGNED(16, uint16_t, ref_s[kNumCoeffs]);
185 #else 187 #else
186 DECLARE_ALIGNED_ARRAY(8, uint8_t, s, kNumCoeffs); 188 DECLARE_ALIGNED(8, uint8_t, s[kNumCoeffs]);
187 DECLARE_ALIGNED_ARRAY(8, uint8_t, ref_s, kNumCoeffs); 189 DECLARE_ALIGNED(8, uint8_t, ref_s[kNumCoeffs]);
188 #endif // CONFIG_VP9_HIGHBITDEPTH 190 #endif // CONFIG_VP9_HIGHBITDEPTH
189 int err_count_total = 0; 191 int err_count_total = 0;
190 int first_failure = -1; 192 int first_failure = -1;
191 for (int i = 0; i < count_test_block; ++i) { 193 for (int i = 0; i < count_test_block; ++i) {
192 int err_count = 0; 194 int err_count = 0;
193 uint8_t tmp = static_cast<uint8_t>(rnd(3 * MAX_LOOP_FILTER + 4)); 195 uint8_t tmp = static_cast<uint8_t>(rnd(3 * MAX_LOOP_FILTER + 4));
194 DECLARE_ALIGNED(16, const uint8_t, blimit[16]) = { 196 DECLARE_ALIGNED(16, const uint8_t, blimit[16]) = {
195 tmp, tmp, tmp, tmp, tmp, tmp, tmp, tmp, 197 tmp, tmp, tmp, tmp, tmp, tmp, tmp, tmp,
196 tmp, tmp, tmp, tmp, tmp, tmp, tmp, tmp 198 tmp, tmp, tmp, tmp, tmp, tmp, tmp, tmp
197 }; 199 };
198 tmp = static_cast<uint8_t>(rnd(MAX_LOOP_FILTER)); 200 tmp = static_cast<uint8_t>(rnd(MAX_LOOP_FILTER));
199 DECLARE_ALIGNED(16, const uint8_t, limit[16]) = { 201 DECLARE_ALIGNED(16, const uint8_t, limit[16]) = {
200 tmp, tmp, tmp, tmp, tmp, tmp, tmp, tmp, 202 tmp, tmp, tmp, tmp, tmp, tmp, tmp, tmp,
201 tmp, tmp, tmp, tmp, tmp, tmp, tmp, tmp 203 tmp, tmp, tmp, tmp, tmp, tmp, tmp, tmp
202 }; 204 };
203 tmp = rnd.Rand8(); 205 tmp = rnd.Rand8();
204 DECLARE_ALIGNED(16, const uint8_t, thresh[16]) = { 206 DECLARE_ALIGNED(16, const uint8_t, thresh[16]) = {
205 tmp, tmp, tmp, tmp, tmp, tmp, tmp, tmp, 207 tmp, tmp, tmp, tmp, tmp, tmp, tmp, tmp,
206 tmp, tmp, tmp, tmp, tmp, tmp, tmp, tmp 208 tmp, tmp, tmp, tmp, tmp, tmp, tmp, tmp
207 }; 209 };
208 int32_t p = kNumCoeffs/32; 210 int32_t p = kNumCoeffs/32;
209 int count = 1;
210 211
211 uint16_t tmp_s[kNumCoeffs]; 212 uint16_t tmp_s[kNumCoeffs];
212 int j = 0; 213 int j = 0;
213 while (j < kNumCoeffs) { 214 while (j < kNumCoeffs) {
214 uint8_t val = rnd.Rand8(); 215 uint8_t val = rnd.Rand8();
215 if (val & 0x80) { // 50% chance to choose a new value. 216 if (val & 0x80) { // 50% chance to choose a new value.
216 tmp_s[j] = rnd.Rand16(); 217 tmp_s[j] = rnd.Rand16();
217 j++; 218 j++;
218 } else { // 50% chance to repeat previous value in row X times 219 } else { // 50% chance to repeat previous value in row X times
219 int k = 0; 220 int k = 0;
(...skipping 11 matching lines...) Expand all
231 } 232 }
232 for (j = 0; j < kNumCoeffs; j++) { 233 for (j = 0; j < kNumCoeffs; j++) {
233 if (i % 2) { 234 if (i % 2) {
234 s[j] = tmp_s[j] & mask_; 235 s[j] = tmp_s[j] & mask_;
235 } else { 236 } else {
236 s[j] = tmp_s[p * (j % p) + j / p] & mask_; 237 s[j] = tmp_s[p * (j % p) + j / p] & mask_;
237 } 238 }
238 ref_s[j] = s[j]; 239 ref_s[j] = s[j];
239 } 240 }
240 #if CONFIG_VP9_HIGHBITDEPTH 241 #if CONFIG_VP9_HIGHBITDEPTH
241 ref_loopfilter_op_(ref_s + 8 + p * 8, p, blimit, limit, thresh, count, bd); 242 ref_loopfilter_op_(ref_s + 8 + p * 8, p, blimit, limit, thresh, count_, bd);
242 ASM_REGISTER_STATE_CHECK( 243 ASM_REGISTER_STATE_CHECK(
243 loopfilter_op_(s + 8 + p * 8, p, blimit, limit, thresh, count, bd)); 244 loopfilter_op_(s + 8 + p * 8, p, blimit, limit, thresh, count_, bd));
244 #else 245 #else
245 ref_loopfilter_op_(ref_s+8+p*8, p, blimit, limit, thresh, count); 246 ref_loopfilter_op_(ref_s+8+p*8, p, blimit, limit, thresh, count_);
246 ASM_REGISTER_STATE_CHECK( 247 ASM_REGISTER_STATE_CHECK(
247 loopfilter_op_(s + 8 + p * 8, p, blimit, limit, thresh, count)); 248 loopfilter_op_(s + 8 + p * 8, p, blimit, limit, thresh, count_));
248 #endif // CONFIG_VP9_HIGHBITDEPTH 249 #endif // CONFIG_VP9_HIGHBITDEPTH
249 250
250 for (int j = 0; j < kNumCoeffs; ++j) { 251 for (int j = 0; j < kNumCoeffs; ++j) {
251 err_count += ref_s[j] != s[j]; 252 err_count += ref_s[j] != s[j];
252 } 253 }
253 if (err_count && !err_count_total) { 254 if (err_count && !err_count_total) {
254 first_failure = i; 255 first_failure = i;
255 } 256 }
256 err_count_total += err_count; 257 err_count_total += err_count;
257 } 258 }
258 EXPECT_EQ(0, err_count_total) 259 EXPECT_EQ(0, err_count_total)
259 << "Error: Loop8Test6Param, C output doesn't match SSE2 " 260 << "Error: Loop8Test6Param, C output doesn't match SSE2 "
260 "loopfilter output. " 261 "loopfilter output. "
261 << "First failed at test case " << first_failure; 262 << "First failed at test case " << first_failure;
262 } 263 }
263 264
264 TEST_P(Loop8Test6Param, ValueCheck) { 265 TEST_P(Loop8Test6Param, ValueCheck) {
265 ACMRandom rnd(ACMRandom::DeterministicSeed()); 266 ACMRandom rnd(ACMRandom::DeterministicSeed());
266 const int count_test_block = number_of_iterations; 267 const int count_test_block = number_of_iterations;
267 #if CONFIG_VP9_HIGHBITDEPTH 268 #if CONFIG_VP9_HIGHBITDEPTH
268 const int32_t bd = bit_depth_; 269 const int32_t bd = bit_depth_;
269 DECLARE_ALIGNED_ARRAY(16, uint16_t, s, kNumCoeffs); 270 DECLARE_ALIGNED(16, uint16_t, s[kNumCoeffs]);
270 DECLARE_ALIGNED_ARRAY(16, uint16_t, ref_s, kNumCoeffs); 271 DECLARE_ALIGNED(16, uint16_t, ref_s[kNumCoeffs]);
271 #else 272 #else
272 DECLARE_ALIGNED_ARRAY(8, uint8_t, s, kNumCoeffs); 273 DECLARE_ALIGNED(8, uint8_t, s[kNumCoeffs]);
273 DECLARE_ALIGNED_ARRAY(8, uint8_t, ref_s, kNumCoeffs); 274 DECLARE_ALIGNED(8, uint8_t, ref_s[kNumCoeffs]);
274 #endif // CONFIG_VP9_HIGHBITDEPTH 275 #endif // CONFIG_VP9_HIGHBITDEPTH
275 int err_count_total = 0; 276 int err_count_total = 0;
276 int first_failure = -1; 277 int first_failure = -1;
277 278
278 // NOTE: The code in vp9_loopfilter.c:update_sharpness computes mblim as a 279 // NOTE: The code in vp9_loopfilter.c:update_sharpness computes mblim as a
279 // function of sharpness_lvl and the loopfilter lvl as: 280 // function of sharpness_lvl and the loopfilter lvl as:
280 // block_inside_limit = lvl >> ((sharpness_lvl > 0) + (sharpness_lvl > 4)); 281 // block_inside_limit = lvl >> ((sharpness_lvl > 0) + (sharpness_lvl > 4));
281 // ... 282 // ...
282 // vpx_memset(lfi->lfthr[lvl].mblim, (2 * (lvl + 2) + block_inside_limit), 283 // memset(lfi->lfthr[lvl].mblim, (2 * (lvl + 2) + block_inside_limit),
283 // SIMD_WIDTH); 284 // SIMD_WIDTH);
284 // This means that the largest value for mblim will occur when sharpness_lvl 285 // This means that the largest value for mblim will occur when sharpness_lvl
285 // is equal to 0, and lvl is equal to its greatest value (MAX_LOOP_FILTER). 286 // is equal to 0, and lvl is equal to its greatest value (MAX_LOOP_FILTER).
286 // In this case block_inside_limit will be equal to MAX_LOOP_FILTER and 287 // In this case block_inside_limit will be equal to MAX_LOOP_FILTER and
287 // therefore mblim will be equal to (2 * (lvl + 2) + block_inside_limit) = 288 // therefore mblim will be equal to (2 * (lvl + 2) + block_inside_limit) =
288 // 2 * (MAX_LOOP_FILTER + 2) + MAX_LOOP_FILTER = 3 * MAX_LOOP_FILTER + 4 289 // 2 * (MAX_LOOP_FILTER + 2) + MAX_LOOP_FILTER = 3 * MAX_LOOP_FILTER + 4
289 290
290 for (int i = 0; i < count_test_block; ++i) { 291 for (int i = 0; i < count_test_block; ++i) {
291 int err_count = 0; 292 int err_count = 0;
292 uint8_t tmp = static_cast<uint8_t>(rnd(3 * MAX_LOOP_FILTER + 4)); 293 uint8_t tmp = static_cast<uint8_t>(rnd(3 * MAX_LOOP_FILTER + 4));
293 DECLARE_ALIGNED(16, const uint8_t, blimit[16]) = { 294 DECLARE_ALIGNED(16, const uint8_t, blimit[16]) = {
294 tmp, tmp, tmp, tmp, tmp, tmp, tmp, tmp, 295 tmp, tmp, tmp, tmp, tmp, tmp, tmp, tmp,
295 tmp, tmp, tmp, tmp, tmp, tmp, tmp, tmp 296 tmp, tmp, tmp, tmp, tmp, tmp, tmp, tmp
296 }; 297 };
297 tmp = static_cast<uint8_t>(rnd(MAX_LOOP_FILTER)); 298 tmp = static_cast<uint8_t>(rnd(MAX_LOOP_FILTER));
298 DECLARE_ALIGNED(16, const uint8_t, limit[16]) = { 299 DECLARE_ALIGNED(16, const uint8_t, limit[16]) = {
299 tmp, tmp, tmp, tmp, tmp, tmp, tmp, tmp, 300 tmp, tmp, tmp, tmp, tmp, tmp, tmp, tmp,
300 tmp, tmp, tmp, tmp, tmp, tmp, tmp, tmp 301 tmp, tmp, tmp, tmp, tmp, tmp, tmp, tmp
301 }; 302 };
302 tmp = rnd.Rand8(); 303 tmp = rnd.Rand8();
303 DECLARE_ALIGNED(16, const uint8_t, thresh[16]) = { 304 DECLARE_ALIGNED(16, const uint8_t, thresh[16]) = {
304 tmp, tmp, tmp, tmp, tmp, tmp, tmp, tmp, 305 tmp, tmp, tmp, tmp, tmp, tmp, tmp, tmp,
305 tmp, tmp, tmp, tmp, tmp, tmp, tmp, tmp 306 tmp, tmp, tmp, tmp, tmp, tmp, tmp, tmp
306 }; 307 };
307 int32_t p = kNumCoeffs / 32; 308 int32_t p = kNumCoeffs / 32;
308 int count = 1;
309 for (int j = 0; j < kNumCoeffs; ++j) { 309 for (int j = 0; j < kNumCoeffs; ++j) {
310 s[j] = rnd.Rand16() & mask_; 310 s[j] = rnd.Rand16() & mask_;
311 ref_s[j] = s[j]; 311 ref_s[j] = s[j];
312 } 312 }
313 #if CONFIG_VP9_HIGHBITDEPTH 313 #if CONFIG_VP9_HIGHBITDEPTH
314 ref_loopfilter_op_(ref_s + 8 + p * 8, p, blimit, limit, thresh, count, bd); 314 ref_loopfilter_op_(ref_s + 8 + p * 8, p, blimit, limit, thresh, count_, bd);
315 ASM_REGISTER_STATE_CHECK( 315 ASM_REGISTER_STATE_CHECK(
316 loopfilter_op_(s + 8 + p * 8, p, blimit, limit, thresh, count, bd)); 316 loopfilter_op_(s + 8 + p * 8, p, blimit, limit, thresh, count_, bd));
317 #else 317 #else
318 ref_loopfilter_op_(ref_s+8+p*8, p, blimit, limit, thresh, count); 318 ref_loopfilter_op_(ref_s+8+p*8, p, blimit, limit, thresh, count_);
319 ASM_REGISTER_STATE_CHECK( 319 ASM_REGISTER_STATE_CHECK(
320 loopfilter_op_(s + 8 + p * 8, p, blimit, limit, thresh, count)); 320 loopfilter_op_(s + 8 + p * 8, p, blimit, limit, thresh, count_));
321 #endif // CONFIG_VP9_HIGHBITDEPTH 321 #endif // CONFIG_VP9_HIGHBITDEPTH
322 for (int j = 0; j < kNumCoeffs; ++j) { 322 for (int j = 0; j < kNumCoeffs; ++j) {
323 err_count += ref_s[j] != s[j]; 323 err_count += ref_s[j] != s[j];
324 } 324 }
325 if (err_count && !err_count_total) { 325 if (err_count && !err_count_total) {
326 first_failure = i; 326 first_failure = i;
327 } 327 }
328 err_count_total += err_count; 328 err_count_total += err_count;
329 } 329 }
330 EXPECT_EQ(0, err_count_total) 330 EXPECT_EQ(0, err_count_total)
331 << "Error: Loop8Test6Param, C output doesn't match SSE2 " 331 << "Error: Loop8Test6Param, C output doesn't match SSE2 "
332 "loopfilter output. " 332 "loopfilter output. "
333 << "First failed at test case " << first_failure; 333 << "First failed at test case " << first_failure;
334 } 334 }
335 335
336 TEST_P(Loop8Test9Param, OperationCheck) { 336 TEST_P(Loop8Test9Param, OperationCheck) {
337 ACMRandom rnd(ACMRandom::DeterministicSeed()); 337 ACMRandom rnd(ACMRandom::DeterministicSeed());
338 const int count_test_block = number_of_iterations; 338 const int count_test_block = number_of_iterations;
339 #if CONFIG_VP9_HIGHBITDEPTH 339 #if CONFIG_VP9_HIGHBITDEPTH
340 const int32_t bd = bit_depth_; 340 const int32_t bd = bit_depth_;
341 DECLARE_ALIGNED_ARRAY(16, uint16_t, s, kNumCoeffs); 341 DECLARE_ALIGNED(16, uint16_t, s[kNumCoeffs]);
342 DECLARE_ALIGNED_ARRAY(16, uint16_t, ref_s, kNumCoeffs); 342 DECLARE_ALIGNED(16, uint16_t, ref_s[kNumCoeffs]);
343 #else 343 #else
344 DECLARE_ALIGNED_ARRAY(8, uint8_t, s, kNumCoeffs); 344 DECLARE_ALIGNED(8, uint8_t, s[kNumCoeffs]);
345 DECLARE_ALIGNED_ARRAY(8, uint8_t, ref_s, kNumCoeffs); 345 DECLARE_ALIGNED(8, uint8_t, ref_s[kNumCoeffs]);
346 #endif // CONFIG_VP9_HIGHBITDEPTH 346 #endif // CONFIG_VP9_HIGHBITDEPTH
347 int err_count_total = 0; 347 int err_count_total = 0;
348 int first_failure = -1; 348 int first_failure = -1;
349 for (int i = 0; i < count_test_block; ++i) { 349 for (int i = 0; i < count_test_block; ++i) {
350 int err_count = 0; 350 int err_count = 0;
351 uint8_t tmp = static_cast<uint8_t>(rnd(3 * MAX_LOOP_FILTER + 4)); 351 uint8_t tmp = static_cast<uint8_t>(rnd(3 * MAX_LOOP_FILTER + 4));
352 DECLARE_ALIGNED(16, const uint8_t, blimit0[16]) = { 352 DECLARE_ALIGNED(16, const uint8_t, blimit0[16]) = {
353 tmp, tmp, tmp, tmp, tmp, tmp, tmp, tmp, 353 tmp, tmp, tmp, tmp, tmp, tmp, tmp, tmp,
354 tmp, tmp, tmp, tmp, tmp, tmp, tmp, tmp 354 tmp, tmp, tmp, tmp, tmp, tmp, tmp, tmp
355 }; 355 };
(...skipping 77 matching lines...) Expand 10 before | Expand all | Expand 10 after
433 EXPECT_EQ(0, err_count_total) 433 EXPECT_EQ(0, err_count_total)
434 << "Error: Loop8Test9Param, C output doesn't match SSE2 " 434 << "Error: Loop8Test9Param, C output doesn't match SSE2 "
435 "loopfilter output. " 435 "loopfilter output. "
436 << "First failed at test case " << first_failure; 436 << "First failed at test case " << first_failure;
437 } 437 }
438 438
439 TEST_P(Loop8Test9Param, ValueCheck) { 439 TEST_P(Loop8Test9Param, ValueCheck) {
440 ACMRandom rnd(ACMRandom::DeterministicSeed()); 440 ACMRandom rnd(ACMRandom::DeterministicSeed());
441 const int count_test_block = number_of_iterations; 441 const int count_test_block = number_of_iterations;
442 #if CONFIG_VP9_HIGHBITDEPTH 442 #if CONFIG_VP9_HIGHBITDEPTH
443 DECLARE_ALIGNED_ARRAY(16, uint16_t, s, kNumCoeffs); 443 DECLARE_ALIGNED(16, uint16_t, s[kNumCoeffs]);
444 DECLARE_ALIGNED_ARRAY(16, uint16_t, ref_s, kNumCoeffs); 444 DECLARE_ALIGNED(16, uint16_t, ref_s[kNumCoeffs]);
445 #else 445 #else
446 DECLARE_ALIGNED_ARRAY(8, uint8_t, s, kNumCoeffs); 446 DECLARE_ALIGNED(8, uint8_t, s[kNumCoeffs]);
447 DECLARE_ALIGNED_ARRAY(8, uint8_t, ref_s, kNumCoeffs); 447 DECLARE_ALIGNED(8, uint8_t, ref_s[kNumCoeffs]);
448 #endif // CONFIG_VP9_HIGHBITDEPTH 448 #endif // CONFIG_VP9_HIGHBITDEPTH
449 int err_count_total = 0; 449 int err_count_total = 0;
450 int first_failure = -1; 450 int first_failure = -1;
451 for (int i = 0; i < count_test_block; ++i) { 451 for (int i = 0; i < count_test_block; ++i) {
452 int err_count = 0; 452 int err_count = 0;
453 uint8_t tmp = static_cast<uint8_t>(rnd(3 * MAX_LOOP_FILTER + 4)); 453 uint8_t tmp = static_cast<uint8_t>(rnd(3 * MAX_LOOP_FILTER + 4));
454 DECLARE_ALIGNED(16, const uint8_t, blimit0[16]) = { 454 DECLARE_ALIGNED(16, const uint8_t, blimit0[16]) = {
455 tmp, tmp, tmp, tmp, tmp, tmp, tmp, tmp, 455 tmp, tmp, tmp, tmp, tmp, tmp, tmp, tmp,
456 tmp, tmp, tmp, tmp, tmp, tmp, tmp, tmp 456 tmp, tmp, tmp, tmp, tmp, tmp, tmp, tmp
457 }; 457 };
(...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after
514 } 514 }
515 515
516 using std::tr1::make_tuple; 516 using std::tr1::make_tuple;
517 517
518 #if HAVE_SSE2 518 #if HAVE_SSE2
519 #if CONFIG_VP9_HIGHBITDEPTH 519 #if CONFIG_VP9_HIGHBITDEPTH
520 INSTANTIATE_TEST_CASE_P( 520 INSTANTIATE_TEST_CASE_P(
521 SSE2, Loop8Test6Param, 521 SSE2, Loop8Test6Param,
522 ::testing::Values( 522 ::testing::Values(
523 make_tuple(&vp9_highbd_lpf_horizontal_4_sse2, 523 make_tuple(&vp9_highbd_lpf_horizontal_4_sse2,
524 &vp9_highbd_lpf_horizontal_4_c, 8), 524 &vp9_highbd_lpf_horizontal_4_c, 8, 1),
525 make_tuple(&vp9_highbd_lpf_vertical_4_sse2, 525 make_tuple(&vp9_highbd_lpf_vertical_4_sse2,
526 &vp9_highbd_lpf_vertical_4_c, 8), 526 &vp9_highbd_lpf_vertical_4_c, 8, 1),
527 make_tuple(&vp9_highbd_lpf_horizontal_8_sse2, 527 make_tuple(&vp9_highbd_lpf_horizontal_8_sse2,
528 &vp9_highbd_lpf_horizontal_8_c, 8), 528 &vp9_highbd_lpf_horizontal_8_c, 8, 1),
529 make_tuple(&vp9_highbd_lpf_horizontal_16_sse2, 529 make_tuple(&vp9_highbd_lpf_horizontal_16_sse2,
530 &vp9_highbd_lpf_horizontal_16_c, 8), 530 &vp9_highbd_lpf_horizontal_16_c, 8, 1),
531 make_tuple(&vp9_highbd_lpf_horizontal_16_sse2,
532 &vp9_highbd_lpf_horizontal_16_c, 8, 2),
531 make_tuple(&vp9_highbd_lpf_vertical_8_sse2, 533 make_tuple(&vp9_highbd_lpf_vertical_8_sse2,
532 &vp9_highbd_lpf_vertical_8_c, 8), 534 &vp9_highbd_lpf_vertical_8_c, 8, 1),
533 make_tuple(&wrapper_vertical_16_sse2, 535 make_tuple(&wrapper_vertical_16_sse2,
534 &wrapper_vertical_16_c, 8), 536 &wrapper_vertical_16_c, 8, 1),
535 make_tuple(&vp9_highbd_lpf_horizontal_4_sse2, 537 make_tuple(&vp9_highbd_lpf_horizontal_4_sse2,
536 &vp9_highbd_lpf_horizontal_4_c, 10), 538 &vp9_highbd_lpf_horizontal_4_c, 10, 1),
537 make_tuple(&vp9_highbd_lpf_vertical_4_sse2, 539 make_tuple(&vp9_highbd_lpf_vertical_4_sse2,
538 &vp9_highbd_lpf_vertical_4_c, 10), 540 &vp9_highbd_lpf_vertical_4_c, 10, 1),
539 make_tuple(&vp9_highbd_lpf_horizontal_8_sse2, 541 make_tuple(&vp9_highbd_lpf_horizontal_8_sse2,
540 &vp9_highbd_lpf_horizontal_8_c, 10), 542 &vp9_highbd_lpf_horizontal_8_c, 10, 1),
541 make_tuple(&vp9_highbd_lpf_horizontal_16_sse2, 543 make_tuple(&vp9_highbd_lpf_horizontal_16_sse2,
542 &vp9_highbd_lpf_horizontal_16_c, 10), 544 &vp9_highbd_lpf_horizontal_16_c, 10, 1),
545 make_tuple(&vp9_highbd_lpf_horizontal_16_sse2,
546 &vp9_highbd_lpf_horizontal_16_c, 10, 2),
543 make_tuple(&vp9_highbd_lpf_vertical_8_sse2, 547 make_tuple(&vp9_highbd_lpf_vertical_8_sse2,
544 &vp9_highbd_lpf_vertical_8_c, 10), 548 &vp9_highbd_lpf_vertical_8_c, 10, 1),
545 make_tuple(&wrapper_vertical_16_sse2, 549 make_tuple(&wrapper_vertical_16_sse2,
546 &wrapper_vertical_16_c, 10), 550 &wrapper_vertical_16_c, 10, 1),
547 make_tuple(&vp9_highbd_lpf_horizontal_4_sse2, 551 make_tuple(&vp9_highbd_lpf_horizontal_4_sse2,
548 &vp9_highbd_lpf_horizontal_4_c, 12), 552 &vp9_highbd_lpf_horizontal_4_c, 12, 1),
549 make_tuple(&vp9_highbd_lpf_vertical_4_sse2, 553 make_tuple(&vp9_highbd_lpf_vertical_4_sse2,
550 &vp9_highbd_lpf_vertical_4_c, 12), 554 &vp9_highbd_lpf_vertical_4_c, 12, 1),
551 make_tuple(&vp9_highbd_lpf_horizontal_8_sse2, 555 make_tuple(&vp9_highbd_lpf_horizontal_8_sse2,
552 &vp9_highbd_lpf_horizontal_8_c, 12), 556 &vp9_highbd_lpf_horizontal_8_c, 12, 1),
553 make_tuple(&vp9_highbd_lpf_horizontal_16_sse2, 557 make_tuple(&vp9_highbd_lpf_horizontal_16_sse2,
554 &vp9_highbd_lpf_horizontal_16_c, 12), 558 &vp9_highbd_lpf_horizontal_16_c, 12, 1),
559 make_tuple(&vp9_highbd_lpf_horizontal_16_sse2,
560 &vp9_highbd_lpf_horizontal_16_c, 12, 2),
555 make_tuple(&vp9_highbd_lpf_vertical_8_sse2, 561 make_tuple(&vp9_highbd_lpf_vertical_8_sse2,
556 &vp9_highbd_lpf_vertical_8_c, 12), 562 &vp9_highbd_lpf_vertical_8_c, 12, 1),
557 make_tuple(&wrapper_vertical_16_sse2, 563 make_tuple(&wrapper_vertical_16_sse2,
558 &wrapper_vertical_16_c, 12), 564 &wrapper_vertical_16_c, 12, 1),
559 make_tuple(&wrapper_vertical_16_dual_sse2, 565 make_tuple(&wrapper_vertical_16_dual_sse2,
560 &wrapper_vertical_16_dual_c, 8), 566 &wrapper_vertical_16_dual_c, 8, 1),
561 make_tuple(&wrapper_vertical_16_dual_sse2, 567 make_tuple(&wrapper_vertical_16_dual_sse2,
562 &wrapper_vertical_16_dual_c, 10), 568 &wrapper_vertical_16_dual_c, 10, 1),
563 make_tuple(&wrapper_vertical_16_dual_sse2, 569 make_tuple(&wrapper_vertical_16_dual_sse2,
564 &wrapper_vertical_16_dual_c, 12))); 570 &wrapper_vertical_16_dual_c, 12, 1)));
565 #else 571 #else
566 INSTANTIATE_TEST_CASE_P( 572 INSTANTIATE_TEST_CASE_P(
567 SSE2, Loop8Test6Param, 573 SSE2, Loop8Test6Param,
568 ::testing::Values( 574 ::testing::Values(
569 make_tuple(&vp9_lpf_horizontal_8_sse2, &vp9_lpf_horizontal_8_c, 8), 575 make_tuple(&vp9_lpf_horizontal_8_sse2, &vp9_lpf_horizontal_8_c, 8, 1),
570 make_tuple(&vp9_lpf_horizontal_16_sse2, &vp9_lpf_horizontal_16_c, 8), 576 make_tuple(&vp9_lpf_horizontal_16_sse2, &vp9_lpf_horizontal_16_c, 8, 1),
571 make_tuple(&vp9_lpf_vertical_8_sse2, &vp9_lpf_vertical_8_c, 8), 577 make_tuple(&vp9_lpf_horizontal_16_sse2, &vp9_lpf_horizontal_16_c, 8, 2),
572 make_tuple(&wrapper_vertical_16_sse2, &wrapper_vertical_16_c, 8))); 578 make_tuple(&vp9_lpf_vertical_8_sse2, &vp9_lpf_vertical_8_c, 8, 1),
579 make_tuple(&wrapper_vertical_16_sse2, &wrapper_vertical_16_c, 8, 1)));
573 #endif // CONFIG_VP9_HIGHBITDEPTH 580 #endif // CONFIG_VP9_HIGHBITDEPTH
574 #endif 581 #endif
575 582
576 #if HAVE_AVX2 && (!CONFIG_VP9_HIGHBITDEPTH) 583 #if HAVE_AVX2 && (!CONFIG_VP9_HIGHBITDEPTH)
577 INSTANTIATE_TEST_CASE_P( 584 INSTANTIATE_TEST_CASE_P(
578 AVX2, Loop8Test6Param, 585 AVX2, Loop8Test6Param,
579 ::testing::Values( 586 ::testing::Values(
580 make_tuple(&vp9_lpf_horizontal_16_avx2, &vp9_lpf_horizontal_16_c, 8))); 587 make_tuple(&vp9_lpf_horizontal_16_avx2, &vp9_lpf_horizontal_16_c, 8, 1),
588 make_tuple(&vp9_lpf_horizontal_16_avx2, &vp9_lpf_horizontal_16_c, 8,
589 2)));
581 #endif 590 #endif
582 591
583 #if HAVE_SSE2 592 #if HAVE_SSE2
584 #if CONFIG_VP9_HIGHBITDEPTH 593 #if CONFIG_VP9_HIGHBITDEPTH
585 INSTANTIATE_TEST_CASE_P( 594 INSTANTIATE_TEST_CASE_P(
586 SSE2, Loop8Test9Param, 595 SSE2, Loop8Test9Param,
587 ::testing::Values( 596 ::testing::Values(
588 make_tuple(&vp9_highbd_lpf_horizontal_4_dual_sse2, 597 make_tuple(&vp9_highbd_lpf_horizontal_4_dual_sse2,
589 &vp9_highbd_lpf_horizontal_4_dual_c, 8), 598 &vp9_highbd_lpf_horizontal_4_dual_c, 8),
590 make_tuple(&vp9_highbd_lpf_horizontal_8_dual_sse2, 599 make_tuple(&vp9_highbd_lpf_horizontal_8_dual_sse2,
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after
628 #if CONFIG_VP9_HIGHBITDEPTH 637 #if CONFIG_VP9_HIGHBITDEPTH
629 // No neon high bitdepth functions. 638 // No neon high bitdepth functions.
630 #else 639 #else
631 INSTANTIATE_TEST_CASE_P( 640 INSTANTIATE_TEST_CASE_P(
632 NEON, Loop8Test6Param, 641 NEON, Loop8Test6Param,
633 ::testing::Values( 642 ::testing::Values(
634 #if HAVE_NEON_ASM 643 #if HAVE_NEON_ASM
635 // Using #if inside the macro is unsupported on MSVS but the tests are not 644 // Using #if inside the macro is unsupported on MSVS but the tests are not
636 // currently built for MSVS with ARM and NEON. 645 // currently built for MSVS with ARM and NEON.
637 make_tuple(&vp9_lpf_horizontal_16_neon, 646 make_tuple(&vp9_lpf_horizontal_16_neon,
638 &vp9_lpf_horizontal_16_c, 8), 647 &vp9_lpf_horizontal_16_c, 8, 1),
648 make_tuple(&vp9_lpf_horizontal_16_neon,
649 &vp9_lpf_horizontal_16_c, 8, 2),
639 make_tuple(&wrapper_vertical_16_neon, 650 make_tuple(&wrapper_vertical_16_neon,
640 &wrapper_vertical_16_c, 8), 651 &wrapper_vertical_16_c, 8, 1),
641 make_tuple(&wrapper_vertical_16_dual_neon, 652 make_tuple(&wrapper_vertical_16_dual_neon,
642 &wrapper_vertical_16_dual_c, 8), 653 &wrapper_vertical_16_dual_c, 8, 1),
643 make_tuple(&vp9_lpf_horizontal_8_neon, 654 make_tuple(&vp9_lpf_horizontal_8_neon,
644 &vp9_lpf_horizontal_8_c, 8), 655 &vp9_lpf_horizontal_8_c, 8, 1),
645 make_tuple(&vp9_lpf_vertical_8_neon, 656 make_tuple(&vp9_lpf_vertical_8_neon,
646 &vp9_lpf_vertical_8_c, 8), 657 &vp9_lpf_vertical_8_c, 8, 1),
647 #endif // HAVE_NEON_ASM 658 #endif // HAVE_NEON_ASM
648 make_tuple(&vp9_lpf_horizontal_4_neon, 659 make_tuple(&vp9_lpf_horizontal_4_neon,
649 &vp9_lpf_horizontal_4_c, 8), 660 &vp9_lpf_horizontal_4_c, 8, 1),
650 make_tuple(&vp9_lpf_vertical_4_neon, 661 make_tuple(&vp9_lpf_vertical_4_neon,
651 &vp9_lpf_vertical_4_c, 8))); 662 &vp9_lpf_vertical_4_c, 8, 1)));
652 INSTANTIATE_TEST_CASE_P( 663 INSTANTIATE_TEST_CASE_P(
653 NEON, Loop8Test9Param, 664 NEON, Loop8Test9Param,
654 ::testing::Values( 665 ::testing::Values(
655 #if HAVE_NEON_ASM 666 #if HAVE_NEON_ASM
656 make_tuple(&vp9_lpf_horizontal_8_dual_neon, 667 make_tuple(&vp9_lpf_horizontal_8_dual_neon,
657 &vp9_lpf_horizontal_8_dual_c, 8), 668 &vp9_lpf_horizontal_8_dual_c, 8),
658 make_tuple(&vp9_lpf_vertical_8_dual_neon, 669 make_tuple(&vp9_lpf_vertical_8_dual_neon,
659 &vp9_lpf_vertical_8_dual_c, 8), 670 &vp9_lpf_vertical_8_dual_c, 8),
660 #endif // HAVE_NEON_ASM 671 #endif // HAVE_NEON_ASM
661 make_tuple(&vp9_lpf_horizontal_4_dual_neon, 672 make_tuple(&vp9_lpf_horizontal_4_dual_neon,
662 &vp9_lpf_horizontal_4_dual_c, 8), 673 &vp9_lpf_horizontal_4_dual_c, 8),
663 make_tuple(&vp9_lpf_vertical_4_dual_neon, 674 make_tuple(&vp9_lpf_vertical_4_dual_neon,
664 &vp9_lpf_vertical_4_dual_c, 8))); 675 &vp9_lpf_vertical_4_dual_c, 8)));
665 #endif // CONFIG_VP9_HIGHBITDEPTH 676 #endif // CONFIG_VP9_HIGHBITDEPTH
666 #endif // HAVE_NEON 677 #endif // HAVE_NEON
667 678
668 } // namespace 679 } // namespace
OLDNEW
« no previous file with comments | « source/libvpx/test/fdct8x8_test.cc ('k') | source/libvpx/test/partial_idct_test.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698