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 561 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 |
OLD | NEW |