diff options
author | msarett <msarett@google.com> | 2015-10-09 11:07:34 -0700 |
---|---|---|
committer | Commit bot <commit-bot@chromium.org> | 2015-10-09 11:07:34 -0700 |
commit | e6dd004c1b8a81dc37a370570877b8b7d6dbe308 (patch) | |
tree | 16ecfdede3939dcd7f1b3db311371d974477e7c5 /src/codec/SkCodec_wbmp.h | |
parent | 79da63fa0bec40b560597c79c2e1231fa51aef36 (diff) |
Fill incomplete images in SkCodec parent class
Rather than implementing some sort of "fill" in every
SkCodec subclass for incomplete images, let's make the
parent class handle this situation.
This includes an API change to SkCodec.h
SkCodec::getScanlines() now returns the number of lines it
read successfully, rather than an SkCodec::Result enum.
getScanlines() most often fails on an incomplete input, in
which case it is useful to know how many lines were
successfully decoded - this provides more information than
kIncomplete vs kSuccess. We do lose information when the
API is used improperly, as we are no longer able to return
kInvalidParameter or kScanlineNotStarted.
Known Issues:
Does not work for incomplete fFrameIsSubset gifs.
Does not work for incomplete icos.
BUG=skia:
Review URL: https://codereview.chromium.org/1332053002
Diffstat (limited to 'src/codec/SkCodec_wbmp.h')
-rw-r--r-- | src/codec/SkCodec_wbmp.h | 15 |
1 files changed, 9 insertions, 6 deletions
diff --git a/src/codec/SkCodec_wbmp.h b/src/codec/SkCodec_wbmp.h index 976a5a22f0..f54dd0f166 100644 --- a/src/codec/SkCodec_wbmp.h +++ b/src/codec/SkCodec_wbmp.h @@ -25,7 +25,7 @@ public: protected: SkEncodedFormat onGetEncodedFormat() const override; Result onGetPixels(const SkImageInfo&, void*, size_t, - const Options&, SkPMColor[], int*) override; + const Options&, SkPMColor[], int*, int*) override; bool onRewind() override; private: /* @@ -33,24 +33,27 @@ private: */ SkSwizzler* initializeSwizzler(const SkImageInfo& info, const SkPMColor* ctable, const Options& opts); - SkSampler* getSampler() override { return fSwizzler; } + SkSampler* getSampler(bool createIfNecessary) override { + SkASSERT(fSwizzler || !createIfNecessary); + return fSwizzler; + } /* * Read a src row from the encoded stream */ - Result readRow(uint8_t* row); + bool readRow(uint8_t* row); SkWbmpCodec(const SkImageInfo&, SkStream*); - const size_t fSrcRowBytes; + const size_t fSrcRowBytes; // Used for scanline decodes: - SkAutoTUnref<SkColorTable> fColorTable; SkAutoTDelete<SkSwizzler> fSwizzler; + SkAutoTUnref<SkColorTable> fColorTable; SkAutoTMalloc<uint8_t> fSrcBuffer; // FIXME: Override onSkipScanlines to avoid swizzling. - Result onGetScanlines(void* dst, int count, size_t dstRowBytes) override; + int onGetScanlines(void* dst, int count, size_t dstRowBytes) override; Result onStartScanlineDecode(const SkImageInfo& dstInfo, const Options& options, SkPMColor inputColorTable[], int* inputColorCount) override; |