From e6dd004c1b8a81dc37a370570877b8b7d6dbe308 Mon Sep 17 00:00:00 2001 From: msarett Date: Fri, 9 Oct 2015 11:07:34 -0700 Subject: 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 --- src/codec/SkCodec_libpng.h | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) (limited to 'src/codec/SkCodec_libpng.h') diff --git a/src/codec/SkCodec_libpng.h b/src/codec/SkCodec_libpng.h index 3a16cc6813..6bdf58065b 100644 --- a/src/codec/SkCodec_libpng.h +++ b/src/codec/SkCodec_libpng.h @@ -32,16 +32,20 @@ public: virtual ~SkPngCodec(); protected: - Result onGetPixels(const SkImageInfo&, void*, size_t, const Options&, SkPMColor*, int*) + Result onGetPixels(const SkImageInfo&, void*, size_t, const Options&, SkPMColor*, int*, int*) override; SkEncodedFormat onGetEncodedFormat() const override { return kPNG_SkEncodedFormat; } bool onRewind() override; + uint32_t onGetFillValue(SkColorType colorType, SkAlphaType alphaType) const override; bool onReallyHasAlpha() const final; // Helper to set up swizzler and color table. Also calls png_read_update_info. Result initializeSwizzler(const SkImageInfo& requestedInfo, const Options&, SkPMColor*, int* ctableCount); - SkSampler* getSampler() override { return fSwizzler; } + SkSampler* getSampler(bool createIfNecessary) override { + SkASSERT(fSwizzler); + return fSwizzler; + } SkPngCodec(const SkImageInfo&, SkStream*, png_structp, png_infop, int, int); -- cgit v1.2.3