aboutsummaryrefslogtreecommitdiffhomepage
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/codec/SkCodecImageGenerator.cpp26
-rw-r--r--src/codec/SkCodecImageGenerator.h2
-rw-r--r--src/core/SkImageGenerator.cpp18
-rw-r--r--src/core/SkPictureImageGenerator.cpp32
-rw-r--r--src/core/SkPictureImageGenerator.h2
-rw-r--r--src/ports/SkImageGeneratorCG.cpp2
-rw-r--r--src/ports/SkImageGeneratorCG.h4
-rw-r--r--src/ports/SkImageGeneratorWIC.cpp2
-rw-r--r--src/ports/SkImageGeneratorWIC.h4
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:
/*