Index: src/codec/SkCodec_libico.h |
diff --git a/src/codec/SkCodec_libico.h b/src/codec/SkCodec_libico.h |
index 92675f4d740ea241de38d00ddbf4a768040c8b47..a1d99b884dac9c3b68acbc03b7e0257455493d00 100644 |
--- a/src/codec/SkCodec_libico.h |
+++ b/src/codec/SkCodec_libico.h |
@@ -47,17 +47,45 @@ protected: |
return kICO_SkEncodedFormat; |
} |
+ SkScanlineOrder onGetScanlineOrder() const override; |
+ |
private: |
+ Result onStartScanlineDecode(const SkImageInfo& dstInfo, const SkCodec::Options& options, |
+ SkPMColor inputColorPtr[], int* inputColorCount) override; |
+ |
+ int onGetScanlines(void* dst, int count, size_t rowBytes) override; |
+ |
+ bool onSkipScanlines(int count) override; |
+ |
+ SkSampler* getSampler(bool createIfNecessary) override; |
+ |
+ /* |
+ * Searches fEmbeddedCodecs for a codec that matches requestedSize. |
+ * The search starts at startIndex and ends when an appropriate codec |
+ * is found, or we have reached the end of the array. |
+ * |
+ * @return the index of the matching codec or -1 if there is no |
+ * matching codec between startIndex and the end of |
+ * the array. |
+ */ |
+ int chooseCodec(const SkISize& requestedSize, int startIndex); |
+ |
/* |
* Constructor called by NewFromStream |
* @param embeddedCodecs codecs for the embedded images, takes ownership |
*/ |
- SkIcoCodec(const SkImageInfo& srcInfo, |
- SkTArray<SkAutoTDelete<SkCodec>, true>* embeddedCodecs); |
+ SkIcoCodec(const SkImageInfo& srcInfo, SkTArray<SkAutoTDelete<SkCodec>, true>* embeddedCodecs); |
+ |
+ SkAutoTDelete<SkTArray<SkAutoTDelete<SkCodec>, true>> fEmbeddedCodecs; // owned |
- SkAutoTDelete<SkTArray<SkAutoTDelete<SkCodec>, true>> |
- fEmbeddedCodecs; // owned |
+ // Only used by the scanline decoder. onStartScanlineDecode() will set |
+ // fCurrScanlineCodec to one of the fEmbeddedCodecs, if it can find a |
+ // codec of the appropriate size. We will use fCurrScanlineCodec for |
+ // subsequent calls to onGetScanlines() or onSkipScanlines(). |
+ // fCurrScanlineCodec is owned by this class, but should not be an |
+ // SkAutoTDelete. It will be deleted by the destructor of fEmbeddedCodecs. |
+ SkCodec* fCurrScanlineCodec; |
typedef SkCodec INHERITED; |
}; |