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; |
+ } |
+} |