| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright (c) 2010 The WebM project authors. All Rights Reserved. | 2 * Copyright (c) 2010 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 23 matching lines...) Expand all Loading... |
| 34 uint8_t *dst, ptrdiff_t dst_stride, | 34 uint8_t *dst, ptrdiff_t dst_stride, |
| 35 const int16_t *filter_x, int filter_x_stride, | 35 const int16_t *filter_x, int filter_x_stride, |
| 36 const int16_t *filter_y, int filter_y_stride, | 36 const int16_t *filter_y, int filter_y_stride, |
| 37 int w, int h); | 37 int w, int h); |
| 38 | 38 |
| 39 struct ConvolveFunctions { | 39 struct ConvolveFunctions { |
| 40 ConvolveFunctions(ConvolveFunc copy, ConvolveFunc avg, | 40 ConvolveFunctions(ConvolveFunc copy, ConvolveFunc avg, |
| 41 ConvolveFunc h8, ConvolveFunc h8_avg, | 41 ConvolveFunc h8, ConvolveFunc h8_avg, |
| 42 ConvolveFunc v8, ConvolveFunc v8_avg, | 42 ConvolveFunc v8, ConvolveFunc v8_avg, |
| 43 ConvolveFunc hv8, ConvolveFunc hv8_avg, | 43 ConvolveFunc hv8, ConvolveFunc hv8_avg, |
| 44 ConvolveFunc sh8, ConvolveFunc sh8_avg, |
| 45 ConvolveFunc sv8, ConvolveFunc sv8_avg, |
| 46 ConvolveFunc shv8, ConvolveFunc shv8_avg, |
| 44 int bd) | 47 int bd) |
| 45 : copy_(copy), avg_(avg), h8_(h8), v8_(v8), hv8_(hv8), h8_avg_(h8_avg), | 48 : copy_(copy), avg_(avg), h8_(h8), v8_(v8), hv8_(hv8), h8_avg_(h8_avg), |
| 46 v8_avg_(v8_avg), hv8_avg_(hv8_avg), use_highbd_(bd) {} | 49 v8_avg_(v8_avg), hv8_avg_(hv8_avg), sh8_(sh8), sv8_(sv8), shv8_(shv8), |
| 50 sh8_avg_(sh8_avg), sv8_avg_(sv8_avg), shv8_avg_(shv8_avg), |
| 51 use_highbd_(bd) {} |
| 47 | 52 |
| 48 ConvolveFunc copy_; | 53 ConvolveFunc copy_; |
| 49 ConvolveFunc avg_; | 54 ConvolveFunc avg_; |
| 50 ConvolveFunc h8_; | 55 ConvolveFunc h8_; |
| 51 ConvolveFunc v8_; | 56 ConvolveFunc v8_; |
| 52 ConvolveFunc hv8_; | 57 ConvolveFunc hv8_; |
| 53 ConvolveFunc h8_avg_; | 58 ConvolveFunc h8_avg_; |
| 54 ConvolveFunc v8_avg_; | 59 ConvolveFunc v8_avg_; |
| 55 ConvolveFunc hv8_avg_; | 60 ConvolveFunc hv8_avg_; |
| 61 ConvolveFunc sh8_; // scaled horiz |
| 62 ConvolveFunc sv8_; // scaled vert |
| 63 ConvolveFunc shv8_; // scaled horiz/vert |
| 64 ConvolveFunc sh8_avg_; // scaled avg horiz |
| 65 ConvolveFunc sv8_avg_; // scaled avg vert |
| 66 ConvolveFunc shv8_avg_; // scaled avg horiz/vert |
| 56 int use_highbd_; // 0 if high bitdepth not used, else the actual bit depth. | 67 int use_highbd_; // 0 if high bitdepth not used, else the actual bit depth. |
| 57 }; | 68 }; |
| 58 | 69 |
| 59 typedef std::tr1::tuple<int, int, const ConvolveFunctions *> ConvolveParam; | 70 typedef std::tr1::tuple<int, int, const ConvolveFunctions *> ConvolveParam; |
| 60 | 71 |
| 61 // Reference 8-tap subpixel filter, slightly modified to fit into this test. | 72 // Reference 8-tap subpixel filter, slightly modified to fit into this test. |
| 62 #define VP9_FILTER_WEIGHT 128 | 73 #define VP9_FILTER_WEIGHT 128 |
| 63 #define VP9_FILTER_SHIFT 7 | 74 #define VP9_FILTER_SHIFT 7 |
| 64 uint8_t clip_pixel(int x) { | 75 uint8_t clip_pixel(int x) { |
| 65 return x < 0 ? 0 : | 76 return x < 0 ? 0 : |
| (...skipping 524 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 590 lookup(out_ref, y * kOutputStride + x), 1)) | 601 lookup(out_ref, y * kOutputStride + x), 1)) |
| 591 << "(" << x << "," << y << ")"; | 602 << "(" << x << "," << y << ")"; |
| 592 } | 603 } |
| 593 | 604 |
| 594 TEST_P(ConvolveTest, CopyHoriz) { | 605 TEST_P(ConvolveTest, CopyHoriz) { |
| 595 uint8_t* const in = input(); | 606 uint8_t* const in = input(); |
| 596 uint8_t* const out = output(); | 607 uint8_t* const out = output(); |
| 597 DECLARE_ALIGNED(256, const int16_t, filter8[8]) = {0, 0, 0, 128, 0, 0, 0, 0}; | 608 DECLARE_ALIGNED(256, const int16_t, filter8[8]) = {0, 0, 0, 128, 0, 0, 0, 0}; |
| 598 | 609 |
| 599 ASM_REGISTER_STATE_CHECK( | 610 ASM_REGISTER_STATE_CHECK( |
| 600 UUT_->h8_(in, kInputStride, out, kOutputStride, filter8, 16, filter8, 16, | 611 UUT_->sh8_(in, kInputStride, out, kOutputStride, filter8, 16, filter8, 16, |
| 601 Width(), Height())); | 612 Width(), Height())); |
| 602 | 613 |
| 603 CheckGuardBlocks(); | 614 CheckGuardBlocks(); |
| 604 | 615 |
| 605 for (int y = 0; y < Height(); ++y) | 616 for (int y = 0; y < Height(); ++y) |
| 606 for (int x = 0; x < Width(); ++x) | 617 for (int x = 0; x < Width(); ++x) |
| 607 ASSERT_EQ(lookup(out, y * kOutputStride + x), | 618 ASSERT_EQ(lookup(out, y * kOutputStride + x), |
| 608 lookup(in, y * kInputStride + x)) | 619 lookup(in, y * kInputStride + x)) |
| 609 << "(" << x << "," << y << ")"; | 620 << "(" << x << "," << y << ")"; |
| 610 } | 621 } |
| 611 | 622 |
| 612 TEST_P(ConvolveTest, CopyVert) { | 623 TEST_P(ConvolveTest, CopyVert) { |
| 613 uint8_t* const in = input(); | 624 uint8_t* const in = input(); |
| 614 uint8_t* const out = output(); | 625 uint8_t* const out = output(); |
| 615 DECLARE_ALIGNED(256, const int16_t, filter8[8]) = {0, 0, 0, 128, 0, 0, 0, 0}; | 626 DECLARE_ALIGNED(256, const int16_t, filter8[8]) = {0, 0, 0, 128, 0, 0, 0, 0}; |
| 616 | 627 |
| 617 ASM_REGISTER_STATE_CHECK( | 628 ASM_REGISTER_STATE_CHECK( |
| 618 UUT_->v8_(in, kInputStride, out, kOutputStride, filter8, 16, filter8, 16, | 629 UUT_->sv8_(in, kInputStride, out, kOutputStride, filter8, 16, filter8, 16, |
| 619 Width(), Height())); | 630 Width(), Height())); |
| 620 | 631 |
| 621 CheckGuardBlocks(); | 632 CheckGuardBlocks(); |
| 622 | 633 |
| 623 for (int y = 0; y < Height(); ++y) | 634 for (int y = 0; y < Height(); ++y) |
| 624 for (int x = 0; x < Width(); ++x) | 635 for (int x = 0; x < Width(); ++x) |
| 625 ASSERT_EQ(lookup(out, y * kOutputStride + x), | 636 ASSERT_EQ(lookup(out, y * kOutputStride + x), |
| 626 lookup(in, y * kInputStride + x)) | 637 lookup(in, y * kInputStride + x)) |
| 627 << "(" << x << "," << y << ")"; | 638 << "(" << x << "," << y << ")"; |
| 628 } | 639 } |
| 629 | 640 |
| 630 TEST_P(ConvolveTest, Copy2D) { | 641 TEST_P(ConvolveTest, Copy2D) { |
| 631 uint8_t* const in = input(); | 642 uint8_t* const in = input(); |
| 632 uint8_t* const out = output(); | 643 uint8_t* const out = output(); |
| 633 DECLARE_ALIGNED(256, const int16_t, filter8[8]) = {0, 0, 0, 128, 0, 0, 0, 0}; | 644 DECLARE_ALIGNED(256, const int16_t, filter8[8]) = {0, 0, 0, 128, 0, 0, 0, 0}; |
| 634 | 645 |
| 635 ASM_REGISTER_STATE_CHECK( | 646 ASM_REGISTER_STATE_CHECK( |
| 636 UUT_->hv8_(in, kInputStride, out, kOutputStride, filter8, 16, filter8, 16, | 647 UUT_->shv8_(in, kInputStride, out, kOutputStride, filter8, 16, filter8, |
| 637 Width(), Height())); | 648 16, Width(), Height())); |
| 638 | 649 |
| 639 CheckGuardBlocks(); | 650 CheckGuardBlocks(); |
| 640 | 651 |
| 641 for (int y = 0; y < Height(); ++y) | 652 for (int y = 0; y < Height(); ++y) |
| 642 for (int x = 0; x < Width(); ++x) | 653 for (int x = 0; x < Width(); ++x) |
| 643 ASSERT_EQ(lookup(out, y * kOutputStride + x), | 654 ASSERT_EQ(lookup(out, y * kOutputStride + x), |
| 644 lookup(in, y * kInputStride + x)) | 655 lookup(in, y * kInputStride + x)) |
| 645 << "(" << x << "," << y << ")"; | 656 << "(" << x << "," << y << ")"; |
| 646 } | 657 } |
| 647 | 658 |
| (...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 683 } else { | 694 } else { |
| 684 ref = CONVERT_TO_BYTEPTR(ref16); | 695 ref = CONVERT_TO_BYTEPTR(ref16); |
| 685 } | 696 } |
| 686 #else | 697 #else |
| 687 uint8_t ref[kOutputStride * kMaxDimension]; | 698 uint8_t ref[kOutputStride * kMaxDimension]; |
| 688 #endif | 699 #endif |
| 689 | 700 |
| 690 for (int filter_bank = 0; filter_bank < kNumFilterBanks; ++filter_bank) { | 701 for (int filter_bank = 0; filter_bank < kNumFilterBanks; ++filter_bank) { |
| 691 const InterpKernel *filters = | 702 const InterpKernel *filters = |
| 692 vp9_filter_kernels[static_cast<INTERP_FILTER>(filter_bank)]; | 703 vp9_filter_kernels[static_cast<INTERP_FILTER>(filter_bank)]; |
| 693 const InterpKernel *const eighttap_smooth = | |
| 694 vp9_filter_kernels[EIGHTTAP_SMOOTH]; | |
| 695 | 704 |
| 696 for (int filter_x = 0; filter_x < kNumFilters; ++filter_x) { | 705 for (int filter_x = 0; filter_x < kNumFilters; ++filter_x) { |
| 697 for (int filter_y = 0; filter_y < kNumFilters; ++filter_y) { | 706 for (int filter_y = 0; filter_y < kNumFilters; ++filter_y) { |
| 698 wrapper_filter_block2d_8_c(in, kInputStride, | 707 wrapper_filter_block2d_8_c(in, kInputStride, |
| 699 filters[filter_x], filters[filter_y], | 708 filters[filter_x], filters[filter_y], |
| 700 ref, kOutputStride, | 709 ref, kOutputStride, |
| 701 Width(), Height()); | 710 Width(), Height()); |
| 702 | 711 |
| 703 if (filters == eighttap_smooth || (filter_x && filter_y)) | 712 if (filter_x && filter_y) |
| 704 ASM_REGISTER_STATE_CHECK( | 713 ASM_REGISTER_STATE_CHECK( |
| 705 UUT_->hv8_(in, kInputStride, out, kOutputStride, | 714 UUT_->hv8_(in, kInputStride, out, kOutputStride, |
| 706 filters[filter_x], 16, filters[filter_y], 16, | 715 filters[filter_x], 16, filters[filter_y], 16, |
| 707 Width(), Height())); | 716 Width(), Height())); |
| 708 else if (filter_y) | 717 else if (filter_y) |
| 709 ASM_REGISTER_STATE_CHECK( | 718 ASM_REGISTER_STATE_CHECK( |
| 710 UUT_->v8_(in, kInputStride, out, kOutputStride, | 719 UUT_->v8_(in, kInputStride, out, kOutputStride, |
| 711 kInvalidFilter, 16, filters[filter_y], 16, | 720 kInvalidFilter, 16, filters[filter_y], 16, |
| 712 Width(), Height())); | 721 Width(), Height())); |
| 713 else | 722 else if (filter_x) |
| 714 ASM_REGISTER_STATE_CHECK( | 723 ASM_REGISTER_STATE_CHECK( |
| 715 UUT_->h8_(in, kInputStride, out, kOutputStride, | 724 UUT_->h8_(in, kInputStride, out, kOutputStride, |
| 716 filters[filter_x], 16, kInvalidFilter, 16, | 725 filters[filter_x], 16, kInvalidFilter, 16, |
| 717 Width(), Height())); | 726 Width(), Height())); |
| 727 else |
| 728 ASM_REGISTER_STATE_CHECK( |
| 729 UUT_->copy_(in, kInputStride, out, kOutputStride, |
| 730 kInvalidFilter, 0, kInvalidFilter, 0, |
| 731 Width(), Height())); |
| 718 | 732 |
| 719 CheckGuardBlocks(); | 733 CheckGuardBlocks(); |
| 720 | 734 |
| 721 for (int y = 0; y < Height(); ++y) | 735 for (int y = 0; y < Height(); ++y) |
| 722 for (int x = 0; x < Width(); ++x) | 736 for (int x = 0; x < Width(); ++x) |
| 723 ASSERT_EQ(lookup(ref, y * kOutputStride + x), | 737 ASSERT_EQ(lookup(ref, y * kOutputStride + x), |
| 724 lookup(out, y * kOutputStride + x)) | 738 lookup(out, y * kOutputStride + x)) |
| 725 << "mismatch at (" << x << "," << y << "), " | 739 << "mismatch at (" << x << "," << y << "), " |
| 726 << "filters (" << filter_bank << "," | 740 << "filters (" << filter_bank << "," |
| 727 << filter_x << "," << filter_y << ")"; | 741 << filter_x << "," << filter_y << ")"; |
| (...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 762 #endif | 776 #endif |
| 763 | 777 |
| 764 assign_val(out, y * kOutputStride + x, r); | 778 assign_val(out, y * kOutputStride + x, r); |
| 765 assign_val(ref, y * kOutputStride + x, r); | 779 assign_val(ref, y * kOutputStride + x, r); |
| 766 } | 780 } |
| 767 } | 781 } |
| 768 | 782 |
| 769 for (int filter_bank = 0; filter_bank < kNumFilterBanks; ++filter_bank) { | 783 for (int filter_bank = 0; filter_bank < kNumFilterBanks; ++filter_bank) { |
| 770 const InterpKernel *filters = | 784 const InterpKernel *filters = |
| 771 vp9_filter_kernels[static_cast<INTERP_FILTER>(filter_bank)]; | 785 vp9_filter_kernels[static_cast<INTERP_FILTER>(filter_bank)]; |
| 772 const InterpKernel *const eighttap_smooth = | |
| 773 vp9_filter_kernels[EIGHTTAP_SMOOTH]; | |
| 774 | 786 |
| 775 for (int filter_x = 0; filter_x < kNumFilters; ++filter_x) { | 787 for (int filter_x = 0; filter_x < kNumFilters; ++filter_x) { |
| 776 for (int filter_y = 0; filter_y < kNumFilters; ++filter_y) { | 788 for (int filter_y = 0; filter_y < kNumFilters; ++filter_y) { |
| 777 wrapper_filter_average_block2d_8_c(in, kInputStride, | 789 wrapper_filter_average_block2d_8_c(in, kInputStride, |
| 778 filters[filter_x], filters[filter_y], | 790 filters[filter_x], filters[filter_y], |
| 779 ref, kOutputStride, | 791 ref, kOutputStride, |
| 780 Width(), Height()); | 792 Width(), Height()); |
| 781 | 793 |
| 782 if (filters == eighttap_smooth || (filter_x && filter_y)) | 794 if (filter_x && filter_y) |
| 783 ASM_REGISTER_STATE_CHECK( | 795 ASM_REGISTER_STATE_CHECK( |
| 784 UUT_->hv8_avg_(in, kInputStride, out, kOutputStride, | 796 UUT_->hv8_avg_(in, kInputStride, out, kOutputStride, |
| 785 filters[filter_x], 16, filters[filter_y], 16, | 797 filters[filter_x], 16, filters[filter_y], 16, |
| 786 Width(), Height())); | 798 Width(), Height())); |
| 787 else if (filter_y) | 799 else if (filter_y) |
| 788 ASM_REGISTER_STATE_CHECK( | 800 ASM_REGISTER_STATE_CHECK( |
| 789 UUT_->v8_avg_(in, kInputStride, out, kOutputStride, | 801 UUT_->v8_avg_(in, kInputStride, out, kOutputStride, |
| 790 filters[filter_x], 16, filters[filter_y], 16, | 802 kInvalidFilter, 16, filters[filter_y], 16, |
| 803 Width(), Height())); |
| 804 else if (filter_x) |
| 805 ASM_REGISTER_STATE_CHECK( |
| 806 UUT_->h8_avg_(in, kInputStride, out, kOutputStride, |
| 807 filters[filter_x], 16, kInvalidFilter, 16, |
| 791 Width(), Height())); | 808 Width(), Height())); |
| 792 else | 809 else |
| 793 ASM_REGISTER_STATE_CHECK( | 810 ASM_REGISTER_STATE_CHECK( |
| 794 UUT_->h8_avg_(in, kInputStride, out, kOutputStride, | 811 UUT_->avg_(in, kInputStride, out, kOutputStride, |
| 795 filters[filter_x], 16, filters[filter_y], 16, | 812 kInvalidFilter, 0, kInvalidFilter, 0, |
| 796 Width(), Height())); | 813 Width(), Height())); |
| 797 | 814 |
| 798 CheckGuardBlocks(); | 815 CheckGuardBlocks(); |
| 799 | 816 |
| 800 for (int y = 0; y < Height(); ++y) | 817 for (int y = 0; y < Height(); ++y) |
| 801 for (int x = 0; x < Width(); ++x) | 818 for (int x = 0; x < Width(); ++x) |
| 802 ASSERT_EQ(lookup(ref, y * kOutputStride + x), | 819 ASSERT_EQ(lookup(ref, y * kOutputStride + x), |
| 803 lookup(out, y * kOutputStride + x)) | 820 lookup(out, y * kOutputStride + x)) |
| 804 << "mismatch at (" << x << "," << y << "), " | 821 << "mismatch at (" << x << "," << y << "), " |
| 805 << "filters (" << filter_bank << "," | 822 << "filters (" << filter_bank << "," |
| 806 << filter_x << "," << filter_y << ")"; | 823 << filter_x << "," << filter_y << ")"; |
| (...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 861 if (axis) | 878 if (axis) |
| 862 seed_val-= 8; | 879 seed_val-= 8; |
| 863 else | 880 else |
| 864 seed_val++; | 881 seed_val++; |
| 865 } | 882 } |
| 866 if (axis) seed_val += 8; | 883 if (axis) seed_val += 8; |
| 867 | 884 |
| 868 for (int filter_bank = 0; filter_bank < kNumFilterBanks; ++filter_bank) { | 885 for (int filter_bank = 0; filter_bank < kNumFilterBanks; ++filter_bank) { |
| 869 const InterpKernel *filters = | 886 const InterpKernel *filters = |
| 870 vp9_filter_kernels[static_cast<INTERP_FILTER>(filter_bank)]; | 887 vp9_filter_kernels[static_cast<INTERP_FILTER>(filter_bank)]; |
| 871 const InterpKernel *const eighttap_smooth = | |
| 872 vp9_filter_kernels[EIGHTTAP_SMOOTH]; | |
| 873 for (int filter_x = 0; filter_x < kNumFilters; ++filter_x) { | 888 for (int filter_x = 0; filter_x < kNumFilters; ++filter_x) { |
| 874 for (int filter_y = 0; filter_y < kNumFilters; ++filter_y) { | 889 for (int filter_y = 0; filter_y < kNumFilters; ++filter_y) { |
| 875 wrapper_filter_block2d_8_c(in, kInputStride, | 890 wrapper_filter_block2d_8_c(in, kInputStride, |
| 876 filters[filter_x], filters[filter_y], | 891 filters[filter_x], filters[filter_y], |
| 877 ref, kOutputStride, | 892 ref, kOutputStride, |
| 878 Width(), Height()); | 893 Width(), Height()); |
| 879 if (filters == eighttap_smooth || (filter_x && filter_y)) | 894 if (filter_x && filter_y) |
| 880 ASM_REGISTER_STATE_CHECK( | 895 ASM_REGISTER_STATE_CHECK( |
| 881 UUT_->hv8_(in, kInputStride, out, kOutputStride, | 896 UUT_->hv8_(in, kInputStride, out, kOutputStride, |
| 882 filters[filter_x], 16, filters[filter_y], 16, | 897 filters[filter_x], 16, filters[filter_y], 16, |
| 883 Width(), Height())); | 898 Width(), Height())); |
| 884 else if (filter_y) | 899 else if (filter_y) |
| 885 ASM_REGISTER_STATE_CHECK( | 900 ASM_REGISTER_STATE_CHECK( |
| 886 UUT_->v8_(in, kInputStride, out, kOutputStride, | 901 UUT_->v8_(in, kInputStride, out, kOutputStride, |
| 887 kInvalidFilter, 16, filters[filter_y], 16, | 902 kInvalidFilter, 16, filters[filter_y], 16, |
| 888 Width(), Height())); | 903 Width(), Height())); |
| 889 else | 904 else if (filter_x) |
| 890 ASM_REGISTER_STATE_CHECK( | 905 ASM_REGISTER_STATE_CHECK( |
| 891 UUT_->h8_(in, kInputStride, out, kOutputStride, | 906 UUT_->h8_(in, kInputStride, out, kOutputStride, |
| 892 filters[filter_x], 16, kInvalidFilter, 16, | 907 filters[filter_x], 16, kInvalidFilter, 16, |
| 893 Width(), Height())); | 908 Width(), Height())); |
| 909 else |
| 910 ASM_REGISTER_STATE_CHECK( |
| 911 UUT_->copy_(in, kInputStride, out, kOutputStride, |
| 912 kInvalidFilter, 0, kInvalidFilter, 0, |
| 913 Width(), Height())); |
| 894 | 914 |
| 895 for (int y = 0; y < Height(); ++y) | 915 for (int y = 0; y < Height(); ++y) |
| 896 for (int x = 0; x < Width(); ++x) | 916 for (int x = 0; x < Width(); ++x) |
| 897 ASSERT_EQ(lookup(ref, y * kOutputStride + x), | 917 ASSERT_EQ(lookup(ref, y * kOutputStride + x), |
| 898 lookup(out, y * kOutputStride + x)) | 918 lookup(out, y * kOutputStride + x)) |
| 899 << "mismatch at (" << x << "," << y << "), " | 919 << "mismatch at (" << x << "," << y << "), " |
| 900 << "filters (" << filter_bank << "," | 920 << "filters (" << filter_bank << "," |
| 901 << filter_x << "," << filter_y << ")"; | 921 << filter_x << "," << filter_y << ")"; |
| 902 } | 922 } |
| 903 } | 923 } |
| 904 } | 924 } |
| 905 } | 925 } |
| 906 } | 926 } |
| 907 } | 927 } |
| 908 | 928 |
| 909 /* This test exercises that enough rows and columns are filtered with every | 929 /* This test exercises that enough rows and columns are filtered with every |
| 910 possible initial fractional positions and scaling steps. */ | 930 possible initial fractional positions and scaling steps. */ |
| 911 TEST_P(ConvolveTest, CheckScalingFiltering) { | 931 TEST_P(ConvolveTest, CheckScalingFiltering) { |
| 912 uint8_t* const in = input(); | 932 uint8_t* const in = input(); |
| 913 uint8_t* const out = output(); | 933 uint8_t* const out = output(); |
| 914 const InterpKernel *const eighttap = vp9_filter_kernels[EIGHTTAP]; | 934 const InterpKernel *const eighttap = vp9_filter_kernels[EIGHTTAP]; |
| 915 | 935 |
| 916 SetConstantInput(127); | 936 SetConstantInput(127); |
| 917 | 937 |
| 918 for (int frac = 0; frac < 16; ++frac) { | 938 for (int frac = 0; frac < 16; ++frac) { |
| 919 for (int step = 1; step <= 32; ++step) { | 939 for (int step = 1; step <= 32; ++step) { |
| 920 /* Test the horizontal and vertical filters in combination. */ | 940 /* Test the horizontal and vertical filters in combination. */ |
| 921 ASM_REGISTER_STATE_CHECK(UUT_->hv8_(in, kInputStride, out, kOutputStride, | 941 ASM_REGISTER_STATE_CHECK(UUT_->shv8_(in, kInputStride, out, kOutputStride, |
| 922 eighttap[frac], step, | 942 eighttap[frac], step, |
| 923 eighttap[frac], step, | 943 eighttap[frac], step, |
| 924 Width(), Height())); | 944 Width(), Height())); |
| 925 | 945 |
| 926 CheckGuardBlocks(); | 946 CheckGuardBlocks(); |
| 927 | 947 |
| 928 for (int y = 0; y < Height(); ++y) { | 948 for (int y = 0; y < Height(); ++y) { |
| 929 for (int x = 0; x < Width(); ++x) { | 949 for (int x = 0; x < Width(); ++x) { |
| 930 ASSERT_EQ(lookup(in, y * kInputStride + x), | 950 ASSERT_EQ(lookup(in, y * kInputStride + x), |
| 931 lookup(out, y * kOutputStride + x)) | 951 lookup(out, y * kOutputStride + x)) |
| 932 << "x == " << x << ", y == " << y | 952 << "x == " << x << ", y == " << y |
| 933 << ", frac == " << frac << ", step == " << step; | 953 << ", frac == " << frac << ", step == " << step; |
| 934 } | 954 } |
| (...skipping 508 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1443 int w, int h) { | 1463 int w, int h) { |
| 1444 vpx_highbd_convolve8_avg_c(src, src_stride, dst, dst_stride, | 1464 vpx_highbd_convolve8_avg_c(src, src_stride, dst, dst_stride, |
| 1445 filter_x, filter_x_stride, | 1465 filter_x, filter_x_stride, |
| 1446 filter_y, filter_y_stride, w, h, 12); | 1466 filter_y, filter_y_stride, w, h, 12); |
| 1447 } | 1467 } |
| 1448 | 1468 |
| 1449 const ConvolveFunctions convolve8_c( | 1469 const ConvolveFunctions convolve8_c( |
| 1450 wrap_convolve_copy_c_8, wrap_convolve_avg_c_8, | 1470 wrap_convolve_copy_c_8, wrap_convolve_avg_c_8, |
| 1451 wrap_convolve8_horiz_c_8, wrap_convolve8_avg_horiz_c_8, | 1471 wrap_convolve8_horiz_c_8, wrap_convolve8_avg_horiz_c_8, |
| 1452 wrap_convolve8_vert_c_8, wrap_convolve8_avg_vert_c_8, | 1472 wrap_convolve8_vert_c_8, wrap_convolve8_avg_vert_c_8, |
| 1473 wrap_convolve8_c_8, wrap_convolve8_avg_c_8, |
| 1474 wrap_convolve8_horiz_c_8, wrap_convolve8_avg_horiz_c_8, |
| 1475 wrap_convolve8_vert_c_8, wrap_convolve8_avg_vert_c_8, |
| 1453 wrap_convolve8_c_8, wrap_convolve8_avg_c_8, 8); | 1476 wrap_convolve8_c_8, wrap_convolve8_avg_c_8, 8); |
| 1454 INSTANTIATE_TEST_CASE_P(C_8, ConvolveTest, ::testing::Values( | 1477 INSTANTIATE_TEST_CASE_P(C_8, ConvolveTest, ::testing::Values( |
| 1455 make_tuple(4, 4, &convolve8_c), | 1478 make_tuple(4, 4, &convolve8_c), |
| 1456 make_tuple(8, 4, &convolve8_c), | 1479 make_tuple(8, 4, &convolve8_c), |
| 1457 make_tuple(4, 8, &convolve8_c), | 1480 make_tuple(4, 8, &convolve8_c), |
| 1458 make_tuple(8, 8, &convolve8_c), | 1481 make_tuple(8, 8, &convolve8_c), |
| 1459 make_tuple(16, 8, &convolve8_c), | 1482 make_tuple(16, 8, &convolve8_c), |
| 1460 make_tuple(8, 16, &convolve8_c), | 1483 make_tuple(8, 16, &convolve8_c), |
| 1461 make_tuple(16, 16, &convolve8_c), | 1484 make_tuple(16, 16, &convolve8_c), |
| 1462 make_tuple(32, 16, &convolve8_c), | 1485 make_tuple(32, 16, &convolve8_c), |
| 1463 make_tuple(16, 32, &convolve8_c), | 1486 make_tuple(16, 32, &convolve8_c), |
| 1464 make_tuple(32, 32, &convolve8_c), | 1487 make_tuple(32, 32, &convolve8_c), |
| 1465 make_tuple(64, 32, &convolve8_c), | 1488 make_tuple(64, 32, &convolve8_c), |
| 1466 make_tuple(32, 64, &convolve8_c), | 1489 make_tuple(32, 64, &convolve8_c), |
| 1467 make_tuple(64, 64, &convolve8_c))); | 1490 make_tuple(64, 64, &convolve8_c))); |
| 1468 const ConvolveFunctions convolve10_c( | 1491 const ConvolveFunctions convolve10_c( |
| 1469 wrap_convolve_copy_c_10, wrap_convolve_avg_c_10, | 1492 wrap_convolve_copy_c_10, wrap_convolve_avg_c_10, |
| 1470 wrap_convolve8_horiz_c_10, wrap_convolve8_avg_horiz_c_10, | 1493 wrap_convolve8_horiz_c_10, wrap_convolve8_avg_horiz_c_10, |
| 1471 wrap_convolve8_vert_c_10, wrap_convolve8_avg_vert_c_10, | 1494 wrap_convolve8_vert_c_10, wrap_convolve8_avg_vert_c_10, |
| 1495 wrap_convolve8_c_10, wrap_convolve8_avg_c_10, |
| 1496 wrap_convolve8_horiz_c_10, wrap_convolve8_avg_horiz_c_10, |
| 1497 wrap_convolve8_vert_c_10, wrap_convolve8_avg_vert_c_10, |
| 1472 wrap_convolve8_c_10, wrap_convolve8_avg_c_10, 10); | 1498 wrap_convolve8_c_10, wrap_convolve8_avg_c_10, 10); |
| 1473 INSTANTIATE_TEST_CASE_P(C_10, ConvolveTest, ::testing::Values( | 1499 INSTANTIATE_TEST_CASE_P(C_10, ConvolveTest, ::testing::Values( |
| 1474 make_tuple(4, 4, &convolve10_c), | 1500 make_tuple(4, 4, &convolve10_c), |
| 1475 make_tuple(8, 4, &convolve10_c), | 1501 make_tuple(8, 4, &convolve10_c), |
| 1476 make_tuple(4, 8, &convolve10_c), | 1502 make_tuple(4, 8, &convolve10_c), |
| 1477 make_tuple(8, 8, &convolve10_c), | 1503 make_tuple(8, 8, &convolve10_c), |
| 1478 make_tuple(16, 8, &convolve10_c), | 1504 make_tuple(16, 8, &convolve10_c), |
| 1479 make_tuple(8, 16, &convolve10_c), | 1505 make_tuple(8, 16, &convolve10_c), |
| 1480 make_tuple(16, 16, &convolve10_c), | 1506 make_tuple(16, 16, &convolve10_c), |
| 1481 make_tuple(32, 16, &convolve10_c), | 1507 make_tuple(32, 16, &convolve10_c), |
| 1482 make_tuple(16, 32, &convolve10_c), | 1508 make_tuple(16, 32, &convolve10_c), |
| 1483 make_tuple(32, 32, &convolve10_c), | 1509 make_tuple(32, 32, &convolve10_c), |
| 1484 make_tuple(64, 32, &convolve10_c), | 1510 make_tuple(64, 32, &convolve10_c), |
| 1485 make_tuple(32, 64, &convolve10_c), | 1511 make_tuple(32, 64, &convolve10_c), |
| 1486 make_tuple(64, 64, &convolve10_c))); | 1512 make_tuple(64, 64, &convolve10_c))); |
| 1487 const ConvolveFunctions convolve12_c( | 1513 const ConvolveFunctions convolve12_c( |
| 1488 wrap_convolve_copy_c_12, wrap_convolve_avg_c_12, | 1514 wrap_convolve_copy_c_12, wrap_convolve_avg_c_12, |
| 1489 wrap_convolve8_horiz_c_12, wrap_convolve8_avg_horiz_c_12, | 1515 wrap_convolve8_horiz_c_12, wrap_convolve8_avg_horiz_c_12, |
| 1490 wrap_convolve8_vert_c_12, wrap_convolve8_avg_vert_c_12, | 1516 wrap_convolve8_vert_c_12, wrap_convolve8_avg_vert_c_12, |
| 1517 wrap_convolve8_c_12, wrap_convolve8_avg_c_12, |
| 1518 wrap_convolve8_horiz_c_12, wrap_convolve8_avg_horiz_c_12, |
| 1519 wrap_convolve8_vert_c_12, wrap_convolve8_avg_vert_c_12, |
| 1491 wrap_convolve8_c_12, wrap_convolve8_avg_c_12, 12); | 1520 wrap_convolve8_c_12, wrap_convolve8_avg_c_12, 12); |
| 1492 INSTANTIATE_TEST_CASE_P(C_12, ConvolveTest, ::testing::Values( | 1521 INSTANTIATE_TEST_CASE_P(C_12, ConvolveTest, ::testing::Values( |
| 1493 make_tuple(4, 4, &convolve12_c), | 1522 make_tuple(4, 4, &convolve12_c), |
| 1494 make_tuple(8, 4, &convolve12_c), | 1523 make_tuple(8, 4, &convolve12_c), |
| 1495 make_tuple(4, 8, &convolve12_c), | 1524 make_tuple(4, 8, &convolve12_c), |
| 1496 make_tuple(8, 8, &convolve12_c), | 1525 make_tuple(8, 8, &convolve12_c), |
| 1497 make_tuple(16, 8, &convolve12_c), | 1526 make_tuple(16, 8, &convolve12_c), |
| 1498 make_tuple(8, 16, &convolve12_c), | 1527 make_tuple(8, 16, &convolve12_c), |
| 1499 make_tuple(16, 16, &convolve12_c), | 1528 make_tuple(16, 16, &convolve12_c), |
| 1500 make_tuple(32, 16, &convolve12_c), | 1529 make_tuple(32, 16, &convolve12_c), |
| 1501 make_tuple(16, 32, &convolve12_c), | 1530 make_tuple(16, 32, &convolve12_c), |
| 1502 make_tuple(32, 32, &convolve12_c), | 1531 make_tuple(32, 32, &convolve12_c), |
| 1503 make_tuple(64, 32, &convolve12_c), | 1532 make_tuple(64, 32, &convolve12_c), |
| 1504 make_tuple(32, 64, &convolve12_c), | 1533 make_tuple(32, 64, &convolve12_c), |
| 1505 make_tuple(64, 64, &convolve12_c))); | 1534 make_tuple(64, 64, &convolve12_c))); |
| 1506 | 1535 |
| 1507 #else | 1536 #else |
| 1508 | 1537 |
| 1509 const ConvolveFunctions convolve8_c( | 1538 const ConvolveFunctions convolve8_c( |
| 1510 vpx_convolve_copy_c, vpx_convolve_avg_c, | 1539 vpx_convolve_copy_c, vpx_convolve_avg_c, |
| 1511 vpx_convolve8_horiz_c, vpx_convolve8_avg_horiz_c, | 1540 vpx_convolve8_horiz_c, vpx_convolve8_avg_horiz_c, |
| 1512 vpx_convolve8_vert_c, vpx_convolve8_avg_vert_c, | 1541 vpx_convolve8_vert_c, vpx_convolve8_avg_vert_c, |
| 1513 vpx_convolve8_c, vpx_convolve8_avg_c, 0); | 1542 vpx_convolve8_c, vpx_convolve8_avg_c, |
| 1543 vpx_scaled_horiz_c, vpx_scaled_avg_horiz_c, |
| 1544 vpx_scaled_vert_c, vpx_scaled_avg_vert_c, |
| 1545 vpx_scaled_2d_c, vpx_scaled_avg_2d_c, 0); |
| 1514 | 1546 |
| 1515 INSTANTIATE_TEST_CASE_P(C, ConvolveTest, ::testing::Values( | 1547 INSTANTIATE_TEST_CASE_P(C, ConvolveTest, ::testing::Values( |
| 1516 make_tuple(4, 4, &convolve8_c), | 1548 make_tuple(4, 4, &convolve8_c), |
| 1517 make_tuple(8, 4, &convolve8_c), | 1549 make_tuple(8, 4, &convolve8_c), |
| 1518 make_tuple(4, 8, &convolve8_c), | 1550 make_tuple(4, 8, &convolve8_c), |
| 1519 make_tuple(8, 8, &convolve8_c), | 1551 make_tuple(8, 8, &convolve8_c), |
| 1520 make_tuple(16, 8, &convolve8_c), | 1552 make_tuple(16, 8, &convolve8_c), |
| 1521 make_tuple(8, 16, &convolve8_c), | 1553 make_tuple(8, 16, &convolve8_c), |
| 1522 make_tuple(16, 16, &convolve8_c), | 1554 make_tuple(16, 16, &convolve8_c), |
| 1523 make_tuple(32, 16, &convolve8_c), | 1555 make_tuple(32, 16, &convolve8_c), |
| 1524 make_tuple(16, 32, &convolve8_c), | 1556 make_tuple(16, 32, &convolve8_c), |
| 1525 make_tuple(32, 32, &convolve8_c), | 1557 make_tuple(32, 32, &convolve8_c), |
| 1526 make_tuple(64, 32, &convolve8_c), | 1558 make_tuple(64, 32, &convolve8_c), |
| 1527 make_tuple(32, 64, &convolve8_c), | 1559 make_tuple(32, 64, &convolve8_c), |
| 1528 make_tuple(64, 64, &convolve8_c))); | 1560 make_tuple(64, 64, &convolve8_c))); |
| 1529 #endif | 1561 #endif |
| 1530 | 1562 |
| 1531 #if HAVE_SSE2 && ARCH_X86_64 | 1563 #if HAVE_SSE2 && ARCH_X86_64 |
| 1532 #if CONFIG_VP9_HIGHBITDEPTH | 1564 #if CONFIG_VP9_HIGHBITDEPTH |
| 1533 const ConvolveFunctions convolve8_sse2( | 1565 const ConvolveFunctions convolve8_sse2( |
| 1534 wrap_convolve_copy_c_8, wrap_convolve_avg_c_8, | 1566 wrap_convolve_copy_c_8, wrap_convolve_avg_c_8, |
| 1535 wrap_convolve8_horiz_sse2_8, wrap_convolve8_avg_horiz_sse2_8, | 1567 wrap_convolve8_horiz_sse2_8, wrap_convolve8_avg_horiz_sse2_8, |
| 1536 wrap_convolve8_vert_sse2_8, wrap_convolve8_avg_vert_sse2_8, | 1568 wrap_convolve8_vert_sse2_8, wrap_convolve8_avg_vert_sse2_8, |
| 1569 wrap_convolve8_sse2_8, wrap_convolve8_avg_sse2_8, |
| 1570 wrap_convolve8_horiz_sse2_8, wrap_convolve8_avg_horiz_sse2_8, |
| 1571 wrap_convolve8_vert_sse2_8, wrap_convolve8_avg_vert_sse2_8, |
| 1537 wrap_convolve8_sse2_8, wrap_convolve8_avg_sse2_8, 8); | 1572 wrap_convolve8_sse2_8, wrap_convolve8_avg_sse2_8, 8); |
| 1538 const ConvolveFunctions convolve10_sse2( | 1573 const ConvolveFunctions convolve10_sse2( |
| 1539 wrap_convolve_copy_c_10, wrap_convolve_avg_c_10, | 1574 wrap_convolve_copy_c_10, wrap_convolve_avg_c_10, |
| 1540 wrap_convolve8_horiz_sse2_10, wrap_convolve8_avg_horiz_sse2_10, | 1575 wrap_convolve8_horiz_sse2_10, wrap_convolve8_avg_horiz_sse2_10, |
| 1541 wrap_convolve8_vert_sse2_10, wrap_convolve8_avg_vert_sse2_10, | 1576 wrap_convolve8_vert_sse2_10, wrap_convolve8_avg_vert_sse2_10, |
| 1577 wrap_convolve8_sse2_10, wrap_convolve8_avg_sse2_10, |
| 1578 wrap_convolve8_horiz_sse2_10, wrap_convolve8_avg_horiz_sse2_10, |
| 1579 wrap_convolve8_vert_sse2_10, wrap_convolve8_avg_vert_sse2_10, |
| 1542 wrap_convolve8_sse2_10, wrap_convolve8_avg_sse2_10, 10); | 1580 wrap_convolve8_sse2_10, wrap_convolve8_avg_sse2_10, 10); |
| 1543 const ConvolveFunctions convolve12_sse2( | 1581 const ConvolveFunctions convolve12_sse2( |
| 1544 wrap_convolve_copy_c_12, wrap_convolve_avg_c_12, | 1582 wrap_convolve_copy_c_12, wrap_convolve_avg_c_12, |
| 1545 wrap_convolve8_horiz_sse2_12, wrap_convolve8_avg_horiz_sse2_12, | 1583 wrap_convolve8_horiz_sse2_12, wrap_convolve8_avg_horiz_sse2_12, |
| 1546 wrap_convolve8_vert_sse2_12, wrap_convolve8_avg_vert_sse2_12, | 1584 wrap_convolve8_vert_sse2_12, wrap_convolve8_avg_vert_sse2_12, |
| 1585 wrap_convolve8_sse2_12, wrap_convolve8_avg_sse2_12, |
| 1586 wrap_convolve8_horiz_sse2_12, wrap_convolve8_avg_horiz_sse2_12, |
| 1587 wrap_convolve8_vert_sse2_12, wrap_convolve8_avg_vert_sse2_12, |
| 1547 wrap_convolve8_sse2_12, wrap_convolve8_avg_sse2_12, 12); | 1588 wrap_convolve8_sse2_12, wrap_convolve8_avg_sse2_12, 12); |
| 1548 INSTANTIATE_TEST_CASE_P(SSE2, ConvolveTest, ::testing::Values( | 1589 INSTANTIATE_TEST_CASE_P(SSE2, ConvolveTest, ::testing::Values( |
| 1549 make_tuple(4, 4, &convolve8_sse2), | 1590 make_tuple(4, 4, &convolve8_sse2), |
| 1550 make_tuple(8, 4, &convolve8_sse2), | 1591 make_tuple(8, 4, &convolve8_sse2), |
| 1551 make_tuple(4, 8, &convolve8_sse2), | 1592 make_tuple(4, 8, &convolve8_sse2), |
| 1552 make_tuple(8, 8, &convolve8_sse2), | 1593 make_tuple(8, 8, &convolve8_sse2), |
| 1553 make_tuple(16, 8, &convolve8_sse2), | 1594 make_tuple(16, 8, &convolve8_sse2), |
| 1554 make_tuple(8, 16, &convolve8_sse2), | 1595 make_tuple(8, 16, &convolve8_sse2), |
| 1555 make_tuple(16, 16, &convolve8_sse2), | 1596 make_tuple(16, 16, &convolve8_sse2), |
| 1556 make_tuple(32, 16, &convolve8_sse2), | 1597 make_tuple(32, 16, &convolve8_sse2), |
| (...skipping 30 matching lines...) Expand all Loading... |
| 1587 make_tuple(64, 64, &convolve12_sse2))); | 1628 make_tuple(64, 64, &convolve12_sse2))); |
| 1588 #else | 1629 #else |
| 1589 const ConvolveFunctions convolve8_sse2( | 1630 const ConvolveFunctions convolve8_sse2( |
| 1590 #if CONFIG_USE_X86INC | 1631 #if CONFIG_USE_X86INC |
| 1591 vpx_convolve_copy_sse2, vpx_convolve_avg_sse2, | 1632 vpx_convolve_copy_sse2, vpx_convolve_avg_sse2, |
| 1592 #else | 1633 #else |
| 1593 vpx_convolve_copy_c, vpx_convolve_avg_c, | 1634 vpx_convolve_copy_c, vpx_convolve_avg_c, |
| 1594 #endif // CONFIG_USE_X86INC | 1635 #endif // CONFIG_USE_X86INC |
| 1595 vpx_convolve8_horiz_sse2, vpx_convolve8_avg_horiz_sse2, | 1636 vpx_convolve8_horiz_sse2, vpx_convolve8_avg_horiz_sse2, |
| 1596 vpx_convolve8_vert_sse2, vpx_convolve8_avg_vert_sse2, | 1637 vpx_convolve8_vert_sse2, vpx_convolve8_avg_vert_sse2, |
| 1597 vpx_convolve8_sse2, vpx_convolve8_avg_sse2, 0); | 1638 vpx_convolve8_sse2, vpx_convolve8_avg_sse2, |
| 1639 vpx_scaled_horiz_c, vpx_scaled_avg_horiz_c, |
| 1640 vpx_scaled_vert_c, vpx_scaled_avg_vert_c, |
| 1641 vpx_scaled_2d_c, vpx_scaled_avg_2d_c, 0); |
| 1598 | 1642 |
| 1599 INSTANTIATE_TEST_CASE_P(SSE2, ConvolveTest, ::testing::Values( | 1643 INSTANTIATE_TEST_CASE_P(SSE2, ConvolveTest, ::testing::Values( |
| 1600 make_tuple(4, 4, &convolve8_sse2), | 1644 make_tuple(4, 4, &convolve8_sse2), |
| 1601 make_tuple(8, 4, &convolve8_sse2), | 1645 make_tuple(8, 4, &convolve8_sse2), |
| 1602 make_tuple(4, 8, &convolve8_sse2), | 1646 make_tuple(4, 8, &convolve8_sse2), |
| 1603 make_tuple(8, 8, &convolve8_sse2), | 1647 make_tuple(8, 8, &convolve8_sse2), |
| 1604 make_tuple(16, 8, &convolve8_sse2), | 1648 make_tuple(16, 8, &convolve8_sse2), |
| 1605 make_tuple(8, 16, &convolve8_sse2), | 1649 make_tuple(8, 16, &convolve8_sse2), |
| 1606 make_tuple(16, 16, &convolve8_sse2), | 1650 make_tuple(16, 16, &convolve8_sse2), |
| 1607 make_tuple(32, 16, &convolve8_sse2), | 1651 make_tuple(32, 16, &convolve8_sse2), |
| 1608 make_tuple(16, 32, &convolve8_sse2), | 1652 make_tuple(16, 32, &convolve8_sse2), |
| 1609 make_tuple(32, 32, &convolve8_sse2), | 1653 make_tuple(32, 32, &convolve8_sse2), |
| 1610 make_tuple(64, 32, &convolve8_sse2), | 1654 make_tuple(64, 32, &convolve8_sse2), |
| 1611 make_tuple(32, 64, &convolve8_sse2), | 1655 make_tuple(32, 64, &convolve8_sse2), |
| 1612 make_tuple(64, 64, &convolve8_sse2))); | 1656 make_tuple(64, 64, &convolve8_sse2))); |
| 1613 #endif // CONFIG_VP9_HIGHBITDEPTH | 1657 #endif // CONFIG_VP9_HIGHBITDEPTH |
| 1614 #endif | 1658 #endif |
| 1615 | 1659 |
| 1616 #if HAVE_SSSE3 | 1660 #if HAVE_SSSE3 |
| 1617 const ConvolveFunctions convolve8_ssse3( | 1661 const ConvolveFunctions convolve8_ssse3( |
| 1618 vpx_convolve_copy_c, vpx_convolve_avg_c, | 1662 vpx_convolve_copy_c, vpx_convolve_avg_c, |
| 1619 vpx_convolve8_horiz_ssse3, vpx_convolve8_avg_horiz_ssse3, | 1663 vpx_convolve8_horiz_ssse3, vpx_convolve8_avg_horiz_ssse3, |
| 1620 vpx_convolve8_vert_ssse3, vpx_convolve8_avg_vert_ssse3, | 1664 vpx_convolve8_vert_ssse3, vpx_convolve8_avg_vert_ssse3, |
| 1621 vpx_convolve8_ssse3, vpx_convolve8_avg_ssse3, 0); | 1665 vpx_convolve8_ssse3, vpx_convolve8_avg_ssse3, |
| 1666 vpx_scaled_horiz_c, vpx_scaled_avg_horiz_c, |
| 1667 vpx_scaled_vert_c, vpx_scaled_avg_vert_c, |
| 1668 vpx_scaled_2d_c, vpx_scaled_avg_2d_c, 0); |
| 1622 | 1669 |
| 1623 INSTANTIATE_TEST_CASE_P(SSSE3, ConvolveTest, ::testing::Values( | 1670 INSTANTIATE_TEST_CASE_P(SSSE3, ConvolveTest, ::testing::Values( |
| 1624 make_tuple(4, 4, &convolve8_ssse3), | 1671 make_tuple(4, 4, &convolve8_ssse3), |
| 1625 make_tuple(8, 4, &convolve8_ssse3), | 1672 make_tuple(8, 4, &convolve8_ssse3), |
| 1626 make_tuple(4, 8, &convolve8_ssse3), | 1673 make_tuple(4, 8, &convolve8_ssse3), |
| 1627 make_tuple(8, 8, &convolve8_ssse3), | 1674 make_tuple(8, 8, &convolve8_ssse3), |
| 1628 make_tuple(16, 8, &convolve8_ssse3), | 1675 make_tuple(16, 8, &convolve8_ssse3), |
| 1629 make_tuple(8, 16, &convolve8_ssse3), | 1676 make_tuple(8, 16, &convolve8_ssse3), |
| 1630 make_tuple(16, 16, &convolve8_ssse3), | 1677 make_tuple(16, 16, &convolve8_ssse3), |
| 1631 make_tuple(32, 16, &convolve8_ssse3), | 1678 make_tuple(32, 16, &convolve8_ssse3), |
| 1632 make_tuple(16, 32, &convolve8_ssse3), | 1679 make_tuple(16, 32, &convolve8_ssse3), |
| 1633 make_tuple(32, 32, &convolve8_ssse3), | 1680 make_tuple(32, 32, &convolve8_ssse3), |
| 1634 make_tuple(64, 32, &convolve8_ssse3), | 1681 make_tuple(64, 32, &convolve8_ssse3), |
| 1635 make_tuple(32, 64, &convolve8_ssse3), | 1682 make_tuple(32, 64, &convolve8_ssse3), |
| 1636 make_tuple(64, 64, &convolve8_ssse3))); | 1683 make_tuple(64, 64, &convolve8_ssse3))); |
| 1637 #endif | 1684 #endif |
| 1638 | 1685 |
| 1639 #if HAVE_AVX2 && HAVE_SSSE3 | 1686 #if HAVE_AVX2 && HAVE_SSSE3 |
| 1640 const ConvolveFunctions convolve8_avx2( | 1687 const ConvolveFunctions convolve8_avx2( |
| 1641 vpx_convolve_copy_c, vpx_convolve_avg_c, | 1688 vpx_convolve_copy_c, vpx_convolve_avg_c, |
| 1642 vpx_convolve8_horiz_avx2, vpx_convolve8_avg_horiz_ssse3, | 1689 vpx_convolve8_horiz_avx2, vpx_convolve8_avg_horiz_ssse3, |
| 1643 vpx_convolve8_vert_avx2, vpx_convolve8_avg_vert_ssse3, | 1690 vpx_convolve8_vert_avx2, vpx_convolve8_avg_vert_ssse3, |
| 1644 vpx_convolve8_avx2, vpx_convolve8_avg_ssse3, 0); | 1691 vpx_convolve8_avx2, vpx_convolve8_avg_ssse3, |
| 1692 vpx_scaled_horiz_c, vpx_scaled_avg_horiz_c, |
| 1693 vpx_scaled_vert_c, vpx_scaled_avg_vert_c, |
| 1694 vpx_scaled_2d_c, vpx_scaled_avg_2d_c, 0); |
| 1645 | 1695 |
| 1646 INSTANTIATE_TEST_CASE_P(AVX2, ConvolveTest, ::testing::Values( | 1696 INSTANTIATE_TEST_CASE_P(AVX2, ConvolveTest, ::testing::Values( |
| 1647 make_tuple(4, 4, &convolve8_avx2), | 1697 make_tuple(4, 4, &convolve8_avx2), |
| 1648 make_tuple(8, 4, &convolve8_avx2), | 1698 make_tuple(8, 4, &convolve8_avx2), |
| 1649 make_tuple(4, 8, &convolve8_avx2), | 1699 make_tuple(4, 8, &convolve8_avx2), |
| 1650 make_tuple(8, 8, &convolve8_avx2), | 1700 make_tuple(8, 8, &convolve8_avx2), |
| 1651 make_tuple(8, 16, &convolve8_avx2), | 1701 make_tuple(8, 16, &convolve8_avx2), |
| 1652 make_tuple(16, 8, &convolve8_avx2), | 1702 make_tuple(16, 8, &convolve8_avx2), |
| 1653 make_tuple(16, 16, &convolve8_avx2), | 1703 make_tuple(16, 16, &convolve8_avx2), |
| 1654 make_tuple(32, 16, &convolve8_avx2), | 1704 make_tuple(32, 16, &convolve8_avx2), |
| 1655 make_tuple(16, 32, &convolve8_avx2), | 1705 make_tuple(16, 32, &convolve8_avx2), |
| 1656 make_tuple(32, 32, &convolve8_avx2), | 1706 make_tuple(32, 32, &convolve8_avx2), |
| 1657 make_tuple(64, 32, &convolve8_avx2), | 1707 make_tuple(64, 32, &convolve8_avx2), |
| 1658 make_tuple(32, 64, &convolve8_avx2), | 1708 make_tuple(32, 64, &convolve8_avx2), |
| 1659 make_tuple(64, 64, &convolve8_avx2))); | 1709 make_tuple(64, 64, &convolve8_avx2))); |
| 1660 #endif // HAVE_AVX2 && HAVE_SSSE3 | 1710 #endif // HAVE_AVX2 && HAVE_SSSE3 |
| 1661 | 1711 |
| 1662 #if HAVE_NEON | 1712 #if HAVE_NEON |
| 1663 #if HAVE_NEON_ASM | 1713 #if HAVE_NEON_ASM |
| 1664 const ConvolveFunctions convolve8_neon( | 1714 const ConvolveFunctions convolve8_neon( |
| 1665 vpx_convolve_copy_neon, vpx_convolve_avg_neon, | 1715 vpx_convolve_copy_neon, vpx_convolve_avg_neon, |
| 1666 vpx_convolve8_horiz_neon, vpx_convolve8_avg_horiz_neon, | 1716 vpx_convolve8_horiz_neon, vpx_convolve8_avg_horiz_neon, |
| 1667 vpx_convolve8_vert_neon, vpx_convolve8_avg_vert_neon, | 1717 vpx_convolve8_vert_neon, vpx_convolve8_avg_vert_neon, |
| 1668 vpx_convolve8_neon, vpx_convolve8_avg_neon, 0); | 1718 vpx_convolve8_neon, vpx_convolve8_avg_neon, |
| 1719 vpx_scaled_horiz_c, vpx_scaled_avg_horiz_c, |
| 1720 vpx_scaled_vert_c, vpx_scaled_avg_vert_c, |
| 1721 vpx_scaled_2d_c, vpx_scaled_avg_2d_c, 0); |
| 1669 #else // HAVE_NEON | 1722 #else // HAVE_NEON |
| 1670 const ConvolveFunctions convolve8_neon( | 1723 const ConvolveFunctions convolve8_neon( |
| 1671 vpx_convolve_copy_neon, vpx_convolve_avg_neon, | 1724 vpx_convolve_copy_neon, vpx_convolve_avg_neon, |
| 1672 vpx_convolve8_horiz_neon, vpx_convolve8_avg_horiz_neon, | 1725 vpx_convolve8_horiz_neon, vpx_convolve8_avg_horiz_neon, |
| 1673 vpx_convolve8_vert_neon, vpx_convolve8_avg_vert_neon, | 1726 vpx_convolve8_vert_neon, vpx_convolve8_avg_vert_neon, |
| 1674 vpx_convolve8_neon, vpx_convolve8_avg_neon, 0); | 1727 vpx_convolve8_neon, vpx_convolve8_avg_neon, |
| 1728 vpx_scaled_horiz_c, vpx_scaled_avg_horiz_c, |
| 1729 vpx_scaled_vert_c, vpx_scaled_avg_vert_c, |
| 1730 vpx_scaled_2d_c, vpx_scaled_avg_2d_c, 0); |
| 1675 #endif // HAVE_NEON_ASM | 1731 #endif // HAVE_NEON_ASM |
| 1676 | 1732 |
| 1677 INSTANTIATE_TEST_CASE_P(NEON, ConvolveTest, ::testing::Values( | 1733 INSTANTIATE_TEST_CASE_P(NEON, ConvolveTest, ::testing::Values( |
| 1678 make_tuple(4, 4, &convolve8_neon), | 1734 make_tuple(4, 4, &convolve8_neon), |
| 1679 make_tuple(8, 4, &convolve8_neon), | 1735 make_tuple(8, 4, &convolve8_neon), |
| 1680 make_tuple(4, 8, &convolve8_neon), | 1736 make_tuple(4, 8, &convolve8_neon), |
| 1681 make_tuple(8, 8, &convolve8_neon), | 1737 make_tuple(8, 8, &convolve8_neon), |
| 1682 make_tuple(16, 8, &convolve8_neon), | 1738 make_tuple(16, 8, &convolve8_neon), |
| 1683 make_tuple(8, 16, &convolve8_neon), | 1739 make_tuple(8, 16, &convolve8_neon), |
| 1684 make_tuple(16, 16, &convolve8_neon), | 1740 make_tuple(16, 16, &convolve8_neon), |
| 1685 make_tuple(32, 16, &convolve8_neon), | 1741 make_tuple(32, 16, &convolve8_neon), |
| 1686 make_tuple(16, 32, &convolve8_neon), | 1742 make_tuple(16, 32, &convolve8_neon), |
| 1687 make_tuple(32, 32, &convolve8_neon), | 1743 make_tuple(32, 32, &convolve8_neon), |
| 1688 make_tuple(64, 32, &convolve8_neon), | 1744 make_tuple(64, 32, &convolve8_neon), |
| 1689 make_tuple(32, 64, &convolve8_neon), | 1745 make_tuple(32, 64, &convolve8_neon), |
| 1690 make_tuple(64, 64, &convolve8_neon))); | 1746 make_tuple(64, 64, &convolve8_neon))); |
| 1691 #endif // HAVE_NEON | 1747 #endif // HAVE_NEON |
| 1692 | 1748 |
| 1693 #if HAVE_DSPR2 | 1749 #if HAVE_DSPR2 |
| 1694 const ConvolveFunctions convolve8_dspr2( | 1750 const ConvolveFunctions convolve8_dspr2( |
| 1695 vpx_convolve_copy_dspr2, vpx_convolve_avg_dspr2, | 1751 vpx_convolve_copy_dspr2, vpx_convolve_avg_dspr2, |
| 1696 vpx_convolve8_horiz_dspr2, vpx_convolve8_avg_horiz_dspr2, | 1752 vpx_convolve8_horiz_dspr2, vpx_convolve8_avg_horiz_dspr2, |
| 1697 vpx_convolve8_vert_dspr2, vpx_convolve8_avg_vert_dspr2, | 1753 vpx_convolve8_vert_dspr2, vpx_convolve8_avg_vert_dspr2, |
| 1698 vpx_convolve8_dspr2, vpx_convolve8_avg_dspr2, 0); | 1754 vpx_convolve8_dspr2, vpx_convolve8_avg_dspr2, |
| 1755 vpx_scaled_horiz_c, vpx_scaled_avg_horiz_c, |
| 1756 vpx_scaled_vert_c, vpx_scaled_avg_vert_c, |
| 1757 vpx_scaled_2d_c, vpx_scaled_avg_2d_c, 0); |
| 1699 | 1758 |
| 1700 INSTANTIATE_TEST_CASE_P(DSPR2, ConvolveTest, ::testing::Values( | 1759 INSTANTIATE_TEST_CASE_P(DSPR2, ConvolveTest, ::testing::Values( |
| 1701 make_tuple(4, 4, &convolve8_dspr2), | 1760 make_tuple(4, 4, &convolve8_dspr2), |
| 1702 make_tuple(8, 4, &convolve8_dspr2), | 1761 make_tuple(8, 4, &convolve8_dspr2), |
| 1703 make_tuple(4, 8, &convolve8_dspr2), | 1762 make_tuple(4, 8, &convolve8_dspr2), |
| 1704 make_tuple(8, 8, &convolve8_dspr2), | 1763 make_tuple(8, 8, &convolve8_dspr2), |
| 1705 make_tuple(16, 8, &convolve8_dspr2), | 1764 make_tuple(16, 8, &convolve8_dspr2), |
| 1706 make_tuple(8, 16, &convolve8_dspr2), | 1765 make_tuple(8, 16, &convolve8_dspr2), |
| 1707 make_tuple(16, 16, &convolve8_dspr2), | 1766 make_tuple(16, 16, &convolve8_dspr2), |
| 1708 make_tuple(32, 16, &convolve8_dspr2), | 1767 make_tuple(32, 16, &convolve8_dspr2), |
| 1709 make_tuple(16, 32, &convolve8_dspr2), | 1768 make_tuple(16, 32, &convolve8_dspr2), |
| 1710 make_tuple(32, 32, &convolve8_dspr2), | 1769 make_tuple(32, 32, &convolve8_dspr2), |
| 1711 make_tuple(64, 32, &convolve8_dspr2), | 1770 make_tuple(64, 32, &convolve8_dspr2), |
| 1712 make_tuple(32, 64, &convolve8_dspr2), | 1771 make_tuple(32, 64, &convolve8_dspr2), |
| 1713 make_tuple(64, 64, &convolve8_dspr2))); | 1772 make_tuple(64, 64, &convolve8_dspr2))); |
| 1714 #endif | 1773 #endif |
| 1715 | 1774 |
| 1716 #if HAVE_MSA | 1775 #if HAVE_MSA |
| 1717 const ConvolveFunctions convolve8_msa( | 1776 const ConvolveFunctions convolve8_msa( |
| 1718 vpx_convolve_copy_msa, vpx_convolve_avg_msa, | 1777 vpx_convolve_copy_msa, vpx_convolve_avg_msa, |
| 1719 vpx_convolve8_horiz_msa, vpx_convolve8_avg_horiz_msa, | 1778 vpx_convolve8_horiz_msa, vpx_convolve8_avg_horiz_msa, |
| 1720 vpx_convolve8_vert_msa, vpx_convolve8_avg_vert_msa, | 1779 vpx_convolve8_vert_msa, vpx_convolve8_avg_vert_msa, |
| 1721 vpx_convolve8_msa, vpx_convolve8_avg_msa, 0); | 1780 vpx_convolve8_msa, vpx_convolve8_avg_msa, |
| 1781 vpx_scaled_horiz_c, vpx_scaled_avg_horiz_c, |
| 1782 vpx_scaled_vert_c, vpx_scaled_avg_vert_c, |
| 1783 vpx_scaled_2d_c, vpx_scaled_avg_2d_c, 0); |
| 1722 | 1784 |
| 1723 INSTANTIATE_TEST_CASE_P(MSA, ConvolveTest, ::testing::Values( | 1785 INSTANTIATE_TEST_CASE_P(MSA, ConvolveTest, ::testing::Values( |
| 1724 make_tuple(4, 4, &convolve8_msa), | 1786 make_tuple(4, 4, &convolve8_msa), |
| 1725 make_tuple(8, 4, &convolve8_msa), | 1787 make_tuple(8, 4, &convolve8_msa), |
| 1726 make_tuple(4, 8, &convolve8_msa), | 1788 make_tuple(4, 8, &convolve8_msa), |
| 1727 make_tuple(8, 8, &convolve8_msa), | 1789 make_tuple(8, 8, &convolve8_msa), |
| 1728 make_tuple(16, 8, &convolve8_msa), | 1790 make_tuple(16, 8, &convolve8_msa), |
| 1729 make_tuple(8, 16, &convolve8_msa), | 1791 make_tuple(8, 16, &convolve8_msa), |
| 1730 make_tuple(16, 16, &convolve8_msa), | 1792 make_tuple(16, 16, &convolve8_msa), |
| 1731 make_tuple(32, 16, &convolve8_msa), | 1793 make_tuple(32, 16, &convolve8_msa), |
| 1732 make_tuple(16, 32, &convolve8_msa), | 1794 make_tuple(16, 32, &convolve8_msa), |
| 1733 make_tuple(32, 32, &convolve8_msa), | 1795 make_tuple(32, 32, &convolve8_msa), |
| 1734 make_tuple(64, 32, &convolve8_msa), | 1796 make_tuple(64, 32, &convolve8_msa), |
| 1735 make_tuple(32, 64, &convolve8_msa), | 1797 make_tuple(32, 64, &convolve8_msa), |
| 1736 make_tuple(64, 64, &convolve8_msa))); | 1798 make_tuple(64, 64, &convolve8_msa))); |
| 1737 #endif // HAVE_MSA | 1799 #endif // HAVE_MSA |
| 1738 } // namespace | 1800 } // namespace |
| OLD | NEW |