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

Side by Side Diff: source/convert.cc

Issue 2595333002: Libyuv MIPS DSPR2 optimizations. (Closed)
Patch Set: Created 3 years, 12 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 | « include/libyuv/scale_row.h ('k') | source/convert_argb.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 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 561 matching lines...) Expand 10 before | Expand all | Expand 10 after
572 } 572 }
573 #endif 573 #endif
574 #if defined(HAS_ARGBTOUVROW_NEON) 574 #if defined(HAS_ARGBTOUVROW_NEON)
575 if (TestCpuFlag(kCpuHasNEON)) { 575 if (TestCpuFlag(kCpuHasNEON)) {
576 ARGBToUVRow = ARGBToUVRow_Any_NEON; 576 ARGBToUVRow = ARGBToUVRow_Any_NEON;
577 if (IS_ALIGNED(width, 16)) { 577 if (IS_ALIGNED(width, 16)) {
578 ARGBToUVRow = ARGBToUVRow_NEON; 578 ARGBToUVRow = ARGBToUVRow_NEON;
579 } 579 }
580 } 580 }
581 #endif 581 #endif
582 #if defined(HAS_ARGBTOYROW_DSPR2)
583 if (TestCpuFlag(kCpuHasDSPR2)) {
584 ARGBToYRow = ARGBToYRow_Any_DSPR2;
585 if (IS_ALIGNED(width, 8)) {
586 ARGBToYRow = ARGBToYRow_DSPR2;
587 }
588 }
589 #endif
582 #if defined(HAS_ARGBTOYROW_MSA) 590 #if defined(HAS_ARGBTOYROW_MSA)
583 if (TestCpuFlag(kCpuHasMSA)) { 591 if (TestCpuFlag(kCpuHasMSA)) {
584 ARGBToYRow = ARGBToYRow_Any_MSA; 592 ARGBToYRow = ARGBToYRow_Any_MSA;
585 if (IS_ALIGNED(width, 16)) { 593 if (IS_ALIGNED(width, 16)) {
586 ARGBToYRow = ARGBToYRow_MSA; 594 ARGBToYRow = ARGBToYRow_MSA;
587 } 595 }
588 } 596 }
589 #endif 597 #endif
598 #if defined(HAS_ARGBTOUVROW_DSPR2)
599 if (TestCpuFlag(kCpuHasDSPR2)) {
600 ARGBToUVRow = ARGBToUVRow_Any_DSPR2;
601 if (IS_ALIGNED(width, 16)) {
602 ARGBToUVRow = ARGBToUVRow_DSPR2;
603 }
604 }
605 #endif
590 #if defined(HAS_ARGBTOUVROW_MSA) 606 #if defined(HAS_ARGBTOUVROW_MSA)
591 if (TestCpuFlag(kCpuHasMSA)) { 607 if (TestCpuFlag(kCpuHasMSA)) {
592 ARGBToUVRow = ARGBToUVRow_Any_MSA; 608 ARGBToUVRow = ARGBToUVRow_Any_MSA;
593 if (IS_ALIGNED(width, 32)) { 609 if (IS_ALIGNED(width, 32)) {
594 ARGBToUVRow = ARGBToUVRow_MSA; 610 ARGBToUVRow = ARGBToUVRow_MSA;
595 } 611 }
596 } 612 }
597 #endif 613 #endif
598 614
599 for (y = 0; y < height - 1; y += 2) { 615 for (y = 0; y < height - 1; y += 2) {
(...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after
657 } 673 }
658 #endif 674 #endif
659 #if defined(HAS_BGRATOUVROW_NEON) 675 #if defined(HAS_BGRATOUVROW_NEON)
660 if (TestCpuFlag(kCpuHasNEON)) { 676 if (TestCpuFlag(kCpuHasNEON)) {
661 BGRAToUVRow = BGRAToUVRow_Any_NEON; 677 BGRAToUVRow = BGRAToUVRow_Any_NEON;
662 if (IS_ALIGNED(width, 16)) { 678 if (IS_ALIGNED(width, 16)) {
663 BGRAToUVRow = BGRAToUVRow_NEON; 679 BGRAToUVRow = BGRAToUVRow_NEON;
664 } 680 }
665 } 681 }
666 #endif 682 #endif
683 #if defined(HAS_BGRATOYROW_DSPR2)
684 if (TestCpuFlag(kCpuHasDSPR2)) {
685 BGRAToYRow = BGRAToYRow_Any_DSPR2;
686 if (IS_ALIGNED(width, 8)) {
687 BGRAToYRow = BGRAToYRow_DSPR2;
688 }
689 }
690 #endif
691 #if defined(HAS_BGRATOUVROW_DSPR2)
692 if (TestCpuFlag(kCpuHasDSPR2)) {
693 BGRAToUVRow = BGRAToUVRow_Any_DSPR2;
694 if (IS_ALIGNED(width, 16)) {
695 BGRAToUVRow = BGRAToUVRow_DSPR2;
696 }
697 }
698 #endif
667 699
668 for (y = 0; y < height - 1; y += 2) { 700 for (y = 0; y < height - 1; y += 2) {
669 BGRAToUVRow(src_bgra, src_stride_bgra, dst_u, dst_v, width); 701 BGRAToUVRow(src_bgra, src_stride_bgra, dst_u, dst_v, width);
670 BGRAToYRow(src_bgra, dst_y, width); 702 BGRAToYRow(src_bgra, dst_y, width);
671 BGRAToYRow(src_bgra + src_stride_bgra, dst_y + dst_stride_y, width); 703 BGRAToYRow(src_bgra + src_stride_bgra, dst_y + dst_stride_y, width);
672 src_bgra += src_stride_bgra * 2; 704 src_bgra += src_stride_bgra * 2;
673 dst_y += dst_stride_y * 2; 705 dst_y += dst_stride_y * 2;
674 dst_u += dst_stride_u; 706 dst_u += dst_stride_u;
675 dst_v += dst_stride_v; 707 dst_v += dst_stride_v;
676 } 708 }
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after
726 } 758 }
727 #endif 759 #endif
728 #if defined(HAS_ABGRTOUVROW_NEON) 760 #if defined(HAS_ABGRTOUVROW_NEON)
729 if (TestCpuFlag(kCpuHasNEON)) { 761 if (TestCpuFlag(kCpuHasNEON)) {
730 ABGRToUVRow = ABGRToUVRow_Any_NEON; 762 ABGRToUVRow = ABGRToUVRow_Any_NEON;
731 if (IS_ALIGNED(width, 16)) { 763 if (IS_ALIGNED(width, 16)) {
732 ABGRToUVRow = ABGRToUVRow_NEON; 764 ABGRToUVRow = ABGRToUVRow_NEON;
733 } 765 }
734 } 766 }
735 #endif 767 #endif
768 #if defined(HAS_ABGRTOYROW_DSPR2)
769 if (TestCpuFlag(kCpuHasDSPR2)) {
770 ABGRToYRow = ABGRToYRow_Any_DSPR2;
771 if (IS_ALIGNED(width, 8)) {
772 ABGRToYRow = ABGRToYRow_DSPR2;
773 }
774 }
775 #endif
776 #if defined(HAS_ABGRTOUVROW_DSPR2)
777 if (TestCpuFlag(kCpuHasDSPR2)) {
778 ABGRToUVRow = ABGRToUVRow_Any_DSPR2;
779 if (IS_ALIGNED(width, 16)) {
780 ABGRToUVRow = ABGRToUVRow_DSPR2;
781 }
782 }
783 #endif
736 784
737 for (y = 0; y < height - 1; y += 2) { 785 for (y = 0; y < height - 1; y += 2) {
738 ABGRToUVRow(src_abgr, src_stride_abgr, dst_u, dst_v, width); 786 ABGRToUVRow(src_abgr, src_stride_abgr, dst_u, dst_v, width);
739 ABGRToYRow(src_abgr, dst_y, width); 787 ABGRToYRow(src_abgr, dst_y, width);
740 ABGRToYRow(src_abgr + src_stride_abgr, dst_y + dst_stride_y, width); 788 ABGRToYRow(src_abgr + src_stride_abgr, dst_y + dst_stride_y, width);
741 src_abgr += src_stride_abgr * 2; 789 src_abgr += src_stride_abgr * 2;
742 dst_y += dst_stride_y * 2; 790 dst_y += dst_stride_y * 2;
743 dst_u += dst_stride_u; 791 dst_u += dst_stride_u;
744 dst_v += dst_stride_v; 792 dst_v += dst_stride_v;
745 } 793 }
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after
795 } 843 }
796 #endif 844 #endif
797 #if defined(HAS_RGBATOUVROW_NEON) 845 #if defined(HAS_RGBATOUVROW_NEON)
798 if (TestCpuFlag(kCpuHasNEON)) { 846 if (TestCpuFlag(kCpuHasNEON)) {
799 RGBAToUVRow = RGBAToUVRow_Any_NEON; 847 RGBAToUVRow = RGBAToUVRow_Any_NEON;
800 if (IS_ALIGNED(width, 16)) { 848 if (IS_ALIGNED(width, 16)) {
801 RGBAToUVRow = RGBAToUVRow_NEON; 849 RGBAToUVRow = RGBAToUVRow_NEON;
802 } 850 }
803 } 851 }
804 #endif 852 #endif
853 #if defined(HAS_RGBATOYROW_DSPR2)
854 if (TestCpuFlag(kCpuHasDSPR2)) {
855 RGBAToYRow = RGBAToYRow_Any_DSPR2;
856 if (IS_ALIGNED(width, 8)) {
857 RGBAToYRow = RGBAToYRow_DSPR2;
858 }
859 }
860 #endif
861 #if defined(HAS_RGBATOUVROW_DSPR2)
862 if (TestCpuFlag(kCpuHasDSPR2)) {
863 RGBAToUVRow = RGBAToUVRow_Any_DSPR2;
864 if (IS_ALIGNED(width, 16)) {
865 RGBAToUVRow = RGBAToUVRow_DSPR2;
866 }
867 }
868 #endif
805 869
806 for (y = 0; y < height - 1; y += 2) { 870 for (y = 0; y < height - 1; y += 2) {
807 RGBAToUVRow(src_rgba, src_stride_rgba, dst_u, dst_v, width); 871 RGBAToUVRow(src_rgba, src_stride_rgba, dst_u, dst_v, width);
808 RGBAToYRow(src_rgba, dst_y, width); 872 RGBAToYRow(src_rgba, dst_y, width);
809 RGBAToYRow(src_rgba + src_stride_rgba, dst_y + dst_stride_y, width); 873 RGBAToYRow(src_rgba + src_stride_rgba, dst_y + dst_stride_y, width);
810 src_rgba += src_stride_rgba * 2; 874 src_rgba += src_stride_rgba * 2;
811 dst_y += dst_stride_y * 2; 875 dst_y += dst_stride_y * 2;
812 dst_u += dst_stride_u; 876 dst_u += dst_stride_u;
813 dst_v += dst_stride_v; 877 dst_v += dst_stride_v;
814 } 878 }
(...skipping 193 matching lines...) Expand 10 before | Expand all | Expand 10 after
1008 #if defined(HAS_ARGBTOYROW_AVX2) && defined(HAS_ARGBTOUVROW_AVX2) 1072 #if defined(HAS_ARGBTOYROW_AVX2) && defined(HAS_ARGBTOUVROW_AVX2)
1009 if (TestCpuFlag(kCpuHasAVX2)) { 1073 if (TestCpuFlag(kCpuHasAVX2)) {
1010 ARGBToUVRow = ARGBToUVRow_Any_AVX2; 1074 ARGBToUVRow = ARGBToUVRow_Any_AVX2;
1011 ARGBToYRow = ARGBToYRow_Any_AVX2; 1075 ARGBToYRow = ARGBToYRow_Any_AVX2;
1012 if (IS_ALIGNED(width, 32)) { 1076 if (IS_ALIGNED(width, 32)) {
1013 ARGBToUVRow = ARGBToUVRow_AVX2; 1077 ARGBToUVRow = ARGBToUVRow_AVX2;
1014 ARGBToYRow = ARGBToYRow_AVX2; 1078 ARGBToYRow = ARGBToYRow_AVX2;
1015 } 1079 }
1016 } 1080 }
1017 #endif 1081 #endif
1082 #if defined(HAS_RAWTOARGBROW_DSPR2)
1083 if (TestCpuFlag(kCpuHasDSPR2)) {
1084 RAWToARGBRow = RAWToARGBRow_Any_DSPR2;
1085 if (IS_ALIGNED(width, 4)) {
1086 RAWToARGBRow = RAWToARGBRow_DSPR2;
1087 }
1088 }
1089 #endif
1018 { 1090 {
1019 // Allocate 2 rows of ARGB. 1091 // Allocate 2 rows of ARGB.
1020 const int kRowSize = (width * 4 + 31) & ~31; 1092 const int kRowSize = (width * 4 + 31) & ~31;
1021 align_buffer_64(row, kRowSize * 2); 1093 align_buffer_64(row, kRowSize * 2);
1022 #endif 1094 #endif
1023 1095
1024 for (y = 0; y < height - 1; y += 2) { 1096 for (y = 0; y < height - 1; y += 2) {
1025 #if defined(HAS_RAWTOYROW_NEON) 1097 #if defined(HAS_RAWTOYROW_NEON)
1026 RAWToUVRow(src_raw, src_stride_raw, dst_u, dst_v, width); 1098 RAWToUVRow(src_raw, src_stride_raw, dst_u, dst_v, width);
1027 RAWToYRow(src_raw, dst_y, width); 1099 RAWToYRow(src_raw, dst_y, width);
(...skipping 108 matching lines...) Expand 10 before | Expand all | Expand 10 after
1136 #if defined(HAS_ARGBTOYROW_AVX2) && defined(HAS_ARGBTOUVROW_AVX2) 1208 #if defined(HAS_ARGBTOYROW_AVX2) && defined(HAS_ARGBTOUVROW_AVX2)
1137 if (TestCpuFlag(kCpuHasAVX2)) { 1209 if (TestCpuFlag(kCpuHasAVX2)) {
1138 ARGBToUVRow = ARGBToUVRow_Any_AVX2; 1210 ARGBToUVRow = ARGBToUVRow_Any_AVX2;
1139 ARGBToYRow = ARGBToYRow_Any_AVX2; 1211 ARGBToYRow = ARGBToYRow_Any_AVX2;
1140 if (IS_ALIGNED(width, 32)) { 1212 if (IS_ALIGNED(width, 32)) {
1141 ARGBToUVRow = ARGBToUVRow_AVX2; 1213 ARGBToUVRow = ARGBToUVRow_AVX2;
1142 ARGBToYRow = ARGBToYRow_AVX2; 1214 ARGBToYRow = ARGBToYRow_AVX2;
1143 } 1215 }
1144 } 1216 }
1145 #endif 1217 #endif
1218 #if defined(HAS_RGB565TOARGBROW_DSPR2)
1219 if (TestCpuFlag(kCpuHasDSPR2)) {
1220 RGB565ToARGBRow = RGB565ToARGBRow_Any_DSPR2;
1221 if (IS_ALIGNED(width, 8)) {
1222 RGB565ToARGBRow = RGB565ToARGBRow_DSPR2;
1223 }
1224 }
1225 #endif
1146 { 1226 {
1147 // Allocate 2 rows of ARGB. 1227 // Allocate 2 rows of ARGB.
1148 const int kRowSize = (width * 4 + 31) & ~31; 1228 const int kRowSize = (width * 4 + 31) & ~31;
1149 align_buffer_64(row, kRowSize * 2); 1229 align_buffer_64(row, kRowSize * 2);
1150 #endif 1230 #endif
1151 1231
1152 for (y = 0; y < height - 1; y += 2) { 1232 for (y = 0; y < height - 1; y += 2) {
1153 #if defined(HAS_RGB565TOYROW_NEON) 1233 #if defined(HAS_RGB565TOYROW_NEON)
1154 RGB565ToUVRow(src_rgb565, src_stride_rgb565, dst_u, dst_v, width); 1234 RGB565ToUVRow(src_rgb565, src_stride_rgb565, dst_u, dst_v, width);
1155 RGB565ToYRow(src_rgb565, dst_y, width); 1235 RGB565ToYRow(src_rgb565, dst_y, width);
(...skipping 389 matching lines...) Expand 10 before | Expand all | Expand 10 after
1545 dst_u += dst_stride_u; 1625 dst_u += dst_stride_u;
1546 dst_v += dst_stride_v; 1626 dst_v += dst_stride_v;
1547 } 1627 }
1548 return 0; 1628 return 0;
1549 } 1629 }
1550 1630
1551 #ifdef __cplusplus 1631 #ifdef __cplusplus
1552 } // extern "C" 1632 } // extern "C"
1553 } // namespace libyuv 1633 } // namespace libyuv
1554 #endif 1634 #endif
OLDNEW
« no previous file with comments | « include/libyuv/scale_row.h ('k') | source/convert_argb.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698