Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(206)

Side by Side Diff: third_party/gif/SkGifImageReader.h

Issue 2436183002: Write transparent pixels more often (SkGifCodec) (Closed)
Patch Set: Rebase Created 4 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « src/codec/SkGifCodec.cpp ('k') | third_party/gif/SkGifImageReader.cpp » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 /* -*- Mode: C; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ 1 /* -*- Mode: C; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
2 /* ***** BEGIN LICENSE BLOCK ***** 2 /* ***** BEGIN LICENSE BLOCK *****
3 * Version: MPL 1.1/GPL 2.0/LGPL 2.1 3 * Version: MPL 1.1/GPL 2.0/LGPL 2.1
4 * 4 *
5 * The contents of this file are subject to the Mozilla Public License Version 5 * The contents of this file are subject to the Mozilla Public License Version
6 * 1.1 (the "License"); you may not use this file except in compliance with 6 * 1.1 (the "License"); you may not use this file except in compliance with
7 * the License. You may obtain a copy of the License at 7 * the License. You may obtain a copy of the License at
8 * http://www.mozilla.org/MPL/ 8 * http://www.mozilla.org/MPL/
9 * 9 *
10 * Software distributed under the License is distributed on an "AS IS" basis, 10 * Software distributed under the License is distributed on an "AS IS" basis,
(...skipping 84 matching lines...) Expand 10 before | Expand all | Expand 10 after
95 , codemask(0) 95 , codemask(0)
96 , clearCode(0) 96 , clearCode(0)
97 , avail(0) 97 , avail(0)
98 , oldcode(0) 98 , oldcode(0)
99 , firstchar(0) 99 , firstchar(0)
100 , bits(0) 100 , bits(0)
101 , datum(0) 101 , datum(0)
102 , ipass(0) 102 , ipass(0)
103 , irow(0) 103 , irow(0)
104 , rowsRemaining(0) 104 , rowsRemaining(0)
105 , alwaysWriteTransparentPixels(false)
105 , rowIter(0) 106 , rowIter(0)
106 , m_client(client) 107 , m_client(client)
107 , m_frameContext(frameContext) 108 , m_frameContext(frameContext)
108 { } 109 { }
109 110
110 bool prepareToDecode(); 111 bool prepareToDecode();
111 bool outputRow(const unsigned char* rowBegin); 112 bool outputRow(const unsigned char* rowBegin);
112 bool doLZW(const unsigned char* block, size_t bytesInBlock); 113 bool doLZW(const unsigned char* block, size_t bytesInBlock);
113 bool hasRemainingRows() { return SkToBool(rowsRemaining); } 114 bool hasRemainingRows() { return SkToBool(rowsRemaining); }
114 115
115 private: 116 private:
116 // LZW decoding states and output states. 117 // LZW decoding states and output states.
117 int codesize; 118 int codesize;
118 int codemask; 119 int codemask;
119 int clearCode; // Codeword used to trigger dictionary reset. 120 int clearCode; // Codeword used to trigger dictionary reset.
120 int avail; // Index of next available slot in dictionary. 121 int avail; // Index of next available slot in dictionary.
121 int oldcode; 122 int oldcode;
122 unsigned char firstchar; 123 unsigned char firstchar;
123 int bits; // Number of unread bits in "datum". 124 int bits; // Number of unread bits in "datum".
124 int datum; // 32-bit input buffer. 125 int datum; // 32-bit input buffer.
125 int ipass; // Interlace pass; Ranges 1-4 if interlaced. 126 int ipass; // Interlace pass; Ranges 1-4 if interlaced.
126 size_t irow; // Current output row, starting at zero. 127 size_t irow; // Current output row, starting at zero.
127 size_t rowsRemaining; // Rows remaining to be output. 128 size_t rowsRemaining; // Rows remaining to be output.
129 // This depends on the GIFFrameContext. If the frame is not
130 // interlaced and it is independent, it is always safe to
131 // write transparent pixels.
132 bool alwaysWriteTransparentPixels;
128 133
129 unsigned short prefix[SK_MAX_DICTIONARY_ENTRIES]; 134 unsigned short prefix[SK_MAX_DICTIONARY_ENTRIES];
130 unsigned char suffix[SK_MAX_DICTIONARY_ENTRIES]; 135 unsigned char suffix[SK_MAX_DICTIONARY_ENTRIES];
131 unsigned short suffixLength[SK_MAX_DICTIONARY_ENTRIES]; 136 unsigned short suffixLength[SK_MAX_DICTIONARY_ENTRIES];
132 SkGIFRow rowBuffer; // Single scanline temporary buffer. 137 SkGIFRow rowBuffer; // Single scanline temporary buffer.
133 unsigned char* rowIter; 138 unsigned char* rowIter;
134 139
135 SkGifCodec* const m_client; 140 SkGifCodec* const m_client;
136 const SkGIFFrameContext* m_frameContext; 141 const SkGIFFrameContext* m_frameContext;
137 }; 142 };
(...skipping 252 matching lines...) Expand 10 before | Expand all | Expand 10 after
390 SkStreamBuffer m_streamBuffer; 395 SkStreamBuffer m_streamBuffer;
391 bool m_parseCompleted; 396 bool m_parseCompleted;
392 397
393 // These values can be computed before we create a SkGIFFrameContext, so we 398 // These values can be computed before we create a SkGIFFrameContext, so we
394 // store them here instead of on m_frames[0]. 399 // store them here instead of on m_frames[0].
395 bool m_firstFrameHasAlpha; 400 bool m_firstFrameHasAlpha;
396 bool m_firstFrameSupportsIndex8; 401 bool m_firstFrameSupportsIndex8;
397 }; 402 };
398 403
399 #endif 404 #endif
OLDNEW
« no previous file with comments | « src/codec/SkGifCodec.cpp ('k') | third_party/gif/SkGifImageReader.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698