Index: src/codec/SkCodec_libpng.h |
diff --git a/src/codec/SkCodec_libpng.h b/src/codec/SkCodec_libpng.h |
index a5327dda4155afc7085583148e661b3780e1cca0..fc29488eaae68fb9e2a15c9553f265a7695ae16f 100644 |
--- a/src/codec/SkCodec_libpng.h |
+++ b/src/codec/SkCodec_libpng.h |
@@ -6,14 +6,16 @@ |
*/ |
#include "SkCodec.h" |
+#include "SkColorTable.h" |
#include "SkImageInfo.h" |
+#include "SkRefCnt.h" |
+#include "SkSwizzler.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 SkScanlineDecoder; |
class SkStream; |
class SkPngCodec : public SkCodec { |
@@ -23,12 +25,30 @@ public: |
static bool IsPng(SkStream*); |
protected: |
Result onGetPixels(const SkImageInfo&, void*, size_t, SkPMColor*, int*) SK_OVERRIDE; |
+ SkScanlineDecoder* onGetScanlineDecoder(const SkImageInfo& dstInfo, |
+ const SkIRect& origSubset) SK_OVERRIDE; |
+ bool onReallyHasAlpha() const SK_OVERRIDE { return fReallyHasAlpha; } |
private: |
- png_structp fPng_ptr; |
- png_infop fInfo_ptr; |
+ png_structp fPng_ptr; |
+ png_infop fInfo_ptr; |
+ |
+ // These are stored here so they can be used both by normal decoding and scanline decoding. |
+ SkAutoTUnref<SkColorTable> fColorTable; // May be unpremul. |
+ SkAutoTDelete<SkSwizzler> fSwizzler; |
+ |
+ SkSwizzler::SrcConfig fSc; |
+ int fNumberPasses; |
+ bool fReallyHasAlpha; |
SkPngCodec(const SkImageInfo&, SkStream*, png_structp, png_infop); |
~SkPngCodec(); |
+ // Helper to set up swizzler and color table. Also calls png_read_update_info. |
+ Result initializeSwizzler(const SkImageInfo& requestedInfo, void* dst, size_t rowBytes); |
+ bool decodePalette(bool premultiply); |
+ Result finish(); |
+ |
+ friend class SkPngScanlineDecoder; |
+ |
typedef SkCodec INHERITED; |
}; |