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 "Resources.h" | 8 #include "Resources.h" |
9 #include "SkBitmap.h" | 9 #include "SkBitmap.h" |
10 #include "SkCodec.h" | 10 #include "SkCodec.h" |
(...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
71 rect.fBottom = rand->nextRangeU(0, h); | 71 rect.fBottom = rand->nextRangeU(0, h); |
72 rect.sort(); | 72 rect.sort(); |
73 } while (rect.isEmpty()); | 73 } while (rect.isEmpty()); |
74 return rect; | 74 return rect; |
75 } | 75 } |
76 | 76 |
77 static void check(skiatest::Reporter* r, | 77 static void check(skiatest::Reporter* r, |
78 const char path[], | 78 const char path[], |
79 SkISize size, | 79 SkISize size, |
80 bool supportsScanlineDecoding, | 80 bool supportsScanlineDecoding, |
81 bool supportsSubsetDecoding) { | 81 bool supportsSubsetDecoding, |
| 82 bool supports565 = true) { |
82 SkAutoTDelete<SkStream> stream(resource(path)); | 83 SkAutoTDelete<SkStream> stream(resource(path)); |
83 if (!stream) { | 84 if (!stream) { |
84 SkDebugf("Missing resource '%s'\n", path); | 85 SkDebugf("Missing resource '%s'\n", path); |
85 return; | 86 return; |
86 } | 87 } |
87 SkAutoTDelete<SkCodec> codec(SkCodec::NewFromStream(stream.detach())); | 88 SkAutoTDelete<SkCodec> codec(SkCodec::NewFromStream(stream.detach())); |
88 if (!codec) { | 89 if (!codec) { |
89 ERRORF(r, "Unable to decode '%s'", path); | 90 ERRORF(r, "Unable to decode '%s'", path); |
90 return; | 91 return; |
91 } | 92 } |
92 | 93 |
93 // This test is used primarily to verify rewinding works properly. Using kN
32 allows | 94 // This test is used primarily to verify rewinding works properly. Using kN
32 allows |
94 // us to test this without the added overhead of creating different bitmaps
depending | 95 // us to test this without the added overhead of creating different bitmaps
depending |
95 // on the color type (ex: building a color table for kIndex8). DM is where
we test | 96 // on the color type (ex: building a color table for kIndex8). DM is where
we test |
96 // decodes to all possible destination color types. | 97 // decodes to all possible destination color types. |
97 SkImageInfo info = codec->getInfo().makeColorType(kN32_SkColorType); | 98 SkImageInfo info = codec->getInfo().makeColorType(kN32_SkColorType); |
98 REPORTER_ASSERT(r, info.dimensions() == size); | 99 REPORTER_ASSERT(r, info.dimensions() == size); |
| 100 |
| 101 { |
| 102 // Test decoding to 565 |
| 103 SkImageInfo info565 = info.makeColorType(kRGB_565_SkColorType); |
| 104 SkCodec::Result expected = (supports565 && info.alphaType() == kOpaque_S
kAlphaType) ? |
| 105 SkCodec::kSuccess : SkCodec::kInvalidConversion; |
| 106 test_info(r, codec, info565, expected, NULL); |
| 107 } |
| 108 |
99 SkBitmap bm; | 109 SkBitmap bm; |
100 bm.allocPixels(info); | 110 bm.allocPixels(info); |
101 SkAutoLockPixels autoLockPixels(bm); | 111 SkAutoLockPixels autoLockPixels(bm); |
102 SkCodec::Result result = | 112 SkCodec::Result result = |
103 codec->getPixels(info, bm.getPixels(), bm.rowBytes(), NULL, NULL, NULL); | 113 codec->getPixels(info, bm.getPixels(), bm.rowBytes(), NULL, NULL, NULL); |
104 REPORTER_ASSERT(r, result == SkCodec::kSuccess); | 114 REPORTER_ASSERT(r, result == SkCodec::kSuccess); |
105 | 115 |
106 SkMD5::Digest digest; | 116 SkMD5::Digest digest; |
107 md5(bm, &digest); | 117 md5(bm, &digest); |
108 | 118 |
(...skipping 97 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
206 check(r, "color_wheel.ico", SkISize::Make(128, 128), false, false); | 216 check(r, "color_wheel.ico", SkISize::Make(128, 128), false, false); |
207 // Decodes an embedded PNG image | 217 // Decodes an embedded PNG image |
208 check(r, "google_chrome.ico", SkISize::Make(256, 256), false, false); | 218 check(r, "google_chrome.ico", SkISize::Make(256, 256), false, false); |
209 | 219 |
210 // GIF | 220 // GIF |
211 check(r, "box.gif", SkISize::Make(200, 55), false, false); | 221 check(r, "box.gif", SkISize::Make(200, 55), false, false); |
212 check(r, "color_wheel.gif", SkISize::Make(128, 128), false, false); | 222 check(r, "color_wheel.gif", SkISize::Make(128, 128), false, false); |
213 check(r, "randPixels.gif", SkISize::Make(8, 8), false, false); | 223 check(r, "randPixels.gif", SkISize::Make(8, 8), false, false); |
214 | 224 |
215 // JPG | 225 // JPG |
216 check(r, "CMYK.jpg", SkISize::Make(642, 516), true, false); | 226 check(r, "CMYK.jpg", SkISize::Make(642, 516), true, false, false); |
217 check(r, "color_wheel.jpg", SkISize::Make(128, 128), true, false); | 227 check(r, "color_wheel.jpg", SkISize::Make(128, 128), true, false); |
218 check(r, "grayscale.jpg", SkISize::Make(128, 128), true, false); | 228 check(r, "grayscale.jpg", SkISize::Make(128, 128), true, false); |
219 check(r, "mandrill_512_q075.jpg", SkISize::Make(512, 512), true, false); | 229 check(r, "mandrill_512_q075.jpg", SkISize::Make(512, 512), true, false); |
220 check(r, "randPixels.jpg", SkISize::Make(8, 8), true, false); | 230 check(r, "randPixels.jpg", SkISize::Make(8, 8), true, false); |
221 | 231 |
222 // PNG | 232 // PNG |
223 check(r, "arrow.png", SkISize::Make(187, 312), true, false); | 233 check(r, "arrow.png", SkISize::Make(187, 312), true, false); |
224 check(r, "baby_tux.png", SkISize::Make(240, 246), true, false); | 234 check(r, "baby_tux.png", SkISize::Make(240, 246), true, false); |
225 check(r, "color_wheel.png", SkISize::Make(128, 128), true, false); | 235 check(r, "color_wheel.png", SkISize::Make(128, 128), true, false); |
226 check(r, "half-transparent-white-pixel.png", SkISize::Make(1, 1), true, fals
e); | 236 check(r, "half-transparent-white-pixel.png", SkISize::Make(1, 1), true, fals
e); |
(...skipping 130 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
357 REPORTER_ASSERT(r, SkCodec::kInvalidParameters == result); | 367 REPORTER_ASSERT(r, SkCodec::kInvalidParameters == result); |
358 result = decoder->start( | 368 result = decoder->start( |
359 decoder->getInfo().makeColorType(kIndex_8_SkColorType)); | 369 decoder->getInfo().makeColorType(kIndex_8_SkColorType)); |
360 REPORTER_ASSERT(r, SkCodec::kInvalidParameters == result); | 370 REPORTER_ASSERT(r, SkCodec::kInvalidParameters == result); |
361 } | 371 } |
362 | 372 |
363 DEF_TEST(Codec_Params, r) { | 373 DEF_TEST(Codec_Params, r) { |
364 test_invalid_parameters(r, "index8.png"); | 374 test_invalid_parameters(r, "index8.png"); |
365 test_invalid_parameters(r, "mandrill.wbmp"); | 375 test_invalid_parameters(r, "mandrill.wbmp"); |
366 } | 376 } |
OLD | NEW |