Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(25)

Side by Side Diff: dm/DMSrcSink.cpp

Issue 1704433003: Make kInvalidConversion a fatal failure in DMSrcSink (Closed) Base URL: https://skia.googlesource.com/skia.git@master
Patch Set: Third time is the charm Created 4 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « dm/DM.cpp ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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
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
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
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
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
OLDNEW
« no previous file with comments | « dm/DM.cpp ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698