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 "DMSrcSink.h" | 8 #include "DMSrcSink.h" |
9 #include "Resources.h" | 9 #include "Resources.h" |
10 #include "SkAndroidCodec.h" | 10 #include "SkAndroidCodec.h" |
(...skipping 86 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
97 // No need to test to non-raster or indirect backends. | 97 // No need to test to non-raster or indirect backends. |
98 return flags.type != SinkFlags::kRaster | 98 return flags.type != SinkFlags::kRaster |
99 || flags.approach != SinkFlags::kDirect; | 99 || flags.approach != SinkFlags::kDirect; |
100 } | 100 } |
101 | 101 |
102 static SkBitmapRegionDecoder* create_brd(Path path) { | 102 static SkBitmapRegionDecoder* create_brd(Path path) { |
103 sk_sp<SkData> encoded(SkData::MakeFromFileName(path.c_str())); | 103 sk_sp<SkData> encoded(SkData::MakeFromFileName(path.c_str())); |
104 if (!encoded) { | 104 if (!encoded) { |
105 return NULL; | 105 return NULL; |
106 } | 106 } |
107 return SkBitmapRegionDecoder::Create(encoded.get(), | 107 return SkBitmapRegionDecoder::Create(encoded, SkBitmapRegionDecoder::kAndroi
dCodec_Strategy); |
108 SkBitmapRegionDecoder::kAndroidCodec_St
rategy); | |
109 } | 108 } |
110 | 109 |
111 Error BRDSrc::draw(SkCanvas* canvas) const { | 110 Error BRDSrc::draw(SkCanvas* canvas) const { |
112 SkColorType colorType = canvas->imageInfo().colorType(); | 111 SkColorType colorType = canvas->imageInfo().colorType(); |
113 if (kRGB_565_SkColorType == colorType && | 112 if (kRGB_565_SkColorType == colorType && |
114 CodecSrc::kGetFromCanvas_DstColorType != fDstColorType) { | 113 CodecSrc::kGetFromCanvas_DstColorType != fDstColorType) { |
115 return Error::Nonfatal("Testing non-565 to 565 is uninteresting."); | 114 return Error::Nonfatal("Testing non-565 to 565 is uninteresting."); |
116 } | 115 } |
117 switch (fDstColorType) { | 116 switch (fDstColorType) { |
118 case CodecSrc::kGetFromCanvas_DstColorType: | 117 case CodecSrc::kGetFromCanvas_DstColorType: |
(...skipping 258 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
377 swap_rb_if_necessary(bitmap, dstColorType); | 376 swap_rb_if_necessary(bitmap, dstColorType); |
378 canvas->drawBitmap(bitmap, left, top); | 377 canvas->drawBitmap(bitmap, left, top); |
379 } | 378 } |
380 | 379 |
381 Error CodecSrc::draw(SkCanvas* canvas) const { | 380 Error CodecSrc::draw(SkCanvas* canvas) const { |
382 sk_sp<SkData> encoded(SkData::MakeFromFileName(fPath.c_str())); | 381 sk_sp<SkData> encoded(SkData::MakeFromFileName(fPath.c_str())); |
383 if (!encoded) { | 382 if (!encoded) { |
384 return SkStringPrintf("Couldn't read %s.", fPath.c_str()); | 383 return SkStringPrintf("Couldn't read %s.", fPath.c_str()); |
385 } | 384 } |
386 | 385 |
387 SkAutoTDelete<SkCodec> codec(SkCodec::NewFromData(encoded.get())); | 386 SkAutoTDelete<SkCodec> codec(SkCodec::NewFromData(encoded)); |
388 if (nullptr == codec.get()) { | 387 if (nullptr == codec.get()) { |
389 return SkStringPrintf("Couldn't create codec for %s.", fPath.c_str()); | 388 return SkStringPrintf("Couldn't create codec for %s.", fPath.c_str()); |
390 } | 389 } |
391 | 390 |
392 SkImageInfo decodeInfo = codec->getInfo(); | 391 SkImageInfo decodeInfo = codec->getInfo(); |
393 if (!get_decode_info(&decodeInfo, canvas->imageInfo().colorType(), fDstColor
Type, | 392 if (!get_decode_info(&decodeInfo, canvas->imageInfo().colorType(), fDstColor
Type, |
394 fDstAlphaType)) { | 393 fDstAlphaType)) { |
395 return Error::Nonfatal("Testing non-565 to 565 is uninteresting."); | 394 return Error::Nonfatal("Testing non-565 to 565 is uninteresting."); |
396 } | 395 } |
397 | 396 |
(...skipping 227 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
625 } | 624 } |
626 default: | 625 default: |
627 SkASSERT(false); | 626 SkASSERT(false); |
628 return "Invalid fMode"; | 627 return "Invalid fMode"; |
629 } | 628 } |
630 return ""; | 629 return ""; |
631 } | 630 } |
632 | 631 |
633 SkISize CodecSrc::size() const { | 632 SkISize CodecSrc::size() const { |
634 sk_sp<SkData> encoded(SkData::MakeFromFileName(fPath.c_str())); | 633 sk_sp<SkData> encoded(SkData::MakeFromFileName(fPath.c_str())); |
635 SkAutoTDelete<SkCodec> codec(SkCodec::NewFromData(encoded.get())); | 634 SkAutoTDelete<SkCodec> codec(SkCodec::NewFromData(encoded)); |
636 if (nullptr == codec) { | 635 if (nullptr == codec) { |
637 return SkISize::Make(0, 0); | 636 return SkISize::Make(0, 0); |
638 } | 637 } |
639 return codec->getScaledDimensions(fScale); | 638 return codec->getScaledDimensions(fScale); |
640 } | 639 } |
641 | 640 |
642 Name CodecSrc::name() const { | 641 Name CodecSrc::name() const { |
643 if (1.0f == fScale) { | 642 if (1.0f == fScale) { |
644 return SkOSPath::Basename(fPath.c_str()); | 643 return SkOSPath::Basename(fPath.c_str()); |
645 } | 644 } |
(...skipping 15 matching lines...) Expand all Loading... |
661 // No need to test decoding to non-raster or indirect backend. | 660 // No need to test decoding to non-raster or indirect backend. |
662 return flags.type != SinkFlags::kRaster | 661 return flags.type != SinkFlags::kRaster |
663 || flags.approach != SinkFlags::kDirect; | 662 || flags.approach != SinkFlags::kDirect; |
664 } | 663 } |
665 | 664 |
666 Error AndroidCodecSrc::draw(SkCanvas* canvas) const { | 665 Error AndroidCodecSrc::draw(SkCanvas* canvas) const { |
667 sk_sp<SkData> encoded(SkData::MakeFromFileName(fPath.c_str())); | 666 sk_sp<SkData> encoded(SkData::MakeFromFileName(fPath.c_str())); |
668 if (!encoded) { | 667 if (!encoded) { |
669 return SkStringPrintf("Couldn't read %s.", fPath.c_str()); | 668 return SkStringPrintf("Couldn't read %s.", fPath.c_str()); |
670 } | 669 } |
671 SkAutoTDelete<SkAndroidCodec> codec(SkAndroidCodec::NewFromData(encoded.get(
))); | 670 SkAutoTDelete<SkAndroidCodec> codec(SkAndroidCodec::NewFromData(encoded)); |
672 if (nullptr == codec.get()) { | 671 if (nullptr == codec.get()) { |
673 return SkStringPrintf("Couldn't create android codec for %s.", fPath.c_s
tr()); | 672 return SkStringPrintf("Couldn't create android codec for %s.", fPath.c_s
tr()); |
674 } | 673 } |
675 | 674 |
676 SkImageInfo decodeInfo = codec->getInfo(); | 675 SkImageInfo decodeInfo = codec->getInfo(); |
677 if (!get_decode_info(&decodeInfo, canvas->imageInfo().colorType(), fDstColor
Type, | 676 if (!get_decode_info(&decodeInfo, canvas->imageInfo().colorType(), fDstColor
Type, |
678 fDstAlphaType)) { | 677 fDstAlphaType)) { |
679 return Error::Nonfatal("Testing non-565 to 565 is uninteresting."); | 678 return Error::Nonfatal("Testing non-565 to 565 is uninteresting."); |
680 } | 679 } |
681 | 680 |
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
714 break; | 713 break; |
715 default: | 714 default: |
716 return SkStringPrintf("Couldn't getPixels %s.", fPath.c_str()); | 715 return SkStringPrintf("Couldn't getPixels %s.", fPath.c_str()); |
717 } | 716 } |
718 draw_to_canvas(canvas, bitmapInfo, pixels.get(), rowBytes, colorPtr, colorCo
unt, fDstColorType); | 717 draw_to_canvas(canvas, bitmapInfo, pixels.get(), rowBytes, colorPtr, colorCo
unt, fDstColorType); |
719 return ""; | 718 return ""; |
720 } | 719 } |
721 | 720 |
722 SkISize AndroidCodecSrc::size() const { | 721 SkISize AndroidCodecSrc::size() const { |
723 sk_sp<SkData> encoded(SkData::MakeFromFileName(fPath.c_str())); | 722 sk_sp<SkData> encoded(SkData::MakeFromFileName(fPath.c_str())); |
724 SkAutoTDelete<SkAndroidCodec> codec(SkAndroidCodec::NewFromData(encoded.get(
))); | 723 SkAutoTDelete<SkAndroidCodec> codec(SkAndroidCodec::NewFromData(encoded)); |
725 if (nullptr == codec) { | 724 if (nullptr == codec) { |
726 return SkISize::Make(0, 0); | 725 return SkISize::Make(0, 0); |
727 } | 726 } |
728 return codec->getSampledDimensions(fSampleSize); | 727 return codec->getSampledDimensions(fSampleSize); |
729 } | 728 } |
730 | 729 |
731 Name AndroidCodecSrc::name() const { | 730 Name AndroidCodecSrc::name() const { |
732 // We will replicate the names used by CodecSrc so that images can | 731 // We will replicate the names used by CodecSrc so that images can |
733 // be compared in Gold. | 732 // be compared in Gold. |
734 if (1 == fSampleSize) { | 733 if (1 == fSampleSize) { |
(...skipping 86 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
821 return SkStringPrintf("Image generator could not getPixels() for %s\n",
fPath.c_str()); | 820 return SkStringPrintf("Image generator could not getPixels() for %s\n",
fPath.c_str()); |
822 } | 821 } |
823 | 822 |
824 draw_to_canvas(canvas, decodeInfo, pixels.get(), rowBytes, colorPtr, colorCo
unt, | 823 draw_to_canvas(canvas, decodeInfo, pixels.get(), rowBytes, colorPtr, colorCo
unt, |
825 CodecSrc::kGetFromCanvas_DstColorType); | 824 CodecSrc::kGetFromCanvas_DstColorType); |
826 return ""; | 825 return ""; |
827 } | 826 } |
828 | 827 |
829 SkISize ImageGenSrc::size() const { | 828 SkISize ImageGenSrc::size() const { |
830 sk_sp<SkData> encoded(SkData::MakeFromFileName(fPath.c_str())); | 829 sk_sp<SkData> encoded(SkData::MakeFromFileName(fPath.c_str())); |
831 SkAutoTDelete<SkCodec> codec(SkCodec::NewFromData(encoded.get())); | 830 SkAutoTDelete<SkCodec> codec(SkCodec::NewFromData(encoded)); |
832 if (nullptr == codec) { | 831 if (nullptr == codec) { |
833 return SkISize::Make(0, 0); | 832 return SkISize::Make(0, 0); |
834 } | 833 } |
835 return codec->getInfo().dimensions(); | 834 return codec->getInfo().dimensions(); |
836 } | 835 } |
837 | 836 |
838 Name ImageGenSrc::name() const { | 837 Name ImageGenSrc::name() const { |
839 return SkOSPath::Basename(fPath.c_str()); | 838 return SkOSPath::Basename(fPath.c_str()); |
840 } | 839 } |
841 | 840 |
(...skipping 24 matching lines...) Expand all Loading... |
866 return Error::Nonfatal("Skipping tests that are only interesting in lega
cy mode."); | 865 return Error::Nonfatal("Skipping tests that are only interesting in lega
cy mode."); |
867 } else if (!runInLegacyMode && !canvas->imageInfo().colorSpace()) { | 866 } else if (!runInLegacyMode && !canvas->imageInfo().colorSpace()) { |
868 return Error::Nonfatal("Skipping tests that are only interesting in srgb
mode."); | 867 return Error::Nonfatal("Skipping tests that are only interesting in srgb
mode."); |
869 } | 868 } |
870 | 869 |
871 sk_sp<SkData> encoded(SkData::MakeFromFileName(fPath.c_str())); | 870 sk_sp<SkData> encoded(SkData::MakeFromFileName(fPath.c_str())); |
872 if (!encoded) { | 871 if (!encoded) { |
873 return SkStringPrintf("Couldn't read %s.", fPath.c_str()); | 872 return SkStringPrintf("Couldn't read %s.", fPath.c_str()); |
874 } | 873 } |
875 | 874 |
876 SkAutoTDelete<SkCodec> codec(SkCodec::NewFromData(encoded.get())); | 875 SkAutoTDelete<SkCodec> codec(SkCodec::NewFromData(encoded)); |
877 if (nullptr == codec.get()) { | 876 if (nullptr == codec.get()) { |
878 return SkStringPrintf("Couldn't create codec for %s.", fPath.c_str()); | 877 return SkStringPrintf("Couldn't create codec for %s.", fPath.c_str()); |
879 } | 878 } |
880 | 879 |
881 // Load the dst ICC profile. This particular dst is fairly similar to Adobe
RGB. | 880 // Load the dst ICC profile. This particular dst is fairly similar to Adobe
RGB. |
882 sk_sp<SkData> dstData = SkData::MakeFromFileName( | 881 sk_sp<SkData> dstData = SkData::MakeFromFileName( |
883 GetResourcePath("icc_profiles/HP_ZR30w.icc").c_str()); | 882 GetResourcePath("icc_profiles/HP_ZR30w.icc").c_str()); |
884 if (!dstData) { | 883 if (!dstData) { |
885 return "Cannot read monitor profile. Is the resource path set correctly
?"; | 884 return "Cannot read monitor profile. Is the resource path set correctly
?"; |
886 } | 885 } |
(...skipping 85 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
972 #endif | 971 #endif |
973 default: | 972 default: |
974 SkASSERT(false); | 973 SkASSERT(false); |
975 return "Invalid fMode"; | 974 return "Invalid fMode"; |
976 } | 975 } |
977 return ""; | 976 return ""; |
978 } | 977 } |
979 | 978 |
980 SkISize ColorCodecSrc::size() const { | 979 SkISize ColorCodecSrc::size() const { |
981 sk_sp<SkData> encoded(SkData::MakeFromFileName(fPath.c_str())); | 980 sk_sp<SkData> encoded(SkData::MakeFromFileName(fPath.c_str())); |
982 SkAutoTDelete<SkCodec> codec(SkCodec::NewFromData(encoded.get())); | 981 SkAutoTDelete<SkCodec> codec(SkCodec::NewFromData(encoded)); |
983 if (nullptr == codec) { | 982 if (nullptr == codec) { |
984 return SkISize::Make(0, 0); | 983 return SkISize::Make(0, 0); |
985 } | 984 } |
986 return SkISize::Make(codec->getInfo().width(), codec->getInfo().height()); | 985 return SkISize::Make(codec->getInfo().width(), codec->getInfo().height()); |
987 } | 986 } |
988 | 987 |
989 Name ColorCodecSrc::name() const { | 988 Name ColorCodecSrc::name() const { |
990 return SkOSPath::Basename(fPath.c_str()); | 989 return SkOSPath::Basename(fPath.c_str()); |
991 } | 990 } |
992 | 991 |
(...skipping 643 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1636 Error err = src.draw(&rec); | 1635 Error err = src.draw(&rec); |
1637 if (!err.isEmpty()) { | 1636 if (!err.isEmpty()) { |
1638 return err; | 1637 return err; |
1639 } | 1638 } |
1640 dl->draw(canvas); | 1639 dl->draw(canvas); |
1641 return check_against_reference(bitmap, src, fSink); | 1640 return check_against_reference(bitmap, src, fSink); |
1642 }); | 1641 }); |
1643 } | 1642 } |
1644 | 1643 |
1645 } // namespace DM | 1644 } // namespace DM |
OLD | NEW |