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

Side by Side Diff: media/base/yuv_convert_unittest.cc

Issue 263723004: Revert of Add correct support for videos with YUVJ420P color format, in the software conversion path. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@yuvnopic
Patch Set: Created 6 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 | « media/base/yuv_convert_perftest.cc ('k') | media/filters/skcanvas_video_renderer.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 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "base/base_paths.h" 5 #include "base/base_paths.h"
6 #include "base/cpu.h" 6 #include "base/cpu.h"
7 #include "base/file_util.h" 7 #include "base/file_util.h"
8 #include "base/logging.h" 8 #include "base/logging.h"
9 #include "base/path_service.h" 9 #include "base/path_service.h"
10 #include "media/base/djb2.h" 10 #include "media/base/djb2.h"
11 #include "media/base/simd/convert_rgb_to_yuv.h" 11 #include "media/base/simd/convert_rgb_to_yuv.h"
12 #include "media/base/simd/convert_yuv_to_rgb.h" 12 #include "media/base/simd/convert_yuv_to_rgb.h"
13 #include "media/base/simd/filter_yuv.h" 13 #include "media/base/simd/filter_yuv.h"
14 #include "media/base/simd/yuv_to_rgb_table.h"
15 #include "media/base/yuv_convert.h" 14 #include "media/base/yuv_convert.h"
16 #include "testing/gtest/include/gtest/gtest.h" 15 #include "testing/gtest/include/gtest/gtest.h"
17 #include "ui/gfx/rect.h" 16 #include "ui/gfx/rect.h"
18 17
19 // Size of raw image. 18 // Size of raw image.
20 static const int kSourceWidth = 640; 19 static const int kSourceWidth = 640;
21 static const int kSourceHeight = 360; 20 static const int kSourceHeight = 360;
22 static const int kSourceYSize = kSourceWidth * kSourceHeight; 21 static const int kSourceYSize = kSourceWidth * kSourceHeight;
23 static const int kSourceUOffset = kSourceYSize; 22 static const int kSourceUOffset = kSourceYSize;
24 static const int kSourceVOffset = kSourceYSize * 5 / 4; 23 static const int kSourceVOffset = kSourceYSize * 5 / 4;
(...skipping 131 matching lines...) Expand 10 before | Expand all | Expand 10 after
156 media::YUVType yuv_type; 155 media::YUVType yuv_type;
157 media::ScaleFilter scale_filter; 156 media::ScaleFilter scale_filter;
158 uint32 rgb_hash; 157 uint32 rgb_hash;
159 }; 158 };
160 159
161 class YUVScaleTest : public ::testing::TestWithParam<YUVScaleTestData> { 160 class YUVScaleTest : public ::testing::TestWithParam<YUVScaleTestData> {
162 public: 161 public:
163 YUVScaleTest() { 162 YUVScaleTest() {
164 switch (GetParam().yuv_type) { 163 switch (GetParam().yuv_type) {
165 case media::YV12: 164 case media::YV12:
166 case media::YV12J:
167 ReadYV12Data(&yuv_bytes_); 165 ReadYV12Data(&yuv_bytes_);
168 break; 166 break;
169 case media::YV16: 167 case media::YV16:
170 ReadYV16Data(&yuv_bytes_); 168 ReadYV16Data(&yuv_bytes_);
171 break; 169 break;
172 } 170 }
173 171
174 rgb_bytes_.reset(new uint8[kRGBSizeScaled]); 172 rgb_bytes_.reset(new uint8[kRGBSizeScaled]);
175 } 173 }
176 174
177 // Helpers for getting the proper Y, U and V plane offsets. 175 // Helpers for getting the proper Y, U and V plane offsets.
178 uint8* y_plane() { return yuv_bytes_.get(); } 176 uint8* y_plane() { return yuv_bytes_.get(); }
179 uint8* u_plane() { return yuv_bytes_.get() + kSourceYSize; } 177 uint8* u_plane() { return yuv_bytes_.get() + kSourceYSize; }
180 uint8* v_plane() { 178 uint8* v_plane() {
181 switch (GetParam().yuv_type) { 179 switch (GetParam().yuv_type) {
182 case media::YV12: 180 case media::YV12:
183 case media::YV12J:
184 return yuv_bytes_.get() + kSourceVOffset; 181 return yuv_bytes_.get() + kSourceVOffset;
185 case media::YV16: 182 case media::YV16:
186 return yuv_bytes_.get() + kSourceYSize * 3 / 2; 183 return yuv_bytes_.get() + kSourceYSize * 3 / 2;
187 } 184 }
188 return NULL; 185 return NULL;
189 } 186 }
190 187
191 scoped_ptr<uint8[]> yuv_bytes_; 188 scoped_ptr<uint8[]> yuv_bytes_;
192 scoped_ptr<uint8[]> rgb_bytes_; 189 scoped_ptr<uint8[]> rgb_bytes_;
193 }; 190 };
(...skipping 420 matching lines...) Expand 10 before | Expand all | Expand 10 after
614 scoped_ptr<uint8[]> yuv_bytes(new uint8[kYUV12Size]); 611 scoped_ptr<uint8[]> yuv_bytes(new uint8[kYUV12Size]);
615 scoped_ptr<uint8[]> rgb_bytes_reference(new uint8[kRGBSize]); 612 scoped_ptr<uint8[]> rgb_bytes_reference(new uint8[kRGBSize]);
616 scoped_ptr<uint8[]> rgb_bytes_converted(new uint8[kRGBSize]); 613 scoped_ptr<uint8[]> rgb_bytes_converted(new uint8[kRGBSize]);
617 ReadYV12Data(&yuv_bytes); 614 ReadYV12Data(&yuv_bytes);
618 615
619 const int kWidth = 167; 616 const int kWidth = 167;
620 ConvertYUVToRGB32Row_C(yuv_bytes.get(), 617 ConvertYUVToRGB32Row_C(yuv_bytes.get(),
621 yuv_bytes.get() + kSourceUOffset, 618 yuv_bytes.get() + kSourceUOffset,
622 yuv_bytes.get() + kSourceVOffset, 619 yuv_bytes.get() + kSourceVOffset,
623 rgb_bytes_reference.get(), 620 rgb_bytes_reference.get(),
624 kWidth, 621 kWidth);
625 GetLookupTable(YV12));
626 ConvertYUVToRGB32Row_MMX(yuv_bytes.get(), 622 ConvertYUVToRGB32Row_MMX(yuv_bytes.get(),
627 yuv_bytes.get() + kSourceUOffset, 623 yuv_bytes.get() + kSourceUOffset,
628 yuv_bytes.get() + kSourceVOffset, 624 yuv_bytes.get() + kSourceVOffset,
629 rgb_bytes_converted.get(), 625 rgb_bytes_converted.get(),
630 kWidth, 626 kWidth);
631 GetLookupTable(YV12));
632 media::EmptyRegisterState(); 627 media::EmptyRegisterState();
633 EXPECT_EQ(0, memcmp(rgb_bytes_reference.get(), 628 EXPECT_EQ(0, memcmp(rgb_bytes_reference.get(),
634 rgb_bytes_converted.get(), 629 rgb_bytes_converted.get(),
635 kWidth * kBpp)); 630 kWidth * kBpp));
636 } 631 }
637 632
638 TEST(YUVConvertTest, ConvertYUVToRGB32Row_SSE) { 633 TEST(YUVConvertTest, ConvertYUVToRGB32Row_SSE) {
639 base::CPU cpu; 634 base::CPU cpu;
640 if (!cpu.has_sse()) { 635 if (!cpu.has_sse()) {
641 LOG(WARNING) << "System not supported. Test skipped."; 636 LOG(WARNING) << "System not supported. Test skipped.";
642 return; 637 return;
643 } 638 }
644 639
645 scoped_ptr<uint8[]> yuv_bytes(new uint8[kYUV12Size]); 640 scoped_ptr<uint8[]> yuv_bytes(new uint8[kYUV12Size]);
646 scoped_ptr<uint8[]> rgb_bytes_reference(new uint8[kRGBSize]); 641 scoped_ptr<uint8[]> rgb_bytes_reference(new uint8[kRGBSize]);
647 scoped_ptr<uint8[]> rgb_bytes_converted(new uint8[kRGBSize]); 642 scoped_ptr<uint8[]> rgb_bytes_converted(new uint8[kRGBSize]);
648 ReadYV12Data(&yuv_bytes); 643 ReadYV12Data(&yuv_bytes);
649 644
650 const int kWidth = 167; 645 const int kWidth = 167;
651 ConvertYUVToRGB32Row_C(yuv_bytes.get(), 646 ConvertYUVToRGB32Row_C(yuv_bytes.get(),
652 yuv_bytes.get() + kSourceUOffset, 647 yuv_bytes.get() + kSourceUOffset,
653 yuv_bytes.get() + kSourceVOffset, 648 yuv_bytes.get() + kSourceVOffset,
654 rgb_bytes_reference.get(), 649 rgb_bytes_reference.get(),
655 kWidth, 650 kWidth);
656 GetLookupTable(YV12));
657 ConvertYUVToRGB32Row_SSE(yuv_bytes.get(), 651 ConvertYUVToRGB32Row_SSE(yuv_bytes.get(),
658 yuv_bytes.get() + kSourceUOffset, 652 yuv_bytes.get() + kSourceUOffset,
659 yuv_bytes.get() + kSourceVOffset, 653 yuv_bytes.get() + kSourceVOffset,
660 rgb_bytes_converted.get(), 654 rgb_bytes_converted.get(),
661 kWidth, 655 kWidth);
662 GetLookupTable(YV12));
663 media::EmptyRegisterState(); 656 media::EmptyRegisterState();
664 EXPECT_EQ(0, memcmp(rgb_bytes_reference.get(), 657 EXPECT_EQ(0, memcmp(rgb_bytes_reference.get(),
665 rgb_bytes_converted.get(), 658 rgb_bytes_converted.get(),
666 kWidth * kBpp)); 659 kWidth * kBpp));
667 } 660 }
668 661
669 TEST(YUVConvertTest, ScaleYUVToRGB32Row_MMX) { 662 TEST(YUVConvertTest, ScaleYUVToRGB32Row_MMX) {
670 base::CPU cpu; 663 base::CPU cpu;
671 if (!cpu.has_mmx()) { 664 if (!cpu.has_mmx()) {
672 LOG(WARNING) << "System not supported. Test skipped."; 665 LOG(WARNING) << "System not supported. Test skipped.";
673 return; 666 return;
674 } 667 }
675 668
676 scoped_ptr<uint8[]> yuv_bytes(new uint8[kYUV12Size]); 669 scoped_ptr<uint8[]> yuv_bytes(new uint8[kYUV12Size]);
677 scoped_ptr<uint8[]> rgb_bytes_reference(new uint8[kRGBSize]); 670 scoped_ptr<uint8[]> rgb_bytes_reference(new uint8[kRGBSize]);
678 scoped_ptr<uint8[]> rgb_bytes_converted(new uint8[kRGBSize]); 671 scoped_ptr<uint8[]> rgb_bytes_converted(new uint8[kRGBSize]);
679 ReadYV12Data(&yuv_bytes); 672 ReadYV12Data(&yuv_bytes);
680 673
681 const int kWidth = 167; 674 const int kWidth = 167;
682 const int kSourceDx = 80000; // This value means a scale down. 675 const int kSourceDx = 80000; // This value means a scale down.
683 ScaleYUVToRGB32Row_C(yuv_bytes.get(), 676 ScaleYUVToRGB32Row_C(yuv_bytes.get(),
684 yuv_bytes.get() + kSourceUOffset, 677 yuv_bytes.get() + kSourceUOffset,
685 yuv_bytes.get() + kSourceVOffset, 678 yuv_bytes.get() + kSourceVOffset,
686 rgb_bytes_reference.get(), 679 rgb_bytes_reference.get(),
687 kWidth, 680 kWidth,
688 kSourceDx, 681 kSourceDx);
689 GetLookupTable(YV12));
690 ScaleYUVToRGB32Row_MMX(yuv_bytes.get(), 682 ScaleYUVToRGB32Row_MMX(yuv_bytes.get(),
691 yuv_bytes.get() + kSourceUOffset, 683 yuv_bytes.get() + kSourceUOffset,
692 yuv_bytes.get() + kSourceVOffset, 684 yuv_bytes.get() + kSourceVOffset,
693 rgb_bytes_converted.get(), 685 rgb_bytes_converted.get(),
694 kWidth, 686 kWidth,
695 kSourceDx, 687 kSourceDx);
696 GetLookupTable(YV12));
697 media::EmptyRegisterState(); 688 media::EmptyRegisterState();
698 EXPECT_EQ(0, memcmp(rgb_bytes_reference.get(), 689 EXPECT_EQ(0, memcmp(rgb_bytes_reference.get(),
699 rgb_bytes_converted.get(), 690 rgb_bytes_converted.get(),
700 kWidth * kBpp)); 691 kWidth * kBpp));
701 } 692 }
702 693
703 TEST(YUVConvertTest, ScaleYUVToRGB32Row_SSE) { 694 TEST(YUVConvertTest, ScaleYUVToRGB32Row_SSE) {
704 base::CPU cpu; 695 base::CPU cpu;
705 if (!cpu.has_sse()) { 696 if (!cpu.has_sse()) {
706 LOG(WARNING) << "System not supported. Test skipped."; 697 LOG(WARNING) << "System not supported. Test skipped.";
707 return; 698 return;
708 } 699 }
709 700
710 scoped_ptr<uint8[]> yuv_bytes(new uint8[kYUV12Size]); 701 scoped_ptr<uint8[]> yuv_bytes(new uint8[kYUV12Size]);
711 scoped_ptr<uint8[]> rgb_bytes_reference(new uint8[kRGBSize]); 702 scoped_ptr<uint8[]> rgb_bytes_reference(new uint8[kRGBSize]);
712 scoped_ptr<uint8[]> rgb_bytes_converted(new uint8[kRGBSize]); 703 scoped_ptr<uint8[]> rgb_bytes_converted(new uint8[kRGBSize]);
713 ReadYV12Data(&yuv_bytes); 704 ReadYV12Data(&yuv_bytes);
714 705
715 const int kWidth = 167; 706 const int kWidth = 167;
716 const int kSourceDx = 80000; // This value means a scale down. 707 const int kSourceDx = 80000; // This value means a scale down.
717 ScaleYUVToRGB32Row_C(yuv_bytes.get(), 708 ScaleYUVToRGB32Row_C(yuv_bytes.get(),
718 yuv_bytes.get() + kSourceUOffset, 709 yuv_bytes.get() + kSourceUOffset,
719 yuv_bytes.get() + kSourceVOffset, 710 yuv_bytes.get() + kSourceVOffset,
720 rgb_bytes_reference.get(), 711 rgb_bytes_reference.get(),
721 kWidth, 712 kWidth,
722 kSourceDx, 713 kSourceDx);
723 GetLookupTable(YV12));
724 ScaleYUVToRGB32Row_SSE(yuv_bytes.get(), 714 ScaleYUVToRGB32Row_SSE(yuv_bytes.get(),
725 yuv_bytes.get() + kSourceUOffset, 715 yuv_bytes.get() + kSourceUOffset,
726 yuv_bytes.get() + kSourceVOffset, 716 yuv_bytes.get() + kSourceVOffset,
727 rgb_bytes_converted.get(), 717 rgb_bytes_converted.get(),
728 kWidth, 718 kWidth,
729 kSourceDx, 719 kSourceDx);
730 GetLookupTable(YV12));
731 media::EmptyRegisterState(); 720 media::EmptyRegisterState();
732 EXPECT_EQ(0, memcmp(rgb_bytes_reference.get(), 721 EXPECT_EQ(0, memcmp(rgb_bytes_reference.get(),
733 rgb_bytes_converted.get(), 722 rgb_bytes_converted.get(),
734 kWidth * kBpp)); 723 kWidth * kBpp));
735 } 724 }
736 725
737 TEST(YUVConvertTest, LinearScaleYUVToRGB32Row_MMX) { 726 TEST(YUVConvertTest, LinearScaleYUVToRGB32Row_MMX) {
738 base::CPU cpu; 727 base::CPU cpu;
739 if (!cpu.has_mmx()) { 728 if (!cpu.has_mmx()) {
740 LOG(WARNING) << "System not supported. Test skipped."; 729 LOG(WARNING) << "System not supported. Test skipped.";
741 return; 730 return;
742 } 731 }
743 732
744 scoped_ptr<uint8[]> yuv_bytes(new uint8[kYUV12Size]); 733 scoped_ptr<uint8[]> yuv_bytes(new uint8[kYUV12Size]);
745 scoped_ptr<uint8[]> rgb_bytes_reference(new uint8[kRGBSize]); 734 scoped_ptr<uint8[]> rgb_bytes_reference(new uint8[kRGBSize]);
746 scoped_ptr<uint8[]> rgb_bytes_converted(new uint8[kRGBSize]); 735 scoped_ptr<uint8[]> rgb_bytes_converted(new uint8[kRGBSize]);
747 ReadYV12Data(&yuv_bytes); 736 ReadYV12Data(&yuv_bytes);
748 737
749 const int kWidth = 167; 738 const int kWidth = 167;
750 const int kSourceDx = 80000; // This value means a scale down. 739 const int kSourceDx = 80000; // This value means a scale down.
751 LinearScaleYUVToRGB32Row_C(yuv_bytes.get(), 740 LinearScaleYUVToRGB32Row_C(yuv_bytes.get(),
752 yuv_bytes.get() + kSourceUOffset, 741 yuv_bytes.get() + kSourceUOffset,
753 yuv_bytes.get() + kSourceVOffset, 742 yuv_bytes.get() + kSourceVOffset,
754 rgb_bytes_reference.get(), 743 rgb_bytes_reference.get(),
755 kWidth, 744 kWidth,
756 kSourceDx, 745 kSourceDx);
757 GetLookupTable(YV12));
758 LinearScaleYUVToRGB32Row_MMX(yuv_bytes.get(), 746 LinearScaleYUVToRGB32Row_MMX(yuv_bytes.get(),
759 yuv_bytes.get() + kSourceUOffset, 747 yuv_bytes.get() + kSourceUOffset,
760 yuv_bytes.get() + kSourceVOffset, 748 yuv_bytes.get() + kSourceVOffset,
761 rgb_bytes_converted.get(), 749 rgb_bytes_converted.get(),
762 kWidth, 750 kWidth,
763 kSourceDx, 751 kSourceDx);
764 GetLookupTable(YV12));
765 media::EmptyRegisterState(); 752 media::EmptyRegisterState();
766 EXPECT_EQ(0, memcmp(rgb_bytes_reference.get(), 753 EXPECT_EQ(0, memcmp(rgb_bytes_reference.get(),
767 rgb_bytes_converted.get(), 754 rgb_bytes_converted.get(),
768 kWidth * kBpp)); 755 kWidth * kBpp));
769 } 756 }
770 757
771 TEST(YUVConvertTest, LinearScaleYUVToRGB32Row_SSE) { 758 TEST(YUVConvertTest, LinearScaleYUVToRGB32Row_SSE) {
772 base::CPU cpu; 759 base::CPU cpu;
773 if (!cpu.has_sse()) { 760 if (!cpu.has_sse()) {
774 LOG(WARNING) << "System not supported. Test skipped."; 761 LOG(WARNING) << "System not supported. Test skipped.";
775 return; 762 return;
776 } 763 }
777 764
778 scoped_ptr<uint8[]> yuv_bytes(new uint8[kYUV12Size]); 765 scoped_ptr<uint8[]> yuv_bytes(new uint8[kYUV12Size]);
779 scoped_ptr<uint8[]> rgb_bytes_reference(new uint8[kRGBSize]); 766 scoped_ptr<uint8[]> rgb_bytes_reference(new uint8[kRGBSize]);
780 scoped_ptr<uint8[]> rgb_bytes_converted(new uint8[kRGBSize]); 767 scoped_ptr<uint8[]> rgb_bytes_converted(new uint8[kRGBSize]);
781 ReadYV12Data(&yuv_bytes); 768 ReadYV12Data(&yuv_bytes);
782 769
783 const int kWidth = 167; 770 const int kWidth = 167;
784 const int kSourceDx = 80000; // This value means a scale down. 771 const int kSourceDx = 80000; // This value means a scale down.
785 LinearScaleYUVToRGB32Row_C(yuv_bytes.get(), 772 LinearScaleYUVToRGB32Row_C(yuv_bytes.get(),
786 yuv_bytes.get() + kSourceUOffset, 773 yuv_bytes.get() + kSourceUOffset,
787 yuv_bytes.get() + kSourceVOffset, 774 yuv_bytes.get() + kSourceVOffset,
788 rgb_bytes_reference.get(), 775 rgb_bytes_reference.get(),
789 kWidth, 776 kWidth,
790 kSourceDx, 777 kSourceDx);
791 GetLookupTable(YV12));
792 LinearScaleYUVToRGB32Row_SSE(yuv_bytes.get(), 778 LinearScaleYUVToRGB32Row_SSE(yuv_bytes.get(),
793 yuv_bytes.get() + kSourceUOffset, 779 yuv_bytes.get() + kSourceUOffset,
794 yuv_bytes.get() + kSourceVOffset, 780 yuv_bytes.get() + kSourceVOffset,
795 rgb_bytes_converted.get(), 781 rgb_bytes_converted.get(),
796 kWidth, 782 kWidth,
797 kSourceDx, 783 kSourceDx);
798 GetLookupTable(YV12));
799 media::EmptyRegisterState(); 784 media::EmptyRegisterState();
800 EXPECT_EQ(0, memcmp(rgb_bytes_reference.get(), 785 EXPECT_EQ(0, memcmp(rgb_bytes_reference.get(),
801 rgb_bytes_converted.get(), 786 rgb_bytes_converted.get(),
802 kWidth * kBpp)); 787 kWidth * kBpp));
803 } 788 }
804 789
805 TEST(YUVConvertTest, FilterYUVRows_C_OutOfBounds) { 790 TEST(YUVConvertTest, FilterYUVRows_C_OutOfBounds) {
806 scoped_ptr<uint8[]> src(new uint8[16]); 791 scoped_ptr<uint8[]> src(new uint8[16]);
807 scoped_ptr<uint8[]> dst(new uint8[16]); 792 scoped_ptr<uint8[]> dst(new uint8[16]);
808 793
(...skipping 123 matching lines...) Expand 10 before | Expand all | Expand 10 after
932 scoped_ptr<uint8[]> rgb_bytes_converted(new uint8[kRGBSize]); 917 scoped_ptr<uint8[]> rgb_bytes_converted(new uint8[kRGBSize]);
933 ReadYV12Data(&yuv_bytes); 918 ReadYV12Data(&yuv_bytes);
934 919
935 const int kWidth = 167; 920 const int kWidth = 167;
936 const int kSourceDx = 80000; // This value means a scale down. 921 const int kSourceDx = 80000; // This value means a scale down.
937 ScaleYUVToRGB32Row_C(yuv_bytes.get(), 922 ScaleYUVToRGB32Row_C(yuv_bytes.get(),
938 yuv_bytes.get() + kSourceUOffset, 923 yuv_bytes.get() + kSourceUOffset,
939 yuv_bytes.get() + kSourceVOffset, 924 yuv_bytes.get() + kSourceVOffset,
940 rgb_bytes_reference.get(), 925 rgb_bytes_reference.get(),
941 kWidth, 926 kWidth,
942 kSourceDx, 927 kSourceDx);
943 GetLookupTable(YV12));
944 ScaleYUVToRGB32Row_SSE2_X64(yuv_bytes.get(), 928 ScaleYUVToRGB32Row_SSE2_X64(yuv_bytes.get(),
945 yuv_bytes.get() + kSourceUOffset, 929 yuv_bytes.get() + kSourceUOffset,
946 yuv_bytes.get() + kSourceVOffset, 930 yuv_bytes.get() + kSourceVOffset,
947 rgb_bytes_converted.get(), 931 rgb_bytes_converted.get(),
948 kWidth, 932 kWidth,
949 kSourceDx, 933 kSourceDx);
950 GetLookupTable(YV12));
951 media::EmptyRegisterState(); 934 media::EmptyRegisterState();
952 EXPECT_EQ(0, memcmp(rgb_bytes_reference.get(), 935 EXPECT_EQ(0, memcmp(rgb_bytes_reference.get(),
953 rgb_bytes_converted.get(), 936 rgb_bytes_converted.get(),
954 kWidth * kBpp)); 937 kWidth * kBpp));
955 } 938 }
956 939
957 TEST(YUVConvertTest, LinearScaleYUVToRGB32Row_MMX_X64) { 940 TEST(YUVConvertTest, LinearScaleYUVToRGB32Row_MMX_X64) {
958 scoped_ptr<uint8[]> yuv_bytes(new uint8[kYUV12Size]); 941 scoped_ptr<uint8[]> yuv_bytes(new uint8[kYUV12Size]);
959 scoped_ptr<uint8[]> rgb_bytes_reference(new uint8[kRGBSize]); 942 scoped_ptr<uint8[]> rgb_bytes_reference(new uint8[kRGBSize]);
960 scoped_ptr<uint8[]> rgb_bytes_converted(new uint8[kRGBSize]); 943 scoped_ptr<uint8[]> rgb_bytes_converted(new uint8[kRGBSize]);
961 ReadYV12Data(&yuv_bytes); 944 ReadYV12Data(&yuv_bytes);
962 945
963 const int kWidth = 167; 946 const int kWidth = 167;
964 const int kSourceDx = 80000; // This value means a scale down. 947 const int kSourceDx = 80000; // This value means a scale down.
965 LinearScaleYUVToRGB32Row_C(yuv_bytes.get(), 948 LinearScaleYUVToRGB32Row_C(yuv_bytes.get(),
966 yuv_bytes.get() + kSourceUOffset, 949 yuv_bytes.get() + kSourceUOffset,
967 yuv_bytes.get() + kSourceVOffset, 950 yuv_bytes.get() + kSourceVOffset,
968 rgb_bytes_reference.get(), 951 rgb_bytes_reference.get(),
969 kWidth, 952 kWidth,
970 kSourceDx, 953 kSourceDx);
971 GetLookupTable(YV12));
972 LinearScaleYUVToRGB32Row_MMX_X64(yuv_bytes.get(), 954 LinearScaleYUVToRGB32Row_MMX_X64(yuv_bytes.get(),
973 yuv_bytes.get() + kSourceUOffset, 955 yuv_bytes.get() + kSourceUOffset,
974 yuv_bytes.get() + kSourceVOffset, 956 yuv_bytes.get() + kSourceVOffset,
975 rgb_bytes_converted.get(), 957 rgb_bytes_converted.get(),
976 kWidth, 958 kWidth,
977 kSourceDx, 959 kSourceDx);
978 GetLookupTable(YV12));
979 media::EmptyRegisterState(); 960 media::EmptyRegisterState();
980 EXPECT_EQ(0, memcmp(rgb_bytes_reference.get(), 961 EXPECT_EQ(0, memcmp(rgb_bytes_reference.get(),
981 rgb_bytes_converted.get(), 962 rgb_bytes_converted.get(),
982 kWidth * kBpp)); 963 kWidth * kBpp));
983 } 964 }
984 965
985 #endif // defined(ARCH_CPU_X86_64) 966 #endif // defined(ARCH_CPU_X86_64)
986 967
987 #endif // defined(ARCH_CPU_X86_FAMILY) 968 #endif // defined(ARCH_CPU_X86_FAMILY)
988 969
989 } // namespace media 970 } // namespace media
OLDNEW
« no previous file with comments | « media/base/yuv_convert_perftest.cc ('k') | media/filters/skcanvas_video_renderer.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698