Index: Source/core/platform/image-decoders/ImageDecoder.h |
diff --git a/Source/core/platform/image-decoders/ImageDecoder.h b/Source/core/platform/image-decoders/ImageDecoder.h |
index 724e27c918dc3e3c7a5dcd00f2ef98bfa3cd2aeb..d57464e311533caafaf0d8cfd05eb1bf2f688287 100644 |
--- a/Source/core/platform/image-decoders/ImageDecoder.h |
+++ b/Source/core/platform/image-decoders/ImageDecoder.h |
@@ -115,6 +115,11 @@ namespace WebCore { |
FrameDisposalMethod disposalMethod() const { return m_disposalMethod; } |
bool premultiplyAlpha() const { return m_premultiplyAlpha; } |
void reportMemoryUsage(MemoryObjectInfo*) const; |
+ size_t requiredPreviousFrameIndex() const |
+ { |
+ ASSERT(m_requiredPreviousFrameIndexValid); |
+ return m_requiredPreviousFrameIndex; |
+ } |
void setHasAlpha(bool alpha); |
void setOriginalFrameRect(const IntRect& r) { m_originalFrameRect = r; } |
@@ -122,6 +127,13 @@ namespace WebCore { |
void setDuration(unsigned duration) { m_duration = duration; } |
void setDisposalMethod(FrameDisposalMethod method) { m_disposalMethod = method; } |
void setPremultiplyAlpha(bool premultiplyAlpha) { m_premultiplyAlpha = premultiplyAlpha; } |
+ void setRequiredPreviousFrameIndex(size_t previousFrameIndex) |
+ { |
+ m_requiredPreviousFrameIndex = previousFrameIndex; |
+#ifndef NDEBUG |
+ m_requiredPreviousFrameIndexValid = true; |
+#endif |
+ } |
inline void setRGBA(int x, int y, unsigned r, unsigned g, unsigned b, unsigned a) |
{ |
@@ -200,6 +212,13 @@ namespace WebCore { |
unsigned m_duration; |
FrameDisposalMethod m_disposalMethod; |
bool m_premultiplyAlpha; |
+ |
+ // The frame that must be decoded before this frame can be decoded. |
+ // |notFound| if this frame doesn't require any previous frame. |
Peter Kasting
2013/05/29 02:02:18
Nit: Add this at end:
This is used by ImageDecode
Xianzhu
2013/05/29 18:37:01
Done.
|
+ size_t m_requiredPreviousFrameIndex; |
+#ifndef NDEBUG |
+ bool m_requiredPreviousFrameIndexValid; |
+#endif |
}; |
// ImageDecoder is a base for all format-specific decoders |
@@ -358,10 +377,12 @@ namespace WebCore { |
bool failed() const { return m_failed; } |
- // Clears decoded pixel data from before the provided frame unless that |
+ // Clears decoded pixel data except the provided frame unless that |
// data may be needed to decode future frames (e.g. due to GIF frame |
- // compositing). |
- virtual void clearFrameBufferCache(size_t) { } |
+ // compositing). Pass a value greater than the frame count to clear |
+ // decoded pixel data of all frames. |
+ // Returns number of bytes of the cleared frames. |
Peter Kasting
2013/05/29 02:02:18
Nit: How about this comment:
Clears decoded pixel
Xianzhu
2013/05/29 18:37:01
Done.
|
+ size_t clearCacheExceptFrame(size_t); |
// If the image has a cursor hot-spot, stores it in the argument |
// and returns true. Otherwise returns false. |
@@ -378,6 +399,18 @@ namespace WebCore { |
} |
protected: |
+ // Finds the previous required frame for decoding the given frame based |
+ // on the parsed meta data. Returns notFound if this frame doesn't |
+ // require any previous frame. |
+ // |
+ // Subclasses should call this function and cache the result by calling |
+ // ImageFrame::setRequiredPreviousFrame() when a new frame is created, |
+ // and must ensure all previous frame's required previous frame has been |
+ // cached before calling this method. |
Peter Kasting
2013/05/29 02:02:18
Nit: How about this comment:
Calculates the most
Xianzhu
2013/05/29 18:37:01
Done.
|
+ size_t findRequiredPreviousFrame(size_t frameIndex); |
+ |
+ virtual void clearFrameBuffer(size_t frameIndex); |
+ |
RefPtr<SharedBuffer> m_data; // The encoded data. |
Vector<ImageFrame, 1> m_frameBufferCache; |
bool m_premultiplyAlpha; |