| 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 831 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 842 , fMode(mode) | 842 , fMode(mode) |
| 843 , fColorType(colorType) | 843 , fColorType(colorType) |
| 844 {} | 844 {} |
| 845 | 845 |
| 846 bool ColorCodecSrc::veto(SinkFlags flags) const { | 846 bool ColorCodecSrc::veto(SinkFlags flags) const { |
| 847 // Test to direct raster backends (8888 and 565). | 847 // Test to direct raster backends (8888 and 565). |
| 848 return flags.type != SinkFlags::kRaster || flags.approach != SinkFlags::kDir
ect; | 848 return flags.type != SinkFlags::kRaster || flags.approach != SinkFlags::kDir
ect; |
| 849 } | 849 } |
| 850 | 850 |
| 851 Error ColorCodecSrc::draw(SkCanvas* canvas) const { | 851 Error ColorCodecSrc::draw(SkCanvas* canvas) const { |
| 852 if (kRGB_565_SkColorType == canvas->imageInfo().colorType()) { | 852 bool runInLegacyMode = kBaseline_Mode == fMode; |
| 853 return Error::Nonfatal("No need to test color correction to 565 backend.
"); | 853 #if defined(SK_TEST_QCMS) |
| 854 } | 854 runInLegacyMode = runInLegacyMode || kQCMS_HPZR30w_Mode == fMode; |
| 855 #endif |
| 855 | 856 |
| 856 if (nullptr == canvas->imageInfo().colorSpace() && kRGBA_F16_SkColorType ==
fColorType) { | 857 if (runInLegacyMode && canvas->imageInfo().colorSpace()) { |
| 857 return Error::Nonfatal("F16 does not draw in legacy mode."); | 858 return Error::Nonfatal("Skipping tests that are only interesting in lega
cy mode."); |
| 859 } else if (!runInLegacyMode && !canvas->imageInfo().colorSpace()) { |
| 860 return Error::Nonfatal("Skipping tests that are only interesting in srgb
mode."); |
| 858 } | 861 } |
| 859 | 862 |
| 860 SkAutoTUnref<SkData> encoded(SkData::NewFromFileName(fPath.c_str())); | 863 SkAutoTUnref<SkData> encoded(SkData::NewFromFileName(fPath.c_str())); |
| 861 if (!encoded) { | 864 if (!encoded) { |
| 862 return SkStringPrintf("Couldn't read %s.", fPath.c_str()); | 865 return SkStringPrintf("Couldn't read %s.", fPath.c_str()); |
| 863 } | 866 } |
| 864 | 867 |
| 865 SkAutoTDelete<SkCodec> codec(SkCodec::NewFromData(encoded)); | 868 SkAutoTDelete<SkCodec> codec(SkCodec::NewFromData(encoded)); |
| 866 if (nullptr == codec.get()) { | 869 if (nullptr == codec.get()) { |
| 867 return SkStringPrintf("Couldn't create codec for %s.", fPath.c_str()); | 870 return SkStringPrintf("Couldn't create codec for %s.", fPath.c_str()); |
| 868 } | 871 } |
| 869 | 872 |
| 870 // Load the dst ICC profile. This particular dst is fairly similar to Adobe
RGB. | 873 // Load the dst ICC profile. This particular dst is fairly similar to Adobe
RGB. |
| 871 sk_sp<SkData> dstData = SkData::MakeFromFileName( | 874 sk_sp<SkData> dstData = SkData::MakeFromFileName( |
| 872 GetResourcePath("monitor_profiles/HP_ZR30w.icc").c_str()); | 875 GetResourcePath("monitor_profiles/HP_ZR30w.icc").c_str()); |
| 873 if (!dstData) { | 876 if (!dstData) { |
| 874 return "Cannot read monitor profile. Is the resource path set correctly
?"; | 877 return "Cannot read monitor profile. Is the resource path set correctly
?"; |
| 875 } | 878 } |
| 876 | 879 |
| 877 sk_sp<SkColorSpace> dstSpace = nullptr; | 880 sk_sp<SkColorSpace> dstSpace = nullptr; |
| 878 if (kDst_sRGB_Mode == fMode) { | 881 if (kDst_sRGB_Mode == fMode) { |
| 879 dstSpace = SkColorSpace::NewNamed(SkColorSpace::kSRGB_Named); | 882 dstSpace = SkColorSpace::NewNamed(SkColorSpace::kSRGB_Named); |
| 880 } else if (kDst_HPZR30w_Mode == fMode) { | 883 } else if (kDst_HPZR30w_Mode == fMode) { |
| 881 dstSpace = SkColorSpace::NewICC(dstData->data(), dstData->size()); | 884 dstSpace = SkColorSpace::NewICC(dstData->data(), dstData->size()); |
| 882 } | 885 } |
| 883 | 886 |
| 884 SkImageInfo decodeInfo = codec->getInfo().makeColorType(fColorType).makeColo
rSpace(dstSpace); | 887 SkImageInfo decodeInfo = codec->getInfo().makeColorType(fColorType).makeColo
rSpace(dstSpace); |
| 888 if (kUnpremul_SkAlphaType == decodeInfo.alphaType()) { |
| 889 decodeInfo = decodeInfo.makeAlphaType(kPremul_SkAlphaType); |
| 890 } |
| 891 |
| 885 SkImageInfo bitmapInfo = decodeInfo; | 892 SkImageInfo bitmapInfo = decodeInfo; |
| 886 if (kRGBA_8888_SkColorType == decodeInfo.colorType() || | 893 if (kRGBA_8888_SkColorType == decodeInfo.colorType() || |
| 887 kBGRA_8888_SkColorType == decodeInfo.colorType()) | 894 kBGRA_8888_SkColorType == decodeInfo.colorType()) |
| 888 { | 895 { |
| 889 bitmapInfo = bitmapInfo.makeColorType(kN32_SkColorType); | 896 bitmapInfo = bitmapInfo.makeColorType(kN32_SkColorType); |
| 890 } | 897 } |
| 891 | 898 |
| 892 SkBitmap bitmap; | 899 SkBitmap bitmap; |
| 893 if (!bitmap.tryAllocPixels(bitmapInfo)) { | 900 if (!bitmap.tryAllocPixels(bitmapInfo)) { |
| 894 return SkStringPrintf("Image(%s) is too large (%d x %d)", fPath.c_str(), | 901 return SkStringPrintf("Image(%s) is too large (%d x %d)", fPath.c_str(), |
| 895 bitmapInfo.width(), bitmapInfo.height()); | 902 bitmapInfo.width(), bitmapInfo.height()); |
| 896 } | 903 } |
| 897 | 904 |
| 898 size_t rowBytes = bitmap.rowBytes(); | 905 size_t rowBytes = bitmap.rowBytes(); |
| 899 SkCodec::Result r = codec->getPixels(decodeInfo, bitmap.getPixels(), rowByte
s); | 906 SkCodec::Result r = codec->getPixels(decodeInfo, bitmap.getPixels(), rowByte
s); |
| 900 if (SkCodec::kSuccess != r) { | 907 if (SkCodec::kSuccess != r) { |
| 901 return SkStringPrintf("Couldn't getPixels %s. Error code %d", fPath.c_st
r(), r); | 908 return SkStringPrintf("Couldn't getPixels %s. Error code %d", fPath.c_st
r(), r); |
| 902 } | 909 } |
| 903 | 910 |
| 904 switch (fMode) { | 911 switch (fMode) { |
| 905 case kBaseline_Mode: | 912 case kBaseline_Mode: |
| 906 case kDst_sRGB_Mode: | 913 case kDst_sRGB_Mode: |
| 907 case kDst_HPZR30w_Mode: | 914 case kDst_HPZR30w_Mode: |
| 908 canvas->drawBitmap(bitmap, 0, 0); | 915 canvas->drawBitmap(bitmap, 0, 0); |
| 909 break; | 916 break; |
| 910 #if defined(SK_TEST_QCMS) | 917 #if defined(SK_TEST_QCMS) |
| 911 case kQCMS_HPZR30w_Mode: { | 918 case kQCMS_HPZR30w_Mode: { |
| 912 sk_sp<SkData> srcData = codec->getICCData(); | 919 sk_sp<SkData> srcData = codec->getICCData(); |
| 920 if (!srcData) { |
| 921 return Error::Nonfatal("No ICC profile data. Cannot test with Q
CMS.\n"); |
| 922 } |
| 923 |
| 913 SkAutoTCallVProc<qcms_profile, qcms_profile_release> | 924 SkAutoTCallVProc<qcms_profile, qcms_profile_release> |
| 914 srcSpace(qcms_profile_from_memory(srcData->data(), srcData->
size())); | 925 srcSpace(qcms_profile_from_memory(srcData->data(), srcData->
size())); |
| 915 if (!srcSpace) { | 926 if (!srcSpace) { |
| 916 return Error::Nonfatal(SkStringPrintf("QCMS cannot create profil
e for %s.\n", | 927 return Error::Nonfatal(SkStringPrintf("QCMS cannot create profil
e for %s.\n", |
| 917 fPath.c_str())); | 928 fPath.c_str())); |
| 918 } | 929 } |
| 919 | 930 |
| 920 SkAutoTCallVProc<qcms_profile, qcms_profile_release> | 931 SkAutoTCallVProc<qcms_profile, qcms_profile_release> |
| 921 dstSpace(qcms_profile_from_memory(dstData->data(), dstData->
size())); | 932 dstSpace(qcms_profile_from_memory(dstData->data(), dstData->
size())); |
| 922 SkASSERT(dstSpace); | 933 SkASSERT(dstSpace); |
| (...skipping 633 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1556 skr.visit(i, drawsAsSingletonPictures); | 1567 skr.visit(i, drawsAsSingletonPictures); |
| 1557 } | 1568 } |
| 1558 sk_sp<SkPicture> macroPic(macroRec.finishRecordingAsPicture()); | 1569 sk_sp<SkPicture> macroPic(macroRec.finishRecordingAsPicture()); |
| 1559 | 1570 |
| 1560 canvas->drawPicture(macroPic); | 1571 canvas->drawPicture(macroPic); |
| 1561 return check_against_reference(bitmap, src, fSink); | 1572 return check_against_reference(bitmap, src, fSink); |
| 1562 }); | 1573 }); |
| 1563 } | 1574 } |
| 1564 | 1575 |
| 1565 } // namespace DM | 1576 } // namespace DM |
| OLD | NEW |