diff options
-rw-r--r-- | include/codec/SkAndroidCodec.h | 10 | ||||
-rw-r--r-- | include/codec/SkCodec.h | 26 | ||||
-rw-r--r-- | src/codec/SkAndroidCodec.cpp | 8 |
3 files changed, 34 insertions, 10 deletions
diff --git a/include/codec/SkAndroidCodec.h b/include/codec/SkAndroidCodec.h index e33116f9ba..f979886a43 100644 --- a/include/codec/SkAndroidCodec.h +++ b/include/codec/SkAndroidCodec.h @@ -23,18 +23,24 @@ public: * If this stream represents an encoded image that we know how to decode, * return an SkAndroidCodec that can decode it. Otherwise return NULL. * + * The SkPngChunkReader handles unknown chunks in PNGs. + * See SkCodec.h for more details. + * * If NULL is returned, the stream is deleted immediately. Otherwise, the * SkCodec takes ownership of it, and will delete it when done with it. */ - static SkAndroidCodec* NewFromStream(SkStream*); + static SkAndroidCodec* NewFromStream(SkStream*, SkPngChunkReader* = NULL); /** * If this data represents an encoded image that we know how to decode, * return an SkAndroidCodec that can decode it. Otherwise return NULL. * + * The SkPngChunkReader handles unknown chunks in PNGs. + * See SkCodec.h for more details. + * * Will take a ref if it returns a codec, else will not affect the data. */ - static SkAndroidCodec* NewFromData(SkData*); + static SkAndroidCodec* NewFromData(SkData*, SkPngChunkReader* = NULL); virtual ~SkAndroidCodec() {} diff --git a/include/codec/SkCodec.h b/include/codec/SkCodec.h index dffab6b377..9f28af010e 100644 --- a/include/codec/SkCodec.h +++ b/include/codec/SkCodec.h @@ -29,8 +29,17 @@ public: * If this stream represents an encoded image that we know how to decode, * return an SkCodec that can decode it. Otherwise return NULL. * - * If SkPngChunkReader is not NULL, take a ref and pass it to libpng if - * the image is a png. + * If the SkPngChunkReader is not NULL then: + * If the image is not a PNG, the SkPngChunkReader will be ignored. + * If the image is a PNG, the SkPngChunkReader will be reffed. + * If the PNG has unknown chunks, the SkPngChunkReader will be used + * to handle these chunks. SkPngChunkReader will be called to read + * any unknown chunk at any point during the creation of the codec + * or the decode. Note that if SkPngChunkReader fails to read a + * chunk, this could result in a failure to create the codec or a + * failure to decode the image. + * If the PNG does not contain unknown chunks, the SkPngChunkReader + * will not be used or modified. * * If NULL is returned, the stream is deleted immediately. Otherwise, the * SkCodec takes ownership of it, and will delete it when done with it. @@ -41,8 +50,17 @@ public: * If this data represents an encoded image that we know how to decode, * return an SkCodec that can decode it. Otherwise return NULL. * - * If SkPngChunkReader is not NULL, take a ref and pass it to libpng if - * the image is a png. + * If the SkPngChunkReader is not NULL then: + * If the image is not a PNG, the SkPngChunkReader will be ignored. + * If the image is a PNG, the SkPngChunkReader will be reffed. + * If the PNG has unknown chunks, the SkPngChunkReader will be used + * to handle these chunks. SkPngChunkReader will be called to read + * any unknown chunk at any point during the creation of the codec + * or the decode. Note that if SkPngChunkReader fails to read a + * chunk, this could result in a failure to create the codec or a + * failure to decode the image. + * If the PNG does not contain unknown chunks, the SkPngChunkReader + * will not be used or modified. * * Will take a ref if it returns a codec, else will not affect the data. */ diff --git a/src/codec/SkAndroidCodec.cpp b/src/codec/SkAndroidCodec.cpp index 86c067558f..cf6e253d97 100644 --- a/src/codec/SkAndroidCodec.cpp +++ b/src/codec/SkAndroidCodec.cpp @@ -20,8 +20,8 @@ SkAndroidCodec::SkAndroidCodec(const SkImageInfo& info) : fInfo(info) {} -SkAndroidCodec* SkAndroidCodec::NewFromStream(SkStream* stream) { - SkAutoTDelete<SkCodec> codec(SkCodec::NewFromStream(stream)); +SkAndroidCodec* SkAndroidCodec::NewFromStream(SkStream* stream, SkPngChunkReader* chunkReader) { + SkAutoTDelete<SkCodec> codec(SkCodec::NewFromStream(stream, chunkReader)); if (nullptr == codec) { return nullptr; } @@ -43,12 +43,12 @@ SkAndroidCodec* SkAndroidCodec::NewFromStream(SkStream* stream) { } } -SkAndroidCodec* SkAndroidCodec::NewFromData(SkData* data) { +SkAndroidCodec* SkAndroidCodec::NewFromData(SkData* data, SkPngChunkReader* chunkReader) { if (!data) { return nullptr; } - return NewFromStream(new SkMemoryStream(data)); + return NewFromStream(new SkMemoryStream(data), chunkReader); } SkISize SkAndroidCodec::getSampledDimensions(int sampleSize) const { |