Index: third_party/gif/SkGifImageReader.h |
diff --git a/third_party/gif/SkGifImageReader.h b/third_party/gif/SkGifImageReader.h |
index 5dc0e4f6dde776af41c4303752dfd7c3850542ed..09c562255062f04d8efcc112d4fc7c2f2a037ad2 100644 |
--- a/third_party/gif/SkGifImageReader.h |
+++ b/third_party/gif/SkGifImageReader.h |
@@ -53,47 +53,44 @@ class SkGifCodec; |
#include <memory> |
#include <vector> |
-typedef SkTArray<unsigned char, true> GIFRow; |
+typedef SkTArray<unsigned char, true> SkGIFRow; |
-#define MAX_DICTIONARY_ENTRY_BITS 12 |
-#define MAX_DICTIONARY_ENTRIES 4096 // 2^MAX_DICTIONARY_ENTRY_BITS |
-#define MAX_COLORS 256 |
-#define BYTES_PER_COLORMAP_ENTRY 3 |
- |
-constexpr int cLoopCountNotSeen = -2; |
-constexpr size_t kNotFound = static_cast<size_t>(-1); |
+#define SK_MAX_DICTIONARY_ENTRY_BITS 12 |
+#define SK_MAX_DICTIONARY_ENTRIES 4096 // 2^SK_MAX_DICTIONARY_ENTRY_BITS |
+#define SK_MAX_COLORS 256 |
+#define SK_BYTES_PER_COLORMAP_ENTRY 3 |
// List of possible parsing states. |
-enum GIFState { |
- GIFType, |
- GIFGlobalHeader, |
- GIFGlobalColormap, |
- GIFImageStart, |
- GIFImageHeader, |
- GIFImageColormap, |
- GIFImageBody, |
- GIFLZWStart, |
- GIFLZW, |
- GIFSubBlock, |
- GIFExtension, |
- GIFControlExtension, |
- GIFConsumeBlock, |
- GIFSkipBlock, |
- GIFDone, |
- GIFCommentExtension, |
- GIFApplicationExtension, |
- GIFNetscapeExtensionBlock, |
- GIFConsumeNetscapeExtension, |
- GIFConsumeComment |
+enum SkGIFState { |
+ SkGIFType, |
+ SkGIFGlobalHeader, |
+ SkGIFGlobalColormap, |
+ SkGIFImageStart, |
+ SkGIFImageHeader, |
+ SkGIFImageColormap, |
+ SkGIFImageBody, |
+ SkGIFLZWStart, |
+ SkGIFLZW, |
+ SkGIFSubBlock, |
+ SkGIFExtension, |
+ SkGIFControlExtension, |
+ SkGIFConsumeBlock, |
+ SkGIFSkipBlock, |
+ SkGIFDone, |
+ SkGIFCommentExtension, |
+ SkGIFApplicationExtension, |
+ SkGIFNetscapeExtensionBlock, |
+ SkGIFConsumeNetscapeExtension, |
+ SkGIFConsumeComment |
}; |
-struct GIFFrameContext; |
+struct SkGIFFrameContext; |
// LZW decoder state machine. |
-class GIFLZWContext final : public SkNoncopyable { |
+class SkGIFLZWContext final : public SkNoncopyable { |
public: |
- GIFLZWContext(SkGifCodec* client, const GIFFrameContext* frameContext) |
+ SkGIFLZWContext(SkGifCodec* client, const SkGIFFrameContext* frameContext) |
: codesize(0) |
, codemask(0) |
, clearCode(0) |
@@ -129,19 +126,19 @@ private: |
size_t irow; // Current output row, starting at zero. |
size_t rowsRemaining; // Rows remaining to be output. |
- unsigned short prefix[MAX_DICTIONARY_ENTRIES]; |
- unsigned char suffix[MAX_DICTIONARY_ENTRIES]; |
- unsigned short suffixLength[MAX_DICTIONARY_ENTRIES]; |
- GIFRow rowBuffer; // Single scanline temporary buffer. |
+ unsigned short prefix[SK_MAX_DICTIONARY_ENTRIES]; |
+ unsigned char suffix[SK_MAX_DICTIONARY_ENTRIES]; |
+ unsigned short suffixLength[SK_MAX_DICTIONARY_ENTRIES]; |
+ SkGIFRow rowBuffer; // Single scanline temporary buffer. |
unsigned char* rowIter; |
SkGifCodec* const m_client; |
- const GIFFrameContext* m_frameContext; |
+ const SkGIFFrameContext* m_frameContext; |
}; |
-class GIFColorMap final { |
+class SkGIFColorMap final { |
public: |
- GIFColorMap() |
+ SkGIFColorMap() |
: m_isDefined(false) |
, m_colors(0) |
, m_packColorProc(nullptr) |
@@ -158,7 +155,7 @@ public: |
{ |
// FIXME: Can we avoid this copy? |
m_rawData = SkData::MakeWithCopy(data, size); |
- SkASSERT(m_colors * BYTES_PER_COLORMAP_ENTRY == size); |
+ SkASSERT(m_colors * SK_BYTES_PER_COLORMAP_ENTRY == size); |
m_isDefined = true; |
} |
bool isDefined() const { return m_isDefined; } |
@@ -175,9 +172,9 @@ private: |
}; |
// LocalFrame output state machine. |
-struct GIFFrameContext : SkNoncopyable { |
+struct SkGIFFrameContext : SkNoncopyable { |
public: |
- GIFFrameContext(int id) |
+ SkGIFFrameContext(int id) |
: m_frameId(id) |
, m_xOffset(0) |
, m_yOffset(0) |
@@ -197,7 +194,9 @@ public: |
{ |
} |
- ~GIFFrameContext() |
+ static constexpr size_t kNotFound = static_cast<size_t>(-1); |
+ |
+ ~SkGIFFrameContext() |
{ |
} |
@@ -246,8 +245,8 @@ public: |
void setInterlaced(bool interlaced) { m_interlaced = interlaced; } |
void clearDecodeState() { m_lzwContext.reset(); } |
- const GIFColorMap& localColorMap() const { return m_localColorMap; } |
- GIFColorMap& localColorMap() { return m_localColorMap; } |
+ const SkGIFColorMap& localColorMap() const { return m_localColorMap; } |
+ SkGIFColorMap& localColorMap() { return m_localColorMap; } |
private: |
int m_frameId; |
@@ -265,9 +264,9 @@ private: |
unsigned m_delayTime; // Display time, in milliseconds, for this image in a multi-image GIF. |
- std::unique_ptr<GIFLZWContext> m_lzwContext; |
+ std::unique_ptr<SkGIFLZWContext> m_lzwContext; |
std::vector<sk_sp<SkData>> m_lzwBlocks; // LZW blocks for this frame. |
- GIFColorMap m_localColorMap; |
+ SkGIFColorMap m_localColorMap; |
size_t m_currentLzwBlock; |
bool m_isComplete; |
@@ -280,7 +279,7 @@ public: |
// This takes ownership of stream. |
SkGifImageReader(SkStream* stream) |
: m_client(nullptr) |
- , m_state(GIFType) |
+ , m_state(SkGIFType) |
, m_bytesToConsume(6) // Number of bytes for GIF type, either "GIF87a" or "GIF89a". |
, m_version(0) |
, m_screenWidth(0) |
@@ -293,6 +292,8 @@ public: |
{ |
} |
+ static constexpr int cLoopCountNotSeen = -2; |
+ |
~SkGifImageReader() |
{ |
} |
@@ -304,19 +305,19 @@ public: |
// Option to pass to parse(). All enums are negative, because a non-negative value is used to |
// indicate that the Reader should parse up to and including the frame indicated. |
- enum GIFParseQuery { |
+ enum SkGIFParseQuery { |
// Parse enough to determine the size. Note that this parses the first frame's header, |
// since we may decide to expand based on the frame's dimensions. |
- GIFSizeQuery = -1, |
+ SkGIFSizeQuery = -1, |
// Parse to the end, so we know about all frames. |
- GIFFrameCountQuery = -2, |
+ SkGIFFrameCountQuery = -2, |
}; |
// Parse incoming GIF data stream into internal data structures. |
// Non-negative values are used to indicate to parse through that frame. |
// Return true if parsing has progressed or there is not enough data. |
// Return false if a fatal error is encountered. |
- bool parse(GIFParseQuery); |
+ bool parse(SkGIFParseQuery); |
// Decode the frame indicated by frameIndex. |
// frameComplete will be set to true if the frame is completely decoded. |
@@ -329,18 +330,18 @@ public: |
return 0; |
// This avoids counting an empty frame when the file is truncated right after |
- // GIFControlExtension but before GIFImageHeader. |
+ // SkGIFControlExtension but before SkGIFImageHeader. |
// FIXME: This extra complexity is not necessary and we should just report m_frames.size(). |
return m_frames.back()->isHeaderDefined() ? m_frames.size() : m_frames.size() - 1; |
} |
int loopCount() const { return m_loopCount; } |
- const GIFColorMap& globalColorMap() const |
+ const SkGIFColorMap& globalColorMap() const |
{ |
return m_globalColorMap; |
} |
- const GIFFrameContext* frameContext(size_t index) const |
+ const SkGIFFrameContext* frameContext(size_t index) const |
{ |
return index < m_frames.size() ? m_frames[index].get() : 0; |
} |
@@ -374,22 +375,22 @@ private: |
SkGifCodec* m_client; |
// Parsing state machine. |
- GIFState m_state; // Current decoder master state. |
+ SkGIFState m_state; // Current decoder master state. |
size_t m_bytesToConsume; // Number of bytes to consume for next stage of parsing. |
// Global (multi-image) state. |
int m_version; // Either 89 for GIF89 or 87 for GIF87. |
unsigned m_screenWidth; // Logical screen width & height. |
unsigned m_screenHeight; |
- GIFColorMap m_globalColorMap; |
+ SkGIFColorMap m_globalColorMap; |
int m_loopCount; // Netscape specific extension block to control the number of animation loops a GIF renders. |
- std::vector<std::unique_ptr<GIFFrameContext>> m_frames; |
+ std::vector<std::unique_ptr<SkGIFFrameContext>> m_frames; |
SkStreamBuffer m_streamBuffer; |
bool m_parseCompleted; |
- // These values can be computed before we create a GIFFrameContext, so we |
+ // These values can be computed before we create a SkGIFFrameContext, so we |
// store them here instead of on m_frames[0]. |
bool m_firstFrameHasAlpha; |
bool m_firstFrameSupportsIndex8; |