aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorGravatar msarett <msarett@google.com>2015-12-02 07:02:41 -0800
committerGravatar Commit bot <commit-bot@chromium.org>2015-12-02 07:02:41 -0800
commit7d5105c4d2a9be7ef9ddba646471c35d4c966d97 (patch)
tree988819b17423608e88532d1bddf16a4adf0cc1ff
parent2e8fec79658baef06f4a9fca5e91a4e116b47b3d (diff)
Allow SkAndroidCodec to use SkPngChunkReader
Also update documentation of SkPngChunkReader in SkCodec. BUG=skia: Review URL: https://codereview.chromium.org/1487583003
-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 {