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 "SkAndroidCodec.h" | 9 #include "SkAndroidCodec.h" |
10 #include "SkCodec.h" | 10 #include "SkCodec.h" |
(...skipping 303 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
314 bool get_decode_info(SkImageInfo* decodeInfo, SkColorType canvasColorType, | 314 bool get_decode_info(SkImageInfo* decodeInfo, SkColorType canvasColorType, |
315 CodecSrc::DstColorType dstColorType) { | 315 CodecSrc::DstColorType dstColorType) { |
316 switch (dstColorType) { | 316 switch (dstColorType) { |
317 case CodecSrc::kIndex8_Always_DstColorType: | 317 case CodecSrc::kIndex8_Always_DstColorType: |
318 if (kRGB_565_SkColorType == canvasColorType) { | 318 if (kRGB_565_SkColorType == canvasColorType) { |
319 return false; | 319 return false; |
320 } | 320 } |
321 *decodeInfo = decodeInfo->makeColorType(kIndex_8_SkColorType); | 321 *decodeInfo = decodeInfo->makeColorType(kIndex_8_SkColorType); |
322 break; | 322 break; |
323 case CodecSrc::kGrayscale_Always_DstColorType: | 323 case CodecSrc::kGrayscale_Always_DstColorType: |
324 if (kRGB_565_SkColorType == canvasColorType) { | 324 if (kRGB_565_SkColorType == canvasColorType || |
325 kOpaque_SkAlphaType != decodeInfo->alphaType()) { | |
scroggo
2016/02/16 21:13:25
We only attempt gray if the codec reports it as th
msarett
2016/02/16 21:14:51
It gets hit because we now test kOpaque images to
| |
325 return false; | 326 return false; |
326 } | 327 } |
327 *decodeInfo = decodeInfo->makeColorType(kGray_8_SkColorType); | 328 *decodeInfo = decodeInfo->makeColorType(kGray_8_SkColorType); |
328 break; | 329 break; |
329 default: | 330 default: |
331 if (kRGB_565_SkColorType == canvasColorType && | |
332 kOpaque_SkAlphaType != decodeInfo->alphaType()) { | |
333 return false; | |
334 } | |
330 *decodeInfo = decodeInfo->makeColorType(canvasColorType); | 335 *decodeInfo = decodeInfo->makeColorType(canvasColorType); |
331 break; | 336 break; |
332 } | 337 } |
333 | 338 |
334 return true; | 339 return true; |
335 } | 340 } |
336 | 341 |
337 Error test_gen(SkCanvas* canvas, SkData* data) { | 342 Error test_gen(SkCanvas* canvas, SkData* data) { |
338 SkAutoTDelete<SkImageGenerator> gen = SkCodecImageGenerator::NewFromEncodedC odec(data); | 343 SkAutoTDelete<SkImageGenerator> gen = SkCodecImageGenerator::NewFromEncodedC odec(data); |
339 if (!gen) { | 344 if (!gen) { |
(...skipping 81 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
421 switch (fMode) { | 426 switch (fMode) { |
422 case kCodecZeroInit_Mode: | 427 case kCodecZeroInit_Mode: |
423 case kCodec_Mode: { | 428 case kCodec_Mode: { |
424 switch (codec->getPixels(decodeInfo, bitmap.getPixels(), bitmap.rowB ytes(), &options, | 429 switch (codec->getPixels(decodeInfo, bitmap.getPixels(), bitmap.rowB ytes(), &options, |
425 colorPtr, colorCountPtr)) { | 430 colorPtr, colorCountPtr)) { |
426 case SkCodec::kSuccess: | 431 case SkCodec::kSuccess: |
427 // We consider incomplete to be valid, since we should still decode what is | 432 // We consider incomplete to be valid, since we should still decode what is |
428 // available. | 433 // available. |
429 case SkCodec::kIncompleteInput: | 434 case SkCodec::kIncompleteInput: |
430 break; | 435 break; |
431 case SkCodec::kInvalidConversion: | |
432 return Error::Nonfatal("Incompatible colortype conversion"); | |
433 default: | 436 default: |
434 // Everything else is considered a failure. | 437 // Everything else is considered a failure. |
435 return SkStringPrintf("Couldn't getPixels %s.", fPath.c_str( )); | 438 return SkStringPrintf("Couldn't getPixels %s.", fPath.c_str( )); |
436 } | 439 } |
437 premultiply_if_necessary(bitmap); | 440 premultiply_if_necessary(bitmap); |
438 canvas->drawBitmap(bitmap, 0, 0); | 441 canvas->drawBitmap(bitmap, 0, 0); |
439 break; | 442 break; |
440 } | 443 } |
441 case kScanline_Mode: { | 444 case kScanline_Mode: { |
442 if (SkCodec::kSuccess != codec->startScanlineDecode(decodeInfo, NULL , colorPtr, | 445 if (SkCodec::kSuccess != codec->startScanlineDecode(decodeInfo, NULL , colorPtr, |
(...skipping 250 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
693 options.fColorCount = colorCountPtr; | 696 options.fColorCount = colorCountPtr; |
694 options.fSampleSize = fSampleSize; | 697 options.fSampleSize = fSampleSize; |
695 | 698 |
696 switch (fMode) { | 699 switch (fMode) { |
697 case kFullImage_Mode: { | 700 case kFullImage_Mode: { |
698 switch (codec->getAndroidPixels(decodeInfo, bitmap.getPixels(), bitm ap.rowBytes(), | 701 switch (codec->getAndroidPixels(decodeInfo, bitmap.getPixels(), bitm ap.rowBytes(), |
699 &options)) { | 702 &options)) { |
700 case SkCodec::kSuccess: | 703 case SkCodec::kSuccess: |
701 case SkCodec::kIncompleteInput: | 704 case SkCodec::kIncompleteInput: |
702 break; | 705 break; |
703 case SkCodec::kInvalidConversion: | |
704 return Error::Nonfatal("Cannot convert to requested color ty pe."); | |
705 default: | 706 default: |
706 return SkStringPrintf("Couldn't getPixels %s.", fPath.c_str( )); | 707 return SkStringPrintf("Couldn't getPixels %s.", fPath.c_str( )); |
707 } | 708 } |
708 premultiply_if_necessary(bitmap); | 709 premultiply_if_necessary(bitmap); |
709 canvas->drawBitmap(bitmap, 0, 0); | 710 canvas->drawBitmap(bitmap, 0, 0); |
710 return ""; | 711 return ""; |
711 } | 712 } |
712 case kDivisor_Mode: { | 713 case kDivisor_Mode: { |
713 const int width = codec->getInfo().width(); | 714 const int width = codec->getInfo().width(); |
714 const int height = codec->getInfo().height(); | 715 const int height = codec->getInfo().height(); |
(...skipping 695 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
1410 skr.visit<void>(i, drawsAsSingletonPictures); | 1411 skr.visit<void>(i, drawsAsSingletonPictures); |
1411 } | 1412 } |
1412 SkAutoTUnref<SkPicture> macroPic(macroRec.endRecordingAsPicture()); | 1413 SkAutoTUnref<SkPicture> macroPic(macroRec.endRecordingAsPicture()); |
1413 | 1414 |
1414 canvas->drawPicture(macroPic); | 1415 canvas->drawPicture(macroPic); |
1415 return check_against_reference(bitmap, src, fSink); | 1416 return check_against_reference(bitmap, src, fSink); |
1416 }); | 1417 }); |
1417 } | 1418 } |
1418 | 1419 |
1419 } // namespace DM | 1420 } // namespace DM |
OLD | NEW |