OLD | NEW |
---|---|
1 /* | 1 /* |
2 * Copyright 2015 Google Inc. | 2 * Copyright 2015 Google Inc. |
3 * | 3 * |
4 * Use of this source code is governed by a BSD-style license that can be | 4 * Use of this source code is governed by a BSD-style license that can be |
5 * found in the LICENSE file. | 5 * found in the LICENSE file. |
6 */ | 6 */ |
7 | 7 |
8 #include "SkCodecPriv.h" | 8 #include "SkCodecPriv.h" |
9 #include "SkColorPriv.h" | 9 #include "SkColorPriv.h" |
10 #include "SkOpts.h" | 10 #include "SkOpts.h" |
(...skipping 633 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
644 dst32++; | 644 dst32++; |
645 src32 += deltaSrc/4; | 645 src32 += deltaSrc/4; |
646 } | 646 } |
647 proc(dst32, (const uint8_t*)src32, dstWidth, bpp, deltaSrc, 0, ctable); | 647 proc(dst32, (const uint8_t*)src32, dstWidth, bpp, deltaSrc, 0, ctable); |
648 } | 648 } |
649 | 649 |
650 SkSwizzler* SkSwizzler::CreateSwizzler(const SkEncodedInfo& encodedInfo, | 650 SkSwizzler* SkSwizzler::CreateSwizzler(const SkEncodedInfo& encodedInfo, |
651 const SkPMColor* ctable, | 651 const SkPMColor* ctable, |
652 const SkImageInfo& dstInfo, | 652 const SkImageInfo& dstInfo, |
653 const SkCodec::Options& options, | 653 const SkCodec::Options& options, |
654 const SkIRect* frame) { | 654 const SkIRect* frame, |
655 bool preSwizzled) { | |
655 if (SkEncodedInfo::kPalette_Color == encodedInfo.color() && nullptr == ctabl e) { | 656 if (SkEncodedInfo::kPalette_Color == encodedInfo.color() && nullptr == ctabl e) { |
656 return nullptr; | 657 return nullptr; |
657 } | 658 } |
658 | 659 |
659 RowProc fastProc = nullptr; | 660 RowProc fastProc = nullptr; |
660 RowProc proc = nullptr; | 661 RowProc proc = nullptr; |
661 SkCodec::ZeroInitialized zeroInit = options.fZeroInitialized; | 662 if (preSwizzled) { |
msarett
2016/04/25 16:58:45
Original kPreSwizzled block is moved here - nothin
| |
662 const bool premultiply = (SkEncodedInfo::kOpaque_Alpha != encodedInfo.alpha( )) && | 663 switch (dstInfo.colorType()) { |
663 (kPremul_SkAlphaType == dstInfo.alphaType()); | 664 case kGray_8_SkColorType: |
664 switch (encodedInfo.color()) { | 665 proc = &sample1; |
665 case SkEncodedInfo::kGray_Color: | 666 fastProc = © |
666 switch (encodedInfo.bitsPerComponent()) { | 667 break; |
667 case 1: | 668 case kRGB_565_SkColorType: |
668 switch (dstInfo.colorType()) { | 669 proc = &sample2; |
669 case kRGBA_8888_SkColorType: | 670 fastProc = © |
670 case kBGRA_8888_SkColorType: | 671 break; |
671 proc = &swizzle_bit_to_n32; | 672 case kRGBA_8888_SkColorType: |
672 break; | 673 case kBGRA_8888_SkColorType: |
673 case kIndex_8_SkColorType: | 674 proc = &sample4; |
674 proc = &swizzle_bit_to_index; | 675 fastProc = © |
675 break; | 676 break; |
676 case kRGB_565_SkColorType: | 677 default: |
677 proc = &swizzle_bit_to_565; | 678 return nullptr; |
678 break; | 679 } |
679 case kGray_8_SkColorType: | 680 } else { |
680 proc = &swizzle_bit_to_grayscale; | 681 SkCodec::ZeroInitialized zeroInit = options.fZeroInitialized; |
681 break; | 682 const bool premultiply = (SkEncodedInfo::kOpaque_Alpha != encodedInfo.al pha()) && |
682 default: | 683 (kPremul_SkAlphaType == dstInfo.alphaType()); |
683 return nullptr; | 684 |
684 } | 685 switch (encodedInfo.color()) { |
685 break; | 686 case SkEncodedInfo::kGray_Color: |
686 case 8: | 687 switch (encodedInfo.bitsPerComponent()) { |
687 switch (dstInfo.colorType()) { | 688 case 1: |
688 case kRGBA_8888_SkColorType: | 689 switch (dstInfo.colorType()) { |
689 case kBGRA_8888_SkColorType: | 690 case kRGBA_8888_SkColorType: |
690 proc = &swizzle_gray_to_n32; | 691 case kBGRA_8888_SkColorType: |
691 fastProc = &fast_swizzle_gray_to_n32; | 692 proc = &swizzle_bit_to_n32; |
692 break; | 693 break; |
693 case kGray_8_SkColorType: | 694 case kIndex_8_SkColorType: |
694 proc = &sample1; | 695 proc = &swizzle_bit_to_index; |
695 fastProc = © | 696 break; |
696 break; | 697 case kRGB_565_SkColorType: |
697 case kRGB_565_SkColorType: | 698 proc = &swizzle_bit_to_565; |
698 proc = &swizzle_gray_to_565; | 699 break; |
699 break; | 700 case kGray_8_SkColorType: |
700 default: | 701 proc = &swizzle_bit_to_grayscale; |
701 return nullptr; | 702 break; |
702 } | 703 default: |
703 break; | 704 return nullptr; |
704 default: | 705 } |
705 return nullptr; | 706 break; |
706 } | 707 case 8: |
707 break; | 708 switch (dstInfo.colorType()) { |
708 case SkEncodedInfo::kGrayAlpha_Color: | 709 case kRGBA_8888_SkColorType: |
709 switch (dstInfo.colorType()) { | 710 case kBGRA_8888_SkColorType: |
710 case kRGBA_8888_SkColorType: | 711 proc = &swizzle_gray_to_n32; |
711 case kBGRA_8888_SkColorType: | 712 fastProc = &fast_swizzle_gray_to_n32; |
712 if (premultiply) { | 713 break; |
713 if (SkCodec::kYes_ZeroInitialized == zeroInit) { | 714 case kGray_8_SkColorType: |
714 proc = &SkipLeadingGrayAlphaZerosThen<swizzle_grayal pha_to_n32_premul>; | 715 proc = &sample1; |
715 fastProc = &SkipLeadingGrayAlphaZerosThen | 716 fastProc = © |
716 <fast_swizzle_grayalpha_to_n32_premul>; | 717 break; |
717 } else { | 718 case kRGB_565_SkColorType: |
718 proc = &swizzle_grayalpha_to_n32_premul; | 719 proc = &swizzle_gray_to_565; |
719 fastProc = &fast_swizzle_grayalpha_to_n32_premul; | 720 break; |
720 } | 721 default: |
721 } else { | 722 return nullptr; |
722 if (SkCodec::kYes_ZeroInitialized == zeroInit) { | 723 } |
723 proc = &SkipLeadingGrayAlphaZerosThen | 724 break; |
724 <swizzle_grayalpha_to_n32_unpremul>; | 725 default: |
725 fastProc = &SkipLeadingGrayAlphaZerosThen | 726 return nullptr; |
726 <fast_swizzle_grayalpha_to_n32_unpremul>; | 727 } |
727 } else { | 728 break; |
728 proc = &swizzle_grayalpha_to_n32_unpremul; | 729 case SkEncodedInfo::kGrayAlpha_Color: |
729 fastProc = &fast_swizzle_grayalpha_to_n32_unpremul; | 730 switch (dstInfo.colorType()) { |
730 } | 731 case kRGBA_8888_SkColorType: |
731 } | 732 case kBGRA_8888_SkColorType: |
732 break; | 733 if (premultiply) { |
733 default: | 734 if (SkCodec::kYes_ZeroInitialized == zeroInit) { |
734 return nullptr; | 735 proc = &SkipLeadingGrayAlphaZerosThen |
735 } | 736 <swizzle_grayalpha_to_n32_premul>; |
736 break; | 737 fastProc = &SkipLeadingGrayAlphaZerosThen |
737 case SkEncodedInfo::kPalette_Color: | 738 <fast_swizzle_grayalpha_to_n32_premul>; |
738 // We assume that the color table is premultiplied and swizzled | 739 } else { |
739 // as desired. | 740 proc = &swizzle_grayalpha_to_n32_premul; |
740 switch (encodedInfo.bitsPerComponent()) { | 741 fastProc = &fast_swizzle_grayalpha_to_n32_premul ; |
741 case 1: | 742 } |
742 case 2: | 743 } else { |
743 case 4: | 744 if (SkCodec::kYes_ZeroInitialized == zeroInit) { |
744 switch (dstInfo.colorType()) { | 745 proc = &SkipLeadingGrayAlphaZerosThen |
745 case kRGBA_8888_SkColorType: | 746 <swizzle_grayalpha_to_n32_unpremul>; |
746 case kBGRA_8888_SkColorType: | 747 fastProc = &SkipLeadingGrayAlphaZerosThen |
747 proc = &swizzle_small_index_to_n32; | 748 <fast_swizzle_grayalpha_to_n32_unpremul> ; |
748 break; | 749 } else { |
749 case kRGB_565_SkColorType: | 750 proc = &swizzle_grayalpha_to_n32_unpremul; |
750 proc = &swizzle_small_index_to_565; | 751 fastProc = &fast_swizzle_grayalpha_to_n32_unprem ul; |
751 break; | 752 } |
752 case kIndex_8_SkColorType: | 753 } |
753 proc = &swizzle_small_index_to_index; | 754 break; |
754 break; | 755 default: |
755 default: | 756 return nullptr; |
756 return nullptr; | 757 } |
757 } | 758 break; |
758 break; | 759 case SkEncodedInfo::kPalette_Color: |
759 case 8: | 760 // We assume that the color table is premultiplied and swizzled |
760 switch (dstInfo.colorType()) { | 761 // as desired. |
761 case kRGBA_8888_SkColorType: | 762 switch (encodedInfo.bitsPerComponent()) { |
762 case kBGRA_8888_SkColorType: | 763 case 1: |
763 if (SkCodec::kYes_ZeroInitialized == zeroInit) { | 764 case 2: |
764 proc = &swizzle_index_to_n32_skipZ; | 765 case 4: |
765 } else { | 766 switch (dstInfo.colorType()) { |
766 proc = &swizzle_index_to_n32; | 767 case kRGBA_8888_SkColorType: |
767 } | 768 case kBGRA_8888_SkColorType: |
768 break; | 769 proc = &swizzle_small_index_to_n32; |
769 case kRGB_565_SkColorType: | 770 break; |
770 proc = &swizzle_index_to_565; | 771 case kRGB_565_SkColorType: |
771 break; | 772 proc = &swizzle_small_index_to_565; |
772 case kIndex_8_SkColorType: | 773 break; |
773 proc = &sample1; | 774 case kIndex_8_SkColorType: |
774 fastProc = © | 775 proc = &swizzle_small_index_to_index; |
775 break; | 776 break; |
776 default: | 777 default: |
777 return nullptr; | 778 return nullptr; |
778 } | 779 } |
779 break; | 780 break; |
780 default: | 781 case 8: |
781 return nullptr; | 782 switch (dstInfo.colorType()) { |
782 } | 783 case kRGBA_8888_SkColorType: |
783 break; | 784 case kBGRA_8888_SkColorType: |
784 case SkEncodedInfo::kRGB_Color: | 785 if (SkCodec::kYes_ZeroInitialized == zeroInit) { |
785 switch (dstInfo.colorType()) { | 786 proc = &swizzle_index_to_n32_skipZ; |
786 case kRGBA_8888_SkColorType: | 787 } else { |
787 proc = &swizzle_rgb_to_rgba; | 788 proc = &swizzle_index_to_n32; |
788 fastProc = &fast_swizzle_rgb_to_rgba; | 789 } |
789 break; | 790 break; |
790 case kBGRA_8888_SkColorType: | 791 case kRGB_565_SkColorType: |
791 proc = &swizzle_rgb_to_bgra; | 792 proc = &swizzle_index_to_565; |
792 fastProc = &fast_swizzle_rgb_to_bgra; | 793 break; |
793 break; | 794 case kIndex_8_SkColorType: |
794 case kRGB_565_SkColorType: | 795 proc = &sample1; |
795 proc = &swizzle_rgb_to_565; | 796 fastProc = © |
796 break; | 797 break; |
797 default: | 798 default: |
798 return nullptr; | 799 return nullptr; |
799 } | 800 } |
800 break; | 801 break; |
801 case SkEncodedInfo::kRGBA_Color: | 802 default: |
802 switch (dstInfo.colorType()) { | 803 return nullptr; |
803 case kRGBA_8888_SkColorType: | 804 } |
804 if (premultiply) { | 805 break; |
805 if (SkCodec::kYes_ZeroInitialized == zeroInit) { | 806 case SkEncodedInfo::kRGB_Color: |
806 proc = &SkipLeading8888ZerosThen<swizzle_rgba_to_rgb a_premul>; | 807 switch (dstInfo.colorType()) { |
807 fastProc = &SkipLeading8888ZerosThen<fast_swizzle_rg ba_to_rgba_premul>; | 808 case kRGBA_8888_SkColorType: |
808 } else { | 809 proc = &swizzle_rgb_to_rgba; |
809 proc = &swizzle_rgba_to_rgba_premul; | 810 fastProc = &fast_swizzle_rgb_to_rgba; |
810 fastProc = &fast_swizzle_rgba_to_rgba_premul; | 811 break; |
811 } | 812 case kBGRA_8888_SkColorType: |
812 } else { | 813 proc = &swizzle_rgb_to_bgra; |
813 if (SkCodec::kYes_ZeroInitialized == zeroInit) { | 814 fastProc = &fast_swizzle_rgb_to_bgra; |
814 proc = &SkipLeading8888ZerosThen<sample4>; | 815 break; |
815 fastProc = &SkipLeading8888ZerosThen<copy>; | 816 case kRGB_565_SkColorType: |
816 } else { | 817 proc = &swizzle_rgb_to_565; |
817 proc = &sample4; | 818 break; |
818 fastProc = © | 819 default: |
819 } | 820 return nullptr; |
820 } | 821 } |
821 break; | 822 break; |
822 case kBGRA_8888_SkColorType: | 823 case SkEncodedInfo::kRGBA_Color: |
823 if (premultiply) { | 824 switch (dstInfo.colorType()) { |
824 if (SkCodec::kYes_ZeroInitialized == zeroInit) { | 825 case kRGBA_8888_SkColorType: |
825 proc = &SkipLeading8888ZerosThen<swizzle_rgba_to_bgr a_premul>; | 826 if (premultiply) { |
826 fastProc = &SkipLeading8888ZerosThen<fast_swizzle_rg ba_to_bgra_premul>; | 827 if (SkCodec::kYes_ZeroInitialized == zeroInit) { |
827 } else { | 828 proc = &SkipLeading8888ZerosThen<swizzle_rgba_to _rgba_premul>; |
828 proc = &swizzle_rgba_to_bgra_premul; | 829 fastProc = &SkipLeading8888ZerosThen |
829 fastProc = &fast_swizzle_rgba_to_bgra_premul; | 830 <fast_swizzle_rgba_to_rgba_premul>; |
830 } | 831 } else { |
831 } else { | 832 proc = &swizzle_rgba_to_rgba_premul; |
832 if (SkCodec::kYes_ZeroInitialized == zeroInit) { | 833 fastProc = &fast_swizzle_rgba_to_rgba_premul; |
833 proc = &SkipLeading8888ZerosThen<swizzle_rgba_to_bgr a_unpremul>; | 834 } |
834 fastProc = &SkipLeading8888ZerosThen | 835 } else { |
835 <fast_swizzle_rgba_to_bgra_unpremul>; | 836 if (SkCodec::kYes_ZeroInitialized == zeroInit) { |
836 } else { | 837 proc = &SkipLeading8888ZerosThen<sample4>; |
837 proc = &swizzle_rgba_to_bgra_unpremul; | 838 fastProc = &SkipLeading8888ZerosThen<copy>; |
838 fastProc = &fast_swizzle_rgba_to_bgra_unpremul; | 839 } else { |
839 } | 840 proc = &sample4; |
840 } | 841 fastProc = © |
841 break; | 842 } |
842 default: | 843 } |
843 return nullptr; | 844 break; |
844 } | 845 case kBGRA_8888_SkColorType: |
845 break; | 846 if (premultiply) { |
846 case SkEncodedInfo::kBGR_Color: | 847 if (SkCodec::kYes_ZeroInitialized == zeroInit) { |
847 switch (dstInfo.colorType()) { | 848 proc = &SkipLeading8888ZerosThen<swizzle_rgba_to _bgra_premul>; |
848 case kBGRA_8888_SkColorType: | 849 fastProc = &SkipLeading8888ZerosThen |
849 proc = &swizzle_rgb_to_rgba; | 850 <fast_swizzle_rgba_to_bgra_premul>; |
850 fastProc = &fast_swizzle_rgb_to_rgba; | 851 } else { |
851 break; | 852 proc = &swizzle_rgba_to_bgra_premul; |
852 case kRGBA_8888_SkColorType: | 853 fastProc = &fast_swizzle_rgba_to_bgra_premul; |
853 proc = &swizzle_rgb_to_bgra; | 854 } |
854 fastProc = &fast_swizzle_rgb_to_bgra; | 855 } else { |
855 break; | 856 if (SkCodec::kYes_ZeroInitialized == zeroInit) { |
856 case kRGB_565_SkColorType: | 857 proc = &SkipLeading8888ZerosThen<swizzle_rgba_to _bgra_unpremul>; |
857 proc = &swizzle_bgr_to_565; | 858 fastProc = &SkipLeading8888ZerosThen |
858 break; | 859 <fast_swizzle_rgba_to_bgra_unpremul>; |
859 default: | 860 } else { |
860 return nullptr; | 861 proc = &swizzle_rgba_to_bgra_unpremul; |
861 } | 862 fastProc = &fast_swizzle_rgba_to_bgra_unpremul; |
862 break; | 863 } |
863 case SkEncodedInfo::kBGRX_Color: | 864 } |
864 switch (dstInfo.colorType()) { | 865 break; |
865 case kBGRA_8888_SkColorType: | 866 default: |
866 proc = &swizzle_rgb_to_rgba; | 867 return nullptr; |
867 break; | 868 } |
868 case kRGBA_8888_SkColorType: | 869 break; |
869 proc = &swizzle_rgb_to_bgra; | 870 case SkEncodedInfo::kBGR_Color: |
870 break; | 871 switch (dstInfo.colorType()) { |
871 case kRGB_565_SkColorType: | 872 case kBGRA_8888_SkColorType: |
872 proc = &swizzle_bgr_to_565; | 873 proc = &swizzle_rgb_to_rgba; |
873 break; | 874 fastProc = &fast_swizzle_rgb_to_rgba; |
874 default: | 875 break; |
875 return nullptr; | 876 case kRGBA_8888_SkColorType: |
876 } | 877 proc = &swizzle_rgb_to_bgra; |
877 break; | 878 fastProc = &fast_swizzle_rgb_to_bgra; |
878 case SkEncodedInfo::kBGRA_Color: | 879 break; |
879 switch (dstInfo.colorType()) { | 880 case kRGB_565_SkColorType: |
880 case kBGRA_8888_SkColorType: | 881 proc = &swizzle_bgr_to_565; |
881 if (premultiply) { | 882 break; |
882 if (SkCodec::kYes_ZeroInitialized == zeroInit) { | 883 default: |
883 proc = &SkipLeading8888ZerosThen<swizzle_rgba_to_rgb a_premul>; | 884 return nullptr; |
884 fastProc = &SkipLeading8888ZerosThen<fast_swizzle_rg ba_to_rgba_premul>; | 885 } |
885 } else { | 886 break; |
886 proc = &swizzle_rgba_to_rgba_premul; | 887 case SkEncodedInfo::kBGRX_Color: |
887 fastProc = &fast_swizzle_rgba_to_rgba_premul; | 888 switch (dstInfo.colorType()) { |
888 } | 889 case kBGRA_8888_SkColorType: |
889 } else { | 890 proc = &swizzle_rgb_to_rgba; |
890 if (SkCodec::kYes_ZeroInitialized == zeroInit) { | 891 break; |
891 proc = &SkipLeading8888ZerosThen<sample4>; | 892 case kRGBA_8888_SkColorType: |
892 fastProc = &SkipLeading8888ZerosThen<copy>; | 893 proc = &swizzle_rgb_to_bgra; |
893 } else { | 894 break; |
894 proc = &sample4; | 895 case kRGB_565_SkColorType: |
895 fastProc = © | 896 proc = &swizzle_bgr_to_565; |
896 } | 897 break; |
897 } | 898 default: |
898 break; | 899 return nullptr; |
899 case kRGBA_8888_SkColorType: | 900 } |
900 if (premultiply) { | 901 break; |
901 if (SkCodec::kYes_ZeroInitialized == zeroInit) { | 902 case SkEncodedInfo::kBGRA_Color: |
902 proc = &SkipLeading8888ZerosThen<swizzle_rgba_to_bgr a_premul>; | 903 switch (dstInfo.colorType()) { |
903 fastProc = &SkipLeading8888ZerosThen<fast_swizzle_rg ba_to_bgra_premul>; | 904 case kBGRA_8888_SkColorType: |
904 } else { | 905 if (premultiply) { |
905 proc = &swizzle_rgba_to_bgra_premul; | 906 if (SkCodec::kYes_ZeroInitialized == zeroInit) { |
906 fastProc = &fast_swizzle_rgba_to_bgra_premul; | 907 proc = &SkipLeading8888ZerosThen<swizzle_rgba_to _rgba_premul>; |
907 } | 908 fastProc = &SkipLeading8888ZerosThen |
908 } else { | 909 <fast_swizzle_rgba_to_rgba_premul>; |
909 if (SkCodec::kYes_ZeroInitialized == zeroInit) { | 910 } else { |
910 proc = &SkipLeading8888ZerosThen<swizzle_rgba_to_bgr a_unpremul>; | 911 proc = &swizzle_rgba_to_rgba_premul; |
911 fastProc = &SkipLeading8888ZerosThen | 912 fastProc = &fast_swizzle_rgba_to_rgba_premul; |
912 <fast_swizzle_rgba_to_bgra_unpremul>; | 913 } |
913 } else { | 914 } else { |
914 proc = &swizzle_rgba_to_bgra_unpremul; | 915 if (SkCodec::kYes_ZeroInitialized == zeroInit) { |
915 fastProc = &fast_swizzle_rgba_to_bgra_unpremul; | 916 proc = &SkipLeading8888ZerosThen<sample4>; |
916 } | 917 fastProc = &SkipLeading8888ZerosThen<copy>; |
917 } | 918 } else { |
918 break; | 919 proc = &sample4; |
919 default: | 920 fastProc = © |
920 return nullptr; | 921 } |
921 } | 922 } |
922 break; | 923 break; |
923 case SkEncodedInfo::kInvertedCMYK_Color: | 924 case kRGBA_8888_SkColorType: |
924 switch (dstInfo.colorType()) { | 925 if (premultiply) { |
925 case kRGBA_8888_SkColorType: | 926 if (SkCodec::kYes_ZeroInitialized == zeroInit) { |
926 proc = &swizzle_cmyk_to_rgba; | 927 proc = &SkipLeading8888ZerosThen<swizzle_rgba_to _bgra_premul>; |
927 fastProc = &fast_swizzle_cmyk_to_rgba; | 928 fastProc = &SkipLeading8888ZerosThen |
928 break; | 929 <fast_swizzle_rgba_to_bgra_premul>; |
929 case kBGRA_8888_SkColorType: | 930 } else { |
930 proc = &swizzle_cmyk_to_bgra; | 931 proc = &swizzle_rgba_to_bgra_premul; |
931 fastProc = &fast_swizzle_cmyk_to_bgra; | 932 fastProc = &fast_swizzle_rgba_to_bgra_premul; |
932 break; | 933 } |
933 case kRGB_565_SkColorType: | 934 } else { |
934 proc = &swizzle_cmyk_to_565; | 935 if (SkCodec::kYes_ZeroInitialized == zeroInit) { |
935 break; | 936 proc = &SkipLeading8888ZerosThen<swizzle_rgba_to _bgra_unpremul>; |
936 default: | 937 fastProc = &SkipLeading8888ZerosThen |
937 return nullptr; | 938 <fast_swizzle_rgba_to_bgra_unpremul>; |
938 } | 939 } else { |
939 break; | 940 proc = &swizzle_rgba_to_bgra_unpremul; |
940 case SkEncodedInfo::kPreSwizzled_Color: | 941 fastProc = &fast_swizzle_rgba_to_bgra_unpremul; |
941 switch (dstInfo.colorType()) { | 942 } |
942 case kGray_8_SkColorType: | 943 } |
943 proc = &sample1; | 944 break; |
944 fastProc = © | 945 default: |
945 break; | 946 return nullptr; |
946 case kRGB_565_SkColorType: | 947 } |
947 proc = &sample2; | 948 break; |
948 fastProc = © | 949 case SkEncodedInfo::kInvertedCMYK_Color: |
949 break; | 950 switch (dstInfo.colorType()) { |
950 case kRGBA_8888_SkColorType: | 951 case kRGBA_8888_SkColorType: |
951 case kBGRA_8888_SkColorType: | 952 proc = &swizzle_cmyk_to_rgba; |
952 proc = &sample4; | 953 fastProc = &fast_swizzle_cmyk_to_rgba; |
953 fastProc = © | 954 break; |
954 break; | 955 case kBGRA_8888_SkColorType: |
955 default: | 956 proc = &swizzle_cmyk_to_bgra; |
956 return nullptr; | 957 fastProc = &fast_swizzle_cmyk_to_bgra; |
957 } | 958 break; |
958 break; | 959 case kRGB_565_SkColorType: |
959 default: | 960 proc = &swizzle_cmyk_to_565; |
960 return nullptr; | 961 break; |
962 default: | |
963 return nullptr; | |
964 } | |
965 break; | |
966 default: | |
967 return nullptr; | |
968 } | |
961 } | 969 } |
962 | 970 |
963 int dstBPP = SkColorTypeBytesPerPixel(dstInfo.colorType()); | |
964 int srcBPP; | 971 int srcBPP; |
965 if (SkEncodedInfo::kPreSwizzled_Color == encodedInfo.color()) { | 972 const int dstBPP = SkColorTypeBytesPerPixel(dstInfo.colorType()); |
973 if (preSwizzled) { | |
966 srcBPP = dstBPP; | 974 srcBPP = dstBPP; |
967 } else { | 975 } else { |
968 // Store bpp in bytes if it is an even multiple, otherwise use bits | 976 // Store bpp in bytes if it is an even multiple, otherwise use bits |
969 uint8_t bitsPerPixel = encodedInfo.bitsPerPixel(); | 977 uint8_t bitsPerPixel = encodedInfo.bitsPerPixel(); |
970 srcBPP = SkIsAlign8(bitsPerPixel) ? bitsPerPixel / 8 : bitsPerPixel; | 978 srcBPP = SkIsAlign8(bitsPerPixel) ? bitsPerPixel / 8 : bitsPerPixel; |
971 } | 979 } |
972 | 980 |
973 int srcOffset = 0; | 981 int srcOffset = 0; |
974 int srcWidth = dstInfo.width(); | 982 int srcWidth = dstInfo.width(); |
975 int dstOffset = 0; | 983 int dstOffset = 0; |
(...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
1028 } | 1036 } |
1029 | 1037 |
1030 return fAllocatedWidth; | 1038 return fAllocatedWidth; |
1031 } | 1039 } |
1032 | 1040 |
1033 void SkSwizzler::swizzle(void* dst, const uint8_t* SK_RESTRICT src) { | 1041 void SkSwizzler::swizzle(void* dst, const uint8_t* SK_RESTRICT src) { |
1034 SkASSERT(nullptr != dst && nullptr != src); | 1042 SkASSERT(nullptr != dst && nullptr != src); |
1035 fActualProc(SkTAddOffset<void>(dst, fDstOffsetBytes), src, fSwizzleWidth, fS rcBPP, | 1043 fActualProc(SkTAddOffset<void>(dst, fDstOffsetBytes), src, fSwizzleWidth, fS rcBPP, |
1036 fSampleX * fSrcBPP, fSrcOffsetUnits, fColorTable); | 1044 fSampleX * fSrcBPP, fSrcOffsetUnits, fColorTable); |
1037 } | 1045 } |
OLD | NEW |