Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 #include "DMSrcSink.h" | 1 #include "DMSrcSink.h" |
| 2 #include "SamplePipeControllers.h" | 2 #include "SamplePipeControllers.h" |
| 3 #include "SkCommonFlags.h" | 3 #include "SkCommonFlags.h" |
| 4 #include "SkCodec.h" | 4 #include "SkCodec.h" |
| 5 #include "SkDocument.h" | 5 #include "SkDocument.h" |
| 6 #include "SkError.h" | 6 #include "SkError.h" |
| 7 #include "SkMultiPictureDraw.h" | 7 #include "SkMultiPictureDraw.h" |
| 8 #include "SkNullCanvas.h" | 8 #include "SkNullCanvas.h" |
| 9 #include "SkOSFile.h" | 9 #include "SkOSFile.h" |
| 10 #include "SkPictureData.h" | 10 #include "SkPictureData.h" |
| 11 #include "SkPictureRecorder.h" | 11 #include "SkPictureRecorder.h" |
| 12 #include "SkRandom.h" | 12 #include "SkRandom.h" |
| 13 #include "SkScanlineDecoder.h" | |
| 13 #include "SkSVGCanvas.h" | 14 #include "SkSVGCanvas.h" |
| 14 #include "SkStream.h" | 15 #include "SkStream.h" |
| 15 #include "SkXMLWriter.h" | 16 #include "SkXMLWriter.h" |
| 16 | 17 |
| 17 namespace DM { | 18 namespace DM { |
| 18 | 19 |
| 19 GMSrc::GMSrc(skiagm::GMRegistry::Factory factory) : fFactory(factory) {} | 20 GMSrc::GMSrc(skiagm::GMRegistry::Factory factory) : fFactory(factory) {} |
| 20 | 21 |
| 21 Error GMSrc::draw(SkCanvas* canvas) const { | 22 Error GMSrc::draw(SkCanvas* canvas) const { |
| 22 SkAutoTDelete<skiagm::GM> gm(fFactory(NULL)); | 23 SkAutoTDelete<skiagm::GM> gm(fFactory(NULL)); |
| 23 canvas->concat(gm->getInitialTransform()); | 24 canvas->concat(gm->getInitialTransform()); |
| 24 gm->draw(canvas); | 25 gm->draw(canvas); |
| 25 return ""; | 26 return ""; |
| 26 } | 27 } |
| 27 | 28 |
| 28 SkISize GMSrc::size() const { | 29 SkISize GMSrc::size() const { |
| 29 SkAutoTDelete<skiagm::GM> gm(fFactory(NULL)); | 30 SkAutoTDelete<skiagm::GM> gm(fFactory(NULL)); |
| 30 return gm->getISize(); | 31 return gm->getISize(); |
| 31 } | 32 } |
| 32 | 33 |
| 33 Name GMSrc::name() const { | 34 Name GMSrc::name() const { |
| 34 SkAutoTDelete<skiagm::GM> gm(fFactory(NULL)); | 35 SkAutoTDelete<skiagm::GM> gm(fFactory(NULL)); |
| 35 return gm->getName(); | 36 return gm->getName(); |
| 36 } | 37 } |
| 37 | 38 |
| 38 /*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~*/ | 39 /*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~*/ |
| 39 | 40 |
| 40 CodecSrc::CodecSrc(Path path) : fPath(path) {} | 41 CodecSrc::CodecSrc(Path path, Mode mode) : fPath(path), fMode(mode) {} |
| 41 | 42 |
| 42 Error CodecSrc::draw(SkCanvas* canvas) const { | 43 Error CodecSrc::draw(SkCanvas* canvas) const { |
| 43 SkImageInfo canvasInfo; | 44 SkImageInfo canvasInfo; |
| 44 if (NULL == canvas->peekPixels(&canvasInfo, NULL)) { | 45 if (NULL == canvas->peekPixels(&canvasInfo, NULL)) { |
| 45 // TODO: Once we implement GPU paths (e.g. JPEG YUV), we should use a de ferred decode to | 46 // TODO: Once we implement GPU paths (e.g. JPEG YUV), we should use a de ferred decode to |
| 46 // let the GPU handle it. | 47 // let the GPU handle it. |
| 47 return Error::Nonfatal("No need to test decoding to non-raster backend." ); | 48 return Error::Nonfatal("No need to test decoding to non-raster backend." ); |
| 48 } | 49 } |
| 49 | 50 |
| 50 SkAutoTUnref<SkData> encoded(SkData::NewFromFileName(fPath.c_str())); | 51 SkAutoTUnref<SkData> encoded(SkData::NewFromFileName(fPath.c_str())); |
| (...skipping 11 matching lines...) Expand all Loading... | |
| 62 // FIXME: Currently we cannot draw unpremultiplied sources. | 63 // FIXME: Currently we cannot draw unpremultiplied sources. |
| 63 decodeInfo = decodeInfo.makeAlphaType(kPremul_SkAlphaType); | 64 decodeInfo = decodeInfo.makeAlphaType(kPremul_SkAlphaType); |
| 64 } | 65 } |
| 65 | 66 |
| 66 SkBitmap bitmap; | 67 SkBitmap bitmap; |
| 67 if (!bitmap.tryAllocPixels(decodeInfo)) { | 68 if (!bitmap.tryAllocPixels(decodeInfo)) { |
| 68 return SkStringPrintf("Image(%s) is too large (%d x %d)\n", fPath.c_str( ), | 69 return SkStringPrintf("Image(%s) is too large (%d x %d)\n", fPath.c_str( ), |
| 69 decodeInfo.width(), decodeInfo.height()); | 70 decodeInfo.width(), decodeInfo.height()); |
| 70 } | 71 } |
| 71 | 72 |
| 72 SkAutoLockPixels alp(bitmap); | 73 switch (fMode) { |
| 73 switch (codec->getPixels(decodeInfo, bitmap.getPixels(), bitmap.rowBytes())) { | 74 case kNormal_Mode: |
| 74 case SkImageGenerator::kSuccess: | 75 switch (codec->getPixels(decodeInfo, bitmap.getPixels(), bitmap.rowB ytes())) { |
| 75 // We consider incomplete to be valid, since we should still decode what is | 76 case SkImageGenerator::kSuccess: |
| 76 // available. | 77 // We consider incomplete to be valid, since we should still decode what is |
| 77 case SkImageGenerator::kIncompleteInput: | 78 // available. |
| 78 canvas->drawBitmap(bitmap, 0, 0); | 79 case SkImageGenerator::kIncompleteInput: |
| 79 return ""; | 80 break; |
| 80 case SkImageGenerator::kInvalidConversion: | 81 case SkImageGenerator::kInvalidConversion: |
| 81 return Error::Nonfatal("Incompatible colortype conversion"); | 82 return Error::Nonfatal("Incompatible colortype conversion"); |
| 82 default: | 83 default: |
| 83 // Everything else is considered a failure. | 84 // Everything else is considered a failure. |
| 84 return SkStringPrintf("Couldn't getPixels %s.", fPath.c_str()); | 85 return SkStringPrintf("Couldn't getPixels %s.", fPath.c_str( )); |
| 86 } | |
| 87 break; | |
| 88 case kScanline_Mode: { | |
| 89 SkScanlineDecoder* scanlineDecoder = codec->getScanlineDecoder(decod eInfo); | |
| 90 if (NULL == scanlineDecoder) { | |
| 91 return Error::Nonfatal("Cannot use scanline decoder for all imag es"); | |
| 92 } | |
| 93 for (int y = 0; y < decodeInfo.height(); ++y) { | |
| 94 const SkImageGenerator::Result result = scanlineDecoder->getScan lines( | |
| 95 bitmap.getAddr(0, y), 1, 0); | |
| 96 switch (result) { | |
| 97 case SkImageGenerator::kSuccess: | |
| 98 case SkImageGenerator::kIncompleteInput: | |
| 99 break; | |
| 100 default: | |
| 101 return SkStringPrintf("%s failed after %d scanlines with error message %d", | |
| 102 y-1, fPath.c_str(), (int) result); | |
|
mtklein
2015/03/25 20:31:38
y-1 and fPath.c_str() are backwards?
scroggo
2015/03/25 20:36:28
Yep. Changed the string and forgot to change the p
| |
| 103 } | |
| 104 } | |
| 105 break; | |
| 106 } | |
| 85 } | 107 } |
| 108 canvas->drawBitmap(bitmap, 0, 0); | |
| 109 return ""; | |
| 86 } | 110 } |
| 87 | 111 |
| 88 SkISize CodecSrc::size() const { | 112 SkISize CodecSrc::size() const { |
| 89 SkAutoTUnref<SkData> encoded(SkData::NewFromFileName(fPath.c_str())); | 113 SkAutoTUnref<SkData> encoded(SkData::NewFromFileName(fPath.c_str())); |
| 90 SkAutoTDelete<SkCodec> codec(SkCodec::NewFromData(encoded)); | 114 SkAutoTDelete<SkCodec> codec(SkCodec::NewFromData(encoded)); |
| 91 return codec->getInfo().dimensions(); | 115 return codec->getInfo().dimensions(); |
| 92 } | 116 } |
| 93 | 117 |
| 94 Name CodecSrc::name() const { | 118 Name CodecSrc::name() const { |
| 95 return SkOSPath::Basename(fPath.c_str()); | 119 return SkOSPath::Basename(fPath.c_str()); |
| (...skipping 478 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 574 surfaces.unrefAll(); | 598 surfaces.unrefAll(); |
| 575 return ""; | 599 return ""; |
| 576 } | 600 } |
| 577 SkISize size() const SK_OVERRIDE { return fSize; } | 601 SkISize size() const SK_OVERRIDE { return fSize; } |
| 578 Name name() const SK_OVERRIDE { sk_throw(); return ""; } // No one shou ld be calling this. | 602 Name name() const SK_OVERRIDE { sk_throw(); return ""; } // No one shou ld be calling this. |
| 579 } proxy(fW, fH, pic, src.size()); | 603 } proxy(fW, fH, pic, src.size()); |
| 580 return fSink->draw(proxy, bitmap, stream, log); | 604 return fSink->draw(proxy, bitmap, stream, log); |
| 581 } | 605 } |
| 582 | 606 |
| 583 } // namespace DM | 607 } // namespace DM |
| OLD | NEW |