aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--include/codec/SkAndroidCodec.h10
-rw-r--r--include/codec/SkCodec.h26
-rw-r--r--src/codec/SkAndroidCodec.cpp8
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 {