aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/codec/SkCodec_libpng.h
diff options
context:
space:
mode:
authorGravatar scroggo <scroggo@google.com>2015-03-03 08:59:20 -0800
committerGravatar Commit bot <commit-bot@chromium.org>2015-03-03 08:59:20 -0800
commitf24f2247c25b842327e12c70e44efe4cc1b28dfa (patch)
tree3dfa329ae0504ba31ed3e1fe6ee46b4db4f7a5c4 /src/codec/SkCodec_libpng.h
parent0aebf5d0d3a2aef38a71885c85303583fdeaad57 (diff)
Add SkCodec, including PNG implementation.
DM: Add a flag to use SkCodec instead of SkImageDecoder. SkCodec: Base class for codecs, allowing creation from an SkStream or an SkData. An SkCodec, on creation, knows properties of the data like its width and height. Further calls can be used to generate the image. TODO: Add scanline iterator SkPngCodec: New decoder for png. Wraps libpng. The code has been repurposed from SkImageDecoder_libpng. TODO: Handle other destination colortypes TODO: Substitute the transpose color TODO: Allow silencing warnings TODO: Use RGB instead of filler? TODO: sRGB SkSwizzler: Simplified version of SkScaledSampler. Unlike the sampler, this object does no sampling. TODO: Implement other swizzles. Requires a gclient sync to pull down libpng. BUG=skia:3257 Committed: https://skia.googlesource.com/skia/+/ca358852b4fed656d11107b2aaf28318a4518b49 (and then reverted) Review URL: https://codereview.chromium.org/930283002
Diffstat (limited to 'src/codec/SkCodec_libpng.h')
-rw-r--r--src/codec/SkCodec_libpng.h34
1 files changed, 34 insertions, 0 deletions
diff --git a/src/codec/SkCodec_libpng.h b/src/codec/SkCodec_libpng.h
new file mode 100644
index 0000000000..a5327dda41
--- /dev/null
+++ b/src/codec/SkCodec_libpng.h
@@ -0,0 +1,34 @@
+/*
+ * 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 "SkImageInfo.h"
+
+extern "C" {
+ // FIXME: I'd like to force all platforms to use the same decoder, but this
+ // means an extra dependency on Mac/Win.
+ #include "png.h"
+}
+
+class SkStream;
+
+class SkPngCodec : public SkCodec {
+public:
+ // Assumes IsPng was called and returned true.
+ static SkCodec* NewFromStream(SkStream*);
+ static bool IsPng(SkStream*);
+protected:
+ Result onGetPixels(const SkImageInfo&, void*, size_t, SkPMColor*, int*) SK_OVERRIDE;
+private:
+ png_structp fPng_ptr;
+ png_infop fInfo_ptr;
+
+ SkPngCodec(const SkImageInfo&, SkStream*, png_structp, png_infop);
+ ~SkPngCodec();
+
+ typedef SkCodec INHERITED;
+};