Index: include/codec/SkScanlineDecoder.h |
diff --git a/include/codec/SkScanlineDecoder.h b/include/codec/SkScanlineDecoder.h |
index 8376e57c09d84bb48c1d7ae295ccd441a7feab48..3854f05a7118397ef6a9795b9c554d8a2ef044f6 100644 |
--- a/include/codec/SkScanlineDecoder.h |
+++ b/include/codec/SkScanlineDecoder.h |
@@ -75,6 +75,18 @@ public: |
return this->onReallyHasAlpha(); |
} |
+ /** |
+ * returns true if the image must be scaled, in the y direction, after reading, not during. |
+ * To scale afterwards, we first decode every line and then sample the lines we want afterwards. |
+ * An example is interlaced pngs, where calling getScanlines once (regardless of the count |
+ * used) needs to read the entire image, therefore it is inefficient to call |
+ * getScanlines more than once. Instead, it should only ever be called with all the |
+ * rows needed. |
+ */ |
+ bool requiresPostYSampling() { |
+ return this->onRequiresPostYSampling(); |
+ } |
+ |
protected: |
SkScanlineDecoder(const SkImageInfo& requested) |
: fDstInfo(requested) |
@@ -82,6 +94,12 @@ protected: |
virtual bool onReallyHasAlpha() const { return false; } |
+ /** |
+ * returns true if the image type is hard to sample and must be scaled after reading, not during |
+ * An example is interlaced pngs, where the entire image must be read for each decode |
+ */ |
+ virtual bool onRequiresPostYSampling() { return false; } |
+ |
const SkImageInfo& dstInfo() const { return fDstInfo; } |
private: |