Chromium Code Reviews| Index: dm/DMSrcSink.cpp |
| diff --git a/dm/DMSrcSink.cpp b/dm/DMSrcSink.cpp |
| index a615b78e7aa34b5296e8332f5ea4036531800a39..efd3e703879ffa90287c0ec6f1b5d397d580adc7 100644 |
| --- a/dm/DMSrcSink.cpp |
| +++ b/dm/DMSrcSink.cpp |
| @@ -45,6 +45,7 @@ Error ImageSrc::draw(SkCanvas* canvas) const { |
| return SkStringPrintf("Couldn't read %s.", fPath.c_str()); |
| } |
| const SkColorType dstColorType = canvas->imageInfo().colorType(); |
| + SkString error; |
| if (fDivisor == 0) { |
| // Decode the full image. |
| SkBitmap bitmap; |
| @@ -66,18 +67,24 @@ Error ImageSrc::draw(SkCanvas* canvas) const { |
| SkAutoLockPixels alp(bitmap); |
| const SkImageGenerator::Result result = codec->getPixels(info, bitmap.getPixels(), |
| bitmap.rowBytes()); |
| - if (result != SkImageGenerator::kSuccess) { |
| + if (result == SkImageGenerator::kIncompleteInput) { |
|
scroggo
2015/03/04 17:10:29
I think this would read better as a switch stateme
msarett
2015/03/05 23:13:17
Doesn't feel to me like a switch statement is nece
|
| + error = SkStringPrintf("Warning incomplete getPixels %s.", fPath.c_str()); |
|
scroggo
2015/03/04 17:10:29
I'm not sure what the right behavior is here. Note
msarett
2015/03/05 23:13:17
The decision here is to accept kSuccess or kIncomp
|
| + } else if (result != SkImageGenerator::kSuccess) { |
| return SkStringPrintf("Couldn't getPixels %s.", fPath.c_str()); |
| + } else { |
| + error = ""; |
|
scroggo
2015/03/04 17:10:29
Maybe set error to "" initially?
|
| } |
| } else { |
| if (!SkImageDecoder::DecodeMemory(encoded->data(), encoded->size(), &bitmap, |
| dstColorType, SkImageDecoder::kDecodePixels_Mode)) { |
| return SkStringPrintf("Couldn't decode %s.", fPath.c_str()); |
| + } else { |
| + error = ""; |
| } |
| } |
| encoded.reset((SkData*)NULL); // Might as well drop this when we're done with it. |
| canvas->drawBitmap(bitmap, 0,0); |
| - return ""; |
| + return error; |
| } |
| // Decode subsets. This is a little involved. |
| SkAutoTDelete<SkMemoryStream> stream(new SkMemoryStream(encoded)); |
| @@ -114,15 +121,27 @@ Error ImageSrc::draw(SkCanvas* canvas) const { |
| SkISize ImageSrc::size() const { |
| SkAutoTUnref<SkData> encoded(SkData::NewFromFileName(fPath.c_str())); |
| - SkBitmap bitmap; |
| - if (!encoded || !SkImageDecoder::DecodeMemory(encoded->data(), |
| - encoded->size(), |
| - &bitmap, |
| - kUnknown_SkColorType, |
| - SkImageDecoder::kDecodeBounds_Mode)) { |
| - return SkISize::Make(0,0); |
| + if (FLAGS_codec) { |
| + SkAutoTDelete<SkCodec> codec(SkCodec::NewFromData(encoded)); |
| + if (!codec) { |
| + return SkISize::Make(0,0); |
| + } |
| + SkImageInfo info; |
| + if (!codec->getInfo(&info)) { |
| + return SkISize::Make(0,0); |
| + } |
| + return info.dimensions(); |
| + } else { |
| + SkBitmap bitmap; |
| + if (!encoded || !SkImageDecoder::DecodeMemory(encoded->data(), |
| + encoded->size(), |
| + &bitmap, |
| + kUnknown_SkColorType, |
| + SkImageDecoder::kDecodeBounds_Mode)) { |
| + return SkISize::Make(0,0); |
| + } |
| + return bitmap.dimensions(); |
| } |
| - return bitmap.dimensions(); |
| } |
| Name ImageSrc::name() const { |