OLD | NEW |
1 /* | 1 /* |
2 * Copyright 2011 The LibYuv Project Authors. All rights reserved. | 2 * Copyright 2011 The LibYuv 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 500 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
511 TESTPLANARTOB(I444, 1, 1, ARGB, 4, 4, 1, 2, ARGB, 4) | 511 TESTPLANARTOB(I444, 1, 1, ARGB, 4, 4, 1, 2, ARGB, 4) |
512 TESTPLANARTOB(I444, 1, 1, ABGR, 4, 4, 1, 2, ARGB, 4) | 512 TESTPLANARTOB(I444, 1, 1, ABGR, 4, 4, 1, 2, ARGB, 4) |
513 TESTPLANARTOB(I420, 2, 2, YUY2, 2, 4, 1, 1, ARGB, 4) | 513 TESTPLANARTOB(I420, 2, 2, YUY2, 2, 4, 1, 1, ARGB, 4) |
514 TESTPLANARTOB(I420, 2, 2, UYVY, 2, 4, 1, 1, ARGB, 4) | 514 TESTPLANARTOB(I420, 2, 2, UYVY, 2, 4, 1, 1, ARGB, 4) |
515 TESTPLANARTOB(I422, 2, 1, YUY2, 2, 4, 1, 0, ARGB, 4) | 515 TESTPLANARTOB(I422, 2, 1, YUY2, 2, 4, 1, 0, ARGB, 4) |
516 TESTPLANARTOB(I422, 2, 1, UYVY, 2, 4, 1, 0, ARGB, 4) | 516 TESTPLANARTOB(I422, 2, 1, UYVY, 2, 4, 1, 0, ARGB, 4) |
517 TESTPLANARTOB(I420, 2, 2, I400, 1, 1, 1, 0, ARGB, 4) | 517 TESTPLANARTOB(I420, 2, 2, I400, 1, 1, 1, 0, ARGB, 4) |
518 TESTPLANARTOB(J420, 2, 2, J400, 1, 1, 1, 0, ARGB, 4) | 518 TESTPLANARTOB(J420, 2, 2, J400, 1, 1, 1, 0, ARGB, 4) |
519 | 519 |
520 #define TESTQPLANARTOBI(FMT_PLANAR, SUBSAMP_X, SUBSAMP_Y, FMT_B, BPP_B, ALIGN, \ | 520 #define TESTQPLANARTOBI(FMT_PLANAR, SUBSAMP_X, SUBSAMP_Y, FMT_B, BPP_B, ALIGN, \ |
521 YALIGN, W1280, DIFF, N, NEG, OFF) \ | 521 YALIGN, W1280, DIFF, N, NEG, OFF, ATTEN) \ |
522 TEST_F(libyuvTest, FMT_PLANAR##To##FMT_B##N) { \ | 522 TEST_F(libyuvTest, FMT_PLANAR##To##FMT_B##N) { \ |
523 const int kWidth = ((W1280) > 0) ? (W1280) : 1; \ | 523 const int kWidth = ((W1280) > 0) ? (W1280) : 1; \ |
524 const int kHeight = ALIGNINT(benchmark_height_, YALIGN); \ | 524 const int kHeight = ALIGNINT(benchmark_height_, YALIGN); \ |
525 const int kStrideB = ALIGNINT(kWidth * BPP_B, ALIGN); \ | 525 const int kStrideB = ALIGNINT(kWidth * BPP_B, ALIGN); \ |
526 const int kSizeUV = \ | 526 const int kSizeUV = \ |
527 SUBSAMPLE(kWidth, SUBSAMP_X) * SUBSAMPLE(kHeight, SUBSAMP_Y); \ | 527 SUBSAMPLE(kWidth, SUBSAMP_X) * SUBSAMPLE(kHeight, SUBSAMP_Y); \ |
528 align_buffer_64(src_y, kWidth * kHeight + OFF); \ | 528 align_buffer_64(src_y, kWidth * kHeight + OFF); \ |
529 align_buffer_64(src_u, kSizeUV + OFF); \ | 529 align_buffer_64(src_u, kSizeUV + OFF); \ |
530 align_buffer_64(src_v, kSizeUV + OFF); \ | 530 align_buffer_64(src_v, kSizeUV + OFF); \ |
531 align_buffer_64(src_a, kWidth * kHeight + OFF); \ | 531 align_buffer_64(src_a, kWidth * kHeight + OFF); \ |
532 align_buffer_64(dst_argb_c, kStrideB * kHeight + OFF); \ | 532 align_buffer_64(dst_argb_c, kStrideB * kHeight + OFF); \ |
533 align_buffer_64(dst_argb_opt, kStrideB * kHeight + OFF); \ | 533 align_buffer_64(dst_argb_opt, kStrideB * kHeight + OFF); \ |
534 for (int i = 0; i < kWidth * kHeight; ++i) { \ | 534 for (int i = 0; i < kWidth * kHeight; ++i) { \ |
535 src_y[i + OFF] = (fastrand() & 0xff); \ | 535 src_y[i + OFF] = (fastrand() & 0xff); \ |
536 src_a[i + OFF] = (fastrand() & 0xff); \ | 536 src_a[i + OFF] = (fastrand() & 0xff); \ |
537 } \ | 537 } \ |
538 for (int i = 0; i < kSizeUV; ++i) { \ | 538 for (int i = 0; i < kSizeUV; ++i) { \ |
539 src_u[i + OFF] = (fastrand() & 0xff); \ | 539 src_u[i + OFF] = (fastrand() & 0xff); \ |
540 src_v[i + OFF] = (fastrand() & 0xff); \ | 540 src_v[i + OFF] = (fastrand() & 0xff); \ |
541 } \ | 541 } \ |
542 memset(dst_argb_c + OFF, 1, kStrideB * kHeight); \ | 542 memset(dst_argb_c + OFF, 1, kStrideB * kHeight); \ |
543 memset(dst_argb_opt + OFF, 101, kStrideB * kHeight); \ | 543 memset(dst_argb_opt + OFF, 101, kStrideB * kHeight); \ |
544 MaskCpuFlags(disable_cpu_flags_); \ | 544 MaskCpuFlags(disable_cpu_flags_); \ |
545 FMT_PLANAR##To##FMT_B(src_y + OFF, kWidth, \ | 545 FMT_PLANAR##To##FMT_B(src_y + OFF, kWidth, \ |
546 src_u + OFF, SUBSAMPLE(kWidth, SUBSAMP_X), \ | 546 src_u + OFF, SUBSAMPLE(kWidth, SUBSAMP_X), \ |
547 src_v + OFF, SUBSAMPLE(kWidth, SUBSAMP_X), \ | 547 src_v + OFF, SUBSAMPLE(kWidth, SUBSAMP_X), \ |
548 src_a + OFF, kWidth, \ | 548 src_a + OFF, kWidth, \ |
549 dst_argb_c + OFF, kStrideB, \ | 549 dst_argb_c + OFF, kStrideB, \ |
550 kWidth, NEG kHeight); \ | 550 kWidth, NEG kHeight, ATTEN); \ |
551 MaskCpuFlags(-1); \ | 551 MaskCpuFlags(-1); \ |
552 for (int i = 0; i < benchmark_iterations_; ++i) { \ | 552 for (int i = 0; i < benchmark_iterations_; ++i) { \ |
553 FMT_PLANAR##To##FMT_B(src_y + OFF, kWidth, \ | 553 FMT_PLANAR##To##FMT_B(src_y + OFF, kWidth, \ |
554 src_u + OFF, SUBSAMPLE(kWidth, SUBSAMP_X), \ | 554 src_u + OFF, SUBSAMPLE(kWidth, SUBSAMP_X), \ |
555 src_v + OFF, SUBSAMPLE(kWidth, SUBSAMP_X), \ | 555 src_v + OFF, SUBSAMPLE(kWidth, SUBSAMP_X), \ |
556 src_a + OFF, kWidth, \ | 556 src_a + OFF, kWidth, \ |
557 dst_argb_opt + OFF, kStrideB, \ | 557 dst_argb_opt + OFF, kStrideB, \ |
558 kWidth, NEG kHeight); \ | 558 kWidth, NEG kHeight, ATTEN); \ |
559 } \ | 559 } \ |
560 int max_diff = 0; \ | 560 int max_diff = 0; \ |
561 for (int i = 0; i < kWidth * BPP_B * kHeight; ++i) { \ | 561 for (int i = 0; i < kWidth * BPP_B * kHeight; ++i) { \ |
562 int abs_diff = \ | 562 int abs_diff = \ |
563 abs(static_cast<int>(dst_argb_c[i + OFF]) - \ | 563 abs(static_cast<int>(dst_argb_c[i + OFF]) - \ |
564 static_cast<int>(dst_argb_opt[i + OFF])); \ | 564 static_cast<int>(dst_argb_opt[i + OFF])); \ |
565 if (abs_diff > max_diff) { \ | 565 if (abs_diff > max_diff) { \ |
566 max_diff = abs_diff; \ | 566 max_diff = abs_diff; \ |
567 } \ | 567 } \ |
568 } \ | 568 } \ |
569 EXPECT_LE(max_diff, DIFF); \ | 569 EXPECT_LE(max_diff, DIFF); \ |
570 free_aligned_buffer_64(src_y); \ | 570 free_aligned_buffer_64(src_y); \ |
571 free_aligned_buffer_64(src_u); \ | 571 free_aligned_buffer_64(src_u); \ |
572 free_aligned_buffer_64(src_v); \ | 572 free_aligned_buffer_64(src_v); \ |
573 free_aligned_buffer_64(src_a); \ | 573 free_aligned_buffer_64(src_a); \ |
574 free_aligned_buffer_64(dst_argb_c); \ | 574 free_aligned_buffer_64(dst_argb_c); \ |
575 free_aligned_buffer_64(dst_argb_opt); \ | 575 free_aligned_buffer_64(dst_argb_opt); \ |
576 } | 576 } |
577 | 577 |
578 #define TESTQPLANARTOB(FMT_PLANAR, SUBSAMP_X, SUBSAMP_Y, FMT_B, BPP_B, ALIGN, \ | 578 #define TESTQPLANARTOB(FMT_PLANAR, SUBSAMP_X, SUBSAMP_Y, FMT_B, BPP_B, ALIGN, \ |
579 YALIGN, DIFF) \ | 579 YALIGN, DIFF) \ |
580 TESTQPLANARTOBI(FMT_PLANAR, SUBSAMP_X, SUBSAMP_Y, FMT_B, BPP_B, ALIGN, \ | 580 TESTQPLANARTOBI(FMT_PLANAR, SUBSAMP_X, SUBSAMP_Y, FMT_B, BPP_B, ALIGN, \ |
581 YALIGN, benchmark_width_ - 4, DIFF, _Any, +, 0) \ | 581 YALIGN, benchmark_width_ - 4, DIFF, _Any, +, 0, 0) \ |
582 TESTQPLANARTOBI(FMT_PLANAR, SUBSAMP_X, SUBSAMP_Y, FMT_B, BPP_B, ALIGN, \ | 582 TESTQPLANARTOBI(FMT_PLANAR, SUBSAMP_X, SUBSAMP_Y, FMT_B, BPP_B, ALIGN, \ |
583 YALIGN, benchmark_width_, DIFF, _Unaligned, +, 1) \ | 583 YALIGN, benchmark_width_, DIFF, _Unaligned, +, 1, 0) \ |
584 TESTQPLANARTOBI(FMT_PLANAR, SUBSAMP_X, SUBSAMP_Y, FMT_B, BPP_B, ALIGN, \ | 584 TESTQPLANARTOBI(FMT_PLANAR, SUBSAMP_X, SUBSAMP_Y, FMT_B, BPP_B, ALIGN, \ |
585 YALIGN, benchmark_width_, DIFF, _Invert, -, 0) \ | 585 YALIGN, benchmark_width_, DIFF, _Invert, -, 0, 0) \ |
586 TESTQPLANARTOBI(FMT_PLANAR, SUBSAMP_X, SUBSAMP_Y, FMT_B, BPP_B, ALIGN, \ | 586 TESTQPLANARTOBI(FMT_PLANAR, SUBSAMP_X, SUBSAMP_Y, FMT_B, BPP_B, ALIGN, \ |
587 YALIGN, benchmark_width_, DIFF, _Opt, +, 0) | 587 YALIGN, benchmark_width_, DIFF, _Opt, +, 0, 0) \ |
| 588 TESTQPLANARTOBI(FMT_PLANAR, SUBSAMP_X, SUBSAMP_Y, FMT_B, BPP_B, ALIGN, \ |
| 589 YALIGN, benchmark_width_, DIFF, _Premult, +, 0, 1) |
588 | 590 |
589 TESTQPLANARTOB(I420Alpha, 2, 2, ARGB, 4, 4, 1, 2) | 591 TESTQPLANARTOB(I420Alpha, 2, 2, ARGB, 4, 4, 1, 2) |
590 TESTQPLANARTOB(I420Alpha, 2, 2, ABGR, 4, 4, 1, 2) | 592 TESTQPLANARTOB(I420Alpha, 2, 2, ABGR, 4, 4, 1, 2) |
591 | 593 |
592 #define TESTBIPLANARTOBI(FMT_PLANAR, SUBSAMP_X, SUBSAMP_Y, FMT_B, BPP_B, \ | 594 #define TESTBIPLANARTOBI(FMT_PLANAR, SUBSAMP_X, SUBSAMP_Y, FMT_B, BPP_B, \ |
593 W1280, DIFF, N, NEG, OFF) \ | 595 W1280, DIFF, N, NEG, OFF) \ |
594 TEST_F(libyuvTest, FMT_PLANAR##To##FMT_B##N) { \ | 596 TEST_F(libyuvTest, FMT_PLANAR##To##FMT_B##N) { \ |
595 const int kWidth = ((W1280) > 0) ? (W1280) : 1; \ | 597 const int kWidth = ((W1280) > 0) ? (W1280) : 1; \ |
596 const int kHeight = benchmark_height_; \ | 598 const int kHeight = benchmark_height_; \ |
597 const int kStrideB = kWidth * BPP_B; \ | 599 const int kStrideB = kWidth * BPP_B; \ |
(...skipping 1093 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1691 free_aligned_buffer_64(dst_y_orig); \ | 1693 free_aligned_buffer_64(dst_y_orig); \ |
1692 free_aligned_buffer_64(dst_uv_orig); \ | 1694 free_aligned_buffer_64(dst_uv_orig); \ |
1693 free_aligned_buffer_64(dst_y); \ | 1695 free_aligned_buffer_64(dst_y); \ |
1694 free_aligned_buffer_64(dst_uv); \ | 1696 free_aligned_buffer_64(dst_uv); \ |
1695 } | 1697 } |
1696 | 1698 |
1697 TESTPTOB(TestYUY2ToNV12, YUY2ToI420, YUY2ToNV12) | 1699 TESTPTOB(TestYUY2ToNV12, YUY2ToI420, YUY2ToNV12) |
1698 TESTPTOB(TestUYVYToNV12, UYVYToI420, UYVYToNV12) | 1700 TESTPTOB(TestUYVYToNV12, UYVYToI420, UYVYToNV12) |
1699 | 1701 |
1700 } // namespace libyuv | 1702 } // namespace libyuv |
OLD | NEW |