| 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 |