diff options
author | Matt Sarett <msarett@google.com> | 2017-05-12 11:41:27 -0400 |
---|---|---|
committer | Skia Commit-Bot <skia-commit-bot@chromium.org> | 2017-05-12 16:48:17 +0000 |
commit | ebb1b5c297e394ab19f99d807095672b7f5d8aef (patch) | |
tree | 5f2fcd7f15da445df1efd5861b708df8f35c5ba0 /src | |
parent | 7c8460e10135c05a42d0744b84838bbc24398ac2 (diff) |
Add new SkImageGenerator::getPixels() API, deprecate the old
This is fairly aggressive in that it will break any client
that is currently using SkImageGenerator with kIndex8.
I'm guessing that we don't have any clients doing that.
Bug: skia:6620
Change-Id: Ifd16f5232bb3a9f759c225315c57492d917ed9ca
Reviewed-on: https://skia-review.googlesource.com/16601
Commit-Queue: Matt Sarett <msarett@google.com>
Reviewed-by: Mike Reed <reed@google.com>
Diffstat (limited to 'src')
-rw-r--r-- | src/codec/SkCodecImageGenerator.cpp | 26 | ||||
-rw-r--r-- | src/codec/SkCodecImageGenerator.h | 2 | ||||
-rw-r--r-- | src/core/SkImageGenerator.cpp | 18 | ||||
-rw-r--r-- | src/core/SkPictureImageGenerator.cpp | 32 | ||||
-rw-r--r-- | src/core/SkPictureImageGenerator.h | 2 | ||||
-rw-r--r-- | src/ports/SkImageGeneratorCG.cpp | 2 | ||||
-rw-r--r-- | src/ports/SkImageGeneratorCG.h | 4 | ||||
-rw-r--r-- | src/ports/SkImageGeneratorWIC.cpp | 2 | ||||
-rw-r--r-- | src/ports/SkImageGeneratorWIC.h | 4 |
9 files changed, 42 insertions, 50 deletions
diff --git a/src/codec/SkCodecImageGenerator.cpp b/src/codec/SkCodecImageGenerator.cpp index d778bc7ea1..bf794d60d3 100644 --- a/src/codec/SkCodecImageGenerator.cpp +++ b/src/codec/SkCodecImageGenerator.cpp @@ -17,16 +17,21 @@ std::unique_ptr<SkImageGenerator> SkCodecImageGenerator::MakeFromEncodedCodec(sk return std::unique_ptr<SkImageGenerator>(new SkCodecImageGenerator(codec, data)); } -static SkImageInfo make_premul(const SkImageInfo& info) { +static SkImageInfo adjust_info(const SkImageInfo& info) { + SkImageInfo newInfo = info; if (kUnpremul_SkAlphaType == info.alphaType()) { - return info.makeAlphaType(kPremul_SkAlphaType); + newInfo = newInfo.makeAlphaType(kPremul_SkAlphaType); } - return info; + if (kIndex_8_SkColorType == info.colorType()) { + newInfo = newInfo.makeColorType(kN32_SkColorType); + } + + return newInfo; } SkCodecImageGenerator::SkCodecImageGenerator(SkCodec* codec, sk_sp<SkData> data) - : INHERITED(make_premul(codec->getInfo())) + : INHERITED(adjust_info(codec->getInfo())) , fCodec(codec) , fData(std::move(data)) {} @@ -36,20 +41,11 @@ SkData* SkCodecImageGenerator::onRefEncodedData() { } bool SkCodecImageGenerator::onGetPixels(const SkImageInfo& info, void* pixels, size_t rowBytes, - SkPMColor ctable[], int* ctableCount) { - Options opts; - opts.fColorTable = ctable; - opts.fColorTableCount = ctableCount; - opts.fBehavior = SkTransferFunctionBehavior::kRespect; - return this->onGetPixels(info, pixels, rowBytes, opts); -} - -bool SkCodecImageGenerator::onGetPixels(const SkImageInfo& info, void* pixels, size_t rowBytes, const Options& opts) { SkCodec::Options codecOpts; codecOpts.fPremulBehavior = opts.fBehavior; - SkCodec::Result result = fCodec->getPixels(info, pixels, rowBytes, &codecOpts, opts.fColorTable, - opts.fColorTableCount); + SkCodec::Result result = fCodec->getPixels(info, pixels, rowBytes, &codecOpts, nullptr, + nullptr); switch (result) { case SkCodec::kSuccess: case SkCodec::kIncompleteInput: diff --git a/src/codec/SkCodecImageGenerator.h b/src/codec/SkCodecImageGenerator.h index 832a7f3bed..4d0c0780a6 100644 --- a/src/codec/SkCodecImageGenerator.h +++ b/src/codec/SkCodecImageGenerator.h @@ -23,8 +23,6 @@ public: protected: SkData* onRefEncodedData() override; - bool onGetPixels(const SkImageInfo& info, void* pixels, size_t rowBytes, SkPMColor ctable[], - int* ctableCount) override; bool onGetPixels(const SkImageInfo& info, void* pixels, size_t rowBytes, const Options& opts) override; diff --git a/src/core/SkImageGenerator.cpp b/src/core/SkImageGenerator.cpp index 35eaf8900e..d0d8f97c74 100644 --- a/src/core/SkImageGenerator.cpp +++ b/src/core/SkImageGenerator.cpp @@ -14,6 +14,7 @@ SkImageGenerator::SkImageGenerator(const SkImageInfo& info, uint32_t uniqueID) , fUniqueID(kNeedNewImageUniqueID == uniqueID ? SkNextID::ImageID() : uniqueID) {} +#ifdef SK_SUPPORT_LEGACY_IMGEN_API bool SkImageGenerator::getPixels(const SkImageInfo& info, void* pixels, size_t rowBytes, SkPMColor ctable[], int* ctableCount) { if (kUnknown_SkColorType == info.colorType()) { @@ -44,9 +45,20 @@ bool SkImageGenerator::getPixels(const SkImageInfo& info, void* pixels, size_t r } return success; } +#endif bool SkImageGenerator::getPixels(const SkImageInfo& info, void* pixels, size_t rowBytes, const Options* opts) { + if (kUnknown_SkColorType == info.colorType() || kIndex_8_SkColorType == info.colorType()) { + return false; + } + if (nullptr == pixels) { + return false; + } + if (rowBytes < info.minRowBytes()) { + return false; + } + Options defaultOpts; if (!opts) { opts = &defaultOpts; @@ -55,11 +67,7 @@ bool SkImageGenerator::getPixels(const SkImageInfo& info, void* pixels, size_t r } bool SkImageGenerator::getPixels(const SkImageInfo& info, void* pixels, size_t rowBytes) { - SkASSERT(kIndex_8_SkColorType != info.colorType()); - if (kIndex_8_SkColorType == info.colorType()) { - return false; - } - return this->getPixels(info, pixels, rowBytes, nullptr, nullptr); + return this->getPixels(info, pixels, rowBytes, nullptr); } bool SkImageGenerator::queryYUV8(SkYUVSizeInfo* sizeInfo, SkYUVColorSpace* colorSpace) const { diff --git a/src/core/SkPictureImageGenerator.cpp b/src/core/SkPictureImageGenerator.cpp index 34046e9ae4..86e98d828b 100644 --- a/src/core/SkPictureImageGenerator.cpp +++ b/src/core/SkPictureImageGenerator.cpp @@ -59,33 +59,25 @@ SkPictureImageGenerator::SkPictureImageGenerator(const SkImageInfo& info, sk_sp< } bool SkPictureImageGenerator::onGetPixels(const SkImageInfo& info, void* pixels, size_t rowBytes, - SkPMColor ctable[], int* ctableCount) { - // Rely on SkCanvas factory to know what configs can and cannot be drawn into. - auto canvas = SkCanvas::MakeRasterDirect(info, pixels, rowBytes); - if (!canvas) { - return false; - } - canvas->clear(0); - canvas->drawPicture(fPicture, &fMatrix, fPaint.getMaybeNull()); - return true; -} - -bool SkPictureImageGenerator::onGetPixels(const SkImageInfo& info, void* pixels, size_t rowBytes, const Options& opts) { - // No need to use the xform canvas if we want fully color correct behavior or if we do not - // have a destination color space. - if (SkTransferFunctionBehavior::kRespect == opts.fBehavior || !info.colorSpace()) { - return this->onGetPixels(info, pixels, rowBytes, opts.fColorTable, opts.fColorTableCount); - } + bool useXformCanvas = + SkTransferFunctionBehavior::kIgnore == opts.fBehavior && info.colorSpace(); - auto canvas = SkCanvas::MakeRasterDirect(info.makeColorSpace(nullptr), pixels, rowBytes); + SkImageInfo canvasInfo = useXformCanvas ? info.makeColorSpace(nullptr) : info; + std::unique_ptr<SkCanvas> canvas = SkCanvas::MakeRasterDirect(canvasInfo, pixels, rowBytes); if (!canvas) { return false; } canvas->clear(0); - auto xformCanvas = SkCreateColorSpaceXformCanvas(canvas.get(), info.refColorSpace()); - xformCanvas->drawPicture(fPicture, &fMatrix, fPaint.getMaybeNull()); + SkCanvas* canvasPtr = canvas.get(); + std::unique_ptr<SkCanvas> xformCanvas; + if (useXformCanvas) { + xformCanvas = SkCreateColorSpaceXformCanvas(canvas.get(), info.refColorSpace()); + canvasPtr = xformCanvas.get(); + } + + canvasPtr->drawPicture(fPicture, &fMatrix, fPaint.getMaybeNull()); return true; } diff --git a/src/core/SkPictureImageGenerator.h b/src/core/SkPictureImageGenerator.h index 95eeb88236..6dba29c172 100644 --- a/src/core/SkPictureImageGenerator.h +++ b/src/core/SkPictureImageGenerator.h @@ -17,8 +17,6 @@ public: sk_sp<SkColorSpace>); protected: - bool onGetPixels(const SkImageInfo& info, void* pixels, size_t rowBytes, SkPMColor ctable[], - int* ctableCount) override; bool onGetPixels(const SkImageInfo& info, void* pixels, size_t rowBytes, const Options& opts) override; diff --git a/src/ports/SkImageGeneratorCG.cpp b/src/ports/SkImageGeneratorCG.cpp index 7aa1f28cde..a2fe6a40ef 100644 --- a/src/ports/SkImageGeneratorCG.cpp +++ b/src/ports/SkImageGeneratorCG.cpp @@ -80,7 +80,7 @@ SkData* SkImageGeneratorCG::onRefEncodedData() { } bool SkImageGeneratorCG::onGetPixels(const SkImageInfo& info, void* pixels, size_t rowBytes, - SkPMColor ctable[], int* ctableCount) { + const Options&) { if (kN32_SkColorType != info.colorType()) { // FIXME: Support other colorTypes. return false; diff --git a/src/ports/SkImageGeneratorCG.h b/src/ports/SkImageGeneratorCG.h index 2c20c5c25b..65300a6de2 100644 --- a/src/ports/SkImageGeneratorCG.h +++ b/src/ports/SkImageGeneratorCG.h @@ -24,8 +24,8 @@ public: protected: SkData* onRefEncodedData() override; - bool onGetPixels(const SkImageInfo& info, void* pixels, size_t rowBytes, SkPMColor ctable[], - int* ctableCount) override; + bool onGetPixels(const SkImageInfo& info, void* pixels, size_t rowBytes, const Options&) + override; private: /* diff --git a/src/ports/SkImageGeneratorWIC.cpp b/src/ports/SkImageGeneratorWIC.cpp index 358d993e16..e69b2ee2e9 100644 --- a/src/ports/SkImageGeneratorWIC.cpp +++ b/src/ports/SkImageGeneratorWIC.cpp @@ -137,7 +137,7 @@ SkData* SkImageGeneratorWIC::onRefEncodedData() { } bool SkImageGeneratorWIC::onGetPixels(const SkImageInfo& info, void* pixels, size_t rowBytes, - SkPMColor ctable[], int* ctableCount) { + const Options&) { if (kN32_SkColorType != info.colorType()) { return false; } diff --git a/src/ports/SkImageGeneratorWIC.h b/src/ports/SkImageGeneratorWIC.h index 0a5c9d32ed..4770ee2111 100644 --- a/src/ports/SkImageGeneratorWIC.h +++ b/src/ports/SkImageGeneratorWIC.h @@ -41,8 +41,8 @@ public: protected: SkData* onRefEncodedData() override; - bool onGetPixels(const SkImageInfo& info, void* pixels, size_t rowBytes, SkPMColor ctable[], - int* ctableCount) override; + bool onGetPixels(const SkImageInfo& info, void* pixels, size_t rowBytes, const Options&) + override; private: /* |