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

Unified Diff: src/images/SkDecodingImageGenerator.cpp

Issue 1692053002: Delete SkDecodingImageGenerator (Closed) Base URL: https://skia.googlesource.com/skia.git@noble
Patch Set: 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 side-by-side diff with in-line comments
Download patch
Index: src/images/SkDecodingImageGenerator.cpp
diff --git a/src/images/SkDecodingImageGenerator.cpp b/src/images/SkDecodingImageGenerator.cpp
deleted file mode 100644
index 8d55bd36c7b07c2aa6cb40bb925f63f1a4af8a1e..0000000000000000000000000000000000000000
--- a/src/images/SkDecodingImageGenerator.cpp
+++ /dev/null
@@ -1,288 +0,0 @@
-/*
- * Copyright 2013 Google Inc.
- *
- * Use of this source code is governed by a BSD-style license that can be
- * found in the LICENSE file.
- */
-
-#include "SkData.h"
-#include "SkDecodingImageGenerator.h"
-#include "SkImageDecoder.h"
-#include "SkImageInfo.h"
-#include "SkImageGenerator.h"
-#include "SkImagePriv.h"
-#include "SkStream.h"
-#include "SkUtils.h"
-
-namespace {
-bool equal_modulo_alpha(const SkImageInfo& a, const SkImageInfo& b) {
- return a.width() == b.width() && a.height() == b.height() &&
- a.colorType() == b.colorType();
-}
-
-class DecodingImageGenerator : public SkImageGenerator {
-public:
- virtual ~DecodingImageGenerator();
-
- SkData* fData;
- SkAutoTDelete<SkStreamRewindable> fStream;
- const SkImageInfo fInfo;
- const int fSampleSize;
- const bool fDitherImage;
-
- DecodingImageGenerator(SkData* data,
- SkStreamRewindable* stream,
- const SkImageInfo& info,
- int sampleSize,
- bool ditherImage);
-
-protected:
- SkData* onRefEncodedData(SK_REFENCODEDDATA_CTXPARAM) override;
- bool onGetPixels(const SkImageInfo& info, void* pixels, size_t rowBytes,
- SkPMColor ctable[], int* ctableCount) override;
- bool onGetYUV8Planes(SkISize sizes[3], void* planes[3], size_t rowBytes[3],
- SkYUVColorSpace* colorSpace) override;
-
-private:
- typedef SkImageGenerator INHERITED;
-};
-
-/**
- * Special allocator used by getPixels(). Uses preallocated memory
- * provided if possible, else fall-back on the default allocator
- */
-class TargetAllocator : public SkBitmap::Allocator {
-public:
- TargetAllocator(const SkImageInfo& info,
- void* target,
- size_t rowBytes)
- : fInfo(info)
- , fTarget(target)
- , fRowBytes(rowBytes)
- {}
-
- bool isReady() { return (fTarget != nullptr); }
-
- virtual bool allocPixelRef(SkBitmap* bm, SkColorTable* ct) {
- if (nullptr == fTarget || !equal_modulo_alpha(fInfo, bm->info())) {
- // Call default allocator.
- return bm->tryAllocPixels(nullptr, ct);
- }
-
- // TODO(halcanary): verify that all callers of this function
- // will respect new RowBytes. Will be moot once rowbytes belongs
- // to PixelRef.
- bm->installPixels(fInfo, fTarget, fRowBytes, ct, nullptr, nullptr);
-
- fTarget = nullptr; // never alloc same pixels twice!
- return true;
- }
-
-private:
- const SkImageInfo fInfo;
- void* fTarget; // Block of memory to be supplied as pixel memory
- // in allocPixelRef. Must be large enough to hold
- // a bitmap described by fInfo and fRowBytes
- const size_t fRowBytes; // rowbytes for the destination bitmap
-
- typedef SkBitmap::Allocator INHERITED;
-};
-
-// TODO(halcanary): Give this macro a better name and move it into SkTypes.h
-#ifdef SK_DEBUG
- #define SkCheckResult(expr, value) SkASSERT((value) == (expr))
-#else
- #define SkCheckResult(expr, value) (void)(expr)
-#endif
-
-#ifdef SK_DEBUG
-inline bool check_alpha(SkAlphaType reported, SkAlphaType actual) {
- return ((reported == actual)
- || ((reported == kPremul_SkAlphaType)
- && (actual == kOpaque_SkAlphaType)));
-}
-#endif // SK_DEBUG
-
-////////////////////////////////////////////////////////////////////////////////
-
-DecodingImageGenerator::DecodingImageGenerator(
- SkData* data,
- SkStreamRewindable* stream,
- const SkImageInfo& info,
- int sampleSize,
- bool ditherImage)
- : INHERITED(info)
- , fData(data)
- , fStream(stream)
- , fInfo(info)
- , fSampleSize(sampleSize)
- , fDitherImage(ditherImage)
-{
- SkASSERT(stream != nullptr);
- SkSafeRef(fData); // may be nullptr.
-}
-
-DecodingImageGenerator::~DecodingImageGenerator() {
- SkSafeUnref(fData);
-}
-
-SkData* DecodingImageGenerator::onRefEncodedData(SK_REFENCODEDDATA_CTXPARAM) {
- // This functionality is used in `gm --serialize`
- // Does not encode options.
- if (nullptr == fData) {
- // TODO(halcanary): SkStreamRewindable needs a refData() function
- // which returns a cheap copy of the underlying data.
- if (!fStream->rewind()) {
- return nullptr;
- }
- size_t length = fStream->getLength();
- if (length) {
- fData = SkData::NewFromStream(fStream, length);
- }
- }
- return SkSafeRef(fData);
-}
-
-bool DecodingImageGenerator::onGetPixels(const SkImageInfo& info, void* pixels, size_t rowBytes,
- SkPMColor ctableEntries[], int* ctableCount) {
- if (fInfo != info) {
- // The caller has specified a different info. This is an
- // error for this kind of SkImageGenerator. Use the Options
- // to change the settings.
- return false;
- }
-
- SkAssertResult(fStream->rewind());
- SkAutoTDelete<SkImageDecoder> decoder(SkImageDecoder::Factory(fStream));
- if (nullptr == decoder.get()) {
- return false;
- }
- decoder->setDitherImage(fDitherImage);
- decoder->setSampleSize(fSampleSize);
- decoder->setRequireUnpremultipliedColors(info.alphaType() == kUnpremul_SkAlphaType);
-
- SkBitmap bitmap;
- TargetAllocator allocator(fInfo, pixels, rowBytes);
- decoder->setAllocator(&allocator);
- const SkImageDecoder::Result decodeResult = decoder->decode(fStream, &bitmap, info.colorType(),
- SkImageDecoder::kDecodePixels_Mode);
- decoder->setAllocator(nullptr);
- if (SkImageDecoder::kFailure == decodeResult) {
- return false;
- }
- if (allocator.isReady()) { // Did not use pixels!
- SkBitmap bm;
- SkASSERT(bitmap.canCopyTo(info.colorType()));
- bool copySuccess = bitmap.copyTo(&bm, info.colorType(), &allocator);
- if (!copySuccess || allocator.isReady()) {
- SkDEBUGFAIL("bitmap.copyTo(requestedConfig) failed.");
- // Earlier we checked canCopyto(); we expect consistency.
- return false;
- }
- SkASSERT(check_alpha(info.alphaType(), bm.alphaType()));
- } else {
- SkASSERT(check_alpha(info.alphaType(), bitmap.alphaType()));
- }
-
- if (kIndex_8_SkColorType == info.colorType()) {
- if (kIndex_8_SkColorType != bitmap.colorType()) {
- // they asked for Index8, but we didn't receive that from decoder
- return false;
- }
- SkColorTable* ctable = bitmap.getColorTable();
- if (nullptr == ctable) {
- return false;
- }
- const int count = ctable->count();
- memcpy(ctableEntries, ctable->readColors(), count * sizeof(SkPMColor));
- *ctableCount = count;
- }
- return true;
-}
-
-bool DecodingImageGenerator::onGetYUV8Planes(SkISize sizes[3], void* planes[3],
- size_t rowBytes[3], SkYUVColorSpace* colorSpace) {
- if (!fStream->rewind()) {
- return false;
- }
-
- SkAutoTDelete<SkImageDecoder> decoder(SkImageDecoder::Factory(fStream));
- if (nullptr == decoder.get()) {
- return false;
- }
-
- return decoder->decodeYUV8Planes(fStream, sizes, planes, rowBytes, colorSpace);
-}
-
-// A contructor-type function that returns nullptr on failure. This
-// prevents the returned SkImageGenerator from ever being in a bad
-// state. Called by both Create() functions
-SkImageGenerator* CreateDecodingImageGenerator(
- SkData* data,
- SkStreamRewindable* stream,
- const SkDecodingImageGenerator::Options& opts) {
- SkASSERT(stream);
- SkAutoTDelete<SkStreamRewindable> autoStream(stream); // always delete this
- SkAssertResult(autoStream->rewind());
- SkAutoTDelete<SkImageDecoder> decoder(SkImageDecoder::Factory(autoStream));
- if (nullptr == decoder.get()) {
- return nullptr;
- }
- SkBitmap bitmap;
- decoder->setSampleSize(opts.fSampleSize);
- decoder->setRequireUnpremultipliedColors(opts.fRequireUnpremul);
- if (!decoder->decode(stream, &bitmap, SkImageDecoder::kDecodeBounds_Mode)) {
- return nullptr;
- }
- if (kUnknown_SkColorType == bitmap.colorType()) {
- return nullptr;
- }
-
- SkImageInfo info = bitmap.info();
-
- if (opts.fUseRequestedColorType && (opts.fRequestedColorType != info.colorType())) {
- if (!bitmap.canCopyTo(opts.fRequestedColorType)) {
- SkASSERT(bitmap.colorType() != opts.fRequestedColorType);
- return nullptr; // Can not translate to needed config.
- }
- info = info.makeColorType(opts.fRequestedColorType);
- }
-
- if (opts.fRequireUnpremul && info.alphaType() != kOpaque_SkAlphaType) {
- info = info.makeAlphaType(kUnpremul_SkAlphaType);
- }
-
- SkAlphaType newAlphaType = info.alphaType();
- if (!SkColorTypeValidateAlphaType(info.colorType(), info.alphaType(), &newAlphaType)) {
- return nullptr;
- }
-
- return new DecodingImageGenerator(data, autoStream.detach(), info.makeAlphaType(newAlphaType),
- opts.fSampleSize, opts.fDitherImage);
-}
-
-} // namespace
-
-////////////////////////////////////////////////////////////////////////////////
-
-SkImageGenerator* SkDecodingImageGenerator::Create(
- SkData* data,
- const SkDecodingImageGenerator::Options& opts) {
- SkASSERT(data != nullptr);
- if (nullptr == data) {
- return nullptr;
- }
- SkStreamRewindable* stream = new SkMemoryStream(data);
- SkASSERT(stream != nullptr);
- return CreateDecodingImageGenerator(data, stream, opts);
-}
-
-SkImageGenerator* SkDecodingImageGenerator::Create(
- SkStreamRewindable* stream,
- const SkDecodingImageGenerator::Options& opts) {
- SkASSERT(stream != nullptr);
- if (stream == nullptr) {
- return nullptr;
- }
- return CreateDecodingImageGenerator(nullptr, stream, opts);
-}

Powered by Google App Engine
This is Rietveld 408576698