Chromium Code Reviews| Index: src/core/SkCodecImageGenerator.cpp |
| diff --git a/src/core/SkCodecImageGenerator.cpp b/src/core/SkCodecImageGenerator.cpp |
| new file mode 100644 |
| index 0000000000000000000000000000000000000000..42f8f63c19c20e6d1acfdc9ffcae83eb44e0bf87 |
| --- /dev/null |
| +++ b/src/core/SkCodecImageGenerator.cpp |
| @@ -0,0 +1,56 @@ |
| +/* |
| + * Copyright 2015 Google Inc. |
| + * |
| + * Use of this source code is governed by a BSD-style license that can be |
| + * found in the LICENSE file. |
| + */ |
| + |
| +#include "SkCodec.h" |
| +#include "SkImageGenerator.h" |
| + |
| +class SkCodecImageGenerator : SkImageGenerator { |
| +public: |
| + /* |
| + * Takes ownership of codec |
| + */ |
| + static SkImageGenerator* Create(SkCodec* codec); |
| + |
| +protected: |
| + |
| + bool onGetPixels(const SkImageInfo& info, void* pixels, size_t rowBytes, SkPMColor ctable[], |
| + int* ctableCount) override; |
| + |
| +private: |
| + SkCodecImageGenerator(SkCodec* codec); |
| + |
| + SkAutoTDelete<SkCodec> fCodec; // Owned |
|
scroggo
2015/12/02 20:22:55
nit: I think it's obvious that fCodec is owned, si
msarett
2015/12/02 22:56:01
I think so too. Removing the comment.
|
| + |
| + typedef SkImageGenerator INHERITED; |
| +}; |
| + |
| +SkImageGenerator* SkCodecImageGenerator::Create(SkCodec* codec) { |
| + if (nullptr == codec) { |
| + return nullptr; |
| + } |
| + |
| + return new SkCodecImageGenerator(codec); |
| +} |
| + |
| +SkCodecImageGenerator::SkCodecImageGenerator(SkCodec* codec) |
| + : INHERITED(codec->getInfo()) |
| + , fCodec(codec) |
| +{} |
| + |
| +bool SkCodecImageGenerator::onGetPixels(const SkImageInfo& info, void* pixels, size_t rowBytes, |
| + SkPMColor ctable[], int* ctableCount) { |
| + |
| + SkCodec::Result result = fCodec->getPixels(info, pixels, rowBytes, nullptr, ctable, |
| + ctableCount); |
| + switch (result) { |
| + case SkCodec::kSuccess: |
| + case SkCodec::kIncompleteInput: |
| + return true; |
| + default: |
| + return false; |
| + } |
| +} |