Index: tests/CodecTest.cpp |
diff --git a/tests/CodecTest.cpp b/tests/CodecTest.cpp |
index 9c60be4b6bf8ac8313297ccf9bf6939fb3c380a9..b01750d41074a42b7b4d4e9139f9bc42b741e1b5 100644 |
--- a/tests/CodecTest.cpp |
+++ b/tests/CodecTest.cpp |
@@ -1120,3 +1120,33 @@ DEF_TEST(Codec_PngRoundTrip, r) { |
REPORTER_ASSERT(r, SkCodec::kSuccess == result); |
check_round_trip(r, bm2); |
} |
+ |
+static void test_conversion_possible(skiatest::Reporter* r, const char* path, |
+ bool testScanlineDecoder) { |
+ SkAutoTDelete<SkStream> stream(resource(path)); |
+ SkAutoTDelete<SkCodec> codec(SkCodec::NewFromStream(stream.release())); |
+ SkImageInfo infoF16 = codec->getInfo().makeColorType(kRGBA_F16_SkColorType); |
+ |
+ SkBitmap bm; |
+ bm.allocPixels(infoF16); |
+ SkCodec::Result result = codec->getPixels(infoF16, bm.getPixels(), bm.rowBytes()); |
+ REPORTER_ASSERT(r, SkCodec::kInvalidConversion == result); |
+ if (testScanlineDecoder) { |
+ result = codec->startScanlineDecode(infoF16); |
+ REPORTER_ASSERT(r, SkCodec::kInvalidConversion == result); |
+ } |
+ |
+ infoF16 = infoF16.makeColorSpace(infoF16.colorSpace()->makeLinearGamma()); |
+ result = codec->getPixels(infoF16, bm.getPixels(), bm.rowBytes()); |
+ REPORTER_ASSERT(r, SkCodec::kSuccess == result); |
+ if (testScanlineDecoder) { |
+ result = codec->startScanlineDecode(infoF16); |
+ REPORTER_ASSERT(r, SkCodec::kSuccess == result); |
+ } |
+} |
+ |
+DEF_TEST(Codec_F16ConversionPossible, r) { |
+ test_conversion_possible(r, "color_wheel.webp", false); |
+ test_conversion_possible(r, "mandrill_512_q075.jpg", true); |
+ test_conversion_possible(r, "yellow_rose.png", true); |
+} |