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

Side by Side Diff: source/libvpx/test/fdct8x8_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/fdct4x4_test.cc ('k') | source/libvpx/test/lpf_8_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) 2012 The WebM project authors. All Rights Reserved. 2 * Copyright (c) 2012 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 121 matching lines...) Expand 10 before | Expand all | Expand 10 after
132 class FwdTrans8x8TestBase { 132 class FwdTrans8x8TestBase {
133 public: 133 public:
134 virtual ~FwdTrans8x8TestBase() {} 134 virtual ~FwdTrans8x8TestBase() {}
135 135
136 protected: 136 protected:
137 virtual void RunFwdTxfm(int16_t *in, tran_low_t *out, int stride) = 0; 137 virtual void RunFwdTxfm(int16_t *in, tran_low_t *out, int stride) = 0;
138 virtual void RunInvTxfm(tran_low_t *out, uint8_t *dst, int stride) = 0; 138 virtual void RunInvTxfm(tran_low_t *out, uint8_t *dst, int stride) = 0;
139 139
140 void RunSignBiasCheck() { 140 void RunSignBiasCheck() {
141 ACMRandom rnd(ACMRandom::DeterministicSeed()); 141 ACMRandom rnd(ACMRandom::DeterministicSeed());
142 DECLARE_ALIGNED_ARRAY(16, int16_t, test_input_block, 64); 142 DECLARE_ALIGNED(16, int16_t, test_input_block[64]);
143 DECLARE_ALIGNED_ARRAY(16, tran_low_t, test_output_block, 64); 143 DECLARE_ALIGNED(16, tran_low_t, test_output_block[64]);
144 int count_sign_block[64][2]; 144 int count_sign_block[64][2];
145 const int count_test_block = 100000; 145 const int count_test_block = 100000;
146 146
147 memset(count_sign_block, 0, sizeof(count_sign_block)); 147 memset(count_sign_block, 0, sizeof(count_sign_block));
148 148
149 for (int i = 0; i < count_test_block; ++i) { 149 for (int i = 0; i < count_test_block; ++i) {
150 // Initialize a test block with input range [-255, 255]. 150 // Initialize a test block with input range [-255, 255].
151 for (int j = 0; j < 64; ++j) 151 for (int j = 0; j < 64; ++j)
152 test_input_block[j] = ((rnd.Rand16() >> (16 - bit_depth_)) & mask_) - 152 test_input_block[j] = ((rnd.Rand16() >> (16 - bit_depth_)) & mask_) -
153 ((rnd.Rand16() >> (16 - bit_depth_)) & mask_); 153 ((rnd.Rand16() >> (16 - bit_depth_)) & mask_);
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after
203 << " count1: " << count_sign_block[j][1] 203 << " count1: " << count_sign_block[j][1]
204 << " diff: " << diff; 204 << " diff: " << diff;
205 } 205 }
206 } 206 }
207 207
208 void RunRoundTripErrorCheck() { 208 void RunRoundTripErrorCheck() {
209 ACMRandom rnd(ACMRandom::DeterministicSeed()); 209 ACMRandom rnd(ACMRandom::DeterministicSeed());
210 int max_error = 0; 210 int max_error = 0;
211 int total_error = 0; 211 int total_error = 0;
212 const int count_test_block = 100000; 212 const int count_test_block = 100000;
213 DECLARE_ALIGNED_ARRAY(16, int16_t, test_input_block, 64); 213 DECLARE_ALIGNED(16, int16_t, test_input_block[64]);
214 DECLARE_ALIGNED_ARRAY(16, tran_low_t, test_temp_block, 64); 214 DECLARE_ALIGNED(16, tran_low_t, test_temp_block[64]);
215 DECLARE_ALIGNED_ARRAY(16, uint8_t, dst, 64); 215 DECLARE_ALIGNED(16, uint8_t, dst[64]);
216 DECLARE_ALIGNED_ARRAY(16, uint8_t, src, 64); 216 DECLARE_ALIGNED(16, uint8_t, src[64]);
217 #if CONFIG_VP9_HIGHBITDEPTH 217 #if CONFIG_VP9_HIGHBITDEPTH
218 DECLARE_ALIGNED_ARRAY(16, uint16_t, dst16, 64); 218 DECLARE_ALIGNED(16, uint16_t, dst16[64]);
219 DECLARE_ALIGNED_ARRAY(16, uint16_t, src16, 64); 219 DECLARE_ALIGNED(16, uint16_t, src16[64]);
220 #endif 220 #endif
221 221
222 for (int i = 0; i < count_test_block; ++i) { 222 for (int i = 0; i < count_test_block; ++i) {
223 // Initialize a test block with input range [-mask_, mask_]. 223 // Initialize a test block with input range [-mask_, mask_].
224 for (int j = 0; j < 64; ++j) { 224 for (int j = 0; j < 64; ++j) {
225 if (bit_depth_ == VPX_BITS_8) { 225 if (bit_depth_ == VPX_BITS_8) {
226 src[j] = rnd.Rand8(); 226 src[j] = rnd.Rand8();
227 dst[j] = rnd.Rand8(); 227 dst[j] = rnd.Rand8();
228 test_input_block[j] = src[j] - dst[j]; 228 test_input_block[j] = src[j] - dst[j];
229 #if CONFIG_VP9_HIGHBITDEPTH 229 #if CONFIG_VP9_HIGHBITDEPTH
(...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after
280 << "Error: 8x8 FDCT/IDCT or FHT/IHT has average roundtrip " 280 << "Error: 8x8 FDCT/IDCT or FHT/IHT has average roundtrip "
281 << "error > 1/5 per block"; 281 << "error > 1/5 per block";
282 } 282 }
283 283
284 void RunExtremalCheck() { 284 void RunExtremalCheck() {
285 ACMRandom rnd(ACMRandom::DeterministicSeed()); 285 ACMRandom rnd(ACMRandom::DeterministicSeed());
286 int max_error = 0; 286 int max_error = 0;
287 int total_error = 0; 287 int total_error = 0;
288 int total_coeff_error = 0; 288 int total_coeff_error = 0;
289 const int count_test_block = 100000; 289 const int count_test_block = 100000;
290 DECLARE_ALIGNED_ARRAY(16, int16_t, test_input_block, 64); 290 DECLARE_ALIGNED(16, int16_t, test_input_block[64]);
291 DECLARE_ALIGNED_ARRAY(16, tran_low_t, test_temp_block, 64); 291 DECLARE_ALIGNED(16, tran_low_t, test_temp_block[64]);
292 DECLARE_ALIGNED_ARRAY(16, tran_low_t, ref_temp_block, 64); 292 DECLARE_ALIGNED(16, tran_low_t, ref_temp_block[64]);
293 DECLARE_ALIGNED_ARRAY(16, uint8_t, dst, 64); 293 DECLARE_ALIGNED(16, uint8_t, dst[64]);
294 DECLARE_ALIGNED_ARRAY(16, uint8_t, src, 64); 294 DECLARE_ALIGNED(16, uint8_t, src[64]);
295 #if CONFIG_VP9_HIGHBITDEPTH 295 #if CONFIG_VP9_HIGHBITDEPTH
296 DECLARE_ALIGNED_ARRAY(16, uint16_t, dst16, 64); 296 DECLARE_ALIGNED(16, uint16_t, dst16[64]);
297 DECLARE_ALIGNED_ARRAY(16, uint16_t, src16, 64); 297 DECLARE_ALIGNED(16, uint16_t, src16[64]);
298 #endif 298 #endif
299 299
300 for (int i = 0; i < count_test_block; ++i) { 300 for (int i = 0; i < count_test_block; ++i) {
301 // Initialize a test block with input range [-mask_, mask_]. 301 // Initialize a test block with input range [-mask_, mask_].
302 for (int j = 0; j < 64; ++j) { 302 for (int j = 0; j < 64; ++j) {
303 if (bit_depth_ == VPX_BITS_8) { 303 if (bit_depth_ == VPX_BITS_8) {
304 if (i == 0) { 304 if (i == 0) {
305 src[j] = 255; 305 src[j] = 255;
306 dst[j] = 0; 306 dst[j] = 0;
307 } else if (i == 1) { 307 } else if (i == 1) {
(...skipping 61 matching lines...) Expand 10 before | Expand all | Expand 10 after
369 369
370 EXPECT_EQ(0, total_coeff_error) 370 EXPECT_EQ(0, total_coeff_error)
371 << "Error: Extremal 8x8 FDCT/FHT has" 371 << "Error: Extremal 8x8 FDCT/FHT has"
372 << "overflow issues in the intermediate steps > 1"; 372 << "overflow issues in the intermediate steps > 1";
373 } 373 }
374 } 374 }
375 375
376 void RunInvAccuracyCheck() { 376 void RunInvAccuracyCheck() {
377 ACMRandom rnd(ACMRandom::DeterministicSeed()); 377 ACMRandom rnd(ACMRandom::DeterministicSeed());
378 const int count_test_block = 1000; 378 const int count_test_block = 1000;
379 DECLARE_ALIGNED_ARRAY(16, int16_t, in, kNumCoeffs); 379 DECLARE_ALIGNED(16, int16_t, in[kNumCoeffs]);
380 DECLARE_ALIGNED_ARRAY(16, tran_low_t, coeff, kNumCoeffs); 380 DECLARE_ALIGNED(16, tran_low_t, coeff[kNumCoeffs]);
381 DECLARE_ALIGNED_ARRAY(16, uint8_t, dst, kNumCoeffs); 381 DECLARE_ALIGNED(16, uint8_t, dst[kNumCoeffs]);
382 DECLARE_ALIGNED_ARRAY(16, uint8_t, src, kNumCoeffs); 382 DECLARE_ALIGNED(16, uint8_t, src[kNumCoeffs]);
383 #if CONFIG_VP9_HIGHBITDEPTH 383 #if CONFIG_VP9_HIGHBITDEPTH
384 DECLARE_ALIGNED_ARRAY(16, uint16_t, src16, kNumCoeffs); 384 DECLARE_ALIGNED(16, uint16_t, src16[kNumCoeffs]);
385 DECLARE_ALIGNED_ARRAY(16, uint16_t, dst16, kNumCoeffs); 385 DECLARE_ALIGNED(16, uint16_t, dst16[kNumCoeffs]);
386 #endif 386 #endif
387 387
388 for (int i = 0; i < count_test_block; ++i) { 388 for (int i = 0; i < count_test_block; ++i) {
389 double out_r[kNumCoeffs]; 389 double out_r[kNumCoeffs];
390 390
391 // Initialize a test block with input range [-255, 255]. 391 // Initialize a test block with input range [-255, 255].
392 for (int j = 0; j < kNumCoeffs; ++j) { 392 for (int j = 0; j < kNumCoeffs; ++j) {
393 if (bit_depth_ == VPX_BITS_8) { 393 if (bit_depth_ == VPX_BITS_8) {
394 src[j] = rnd.Rand8() % 2 ? 255 : 0; 394 src[j] = rnd.Rand8() % 2 ? 255 : 0;
395 dst[j] = src[j] > 0 ? 0 : 255; 395 dst[j] = src[j] > 0 ? 0 : 255;
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
427 EXPECT_GE(1u << 2 * (bit_depth_ - 8), error) 427 EXPECT_GE(1u << 2 * (bit_depth_ - 8), error)
428 << "Error: 8x8 IDCT has error " << error 428 << "Error: 8x8 IDCT has error " << error
429 << " at index " << j; 429 << " at index " << j;
430 } 430 }
431 } 431 }
432 } 432 }
433 433
434 void RunFwdAccuracyCheck() { 434 void RunFwdAccuracyCheck() {
435 ACMRandom rnd(ACMRandom::DeterministicSeed()); 435 ACMRandom rnd(ACMRandom::DeterministicSeed());
436 const int count_test_block = 1000; 436 const int count_test_block = 1000;
437 DECLARE_ALIGNED_ARRAY(16, int16_t, in, kNumCoeffs); 437 DECLARE_ALIGNED(16, int16_t, in[kNumCoeffs]);
438 DECLARE_ALIGNED_ARRAY(16, tran_low_t, coeff_r, kNumCoeffs); 438 DECLARE_ALIGNED(16, tran_low_t, coeff_r[kNumCoeffs]);
439 DECLARE_ALIGNED_ARRAY(16, tran_low_t, coeff, kNumCoeffs); 439 DECLARE_ALIGNED(16, tran_low_t, coeff[kNumCoeffs]);
440 440
441 for (int i = 0; i < count_test_block; ++i) { 441 for (int i = 0; i < count_test_block; ++i) {
442 double out_r[kNumCoeffs]; 442 double out_r[kNumCoeffs];
443 443
444 // Initialize a test block with input range [-mask_, mask_]. 444 // Initialize a test block with input range [-mask_, mask_].
445 for (int j = 0; j < kNumCoeffs; ++j) 445 for (int j = 0; j < kNumCoeffs; ++j)
446 in[j] = rnd.Rand8() % 2 == 0 ? mask_ : -mask_; 446 in[j] = rnd.Rand8() % 2 == 0 ? mask_ : -mask_;
447 447
448 RunFwdTxfm(in, coeff, pitch_); 448 RunFwdTxfm(in, coeff, pitch_);
449 reference_8x8_dct_2d(in, out_r); 449 reference_8x8_dct_2d(in, out_r);
450 for (int j = 0; j < kNumCoeffs; ++j) 450 for (int j = 0; j < kNumCoeffs; ++j)
451 coeff_r[j] = static_cast<tran_low_t>(round(out_r[j])); 451 coeff_r[j] = static_cast<tran_low_t>(round(out_r[j]));
452 452
453 for (int j = 0; j < kNumCoeffs; ++j) { 453 for (int j = 0; j < kNumCoeffs; ++j) {
454 const uint32_t diff = coeff[j] - coeff_r[j]; 454 const uint32_t diff = coeff[j] - coeff_r[j];
455 const uint32_t error = diff * diff; 455 const uint32_t error = diff * diff;
456 EXPECT_GE(9u << 2 * (bit_depth_ - 8), error) 456 EXPECT_GE(9u << 2 * (bit_depth_ - 8), error)
457 << "Error: 8x8 DCT has error " << error 457 << "Error: 8x8 DCT has error " << error
458 << " at index " << j; 458 << " at index " << j;
459 } 459 }
460 } 460 }
461 } 461 }
462 462
463 void CompareInvReference(IdctFunc ref_txfm, int thresh) { 463 void CompareInvReference(IdctFunc ref_txfm, int thresh) {
464 ACMRandom rnd(ACMRandom::DeterministicSeed()); 464 ACMRandom rnd(ACMRandom::DeterministicSeed());
465 const int count_test_block = 10000; 465 const int count_test_block = 10000;
466 const int eob = 12; 466 const int eob = 12;
467 DECLARE_ALIGNED_ARRAY(16, tran_low_t, coeff, kNumCoeffs); 467 DECLARE_ALIGNED(16, tran_low_t, coeff[kNumCoeffs]);
468 DECLARE_ALIGNED_ARRAY(16, uint8_t, dst, kNumCoeffs); 468 DECLARE_ALIGNED(16, uint8_t, dst[kNumCoeffs]);
469 DECLARE_ALIGNED_ARRAY(16, uint8_t, ref, kNumCoeffs); 469 DECLARE_ALIGNED(16, uint8_t, ref[kNumCoeffs]);
470 #if CONFIG_VP9_HIGHBITDEPTH 470 #if CONFIG_VP9_HIGHBITDEPTH
471 DECLARE_ALIGNED_ARRAY(16, uint16_t, dst16, kNumCoeffs); 471 DECLARE_ALIGNED(16, uint16_t, dst16[kNumCoeffs]);
472 DECLARE_ALIGNED_ARRAY(16, uint16_t, ref16, kNumCoeffs); 472 DECLARE_ALIGNED(16, uint16_t, ref16[kNumCoeffs]);
473 #endif 473 #endif
474 const int16_t *scan = vp9_default_scan_orders[TX_8X8].scan; 474 const int16_t *scan = vp9_default_scan_orders[TX_8X8].scan;
475 475
476 for (int i = 0; i < count_test_block; ++i) { 476 for (int i = 0; i < count_test_block; ++i) {
477 for (int j = 0; j < kNumCoeffs; ++j) { 477 for (int j = 0; j < kNumCoeffs; ++j) {
478 if (j < eob) { 478 if (j < eob) {
479 // Random values less than the threshold, either positive or negative 479 // Random values less than the threshold, either positive or negative
480 coeff[scan[j]] = rnd(thresh) * (1-2*(i%2)); 480 coeff[scan[j]] = rnd(thresh) * (1-2*(i%2));
481 } else { 481 } else {
482 coeff[scan[j]] = 0; 482 coeff[scan[j]] = 0;
(...skipping 288 matching lines...) Expand 10 before | Expand all | Expand 10 after
771 !CONFIG_EMULATE_HARDWARE 771 !CONFIG_EMULATE_HARDWARE
772 // TODO(jingning): re-enable after this handles the expanded range [0, 65535] 772 // TODO(jingning): re-enable after this handles the expanded range [0, 65535]
773 // returned from Rand16(). 773 // returned from Rand16().
774 INSTANTIATE_TEST_CASE_P( 774 INSTANTIATE_TEST_CASE_P(
775 SSSE3, FwdTrans8x8DCT, 775 SSSE3, FwdTrans8x8DCT,
776 ::testing::Values( 776 ::testing::Values(
777 make_tuple(&vp9_fdct8x8_ssse3, &vp9_idct8x8_64_add_ssse3, 0, 777 make_tuple(&vp9_fdct8x8_ssse3, &vp9_idct8x8_64_add_ssse3, 0,
778 VPX_BITS_8))); 778 VPX_BITS_8)));
779 #endif 779 #endif
780 } // namespace 780 } // namespace
OLDNEW
« no previous file with comments | « source/libvpx/test/fdct4x4_test.cc ('k') | source/libvpx/test/lpf_8_test.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698