| OLD | NEW | 
|---|
| 1 /* | 1 /* | 
| 2  * Copyright 2015 Google Inc. | 2  * Copyright 2015 Google Inc. | 
| 3  * | 3  * | 
| 4  * Use of this source code is governed by a BSD-style license that can be | 4  * Use of this source code is governed by a BSD-style license that can be | 
| 5  * found in the LICENSE file. | 5  * found in the LICENSE file. | 
| 6  */ | 6  */ | 
| 7 | 7 | 
| 8 #include "SkCodec.h" | 8 #include "SkCodec.h" | 
|  | 9 #include "SkColorTable.h" | 
| 9 #include "SkEncodedFormat.h" | 10 #include "SkEncodedFormat.h" | 
| 10 #include "SkImageInfo.h" | 11 #include "SkImageInfo.h" | 
|  | 12 #include "SkRefCnt.h" | 
|  | 13 #include "SkSwizzler.h" | 
| 11 | 14 | 
| 12 extern "C" { | 15 extern "C" { | 
| 13     // FIXME: I'd like to force all platforms to use the same decoder, but this |  | 
| 14     // means an extra dependency on Mac/Win. |  | 
| 15     #include "png.h" | 16     #include "png.h" | 
| 16 } | 17 } | 
| 17 | 18 | 
|  | 19 class SkScanlineDecoder; | 
| 18 class SkStream; | 20 class SkStream; | 
| 19 | 21 | 
| 20 class SkPngCodec : public SkCodec { | 22 class SkPngCodec : public SkCodec { | 
| 21 public: | 23 public: | 
| 22     // Assumes IsPng was called and returned true. | 24     // Assumes IsPng was called and returned true. | 
| 23     static SkCodec* NewFromStream(SkStream*); | 25     static SkCodec* NewFromStream(SkStream*); | 
| 24     static bool IsPng(SkStream*); | 26     static bool IsPng(SkStream*); | 
| 25 protected: | 27 protected: | 
| 26     Result onGetPixels(const SkImageInfo&, void*, size_t, const Options&, SkPMCo
    lor*, int*) | 28     Result onGetPixels(const SkImageInfo&, void*, size_t, const Options&, SkPMCo
    lor*, int*) | 
| 27             SK_OVERRIDE; | 29             SK_OVERRIDE; | 
| 28     SkEncodedFormat onGetEncodedFormat() const SK_OVERRIDE { return kPNG_SkEncod
    edFormat; } | 30     SkEncodedFormat onGetEncodedFormat() const SK_OVERRIDE { return kPNG_SkEncod
    edFormat; } | 
|  | 31     SkScanlineDecoder* onGetScanlineDecoder(const SkImageInfo& dstInfo) SK_OVERR
    IDE; | 
|  | 32     bool onReallyHasAlpha() const SK_OVERRIDE { return fReallyHasAlpha; } | 
| 29 private: | 33 private: | 
| 30     png_structp             fPng_ptr; | 34     png_structp                 fPng_ptr; | 
| 31     png_infop               fInfo_ptr; | 35     png_infop                   fInfo_ptr; | 
|  | 36 | 
|  | 37     // These are stored here so they can be used both by normal decoding and sca
    nline decoding. | 
|  | 38     SkAutoTUnref<SkColorTable>  fColorTable;    // May be unpremul. | 
|  | 39     SkAutoTDelete<SkSwizzler>   fSwizzler; | 
|  | 40 | 
|  | 41     SkSwizzler::SrcConfig       fSrcConfig; | 
|  | 42     int                         fNumberPasses; | 
|  | 43     bool                        fReallyHasAlpha; | 
| 32 | 44 | 
| 33     SkPngCodec(const SkImageInfo&, SkStream*, png_structp, png_infop); | 45     SkPngCodec(const SkImageInfo&, SkStream*, png_structp, png_infop); | 
| 34     ~SkPngCodec(); | 46     ~SkPngCodec(); | 
| 35 | 47 | 
|  | 48     // Helper to set up swizzler and color table. Also calls png_read_update_inf
    o. | 
|  | 49     Result initializeSwizzler(const SkImageInfo& requestedInfo, void* dst, | 
|  | 50                               size_t rowBytes, const Options&); | 
|  | 51     bool decodePalette(bool premultiply); | 
|  | 52     void finish(); | 
|  | 53 | 
|  | 54     friend class SkPngScanlineDecoder; | 
|  | 55 | 
| 36     typedef SkCodec INHERITED; | 56     typedef SkCodec INHERITED; | 
| 37 }; | 57 }; | 
| OLD | NEW | 
|---|