| Index: src/codec/SkPngCodec.h
|
| diff --git a/src/codec/SkPngCodec.h b/src/codec/SkPngCodec.h
|
| index 0a8878395a967c7d7b4a8733b03447bcc1827107..779e5c056e5efa5161c368ae99eff509d6a962e7 100644
|
| --- a/src/codec/SkPngCodec.h
|
| +++ b/src/codec/SkPngCodec.h
|
| @@ -27,6 +27,9 @@ public:
|
| virtual ~SkPngCodec();
|
|
|
| protected:
|
| + SkPngCodec(int width, int height, const SkEncodedInfo&, SkStream*, SkPngChunkReader*,
|
| + png_structp, png_infop, int bitDepth, sk_sp<SkColorSpace>);
|
| +
|
| Result onGetPixels(const SkImageInfo&, void*, size_t, const Options&, SkPMColor*, int*, int*)
|
| override;
|
| SkEncodedFormat onGetEncodedFormat() const override { return kPNG_SkEncodedFormat; }
|
| @@ -34,34 +37,45 @@ protected:
|
| uint32_t onGetFillValue(SkColorType) const override;
|
|
|
| // Helper to set up swizzler and color table. Also calls png_read_update_info.
|
| - Result initializeSwizzler(const SkImageInfo& requestedInfo, const Options&,
|
| - SkPMColor*, int* ctableCount);
|
| + bool initializeSwizzler(const SkImageInfo& requestedInfo, const Options&,
|
| + SkPMColor*, int* ctableCount);
|
| SkSampler* getSampler(bool createIfNecessary) override {
|
| SkASSERT(fSwizzler);
|
| return fSwizzler;
|
| }
|
|
|
| - SkPngCodec(int width, int height, const SkEncodedInfo&, SkStream*, SkPngChunkReader*,
|
| - png_structp, png_infop, int, int, sk_sp<SkColorSpace>);
|
| -
|
| png_structp png_ptr() { return fPng_ptr; }
|
| + png_infop info_ptr() { return fInfo_ptr; }
|
| SkSwizzler* swizzler() { return fSwizzler; }
|
| - int numberPasses() const { return fNumberPasses; }
|
| +
|
| + /**
|
| + * Pass available input to libpng to process it.
|
| + *
|
| + * libpng will call any relevant callbacks installed. This will continue decoding
|
| + * until it reaches the end of the file, or until a callback tells libpng to stop.
|
| + */
|
| + void processData();
|
| +
|
| + Result onStartIncrementalDecode(const SkImageInfo& dstInfo, const SkCodec::Options&,
|
| + SkPMColor* ctable, int* ctableCount) override;
|
| + Result onIncrementalDecode(std::function<void*(int)> callback, int*) override;
|
|
|
| private:
|
| SkAutoTUnref<SkPngChunkReader> fPngChunkReader;
|
| 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;
|
|
|
| - const int fNumberPasses;
|
| - int fBitDepth;
|
| + const int fBitDepth;
|
|
|
| bool createColorTable(SkColorType dstColorType, bool premultiply, int* ctableCount);
|
| void destroyReadStruct();
|
|
|
| + virtual Result decodeAllRows(void* dst, size_t rowBytes, int* rowsDecoded) = 0;
|
| + virtual void setRange(int firstRow, int lastRow) = 0;
|
| + virtual Result decode(std::function<void*(int)> callback, int* rowsDecoded) = 0;
|
| +
|
| typedef SkCodec INHERITED;
|
| };
|
|
|