Chromium Code Reviews| 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 |