OLD | NEW |
1 // Copyright 2014 PDFium Authors. All rights reserved. | 1 // Copyright 2014 PDFium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com | 5 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com |
6 | 6 |
7 #include "fx_gif.h" | 7 #include "fx_gif.h" |
8 void CGifLZWDecoder::Input(FX_LPBYTE src_buf, FX_DWORD src_size) | 8 void CGifLZWDecoder::Input(FX_LPBYTE src_buf, FX_DWORD src_size) |
9 { | 9 { |
10 next_in = src_buf; | 10 next_in = src_buf; |
11 avail_in = src_size; | 11 avail_in = src_size; |
12 } | 12 } |
13 FX_DWORD CGifLZWDecoder::GetAvailInput() | 13 FX_DWORD CGifLZWDecoder::GetAvailInput() |
14 { | 14 { |
15 return avail_in; | 15 return avail_in; |
16 } | 16 } |
17 void CGifLZWDecoder::InitTable(FX_BYTE code_len) | 17 void CGifLZWDecoder::InitTable(uint8_t code_len) |
18 { | 18 { |
19 code_size = code_len; | 19 code_size = code_len; |
20 code_clear = 1 << code_size; | 20 code_clear = 1 << code_size; |
21 code_end = code_clear + 1; | 21 code_end = code_clear + 1; |
22 bits_left = 0; | 22 bits_left = 0; |
23 code_store = 0; | 23 code_store = 0; |
24 next_in = NULL; | 24 next_in = NULL; |
25 avail_in = 0; | 25 avail_in = 0; |
26 stack_size = 0; | 26 stack_size = 0; |
27 code_first = 0; | 27 code_first = 0; |
28 ClearTable(); | 28 ClearTable(); |
29 } | 29 } |
30 void CGifLZWDecoder::ClearTable() | 30 void CGifLZWDecoder::ClearTable() |
31 { | 31 { |
32 code_size_cur = code_size + 1; | 32 code_size_cur = code_size + 1; |
33 code_next = code_end + 1; | 33 code_next = code_end + 1; |
34 code_old = (FX_WORD) - 1; | 34 code_old = (FX_WORD) - 1; |
35 FXSYS_memset32(code_table, 0, sizeof(tag_Table)*GIF_MAX_LZW_CODE); | 35 FXSYS_memset32(code_table, 0, sizeof(tag_Table)*GIF_MAX_LZW_CODE); |
36 FXSYS_memset32(stack, 0, GIF_MAX_LZW_CODE); | 36 FXSYS_memset32(stack, 0, GIF_MAX_LZW_CODE); |
37 for (FX_WORD i = 0; i < code_clear; i++) { | 37 for (FX_WORD i = 0; i < code_clear; i++) { |
38 code_table[i].suffix = (FX_BYTE)i; | 38 code_table[i].suffix = (uint8_t)i; |
39 } | 39 } |
40 } | 40 } |
41 void CGifLZWDecoder::DecodeString(FX_WORD code) | 41 void CGifLZWDecoder::DecodeString(FX_WORD code) |
42 { | 42 { |
43 stack_size = 0; | 43 stack_size = 0; |
44 while (TRUE) { | 44 while (TRUE) { |
45 ASSERT(code <= code_next); | 45 ASSERT(code <= code_next); |
46 if(code < code_clear || code > code_next) { | 46 if(code < code_clear || code > code_next) { |
47 break; | 47 break; |
48 } | 48 } |
49 stack[GIF_MAX_LZW_CODE - 1 - stack_size++] = code_table[code].suffix; | 49 stack[GIF_MAX_LZW_CODE - 1 - stack_size++] = code_table[code].suffix; |
50 code = code_table[code].prefix; | 50 code = code_table[code].prefix; |
51 } | 51 } |
52 stack[GIF_MAX_LZW_CODE - 1 - stack_size++] = (FX_BYTE)code; | 52 stack[GIF_MAX_LZW_CODE - 1 - stack_size++] = (uint8_t)code; |
53 code_first = (FX_BYTE)code; | 53 code_first = (uint8_t)code; |
54 } | 54 } |
55 void CGifLZWDecoder::AddCode(FX_WORD prefix_code, FX_BYTE append_char) | 55 void CGifLZWDecoder::AddCode(FX_WORD prefix_code, uint8_t append_char) |
56 { | 56 { |
57 if(code_next == GIF_MAX_LZW_CODE) { | 57 if(code_next == GIF_MAX_LZW_CODE) { |
58 return; | 58 return; |
59 } | 59 } |
60 code_table[code_next].prefix = prefix_code; | 60 code_table[code_next].prefix = prefix_code; |
61 code_table[code_next].suffix = append_char; | 61 code_table[code_next].suffix = append_char; |
62 if(++code_next < GIF_MAX_LZW_CODE) { | 62 if(++code_next < GIF_MAX_LZW_CODE) { |
63 if(code_next >> code_size_cur) { | 63 if(code_next >> code_size_cur) { |
64 code_size_cur++; | 64 code_size_cur++; |
65 } | 65 } |
66 } | 66 } |
67 } | 67 } |
68 FX_INT32 CGifLZWDecoder::Decode(FX_LPBYTE des_buf, FX_DWORD& des_size) | 68 int32_t CGifLZWDecoder::Decode(FX_LPBYTE des_buf, FX_DWORD& des_size) |
69 { | 69 { |
70 if(des_size == 0) { | 70 if(des_size == 0) { |
71 return 3; | 71 return 3; |
72 } | 72 } |
73 FX_DWORD i = 0; | 73 FX_DWORD i = 0; |
74 if(stack_size != 0) { | 74 if(stack_size != 0) { |
75 if(des_size < stack_size) { | 75 if(des_size < stack_size) { |
76 FXSYS_memcpy32(des_buf, &stack[GIF_MAX_LZW_CODE - stack_size], des_s
ize); | 76 FXSYS_memcpy32(des_buf, &stack[GIF_MAX_LZW_CODE - stack_size], des_s
ize); |
77 stack_size -= (FX_WORD)des_size; | 77 stack_size -= (FX_WORD)des_size; |
78 return 3; | 78 return 3; |
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
111 if(code == code_next) { | 111 if(code == code_next) { |
112 AddCode(code_old, code_first); | 112 AddCode(code_old, code_first); |
113 DecodeString(code); | 113 DecodeString(code); |
114 } else if(code > code_next) { | 114 } else if(code > code_next) { |
115 if(err_msg_ptr) { | 115 if(err_msg_ptr) { |
116 FXSYS_strncpy(err_msg_ptr, "Decode Error, Out Of
Range", GIF_MAX_ERROR_SIZE - 1); | 116 FXSYS_strncpy(err_msg_ptr, "Decode Error, Out Of
Range", GIF_MAX_ERROR_SIZE - 1); |
117 } | 117 } |
118 return 0; | 118 return 0; |
119 } else { | 119 } else { |
120 DecodeString(code); | 120 DecodeString(code); |
121 FX_BYTE append_char = stack[GIF_MAX_LZW_CODE - stack
_size]; | 121 uint8_t append_char = stack[GIF_MAX_LZW_CODE - stack
_size]; |
122 AddCode(code_old, append_char); | 122 AddCode(code_old, append_char); |
123 } | 123 } |
124 } | 124 } |
125 } else { | 125 } else { |
126 DecodeString(code); | 126 DecodeString(code); |
127 } | 127 } |
128 code_old = code; | 128 code_old = code; |
129 if(i + stack_size > des_size) { | 129 if(i + stack_size > des_size) { |
130 FXSYS_memcpy32(des_buf, &stack[GIF_MAX_LZW_CODE - stack_size
], des_size - i); | 130 FXSYS_memcpy32(des_buf, &stack[GIF_MAX_LZW_CODE - stack_size
], des_size - i); |
131 stack_size -= (FX_WORD)(des_size - i); | 131 stack_size -= (FX_WORD)(des_size - i); |
(...skipping 11 matching lines...) Expand all Loading... |
143 return 2; | 143 return 2; |
144 } | 144 } |
145 return 0; | 145 return 0; |
146 } | 146 } |
147 static FX_BOOL _gif_grow_buf(FX_LPBYTE& dst_buf, FX_DWORD& dst_len, FX_DWORD siz
e) | 147 static FX_BOOL _gif_grow_buf(FX_LPBYTE& dst_buf, FX_DWORD& dst_len, FX_DWORD siz
e) |
148 { | 148 { |
149 if (dst_len < size) { | 149 if (dst_len < size) { |
150 FX_DWORD len_org = dst_len; | 150 FX_DWORD len_org = dst_len; |
151 while (dst_buf && dst_len < size) { | 151 while (dst_buf && dst_len < size) { |
152 dst_len <<= 1; | 152 dst_len <<= 1; |
153 dst_buf = FX_Realloc(FX_BYTE, dst_buf, dst_len); | 153 dst_buf = FX_Realloc(uint8_t, dst_buf, dst_len); |
154 } | 154 } |
155 if (dst_buf == NULL) { | 155 if (dst_buf == NULL) { |
156 dst_len = size; | 156 dst_len = size; |
157 dst_buf = FX_Realloc(FX_BYTE, dst_buf, dst_len); | 157 dst_buf = FX_Realloc(uint8_t, dst_buf, dst_len); |
158 if (dst_buf == NULL) { | 158 if (dst_buf == NULL) { |
159 return FALSE; | 159 return FALSE; |
160 } | 160 } |
161 } | 161 } |
162 FXSYS_memset32(dst_buf + len_org, 0, dst_len - len_org); | 162 FXSYS_memset32(dst_buf + len_org, 0, dst_len - len_org); |
163 return dst_buf != NULL; | 163 return dst_buf != NULL; |
164 } | 164 } |
165 return TRUE; | 165 return TRUE; |
166 } | 166 } |
167 static inline void _gif_cut_index(FX_BYTE& val, FX_DWORD index, FX_BYTE index_bi
t, FX_BYTE index_bit_use, FX_BYTE bit_use) | 167 static inline void _gif_cut_index(uint8_t& val, FX_DWORD index, uint8_t index_bi
t, uint8_t index_bit_use, uint8_t bit_use) |
168 { | 168 { |
169 FX_DWORD cut = ((1 << (index_bit - index_bit_use)) - 1) << index_bit_use; | 169 FX_DWORD cut = ((1 << (index_bit - index_bit_use)) - 1) << index_bit_use; |
170 val |= ((index & cut) >> index_bit_use) << bit_use; | 170 val |= ((index & cut) >> index_bit_use) << bit_use; |
171 } | 171 } |
172 static inline FX_BYTE _gif_cut_buf(FX_LPCBYTE buf, FX_DWORD& offset, FX_BYTE bit
_cut, FX_BYTE& bit_offset, FX_DWORD& bit_num) | 172 static inline uint8_t _gif_cut_buf(FX_LPCBYTE buf, FX_DWORD& offset, uint8_t bit
_cut, uint8_t& bit_offset, FX_DWORD& bit_num) |
173 { | 173 { |
174 if (bit_cut != 8) { | 174 if (bit_cut != 8) { |
175 FX_WORD index = 0; | 175 FX_WORD index = 0; |
176 index |= ((1 << bit_cut) - 1) << (7 - bit_offset); | 176 index |= ((1 << bit_cut) - 1) << (7 - bit_offset); |
177 FX_BYTE ret = ((index & buf[offset]) >> (7 - bit_offset)); | 177 uint8_t ret = ((index & buf[offset]) >> (7 - bit_offset)); |
178 bit_offset += bit_cut; | 178 bit_offset += bit_cut; |
179 if (bit_offset >= 8) { | 179 if (bit_offset >= 8) { |
180 if (bit_offset > 8) { | 180 if (bit_offset > 8) { |
181 ret |= ((index & (buf[offset + 1] << 8)) >> 8); | 181 ret |= ((index & (buf[offset + 1] << 8)) >> 8); |
182 } | 182 } |
183 bit_offset -= 8; | 183 bit_offset -= 8; |
184 offset ++; | 184 offset ++; |
185 } | 185 } |
186 bit_num += bit_cut; | 186 bit_num += bit_cut; |
187 return ret; | 187 return ret; |
(...skipping 11 matching lines...) Expand all Loading... |
199 void CGifLZWEncoder::ClearTable() | 199 void CGifLZWEncoder::ClearTable() |
200 { | 200 { |
201 index_bit_cur = code_size + 1; | 201 index_bit_cur = code_size + 1; |
202 index_num = code_end + 1; | 202 index_num = code_end + 1; |
203 table_cur = code_end + 1; | 203 table_cur = code_end + 1; |
204 for (FX_WORD i = 0; i < GIF_MAX_LZW_CODE; i++) { | 204 for (FX_WORD i = 0; i < GIF_MAX_LZW_CODE; i++) { |
205 code_table[i].prefix = 0; | 205 code_table[i].prefix = 0; |
206 code_table[i].suffix = 0; | 206 code_table[i].suffix = 0; |
207 } | 207 } |
208 } | 208 } |
209 void CGifLZWEncoder::Start( FX_BYTE code_len, FX_LPCBYTE src_buf, FX_LPBYTE& dst
_buf, FX_DWORD& offset) | 209 void CGifLZWEncoder::Start( uint8_t code_len, FX_LPCBYTE src_buf, FX_LPBYTE& dst
_buf, FX_DWORD& offset) |
210 { | 210 { |
211 code_size = code_len + 1; | 211 code_size = code_len + 1; |
212 src_bit_cut = code_size; | 212 src_bit_cut = code_size; |
213 if (code_len == 0) { | 213 if (code_len == 0) { |
214 src_bit_cut = 1; | 214 src_bit_cut = 1; |
215 code_size = 2; | 215 code_size = 2; |
216 } | 216 } |
217 code_clear = 1 << code_size; | 217 code_clear = 1 << code_size; |
218 code_end = code_clear + 1; | 218 code_end = code_clear + 1; |
219 dst_buf[offset++] = code_size; | 219 dst_buf[offset++] = code_size; |
(...skipping 11 matching lines...) Expand all Loading... |
231 longjmp(jmp, 1); | 231 longjmp(jmp, 1); |
232 } | 232 } |
233 dst_buf[offset++] = index_buf_len; | 233 dst_buf[offset++] = index_buf_len; |
234 FXSYS_memcpy32(&dst_buf[offset], index_buf, index_buf_len); | 234 FXSYS_memcpy32(&dst_buf[offset], index_buf, index_buf_len); |
235 offset += index_buf_len; | 235 offset += index_buf_len; |
236 FXSYS_memset32(index_buf, 0, GIF_DATA_BLOCK); | 236 FXSYS_memset32(index_buf, 0, GIF_DATA_BLOCK); |
237 index_buf_len = 0; | 237 index_buf_len = 0; |
238 } | 238 } |
239 void CGifLZWEncoder::EncodeString( FX_DWORD index, FX_LPBYTE& dst_buf, FX_DWORD&
dst_len, FX_DWORD& offset ) | 239 void CGifLZWEncoder::EncodeString( FX_DWORD index, FX_LPBYTE& dst_buf, FX_DWORD&
dst_len, FX_DWORD& offset ) |
240 { | 240 { |
241 FX_BYTE index_bit_use; | 241 uint8_t index_bit_use; |
242 index_bit_use = 0; | 242 index_bit_use = 0; |
243 if (index_buf_len == GIF_DATA_BLOCK) { | 243 if (index_buf_len == GIF_DATA_BLOCK) { |
244 WriteBlock(dst_buf, dst_len, offset); | 244 WriteBlock(dst_buf, dst_len, offset); |
245 } | 245 } |
246 _gif_cut_index(index_buf[index_buf_len], index, index_bit_cur, index_bit_use
, bit_offset); | 246 _gif_cut_index(index_buf[index_buf_len], index, index_bit_cur, index_bit_use
, bit_offset); |
247 if (index_bit_cur <= (8 - bit_offset)) { | 247 if (index_bit_cur <= (8 - bit_offset)) { |
248 bit_offset += index_bit_cur; | 248 bit_offset += index_bit_cur; |
249 } else if (index_bit_cur <= (16 - bit_offset)) { | 249 } else if (index_bit_cur <= (16 - bit_offset)) { |
250 index_bit_use += (8 - bit_offset); | 250 index_bit_use += (8 - bit_offset); |
251 bit_offset = 0; | 251 bit_offset = 0; |
(...skipping 30 matching lines...) Expand all Loading... |
282 if (index == code_end) { | 282 if (index == code_end) { |
283 index_buf_len++; | 283 index_buf_len++; |
284 WriteBlock(dst_buf, dst_len, offset); | 284 WriteBlock(dst_buf, dst_len, offset); |
285 } | 285 } |
286 if (index_num++ >> index_bit_cur) { | 286 if (index_num++ >> index_bit_cur) { |
287 index_bit_cur++; | 287 index_bit_cur++; |
288 } | 288 } |
289 } | 289 } |
290 FX_BOOL CGifLZWEncoder::Encode( FX_LPCBYTE src_buf, FX_DWORD src_len, FX_LPBYTE&
dst_buf, FX_DWORD& dst_len, FX_DWORD& offset ) | 290 FX_BOOL CGifLZWEncoder::Encode( FX_LPCBYTE src_buf, FX_DWORD src_len, FX_LPBYTE&
dst_buf, FX_DWORD& dst_len, FX_DWORD& offset ) |
291 { | 291 { |
292 FX_BYTE» » suffix; | 292 uint8_t» » suffix; |
293 if (setjmp(jmp)) { | 293 if (setjmp(jmp)) { |
294 return FALSE; | 294 return FALSE; |
295 } | 295 } |
296 while(src_bit_num < src_len) { | 296 while(src_bit_num < src_len) { |
297 if (!LookUpInTable(src_buf, src_offset, src_bit_offset)) { | 297 if (!LookUpInTable(src_buf, src_offset, src_bit_offset)) { |
298 EncodeString(code_table[index_num].prefix, dst_buf, dst_len, offset)
; | 298 EncodeString(code_table[index_num].prefix, dst_buf, dst_len, offset)
; |
299 if (index_num == GIF_MAX_LZW_CODE) { | 299 if (index_num == GIF_MAX_LZW_CODE) { |
300 suffix = code_table[index_num - 1].suffix; | 300 suffix = code_table[index_num - 1].suffix; |
301 EncodeString(code_clear, dst_buf, dst_len, offset); | 301 EncodeString(code_clear, dst_buf, dst_len, offset); |
302 ClearTable(); | 302 ClearTable(); |
303 code_table[index_num].prefix = suffix; | 303 code_table[index_num].prefix = suffix; |
304 code_table[index_num].suffix = _gif_cut_buf(src_buf, src_offset,
src_bit_cut, src_bit_offset, src_bit_num); | 304 code_table[index_num].suffix = _gif_cut_buf(src_buf, src_offset,
src_bit_cut, src_bit_offset, src_bit_num); |
305 } else { | 305 } else { |
306 code_table[index_num].prefix = code_table[index_num - 1].suffix; | 306 code_table[index_num].prefix = code_table[index_num - 1].suffix; |
307 code_table[index_num].suffix = _gif_cut_buf(src_buf, src_offset,
src_bit_cut, src_bit_offset, src_bit_num); | 307 code_table[index_num].suffix = _gif_cut_buf(src_buf, src_offset,
src_bit_cut, src_bit_offset, src_bit_num); |
308 } | 308 } |
309 } | 309 } |
310 } | 310 } |
311 src_offset = 0; | 311 src_offset = 0; |
312 src_bit_offset = 0; | 312 src_bit_offset = 0; |
313 src_bit_num = 0; | 313 src_bit_num = 0; |
314 return TRUE; | 314 return TRUE; |
315 } | 315 } |
316 FX_BOOL CGifLZWEncoder::LookUpInTable( FX_LPCBYTE buf, FX_DWORD& offset, FX_BYTE
& bit_offset ) | 316 FX_BOOL CGifLZWEncoder::LookUpInTable( FX_LPCBYTE buf, FX_DWORD& offset, uint8_t
& bit_offset ) |
317 { | 317 { |
318 for (FX_WORD i = table_cur; i < index_num; i++) { | 318 for (FX_WORD i = table_cur; i < index_num; i++) { |
319 if (code_table[i].prefix == code_table[index_num].prefix && | 319 if (code_table[i].prefix == code_table[index_num].prefix && |
320 code_table[i].suffix == code_table[index_num].suffix) { | 320 code_table[i].suffix == code_table[index_num].suffix) { |
321 code_table[index_num].prefix = i; | 321 code_table[index_num].prefix = i; |
322 code_table[index_num].suffix = _gif_cut_buf(buf, offset, src_bit_cut
, bit_offset, src_bit_num); | 322 code_table[index_num].suffix = _gif_cut_buf(buf, offset, src_bit_cut
, bit_offset, src_bit_num); |
323 table_cur = i; | 323 table_cur = i; |
324 return TRUE; | 324 return TRUE; |
325 } | 325 } |
326 } | 326 } |
327 table_cur = code_end + 1; | 327 table_cur = code_end + 1; |
328 return FALSE; | 328 return FALSE; |
329 } | 329 } |
330 void CGifLZWEncoder::Finish(FX_LPBYTE& dst_buf, FX_DWORD& dst_len, FX_DWORD& off
set) | 330 void CGifLZWEncoder::Finish(FX_LPBYTE& dst_buf, FX_DWORD& dst_len, FX_DWORD& off
set) |
331 { | 331 { |
332 EncodeString(code_table[index_num].prefix, dst_buf, dst_len, offset); | 332 EncodeString(code_table[index_num].prefix, dst_buf, dst_len, offset); |
333 EncodeString(code_end, dst_buf, dst_len, offset); | 333 EncodeString(code_end, dst_buf, dst_len, offset); |
334 bit_offset = 0; | 334 bit_offset = 0; |
335 ClearTable(); | 335 ClearTable(); |
336 } | 336 } |
337 gif_decompress_struct_p _gif_create_decompress() | 337 gif_decompress_struct_p _gif_create_decompress() |
338 { | 338 { |
339 gif_decompress_struct_p gif_ptr = (gif_decompress_struct*)FX_Alloc(FX_BYTE,
sizeof(gif_decompress_struct)); | 339 gif_decompress_struct_p gif_ptr = (gif_decompress_struct*)FX_Alloc(uint8_t,
sizeof(gif_decompress_struct)); |
340 if(gif_ptr == NULL) { | 340 if(gif_ptr == NULL) { |
341 return NULL; | 341 return NULL; |
342 } | 342 } |
343 FXSYS_memset32(gif_ptr, 0, sizeof(gif_decompress_struct)); | 343 FXSYS_memset32(gif_ptr, 0, sizeof(gif_decompress_struct)); |
344 gif_ptr->decode_status = GIF_D_STATUS_SIG; | 344 gif_ptr->decode_status = GIF_D_STATUS_SIG; |
345 gif_ptr->img_ptr_arr_ptr = new CFX_ArrayTemplate<GifImage*>; | 345 gif_ptr->img_ptr_arr_ptr = new CFX_ArrayTemplate<GifImage*>; |
346 #ifdef GIF_SUPPORT_COMMENT_EXTENSION | 346 #ifdef GIF_SUPPORT_COMMENT_EXTENSION |
347 gif_ptr->cmt_data_ptr = new CFX_ByteString; | 347 gif_ptr->cmt_data_ptr = new CFX_ByteString; |
348 #endif | 348 #endif |
349 #ifdef GIF_SUPPORT_PLAIN_TEXT_EXTENSION | 349 #ifdef GIF_SUPPORT_PLAIN_TEXT_EXTENSION |
350 gif_ptr->pt_ptr_arr_ptr = new CFX_ArrayTemplate<GifPlainText*>; | 350 gif_ptr->pt_ptr_arr_ptr = new CFX_ArrayTemplate<GifPlainText*>; |
351 #endif | 351 #endif |
352 return gif_ptr; | 352 return gif_ptr; |
353 } | 353 } |
354 void _gif_destroy_decompress(gif_decompress_struct_pp gif_ptr_ptr) | 354 void _gif_destroy_decompress(gif_decompress_struct_pp gif_ptr_ptr) |
355 { | 355 { |
356 if(gif_ptr_ptr == NULL || *gif_ptr_ptr == NULL) { | 356 if(gif_ptr_ptr == NULL || *gif_ptr_ptr == NULL) { |
357 return; | 357 return; |
358 } | 358 } |
359 gif_decompress_struct_p gif_ptr = *gif_ptr_ptr; | 359 gif_decompress_struct_p gif_ptr = *gif_ptr_ptr; |
360 *gif_ptr_ptr = NULL; | 360 *gif_ptr_ptr = NULL; |
361 if(gif_ptr->global_pal_ptr != NULL) { | 361 if(gif_ptr->global_pal_ptr != NULL) { |
362 FX_Free(gif_ptr->global_pal_ptr); | 362 FX_Free(gif_ptr->global_pal_ptr); |
363 } | 363 } |
364 if(gif_ptr->img_decoder_ptr != NULL) { | 364 if(gif_ptr->img_decoder_ptr != NULL) { |
365 delete gif_ptr->img_decoder_ptr; | 365 delete gif_ptr->img_decoder_ptr; |
366 } | 366 } |
367 if(gif_ptr->img_ptr_arr_ptr != NULL) { | 367 if(gif_ptr->img_ptr_arr_ptr != NULL) { |
368 FX_INT32 size_img_arr = gif_ptr->img_ptr_arr_ptr->GetSize(); | 368 int32_t size_img_arr = gif_ptr->img_ptr_arr_ptr->GetSize(); |
369 for (FX_INT32 i = 0; i < size_img_arr; i++) { | 369 for (int32_t i = 0; i < size_img_arr; i++) { |
370 GifImage* p = gif_ptr->img_ptr_arr_ptr->GetAt(i); | 370 GifImage* p = gif_ptr->img_ptr_arr_ptr->GetAt(i); |
371 if(p->image_info_ptr != NULL) { | 371 if(p->image_info_ptr != NULL) { |
372 FX_Free(p->image_info_ptr); | 372 FX_Free(p->image_info_ptr); |
373 } | 373 } |
374 if(p->image_gce_ptr != NULL) { | 374 if(p->image_gce_ptr != NULL) { |
375 FX_Free(p->image_gce_ptr); | 375 FX_Free(p->image_gce_ptr); |
376 } | 376 } |
377 if(p->image_row_buf != NULL) { | 377 if(p->image_row_buf != NULL) { |
378 FX_Free(p->image_row_buf); | 378 FX_Free(p->image_row_buf); |
379 } | 379 } |
(...skipping 15 matching lines...) Expand all Loading... |
395 delete gif_ptr->cmt_data_ptr; | 395 delete gif_ptr->cmt_data_ptr; |
396 } | 396 } |
397 #endif | 397 #endif |
398 #ifdef GIF_SUPPORT_GRAPHIC_CONTROL_EXTENSION | 398 #ifdef GIF_SUPPORT_GRAPHIC_CONTROL_EXTENSION |
399 if(gif_ptr->gce_ptr != NULL) { | 399 if(gif_ptr->gce_ptr != NULL) { |
400 FX_Free(gif_ptr->gce_ptr); | 400 FX_Free(gif_ptr->gce_ptr); |
401 } | 401 } |
402 #endif | 402 #endif |
403 #ifdef GIF_SUPPORT_PLAIN_TEXT_EXTENSION | 403 #ifdef GIF_SUPPORT_PLAIN_TEXT_EXTENSION |
404 if(gif_ptr->pt_ptr_arr_ptr != NULL) { | 404 if(gif_ptr->pt_ptr_arr_ptr != NULL) { |
405 FX_INT32 size_pt_arr = gif_ptr->pt_ptr_arr_ptr->GetSize(); | 405 int32_t size_pt_arr = gif_ptr->pt_ptr_arr_ptr->GetSize(); |
406 for (FX_INT32 i = 0; i < size_pt_arr; i++) { | 406 for (int32_t i = 0; i < size_pt_arr; i++) { |
407 GifPlainText* p = gif_ptr->pt_ptr_arr_ptr->GetAt(i); | 407 GifPlainText* p = gif_ptr->pt_ptr_arr_ptr->GetAt(i); |
408 if(p->gce_ptr != NULL) { | 408 if(p->gce_ptr != NULL) { |
409 FX_Free(p->gce_ptr); | 409 FX_Free(p->gce_ptr); |
410 } | 410 } |
411 if(p->pte_ptr != NULL) { | 411 if(p->pte_ptr != NULL) { |
412 FX_Free(p->pte_ptr); | 412 FX_Free(p->pte_ptr); |
413 } | 413 } |
414 if(p->string_ptr != NULL) { | 414 if(p->string_ptr != NULL) { |
415 delete p->string_ptr; | 415 delete p->string_ptr; |
416 } | 416 } |
417 } | 417 } |
418 gif_ptr->pt_ptr_arr_ptr->RemoveAll(); | 418 gif_ptr->pt_ptr_arr_ptr->RemoveAll(); |
419 delete gif_ptr->pt_ptr_arr_ptr; | 419 delete gif_ptr->pt_ptr_arr_ptr; |
420 } | 420 } |
421 #endif | 421 #endif |
422 FX_Free(gif_ptr); | 422 FX_Free(gif_ptr); |
423 } | 423 } |
424 gif_compress_struct_p _gif_create_compress() | 424 gif_compress_struct_p _gif_create_compress() |
425 { | 425 { |
426 gif_compress_struct_p gif_ptr = (gif_compress_struct*)FX_Alloc(FX_BYTE, size
of(gif_compress_struct)); | 426 gif_compress_struct_p gif_ptr = (gif_compress_struct*)FX_Alloc(uint8_t, size
of(gif_compress_struct)); |
427 if (gif_ptr == NULL) { | 427 if (gif_ptr == NULL) { |
428 return NULL; | 428 return NULL; |
429 } | 429 } |
430 FXSYS_memset32(gif_ptr, 0, sizeof(gif_compress_struct)); | 430 FXSYS_memset32(gif_ptr, 0, sizeof(gif_compress_struct)); |
431 gif_ptr->img_encoder_ptr = new CGifLZWEncoder; | 431 gif_ptr->img_encoder_ptr = new CGifLZWEncoder; |
432 gif_ptr->header_ptr = (GifHeader*)FX_Alloc(FX_BYTE, sizeof(GifHeader)); | 432 gif_ptr->header_ptr = (GifHeader*)FX_Alloc(uint8_t, sizeof(GifHeader)); |
433 if (gif_ptr->header_ptr == NULL) { | 433 if (gif_ptr->header_ptr == NULL) { |
434 delete(gif_ptr->img_encoder_ptr); | 434 delete(gif_ptr->img_encoder_ptr); |
435 FX_Free(gif_ptr); | 435 FX_Free(gif_ptr); |
436 return NULL; | 436 return NULL; |
437 } | 437 } |
438 FXSYS_memcpy32(gif_ptr->header_ptr->signature, GIF_SIGNATURE, 3); | 438 FXSYS_memcpy32(gif_ptr->header_ptr->signature, GIF_SIGNATURE, 3); |
439 FXSYS_memcpy32(gif_ptr->header_ptr->version, "89a", 3); | 439 FXSYS_memcpy32(gif_ptr->header_ptr->version, "89a", 3); |
440 gif_ptr->lsd_ptr = (GifLSD*)FX_Alloc(FX_BYTE, sizeof(GifLSD)); | 440 gif_ptr->lsd_ptr = (GifLSD*)FX_Alloc(uint8_t, sizeof(GifLSD)); |
441 if (gif_ptr->lsd_ptr == NULL) { | 441 if (gif_ptr->lsd_ptr == NULL) { |
442 FX_Free(gif_ptr->header_ptr); | 442 FX_Free(gif_ptr->header_ptr); |
443 delete(gif_ptr->img_encoder_ptr); | 443 delete(gif_ptr->img_encoder_ptr); |
444 FX_Free(gif_ptr); | 444 FX_Free(gif_ptr); |
445 return NULL; | 445 return NULL; |
446 } | 446 } |
447 FXSYS_memset32(gif_ptr->lsd_ptr, 0, sizeof(GifLSD)); | 447 FXSYS_memset32(gif_ptr->lsd_ptr, 0, sizeof(GifLSD)); |
448 gif_ptr->image_info_ptr = (GifImageInfo*)FX_Alloc(FX_BYTE, sizeof(GifImageIn
fo)); | 448 gif_ptr->image_info_ptr = (GifImageInfo*)FX_Alloc(uint8_t, sizeof(GifImageIn
fo)); |
449 if (gif_ptr->image_info_ptr == NULL) { | 449 if (gif_ptr->image_info_ptr == NULL) { |
450 FX_Free(gif_ptr->lsd_ptr); | 450 FX_Free(gif_ptr->lsd_ptr); |
451 FX_Free(gif_ptr->header_ptr); | 451 FX_Free(gif_ptr->header_ptr); |
452 delete(gif_ptr->img_encoder_ptr); | 452 delete(gif_ptr->img_encoder_ptr); |
453 FX_Free(gif_ptr); | 453 FX_Free(gif_ptr); |
454 return NULL; | 454 return NULL; |
455 } | 455 } |
456 FXSYS_memset32(gif_ptr->image_info_ptr, 0, sizeof(GifImageInfo)); | 456 FXSYS_memset32(gif_ptr->image_info_ptr, 0, sizeof(GifImageInfo)); |
457 #ifdef GIF_SUPPORT_APPLICATION_EXTENSION | 457 #ifdef GIF_SUPPORT_APPLICATION_EXTENSION |
458 FXSYS_memcpy32(gif_ptr->app_identify, "netscape", 8); | 458 FXSYS_memcpy32(gif_ptr->app_identify, "netscape", 8); |
459 FXSYS_memcpy32(gif_ptr->app_authentication, "2.0", 3); | 459 FXSYS_memcpy32(gif_ptr->app_authentication, "2.0", 3); |
460 #endif | 460 #endif |
461 #ifdef GIF_SUPPORT_GRAPHIC_CONTROL_EXTENSION | 461 #ifdef GIF_SUPPORT_GRAPHIC_CONTROL_EXTENSION |
462 gif_ptr->gce_ptr = (GifGCE*)FX_Alloc(FX_BYTE, sizeof(GifGCE)); | 462 gif_ptr->gce_ptr = (GifGCE*)FX_Alloc(uint8_t, sizeof(GifGCE)); |
463 if (gif_ptr->gce_ptr == NULL) { | 463 if (gif_ptr->gce_ptr == NULL) { |
464 FX_Free(gif_ptr->image_info_ptr); | 464 FX_Free(gif_ptr->image_info_ptr); |
465 FX_Free(gif_ptr->lsd_ptr); | 465 FX_Free(gif_ptr->lsd_ptr); |
466 FX_Free(gif_ptr->header_ptr); | 466 FX_Free(gif_ptr->header_ptr); |
467 delete(gif_ptr->img_encoder_ptr); | 467 delete(gif_ptr->img_encoder_ptr); |
468 FX_Free(gif_ptr); | 468 FX_Free(gif_ptr); |
469 return NULL; | 469 return NULL; |
470 } | 470 } |
471 #endif | 471 #endif |
472 #ifdef GIF_SUPPORT_PLAIN_TEXT_EXTENSION | 472 #ifdef GIF_SUPPORT_PLAIN_TEXT_EXTENSION |
473 gif_ptr->pte_ptr = (GifPTE*)FX_Alloc(FX_BYTE, sizeof(GifPTE)); | 473 gif_ptr->pte_ptr = (GifPTE*)FX_Alloc(uint8_t, sizeof(GifPTE)); |
474 if (gif_ptr->pte_ptr == NULL) { | 474 if (gif_ptr->pte_ptr == NULL) { |
475 FX_Free(gif_ptr->gce_ptr); | 475 FX_Free(gif_ptr->gce_ptr); |
476 FX_Free(gif_ptr->image_info_ptr); | 476 FX_Free(gif_ptr->image_info_ptr); |
477 FX_Free(gif_ptr->lsd_ptr); | 477 FX_Free(gif_ptr->lsd_ptr); |
478 FX_Free(gif_ptr->header_ptr); | 478 FX_Free(gif_ptr->header_ptr); |
479 delete(gif_ptr->img_encoder_ptr); | 479 delete(gif_ptr->img_encoder_ptr); |
480 FX_Free(gif_ptr); | 480 FX_Free(gif_ptr); |
481 return NULL; | 481 return NULL; |
482 } | 482 } |
483 FXSYS_memset32(gif_ptr->pte_ptr, 0, sizeof(GifPTE)); | 483 FXSYS_memset32(gif_ptr->pte_ptr, 0, sizeof(GifPTE)); |
(...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
532 #endif | 532 #endif |
533 FX_Free(gif_ptr); | 533 FX_Free(gif_ptr); |
534 } | 534 } |
535 void _gif_error(gif_decompress_struct_p gif_ptr, FX_LPCSTR err_msg) | 535 void _gif_error(gif_decompress_struct_p gif_ptr, FX_LPCSTR err_msg) |
536 { | 536 { |
537 if(gif_ptr != NULL && gif_ptr->_gif_error_fn != NULL) { | 537 if(gif_ptr != NULL && gif_ptr->_gif_error_fn != NULL) { |
538 gif_ptr->_gif_error_fn(gif_ptr, err_msg); | 538 gif_ptr->_gif_error_fn(gif_ptr, err_msg); |
539 } | 539 } |
540 } | 540 } |
541 void _gif_warn(gif_decompress_struct_p gif_ptr, FX_LPCSTR err_msg) {} | 541 void _gif_warn(gif_decompress_struct_p gif_ptr, FX_LPCSTR err_msg) {} |
542 FX_INT32 _gif_read_header(gif_decompress_struct_p gif_ptr) | 542 int32_t _gif_read_header(gif_decompress_struct_p gif_ptr) |
543 { | 543 { |
544 if(gif_ptr == NULL) { | 544 if(gif_ptr == NULL) { |
545 return 0; | 545 return 0; |
546 } | 546 } |
547 FX_DWORD skip_size_org = gif_ptr->skip_size; | 547 FX_DWORD skip_size_org = gif_ptr->skip_size; |
548 ASSERT(sizeof(GifHeader) == 6); | 548 ASSERT(sizeof(GifHeader) == 6); |
549 GifHeader* gif_header_ptr = NULL; | 549 GifHeader* gif_header_ptr = NULL; |
550 if(_gif_read_data(gif_ptr, (FX_LPBYTE*)&gif_header_ptr, 6) == NULL) { | 550 if(_gif_read_data(gif_ptr, (FX_LPBYTE*)&gif_header_ptr, 6) == NULL) { |
551 return 2; | 551 return 2; |
552 } | 552 } |
553 if(FXSYS_strncmp(gif_header_ptr->signature, GIF_SIGNATURE, 3) != 0 || | 553 if(FXSYS_strncmp(gif_header_ptr->signature, GIF_SIGNATURE, 3) != 0 || |
554 gif_header_ptr->version[0] != '8' || | 554 gif_header_ptr->version[0] != '8' || |
555 gif_header_ptr->version[2] != 'a') { | 555 gif_header_ptr->version[2] != 'a') { |
556 _gif_error(gif_ptr, "Not A Gif Image"); | 556 _gif_error(gif_ptr, "Not A Gif Image"); |
557 return 0; | 557 return 0; |
558 } | 558 } |
559 ASSERT(sizeof(GifLSD) == 7); | 559 ASSERT(sizeof(GifLSD) == 7); |
560 GifLSD* gif_lsd_ptr = NULL; | 560 GifLSD* gif_lsd_ptr = NULL; |
561 if(_gif_read_data(gif_ptr, (FX_LPBYTE*)&gif_lsd_ptr, 7) == NULL) { | 561 if(_gif_read_data(gif_ptr, (FX_LPBYTE*)&gif_lsd_ptr, 7) == NULL) { |
562 gif_ptr->skip_size = skip_size_org; | 562 gif_ptr->skip_size = skip_size_org; |
563 return 2; | 563 return 2; |
564 } | 564 } |
565 if(((GifGF*)&gif_lsd_ptr->global_flag)->global_pal) { | 565 if(((GifGF*)&gif_lsd_ptr->global_flag)->global_pal) { |
566 gif_ptr->global_pal_num = 2 << ((GifGF*)&gif_lsd_ptr->global_flag)->pal_
bits; | 566 gif_ptr->global_pal_num = 2 << ((GifGF*)&gif_lsd_ptr->global_flag)->pal_
bits; |
567 ASSERT(sizeof(GifPalette) == 3); | 567 ASSERT(sizeof(GifPalette) == 3); |
568 FX_INT32 global_pal_size = gif_ptr->global_pal_num * 3; | 568 int32_t global_pal_size = gif_ptr->global_pal_num * 3; |
569 FX_LPBYTE global_pal_ptr = NULL; | 569 FX_LPBYTE global_pal_ptr = NULL; |
570 if (_gif_read_data(gif_ptr, &global_pal_ptr, global_pal_size) == NULL) { | 570 if (_gif_read_data(gif_ptr, &global_pal_ptr, global_pal_size) == NULL) { |
571 gif_ptr->skip_size = skip_size_org; | 571 gif_ptr->skip_size = skip_size_org; |
572 return 2; | 572 return 2; |
573 } | 573 } |
574 gif_ptr->global_sort_flag = ((GifGF*)&gif_lsd_ptr->global_flag)->sort_fl
ag; | 574 gif_ptr->global_sort_flag = ((GifGF*)&gif_lsd_ptr->global_flag)->sort_fl
ag; |
575 gif_ptr->global_color_resolution = ((GifGF*)&gif_lsd_ptr->global_flag)->
color_resolution; | 575 gif_ptr->global_color_resolution = ((GifGF*)&gif_lsd_ptr->global_flag)->
color_resolution; |
576 if(gif_ptr->global_pal_ptr != NULL) { | 576 if(gif_ptr->global_pal_ptr != NULL) { |
577 FX_Free(gif_ptr->global_pal_ptr); | 577 FX_Free(gif_ptr->global_pal_ptr); |
578 } | 578 } |
579 gif_ptr->global_pal_ptr = NULL; | 579 gif_ptr->global_pal_ptr = NULL; |
580 gif_ptr->global_pal_ptr = (GifPalette*)FX_Alloc(FX_BYTE, global_pal_size
); | 580 gif_ptr->global_pal_ptr = (GifPalette*)FX_Alloc(uint8_t, global_pal_size
); |
581 GIF_PTR_NOT_NULL(gif_ptr->global_pal_ptr, gif_ptr); | 581 GIF_PTR_NOT_NULL(gif_ptr->global_pal_ptr, gif_ptr); |
582 FXSYS_memcpy32(gif_ptr->global_pal_ptr, global_pal_ptr, global_pal_size)
; | 582 FXSYS_memcpy32(gif_ptr->global_pal_ptr, global_pal_ptr, global_pal_size)
; |
583 } | 583 } |
584 gif_ptr->width = (int)_GetWord_LSBFirst((FX_LPBYTE)&gif_lsd_ptr->width); | 584 gif_ptr->width = (int)_GetWord_LSBFirst((FX_LPBYTE)&gif_lsd_ptr->width); |
585 gif_ptr->height = (int)_GetWord_LSBFirst((FX_LPBYTE)&gif_lsd_ptr->height); | 585 gif_ptr->height = (int)_GetWord_LSBFirst((FX_LPBYTE)&gif_lsd_ptr->height); |
586 gif_ptr->bc_index = gif_lsd_ptr->bc_index; | 586 gif_ptr->bc_index = gif_lsd_ptr->bc_index; |
587 gif_ptr->pixel_aspect = gif_lsd_ptr->pixel_aspect; | 587 gif_ptr->pixel_aspect = gif_lsd_ptr->pixel_aspect; |
588 return 1; | 588 return 1; |
589 } | 589 } |
590 FX_INT32 _gif_get_frame(gif_decompress_struct_p gif_ptr) | 590 int32_t _gif_get_frame(gif_decompress_struct_p gif_ptr) |
591 { | 591 { |
592 if(gif_ptr == NULL) { | 592 if(gif_ptr == NULL) { |
593 return 0; | 593 return 0; |
594 } | 594 } |
595 FX_INT32 ret = 1; | 595 int32_t ret = 1; |
596 while (TRUE) { | 596 while (TRUE) { |
597 switch(gif_ptr->decode_status) { | 597 switch(gif_ptr->decode_status) { |
598 case GIF_D_STATUS_TAIL: | 598 case GIF_D_STATUS_TAIL: |
599 return 1; | 599 return 1; |
600 case GIF_D_STATUS_SIG: { | 600 case GIF_D_STATUS_SIG: { |
601 FX_LPBYTE sig_ptr = NULL; | 601 FX_LPBYTE sig_ptr = NULL; |
602 if(_gif_read_data(gif_ptr, &sig_ptr, 1) == NULL) { | 602 if(_gif_read_data(gif_ptr, &sig_ptr, 1) == NULL) { |
603 return 2; | 603 return 2; |
604 } | 604 } |
605 switch(*sig_ptr) { | 605 switch(*sig_ptr) { |
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
642 case GIF_BLOCK_GCE: | 642 case GIF_BLOCK_GCE: |
643 _gif_save_decoding_status(gif_ptr, GIF_D_STATUS_EXT_
GCE); | 643 _gif_save_decoding_status(gif_ptr, GIF_D_STATUS_EXT_
GCE); |
644 continue; | 644 continue; |
645 #endif | 645 #endif |
646 #ifdef GIF_SUPPORT_PLAIN_TEXT_EXTENSION | 646 #ifdef GIF_SUPPORT_PLAIN_TEXT_EXTENSION |
647 case GIF_BLOCK_PTE: | 647 case GIF_BLOCK_PTE: |
648 _gif_save_decoding_status(gif_ptr, GIF_D_STATUS_EXT_
PTE); | 648 _gif_save_decoding_status(gif_ptr, GIF_D_STATUS_EXT_
PTE); |
649 continue; | 649 continue; |
650 #endif | 650 #endif |
651 default: { | 651 default: { |
652 FX_INT32 status = GIF_D_STATUS_EXT_UNE; | 652 int32_t status = GIF_D_STATUS_EXT_UNE; |
653 #ifndef GIF_SUPPORT_PLAIN_TEXT_EXTENSION | 653 #ifndef GIF_SUPPORT_PLAIN_TEXT_EXTENSION |
654 if(*ext_ptr == GIF_BLOCK_PTE) { | 654 if(*ext_ptr == GIF_BLOCK_PTE) { |
655 status = GIF_D_STATUS_EXT_PTE; | 655 status = GIF_D_STATUS_EXT_PTE; |
656 } | 656 } |
657 #endif | 657 #endif |
658 _gif_save_decoding_status(gif_ptr, status); | 658 _gif_save_decoding_status(gif_ptr, status); |
659 continue; | 659 continue; |
660 } | 660 } |
661 } | 661 } |
662 } | 662 } |
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
702 void _gif_takeover_gce_ptr(gif_decompress_struct_p gif_ptr, GifGCE** gce_ptr_ptr
) | 702 void _gif_takeover_gce_ptr(gif_decompress_struct_p gif_ptr, GifGCE** gce_ptr_ptr
) |
703 { | 703 { |
704 *gce_ptr_ptr = NULL; | 704 *gce_ptr_ptr = NULL; |
705 #ifdef GIF_SUPPORT_GRAPHIC_CONTROL_EXTENSION | 705 #ifdef GIF_SUPPORT_GRAPHIC_CONTROL_EXTENSION |
706 if(gif_ptr->gce_ptr != NULL && gce_ptr_ptr != NULL) { | 706 if(gif_ptr->gce_ptr != NULL && gce_ptr_ptr != NULL) { |
707 *gce_ptr_ptr = gif_ptr->gce_ptr; | 707 *gce_ptr_ptr = gif_ptr->gce_ptr; |
708 gif_ptr->gce_ptr = NULL; | 708 gif_ptr->gce_ptr = NULL; |
709 } | 709 } |
710 #endif | 710 #endif |
711 } | 711 } |
712 FX_INT32 _gif_decode_extension(gif_decompress_struct_p gif_ptr) | 712 int32_t _gif_decode_extension(gif_decompress_struct_p gif_ptr) |
713 { | 713 { |
714 FX_LPBYTE data_size_ptr = NULL; | 714 FX_LPBYTE data_size_ptr = NULL; |
715 FX_LPBYTE data_ptr = NULL; | 715 FX_LPBYTE data_ptr = NULL; |
716 FX_DWORD skip_size_org = gif_ptr->skip_size; | 716 FX_DWORD skip_size_org = gif_ptr->skip_size; |
717 switch(gif_ptr->decode_status) { | 717 switch(gif_ptr->decode_status) { |
718 #ifdef GIF_SUPPORT_APPLICATION_EXTENSION | 718 #ifdef GIF_SUPPORT_APPLICATION_EXTENSION |
719 case GIF_D_STATUS_EXT_AE: { | 719 case GIF_D_STATUS_EXT_AE: { |
720 ASSERT(sizeof(GifAE) == 12); | 720 ASSERT(sizeof(GifAE) == 12); |
721 GifAE* gif_ae_ptr = NULL; | 721 GifAE* gif_ae_ptr = NULL; |
722 if(_gif_read_data(gif_ptr, (FX_LPBYTE*)&gif_ae_ptr, 12) == NULL)
{ | 722 if(_gif_read_data(gif_ptr, (FX_LPBYTE*)&gif_ae_ptr, 12) == NULL)
{ |
723 return 2; | 723 return 2; |
724 } | 724 } |
725 CFX_ByteString gif_ae_data_str; | 725 CFX_ByteString gif_ae_data_str; |
726 if(_gif_read_data(gif_ptr, &data_size_ptr, 1) == NULL) { | 726 if(_gif_read_data(gif_ptr, &data_size_ptr, 1) == NULL) { |
727 gif_ptr->skip_size = skip_size_org; | 727 gif_ptr->skip_size = skip_size_org; |
728 return 2; | 728 return 2; |
729 } | 729 } |
730 while(*data_size_ptr != GIF_BLOCK_TERMINAL) { | 730 while(*data_size_ptr != GIF_BLOCK_TERMINAL) { |
731 FX_BYTE data_size = *data_size_ptr; | 731 uint8_t data_size = *data_size_ptr; |
732 if(_gif_read_data(gif_ptr, &data_ptr, *data_size_ptr) == NUL
L || | 732 if(_gif_read_data(gif_ptr, &data_ptr, *data_size_ptr) == NUL
L || |
733 _gif_read_data(gif_ptr, &data_size_ptr, 1) == NULL)
{ | 733 _gif_read_data(gif_ptr, &data_size_ptr, 1) == NULL)
{ |
734 gif_ptr->skip_size = skip_size_org; | 734 gif_ptr->skip_size = skip_size_org; |
735 return 2; | 735 return 2; |
736 } | 736 } |
737 gif_ae_data_str += CFX_ByteString((FX_LPCBYTE)data_ptr, data
_size); | 737 gif_ae_data_str += CFX_ByteString((FX_LPCBYTE)data_ptr, data
_size); |
738 } | 738 } |
739 FXSYS_memcpy32(gif_ptr->app_identify, gif_ae_ptr->app_identify,
8); | 739 FXSYS_memcpy32(gif_ptr->app_identify, gif_ae_ptr->app_identify,
8); |
740 FXSYS_memcpy32(gif_ptr->app_authentication, gif_ae_ptr->app_auth
entication, 3); | 740 FXSYS_memcpy32(gif_ptr->app_authentication, gif_ae_ptr->app_auth
entication, 3); |
741 gif_ptr->app_data_size = gif_ae_data_str.GetLength(); | 741 gif_ptr->app_data_size = gif_ae_data_str.GetLength(); |
742 if(gif_ptr->app_data != NULL) { | 742 if(gif_ptr->app_data != NULL) { |
743 FX_Free(gif_ptr->app_data); | 743 FX_Free(gif_ptr->app_data); |
744 gif_ptr->app_data = NULL; | 744 gif_ptr->app_data = NULL; |
745 } | 745 } |
746 gif_ptr->app_data = FX_Alloc(FX_BYTE, gif_ptr->app_data_size); | 746 gif_ptr->app_data = FX_Alloc(uint8_t, gif_ptr->app_data_size); |
747 GIF_PTR_NOT_NULL(gif_ptr->app_data, gif_ptr); | 747 GIF_PTR_NOT_NULL(gif_ptr->app_data, gif_ptr); |
748 FXSYS_memcpy32(gif_ptr->app_data, FX_LPCBYTE(gif_ae_data_str), g
if_ptr->app_data_size); | 748 FXSYS_memcpy32(gif_ptr->app_data, FX_LPCBYTE(gif_ae_data_str), g
if_ptr->app_data_size); |
749 } | 749 } |
750 break; | 750 break; |
751 #endif | 751 #endif |
752 #ifdef GIF_SUPPORT_COMMENT_EXTENSION | 752 #ifdef GIF_SUPPORT_COMMENT_EXTENSION |
753 case GIF_D_STATUS_EXT_CE: { | 753 case GIF_D_STATUS_EXT_CE: { |
754 if(_gif_read_data(gif_ptr, &data_size_ptr, 1) == NULL) { | 754 if(_gif_read_data(gif_ptr, &data_size_ptr, 1) == NULL) { |
755 gif_ptr->skip_size = skip_size_org; | 755 gif_ptr->skip_size = skip_size_org; |
756 return 2; | 756 return 2; |
757 } | 757 } |
758 gif_ptr->cmt_data_ptr->Empty(); | 758 gif_ptr->cmt_data_ptr->Empty(); |
759 while(*data_size_ptr != GIF_BLOCK_TERMINAL) { | 759 while(*data_size_ptr != GIF_BLOCK_TERMINAL) { |
760 FX_BYTE data_size = *data_size_ptr; | 760 uint8_t data_size = *data_size_ptr; |
761 if(_gif_read_data(gif_ptr, &data_ptr, *data_size_ptr) == NUL
L || | 761 if(_gif_read_data(gif_ptr, &data_ptr, *data_size_ptr) == NUL
L || |
762 _gif_read_data(gif_ptr, &data_size_ptr, 1) == NULL)
{ | 762 _gif_read_data(gif_ptr, &data_size_ptr, 1) == NULL)
{ |
763 gif_ptr->skip_size = skip_size_org; | 763 gif_ptr->skip_size = skip_size_org; |
764 return 2; | 764 return 2; |
765 } | 765 } |
766 *(gif_ptr->cmt_data_ptr) += CFX_ByteString((FX_LPCSTR)data_p
tr, data_size); | 766 *(gif_ptr->cmt_data_ptr) += CFX_ByteString((FX_LPCSTR)data_p
tr, data_size); |
767 } | 767 } |
768 } | 768 } |
769 break; | 769 break; |
770 #endif | 770 #endif |
771 #ifdef GIF_SUPPORT_PLAIN_TEXT_EXTENSION | 771 #ifdef GIF_SUPPORT_PLAIN_TEXT_EXTENSION |
772 case GIF_D_STATUS_EXT_PTE: { | 772 case GIF_D_STATUS_EXT_PTE: { |
773 ASSERT(sizeof(GifPTE) == 13); | 773 ASSERT(sizeof(GifPTE) == 13); |
774 GifPTE* gif_pte_ptr = NULL; | 774 GifPTE* gif_pte_ptr = NULL; |
775 if(_gif_read_data(gif_ptr, (FX_LPBYTE*)&gif_pte_ptr, 13) == NULL
) { | 775 if(_gif_read_data(gif_ptr, (FX_LPBYTE*)&gif_pte_ptr, 13) == NULL
) { |
776 return 2; | 776 return 2; |
777 } | 777 } |
778 GifPlainText* gif_pt_ptr = FX_Alloc(GifPlainText, 1); | 778 GifPlainText* gif_pt_ptr = FX_Alloc(GifPlainText, 1); |
779 GIF_PTR_NOT_NULL(gif_pt_ptr, gif_ptr); | 779 GIF_PTR_NOT_NULL(gif_pt_ptr, gif_ptr); |
780 FXSYS_memset32(gif_pt_ptr, 0, sizeof(GifPlainText)); | 780 FXSYS_memset32(gif_pt_ptr, 0, sizeof(GifPlainText)); |
781 _gif_takeover_gce_ptr(gif_ptr, &gif_pt_ptr->gce_ptr); | 781 _gif_takeover_gce_ptr(gif_ptr, &gif_pt_ptr->gce_ptr); |
782 gif_pt_ptr->pte_ptr = (GifPTE*)FX_Alloc(FX_BYTE, sizeof(GifPTE))
; | 782 gif_pt_ptr->pte_ptr = (GifPTE*)FX_Alloc(uint8_t, sizeof(GifPTE))
; |
783 GIF_PTR_NOT_NULL(gif_pt_ptr->pte_ptr, gif_ptr); | 783 GIF_PTR_NOT_NULL(gif_pt_ptr->pte_ptr, gif_ptr); |
784 gif_pt_ptr->string_ptr = new CFX_ByteString; | 784 gif_pt_ptr->string_ptr = new CFX_ByteString; |
785 GIF_PTR_NOT_NULL(gif_pt_ptr->string_ptr, gif_ptr); | 785 GIF_PTR_NOT_NULL(gif_pt_ptr->string_ptr, gif_ptr); |
786 gif_pt_ptr->pte_ptr->block_size = gif_pte_ptr->block_size; | 786 gif_pt_ptr->pte_ptr->block_size = gif_pte_ptr->block_size; |
787 gif_pt_ptr->pte_ptr->grid_left = _GetWord_LSBFirst((FX_LPBYTE)&g
if_pte_ptr->grid_left); | 787 gif_pt_ptr->pte_ptr->grid_left = _GetWord_LSBFirst((FX_LPBYTE)&g
if_pte_ptr->grid_left); |
788 gif_pt_ptr->pte_ptr->grid_top = _GetWord_LSBFirst((FX_LPBYTE)&gi
f_pte_ptr->grid_top); | 788 gif_pt_ptr->pte_ptr->grid_top = _GetWord_LSBFirst((FX_LPBYTE)&gi
f_pte_ptr->grid_top); |
789 gif_pt_ptr->pte_ptr->grid_width = _GetWord_LSBFirst((FX_LPBYTE)&
gif_pte_ptr->grid_width); | 789 gif_pt_ptr->pte_ptr->grid_width = _GetWord_LSBFirst((FX_LPBYTE)&
gif_pte_ptr->grid_width); |
790 gif_pt_ptr->pte_ptr->grid_height = _GetWord_LSBFirst((FX_LPBYTE)
&gif_pte_ptr->grid_height); | 790 gif_pt_ptr->pte_ptr->grid_height = _GetWord_LSBFirst((FX_LPBYTE)
&gif_pte_ptr->grid_height); |
791 gif_pt_ptr->pte_ptr->char_width = gif_pte_ptr->char_width; | 791 gif_pt_ptr->pte_ptr->char_width = gif_pte_ptr->char_width; |
792 gif_pt_ptr->pte_ptr->char_height = gif_pte_ptr->char_height; | 792 gif_pt_ptr->pte_ptr->char_height = gif_pte_ptr->char_height; |
793 gif_pt_ptr->pte_ptr->fc_index = gif_pte_ptr->fc_index; | 793 gif_pt_ptr->pte_ptr->fc_index = gif_pte_ptr->fc_index; |
794 gif_pt_ptr->pte_ptr->bc_index = gif_pte_ptr->bc_index; | 794 gif_pt_ptr->pte_ptr->bc_index = gif_pte_ptr->bc_index; |
795 if(_gif_read_data(gif_ptr, &data_size_ptr, 1) == NULL) { | 795 if(_gif_read_data(gif_ptr, &data_size_ptr, 1) == NULL) { |
796 gif_ptr->skip_size = skip_size_org; | 796 gif_ptr->skip_size = skip_size_org; |
797 if(gif_pt_ptr != NULL) { | 797 if(gif_pt_ptr != NULL) { |
798 if(gif_pt_ptr->gce_ptr != NULL) { | 798 if(gif_pt_ptr->gce_ptr != NULL) { |
799 FX_Free(gif_pt_ptr->gce_ptr); | 799 FX_Free(gif_pt_ptr->gce_ptr); |
800 } | 800 } |
801 if(gif_pt_ptr->pte_ptr != NULL) { | 801 if(gif_pt_ptr->pte_ptr != NULL) { |
802 FX_Free(gif_pt_ptr->pte_ptr); | 802 FX_Free(gif_pt_ptr->pte_ptr); |
803 } | 803 } |
804 if(gif_pt_ptr->string_ptr != NULL) { | 804 if(gif_pt_ptr->string_ptr != NULL) { |
805 delete gif_pt_ptr->string_ptr; | 805 delete gif_pt_ptr->string_ptr; |
806 } | 806 } |
807 FX_Free(gif_pt_ptr); | 807 FX_Free(gif_pt_ptr); |
808 } | 808 } |
809 return 2; | 809 return 2; |
810 } | 810 } |
811 while(*data_size_ptr != GIF_BLOCK_TERMINAL) { | 811 while(*data_size_ptr != GIF_BLOCK_TERMINAL) { |
812 FX_BYTE data_size = *data_size_ptr; | 812 uint8_t data_size = *data_size_ptr; |
813 if(_gif_read_data(gif_ptr, &data_ptr, *data_size_ptr) == NUL
L || | 813 if(_gif_read_data(gif_ptr, &data_ptr, *data_size_ptr) == NUL
L || |
814 _gif_read_data(gif_ptr, &data_size_ptr, 1) == NULL)
{ | 814 _gif_read_data(gif_ptr, &data_size_ptr, 1) == NULL)
{ |
815 gif_ptr->skip_size = skip_size_org; | 815 gif_ptr->skip_size = skip_size_org; |
816 if(gif_pt_ptr != NULL) { | 816 if(gif_pt_ptr != NULL) { |
817 if(gif_pt_ptr->gce_ptr != NULL) { | 817 if(gif_pt_ptr->gce_ptr != NULL) { |
818 FX_Free(gif_pt_ptr->gce_ptr); | 818 FX_Free(gif_pt_ptr->gce_ptr); |
819 } | 819 } |
820 if(gif_pt_ptr->pte_ptr != NULL) { | 820 if(gif_pt_ptr->pte_ptr != NULL) { |
821 FX_Free(gif_pt_ptr->pte_ptr); | 821 FX_Free(gif_pt_ptr->pte_ptr); |
822 } | 822 } |
(...skipping 11 matching lines...) Expand all Loading... |
834 break; | 834 break; |
835 #endif | 835 #endif |
836 #ifdef GIF_SUPPORT_GRAPHIC_CONTROL_EXTENSION | 836 #ifdef GIF_SUPPORT_GRAPHIC_CONTROL_EXTENSION |
837 case GIF_D_STATUS_EXT_GCE: { | 837 case GIF_D_STATUS_EXT_GCE: { |
838 ASSERT(sizeof(GifGCE) == 5); | 838 ASSERT(sizeof(GifGCE) == 5); |
839 GifGCE* gif_gce_ptr = NULL; | 839 GifGCE* gif_gce_ptr = NULL; |
840 if(_gif_read_data(gif_ptr, (FX_LPBYTE*)&gif_gce_ptr, 6) == NULL)
{ | 840 if(_gif_read_data(gif_ptr, (FX_LPBYTE*)&gif_gce_ptr, 6) == NULL)
{ |
841 return 2; | 841 return 2; |
842 } | 842 } |
843 if(gif_ptr->gce_ptr == NULL) { | 843 if(gif_ptr->gce_ptr == NULL) { |
844 gif_ptr->gce_ptr = (GifGCE*)FX_Alloc(FX_BYTE, sizeof(GifGCE)
); | 844 gif_ptr->gce_ptr = (GifGCE*)FX_Alloc(uint8_t, sizeof(GifGCE)
); |
845 GIF_PTR_NOT_NULL(gif_ptr->gce_ptr, gif_ptr); | 845 GIF_PTR_NOT_NULL(gif_ptr->gce_ptr, gif_ptr); |
846 } | 846 } |
847 gif_ptr->gce_ptr->block_size = gif_gce_ptr->block_size; | 847 gif_ptr->gce_ptr->block_size = gif_gce_ptr->block_size; |
848 gif_ptr->gce_ptr->gce_flag = gif_gce_ptr->gce_flag; | 848 gif_ptr->gce_ptr->gce_flag = gif_gce_ptr->gce_flag; |
849 gif_ptr->gce_ptr->delay_time = _GetWord_LSBFirst((FX_LPBYTE)&gif
_gce_ptr->delay_time); | 849 gif_ptr->gce_ptr->delay_time = _GetWord_LSBFirst((FX_LPBYTE)&gif
_gce_ptr->delay_time); |
850 gif_ptr->gce_ptr->trans_index = gif_gce_ptr->trans_index; | 850 gif_ptr->gce_ptr->trans_index = gif_gce_ptr->trans_index; |
851 } | 851 } |
852 break; | 852 break; |
853 #endif | 853 #endif |
854 default: { | 854 default: { |
(...skipping 15 matching lines...) Expand all Loading... |
870 _gif_read_data(gif_ptr, &data_size_ptr, 1) == NULL )
{ | 870 _gif_read_data(gif_ptr, &data_size_ptr, 1) == NULL )
{ |
871 gif_ptr->skip_size = skip_size_org; | 871 gif_ptr->skip_size = skip_size_org; |
872 return 2; | 872 return 2; |
873 } | 873 } |
874 } | 874 } |
875 } | 875 } |
876 } | 876 } |
877 _gif_save_decoding_status(gif_ptr, GIF_D_STATUS_SIG); | 877 _gif_save_decoding_status(gif_ptr, GIF_D_STATUS_SIG); |
878 return 1; | 878 return 1; |
879 } | 879 } |
880 FX_INT32 _gif_decode_image_info(gif_decompress_struct_p gif_ptr) | 880 int32_t _gif_decode_image_info(gif_decompress_struct_p gif_ptr) |
881 { | 881 { |
882 if(gif_ptr->width == 0 || gif_ptr->height == 0) { | 882 if(gif_ptr->width == 0 || gif_ptr->height == 0) { |
883 _gif_error(gif_ptr, "No Image Header Info"); | 883 _gif_error(gif_ptr, "No Image Header Info"); |
884 return 0; | 884 return 0; |
885 } | 885 } |
886 FX_DWORD skip_size_org = gif_ptr->skip_size; | 886 FX_DWORD skip_size_org = gif_ptr->skip_size; |
887 ASSERT(sizeof(GifImageInfo) == 9); | 887 ASSERT(sizeof(GifImageInfo) == 9); |
888 GifImageInfo* gif_img_info_ptr = NULL; | 888 GifImageInfo* gif_img_info_ptr = NULL; |
889 if(_gif_read_data(gif_ptr, (FX_LPBYTE*)&gif_img_info_ptr, 9) == NULL) { | 889 if(_gif_read_data(gif_ptr, (FX_LPBYTE*)&gif_img_info_ptr, 9) == NULL) { |
890 return 2; | 890 return 2; |
891 } | 891 } |
892 GifImage* gif_image_ptr = (GifImage*)FX_Alloc(FX_BYTE, sizeof(GifImage)); | 892 GifImage* gif_image_ptr = (GifImage*)FX_Alloc(uint8_t, sizeof(GifImage)); |
893 GIF_PTR_NOT_NULL(gif_image_ptr, gif_ptr); | 893 GIF_PTR_NOT_NULL(gif_image_ptr, gif_ptr); |
894 FXSYS_memset32(gif_image_ptr, 0, sizeof(GifImage)); | 894 FXSYS_memset32(gif_image_ptr, 0, sizeof(GifImage)); |
895 gif_image_ptr->image_info_ptr = (GifImageInfo*)FX_Alloc(FX_BYTE, sizeof(GifI
mageInfo)); | 895 gif_image_ptr->image_info_ptr = (GifImageInfo*)FX_Alloc(uint8_t, sizeof(GifI
mageInfo)); |
896 GIF_PTR_NOT_NULL(gif_image_ptr->image_info_ptr, gif_ptr); | 896 GIF_PTR_NOT_NULL(gif_image_ptr->image_info_ptr, gif_ptr); |
897 gif_image_ptr->image_info_ptr->left = _GetWord_LSBFirst((FX_LPBYTE)&gif_img_
info_ptr->left); | 897 gif_image_ptr->image_info_ptr->left = _GetWord_LSBFirst((FX_LPBYTE)&gif_img_
info_ptr->left); |
898 gif_image_ptr->image_info_ptr->top = _GetWord_LSBFirst((FX_LPBYTE)&gif_img_i
nfo_ptr->top); | 898 gif_image_ptr->image_info_ptr->top = _GetWord_LSBFirst((FX_LPBYTE)&gif_img_i
nfo_ptr->top); |
899 gif_image_ptr->image_info_ptr->width = _GetWord_LSBFirst((FX_LPBYTE)&gif_img
_info_ptr->width); | 899 gif_image_ptr->image_info_ptr->width = _GetWord_LSBFirst((FX_LPBYTE)&gif_img
_info_ptr->width); |
900 gif_image_ptr->image_info_ptr->height = _GetWord_LSBFirst((FX_LPBYTE)&gif_im
g_info_ptr->height); | 900 gif_image_ptr->image_info_ptr->height = _GetWord_LSBFirst((FX_LPBYTE)&gif_im
g_info_ptr->height); |
901 gif_image_ptr->image_info_ptr->local_flag = gif_img_info_ptr->local_flag; | 901 gif_image_ptr->image_info_ptr->local_flag = gif_img_info_ptr->local_flag; |
902 if(gif_image_ptr->image_info_ptr->left + gif_image_ptr->image_info_ptr->widt
h > gif_ptr->width || | 902 if(gif_image_ptr->image_info_ptr->left + gif_image_ptr->image_info_ptr->widt
h > gif_ptr->width || |
903 gif_image_ptr->image_info_ptr->top + gif_image_ptr->image_info_ptr->
height > gif_ptr->height) { | 903 gif_image_ptr->image_info_ptr->top + gif_image_ptr->image_info_ptr->
height > gif_ptr->height) { |
904 if(gif_image_ptr->image_info_ptr != NULL) { | 904 if(gif_image_ptr->image_info_ptr != NULL) { |
905 FX_Free(gif_image_ptr->image_info_ptr); | 905 FX_Free(gif_image_ptr->image_info_ptr); |
906 } | 906 } |
907 if(gif_image_ptr->image_row_buf != NULL) { | 907 if(gif_image_ptr->image_row_buf != NULL) { |
908 FX_Free(gif_image_ptr->image_row_buf); | 908 FX_Free(gif_image_ptr->image_row_buf); |
909 } | 909 } |
910 FX_Free(gif_image_ptr); | 910 FX_Free(gif_image_ptr); |
911 _gif_error(gif_ptr, "Image Data Out Of LSD, The File May Be Corrupt"); | 911 _gif_error(gif_ptr, "Image Data Out Of LSD, The File May Be Corrupt"); |
912 return 0; | 912 return 0; |
913 } | 913 } |
914 GifLF* gif_img_info_lf_ptr = (GifLF*)&gif_img_info_ptr->local_flag; | 914 GifLF* gif_img_info_lf_ptr = (GifLF*)&gif_img_info_ptr->local_flag; |
915 if(gif_img_info_lf_ptr->local_pal) { | 915 if(gif_img_info_lf_ptr->local_pal) { |
916 ASSERT(sizeof(GifPalette) == 3); | 916 ASSERT(sizeof(GifPalette) == 3); |
917 FX_INT32 loc_pal_size = (2 << gif_img_info_lf_ptr->pal_bits) * 3; | 917 int32_t loc_pal_size = (2 << gif_img_info_lf_ptr->pal_bits) * 3; |
918 FX_LPBYTE loc_pal_ptr = NULL; | 918 FX_LPBYTE loc_pal_ptr = NULL; |
919 if(_gif_read_data(gif_ptr, &loc_pal_ptr, loc_pal_size) == NULL) { | 919 if(_gif_read_data(gif_ptr, &loc_pal_ptr, loc_pal_size) == NULL) { |
920 gif_ptr->skip_size = skip_size_org; | 920 gif_ptr->skip_size = skip_size_org; |
921 if(gif_image_ptr->image_info_ptr != NULL) { | 921 if(gif_image_ptr->image_info_ptr != NULL) { |
922 FX_Free(gif_image_ptr->image_info_ptr); | 922 FX_Free(gif_image_ptr->image_info_ptr); |
923 } | 923 } |
924 if(gif_image_ptr->image_row_buf != NULL) { | 924 if(gif_image_ptr->image_row_buf != NULL) { |
925 FX_Free(gif_image_ptr->image_row_buf); | 925 FX_Free(gif_image_ptr->image_row_buf); |
926 } | 926 } |
927 FX_Free(gif_image_ptr); | 927 FX_Free(gif_image_ptr); |
(...skipping 20 matching lines...) Expand all Loading... |
948 return 2; | 948 return 2; |
949 } | 949 } |
950 gif_image_ptr->image_code_size = *code_size_ptr; | 950 gif_image_ptr->image_code_size = *code_size_ptr; |
951 gif_ptr->_gif_record_current_position_fn(gif_ptr, &gif_image_ptr->image_data
_pos); | 951 gif_ptr->_gif_record_current_position_fn(gif_ptr, &gif_image_ptr->image_data
_pos); |
952 gif_image_ptr->image_data_pos += gif_ptr->skip_size; | 952 gif_image_ptr->image_data_pos += gif_ptr->skip_size; |
953 _gif_takeover_gce_ptr(gif_ptr, &gif_image_ptr->image_gce_ptr); | 953 _gif_takeover_gce_ptr(gif_ptr, &gif_image_ptr->image_gce_ptr); |
954 gif_ptr->img_ptr_arr_ptr->Add(gif_image_ptr); | 954 gif_ptr->img_ptr_arr_ptr->Add(gif_image_ptr); |
955 _gif_save_decoding_status(gif_ptr, GIF_D_STATUS_IMG_DATA); | 955 _gif_save_decoding_status(gif_ptr, GIF_D_STATUS_IMG_DATA); |
956 return 1; | 956 return 1; |
957 } | 957 } |
958 FX_INT32 _gif_load_frame(gif_decompress_struct_p gif_ptr, FX_INT32 frame_num) | 958 int32_t _gif_load_frame(gif_decompress_struct_p gif_ptr, int32_t frame_num) |
959 { | 959 { |
960 if(gif_ptr == NULL || | 960 if(gif_ptr == NULL || |
961 frame_num < 0 || | 961 frame_num < 0 || |
962 frame_num >= gif_ptr->img_ptr_arr_ptr->GetSize() | 962 frame_num >= gif_ptr->img_ptr_arr_ptr->GetSize() |
963 ) { | 963 ) { |
964 return 0; | 964 return 0; |
965 } | 965 } |
966 FX_LPBYTE data_size_ptr = NULL; | 966 FX_LPBYTE data_size_ptr = NULL; |
967 FX_LPBYTE data_ptr = NULL; | 967 FX_LPBYTE data_ptr = NULL; |
968 FX_DWORD skip_size_org = gif_ptr->skip_size; | 968 FX_DWORD skip_size_org = gif_ptr->skip_size; |
969 GifImage* gif_image_ptr = gif_ptr->img_ptr_arr_ptr->GetAt(frame_num); | 969 GifImage* gif_image_ptr = gif_ptr->img_ptr_arr_ptr->GetAt(frame_num); |
970 FX_DWORD gif_img_row_bytes = gif_image_ptr->image_info_ptr->width; | 970 FX_DWORD gif_img_row_bytes = gif_image_ptr->image_info_ptr->width; |
971 if(gif_ptr->decode_status == GIF_D_STATUS_TAIL) { | 971 if(gif_ptr->decode_status == GIF_D_STATUS_TAIL) { |
972 if(gif_image_ptr->image_row_buf) { | 972 if(gif_image_ptr->image_row_buf) { |
973 FX_Free(gif_image_ptr->image_row_buf); | 973 FX_Free(gif_image_ptr->image_row_buf); |
974 gif_image_ptr->image_row_buf = NULL; | 974 gif_image_ptr->image_row_buf = NULL; |
975 } | 975 } |
976 gif_image_ptr->image_row_buf = FX_Alloc(FX_BYTE, gif_img_row_bytes); | 976 gif_image_ptr->image_row_buf = FX_Alloc(uint8_t, gif_img_row_bytes); |
977 GIF_PTR_NOT_NULL(gif_image_ptr->image_row_buf, gif_ptr); | 977 GIF_PTR_NOT_NULL(gif_image_ptr->image_row_buf, gif_ptr); |
978 GifGCE* gif_img_gce_ptr = gif_image_ptr->image_gce_ptr; | 978 GifGCE* gif_img_gce_ptr = gif_image_ptr->image_gce_ptr; |
979 FX_INT32 loc_pal_num = ((GifLF*)&gif_image_ptr->image_info_ptr->local_fl
ag)->local_pal ? | 979 int32_t loc_pal_num = ((GifLF*)&gif_image_ptr->image_info_ptr->local_fla
g)->local_pal ? |
980 (2 << ((GifLF*)&gif_image_ptr->image_info_ptr->lo
cal_flag)->pal_bits) : 0; | 980 (2 << ((GifLF*)&gif_image_ptr->image_info_ptr->lo
cal_flag)->pal_bits) : 0; |
981 gif_ptr->avail_in = 0; | 981 gif_ptr->avail_in = 0; |
982 if(gif_img_gce_ptr == NULL) { | 982 if(gif_img_gce_ptr == NULL) { |
983 FX_BOOL bRes = gif_ptr->_gif_get_record_position_fn(gif_ptr, gif_ima
ge_ptr->image_data_pos, | 983 FX_BOOL bRes = gif_ptr->_gif_get_record_position_fn(gif_ptr, gif_ima
ge_ptr->image_data_pos, |
984 gif_image_ptr->image_info_ptr->left, | 984 gif_image_ptr->image_info_ptr->left, |
985 gif_image_ptr->image_info_ptr->top, | 985 gif_image_ptr->image_info_ptr->top, |
986 gif_image_ptr->image_info_ptr->width, | 986 gif_image_ptr->image_info_ptr->width, |
987 gif_image_ptr->image_info_ptr->height, | 987 gif_image_ptr->image_info_ptr->height, |
988 loc_pal_num, gif_image_ptr->local_pal_ptr, | 988 loc_pal_num, gif_image_ptr->local_pal_ptr, |
989 0, 0, -1, 0, | 989 0, 0, -1, 0, |
990 (FX_BOOL)((GifLF*)&gif_image_ptr->image_info_ptr->loc
al_flag)->interlace | 990 (FX_BOOL)((GifLF*)&gif_image_ptr->image_info_ptr->loc
al_flag)->interlace |
991 ); | 991 ); |
992 if(!bRes) { | 992 if(!bRes) { |
993 FX_Free(gif_image_ptr->image_row_buf); | 993 FX_Free(gif_image_ptr->image_row_buf); |
994 gif_image_ptr->image_row_buf = NULL; | 994 gif_image_ptr->image_row_buf = NULL; |
995 _gif_error(gif_ptr, "Error Read Record Position Data"); | 995 _gif_error(gif_ptr, "Error Read Record Position Data"); |
996 return 0; | 996 return 0; |
997 } | 997 } |
998 } else { | 998 } else { |
999 FX_BOOL bRes = gif_ptr->_gif_get_record_position_fn(gif_ptr, gif_ima
ge_ptr->image_data_pos, | 999 FX_BOOL bRes = gif_ptr->_gif_get_record_position_fn(gif_ptr, gif_ima
ge_ptr->image_data_pos, |
1000 gif_image_ptr->image_info_ptr->left, | 1000 gif_image_ptr->image_info_ptr->left, |
1001 gif_image_ptr->image_info_ptr->top, | 1001 gif_image_ptr->image_info_ptr->top, |
1002 gif_image_ptr->image_info_ptr->width, | 1002 gif_image_ptr->image_info_ptr->width, |
1003 gif_image_ptr->image_info_ptr->height, | 1003 gif_image_ptr->image_info_ptr->height, |
1004 loc_pal_num, gif_image_ptr->local_pal_ptr, | 1004 loc_pal_num, gif_image_ptr->local_pal_ptr, |
1005 (FX_INT32)gif_image_ptr->image_gce_ptr->delay_time, | 1005 (int32_t)gif_image_ptr->image_gce_ptr->delay_time, |
1006 (FX_BOOL)((GifCEF*)&gif_image_ptr->image_gce_ptr->gce
_flag)->user_input, | 1006 (FX_BOOL)((GifCEF*)&gif_image_ptr->image_gce_ptr->gce
_flag)->user_input, |
1007 ((GifCEF*)&gif_image_ptr->image_gce_ptr->gce_flag)->t
ransparency ? | 1007 ((GifCEF*)&gif_image_ptr->image_gce_ptr->gce_flag)->t
ransparency ? |
1008 (FX_INT32)gif_image_ptr->image_gce_ptr->trans_index :
-1, | 1008 (int32_t)gif_image_ptr->image_gce_ptr->trans_index :
-1, |
1009 (FX_INT32)((GifCEF*)&gif_image_ptr->image_gce_ptr->gc
e_flag)->disposal_method, | 1009 (int32_t)((GifCEF*)&gif_image_ptr->image_gce_ptr->gce
_flag)->disposal_method, |
1010 (FX_BOOL)((GifLF*)&gif_image_ptr->image_info_ptr->loc
al_flag)->interlace | 1010 (FX_BOOL)((GifLF*)&gif_image_ptr->image_info_ptr->loc
al_flag)->interlace |
1011 ); | 1011 ); |
1012 if(!bRes) { | 1012 if(!bRes) { |
1013 FX_Free(gif_image_ptr->image_row_buf); | 1013 FX_Free(gif_image_ptr->image_row_buf); |
1014 gif_image_ptr->image_row_buf = NULL; | 1014 gif_image_ptr->image_row_buf = NULL; |
1015 _gif_error(gif_ptr, "Error Read Record Position Data"); | 1015 _gif_error(gif_ptr, "Error Read Record Position Data"); |
1016 return 0; | 1016 return 0; |
1017 } | 1017 } |
1018 } | 1018 } |
1019 if(gif_ptr->img_decoder_ptr == NULL) { | 1019 if(gif_ptr->img_decoder_ptr == NULL) { |
(...skipping 14 matching lines...) Expand all Loading... |
1034 } | 1034 } |
1035 if(*data_size_ptr != GIF_BLOCK_TERMINAL) { | 1035 if(*data_size_ptr != GIF_BLOCK_TERMINAL) { |
1036 if(_gif_read_data(gif_ptr, &data_ptr, *data_size_ptr) == NULL) { | 1036 if(_gif_read_data(gif_ptr, &data_ptr, *data_size_ptr) == NULL) { |
1037 gif_ptr->skip_size = skip_size_org; | 1037 gif_ptr->skip_size = skip_size_org; |
1038 return 2; | 1038 return 2; |
1039 } | 1039 } |
1040 img_decoder_ptr->Input(data_ptr, *data_size_ptr); | 1040 img_decoder_ptr->Input(data_ptr, *data_size_ptr); |
1041 _gif_save_decoding_status(gif_ptr, GIF_D_STATUS_IMG_DATA); | 1041 _gif_save_decoding_status(gif_ptr, GIF_D_STATUS_IMG_DATA); |
1042 gif_ptr->img_row_offset += gif_ptr->img_row_avail_size; | 1042 gif_ptr->img_row_offset += gif_ptr->img_row_avail_size; |
1043 gif_ptr->img_row_avail_size = gif_img_row_bytes - gif_ptr->img_row_o
ffset; | 1043 gif_ptr->img_row_avail_size = gif_img_row_bytes - gif_ptr->img_row_o
ffset; |
1044 FX_INT32 ret = img_decoder_ptr->Decode(gif_image_ptr->image_row_buf
+ gif_ptr->img_row_offset, gif_ptr->img_row_avail_size); | 1044 int32_t ret = img_decoder_ptr->Decode(gif_image_ptr->image_row_buf +
gif_ptr->img_row_offset, gif_ptr->img_row_avail_size); |
1045 if(ret == 0) { | 1045 if(ret == 0) { |
1046 FX_Free(gif_image_ptr->image_row_buf); | 1046 FX_Free(gif_image_ptr->image_row_buf); |
1047 gif_image_ptr->image_row_buf = NULL; | 1047 gif_image_ptr->image_row_buf = NULL; |
1048 _gif_save_decoding_status(gif_ptr, GIF_D_STATUS_TAIL); | 1048 _gif_save_decoding_status(gif_ptr, GIF_D_STATUS_TAIL); |
1049 _gif_error(gif_ptr, "Decode Image Data Error"); | 1049 _gif_error(gif_ptr, "Decode Image Data Error"); |
1050 return 0; | 1050 return 0; |
1051 } | 1051 } |
1052 while (ret != 0) { | 1052 while (ret != 0) { |
1053 if(ret == 1) { | 1053 if(ret == 1) { |
1054 gif_ptr->_gif_get_row_fn(gif_ptr, gif_image_ptr->image_row_n
um, gif_image_ptr->image_row_buf); | 1054 gif_ptr->_gif_get_row_fn(gif_ptr, gif_image_ptr->image_row_n
um, gif_image_ptr->image_row_buf); |
(...skipping 17 matching lines...) Expand all Loading... |
1072 _gif_save_decoding_status(gif_ptr, GIF_D_STATUS_IMG_DATA
); | 1072 _gif_save_decoding_status(gif_ptr, GIF_D_STATUS_IMG_DATA
); |
1073 gif_ptr->img_row_offset += gif_ptr->img_row_avail_size; | 1073 gif_ptr->img_row_offset += gif_ptr->img_row_avail_size; |
1074 gif_ptr->img_row_avail_size = gif_img_row_bytes - gif_pt
r->img_row_offset; | 1074 gif_ptr->img_row_avail_size = gif_img_row_bytes - gif_pt
r->img_row_offset; |
1075 ret = img_decoder_ptr->Decode(gif_image_ptr->image_row_b
uf + gif_ptr->img_row_offset, gif_ptr->img_row_avail_size); | 1075 ret = img_decoder_ptr->Decode(gif_image_ptr->image_row_b
uf + gif_ptr->img_row_offset, gif_ptr->img_row_avail_size); |
1076 } | 1076 } |
1077 } | 1077 } |
1078 if(ret == 3) { | 1078 if(ret == 3) { |
1079 if(((GifLF*)&gif_image_ptr->image_info_ptr->local_flag)->int
erlace) { | 1079 if(((GifLF*)&gif_image_ptr->image_info_ptr->local_flag)->int
erlace) { |
1080 gif_ptr->_gif_get_row_fn(gif_ptr, gif_image_ptr->image_r
ow_num, gif_image_ptr->image_row_buf); | 1080 gif_ptr->_gif_get_row_fn(gif_ptr, gif_image_ptr->image_r
ow_num, gif_image_ptr->image_row_buf); |
1081 gif_image_ptr->image_row_num += s_gif_interlace_step[gif
_ptr->img_pass_num]; | 1081 gif_image_ptr->image_row_num += s_gif_interlace_step[gif
_ptr->img_pass_num]; |
1082 if(gif_image_ptr->image_row_num >= (FX_INT32)gif_image_p
tr->image_info_ptr->height) { | 1082 if(gif_image_ptr->image_row_num >= (int32_t)gif_image_pt
r->image_info_ptr->height) { |
1083 gif_ptr->img_pass_num++; | 1083 gif_ptr->img_pass_num++; |
1084 gif_image_ptr->image_row_num = s_gif_interlace_step[
gif_ptr->img_pass_num] / 2; | 1084 gif_image_ptr->image_row_num = s_gif_interlace_step[
gif_ptr->img_pass_num] / 2; |
1085 } | 1085 } |
1086 } else { | 1086 } else { |
1087 gif_ptr->_gif_get_row_fn(gif_ptr, gif_image_ptr->image_r
ow_num++, gif_image_ptr->image_row_buf); | 1087 gif_ptr->_gif_get_row_fn(gif_ptr, gif_image_ptr->image_r
ow_num++, gif_image_ptr->image_row_buf); |
1088 } | 1088 } |
1089 gif_ptr->img_row_offset = 0; | 1089 gif_ptr->img_row_offset = 0; |
1090 gif_ptr->img_row_avail_size = gif_img_row_bytes; | 1090 gif_ptr->img_row_avail_size = gif_img_row_bytes; |
1091 ret = img_decoder_ptr->Decode(gif_image_ptr->image_row_buf +
gif_ptr->img_row_offset, gif_ptr->img_row_avail_size); | 1091 ret = img_decoder_ptr->Decode(gif_image_ptr->image_row_buf +
gif_ptr->img_row_offset, gif_ptr->img_row_avail_size); |
1092 } | 1092 } |
1093 if(ret == 0) { | 1093 if(ret == 0) { |
1094 FX_Free(gif_image_ptr->image_row_buf); | 1094 FX_Free(gif_image_ptr->image_row_buf); |
1095 gif_image_ptr->image_row_buf = NULL; | 1095 gif_image_ptr->image_row_buf = NULL; |
1096 _gif_save_decoding_status(gif_ptr, GIF_D_STATUS_TAIL); | 1096 _gif_save_decoding_status(gif_ptr, GIF_D_STATUS_TAIL); |
1097 _gif_error(gif_ptr, "Decode Image Data Error"); | 1097 _gif_error(gif_ptr, "Decode Image Data Error"); |
1098 return 0; | 1098 return 0; |
1099 } | 1099 } |
1100 } | 1100 } |
1101 } | 1101 } |
1102 _gif_save_decoding_status(gif_ptr, GIF_D_STATUS_TAIL); | 1102 _gif_save_decoding_status(gif_ptr, GIF_D_STATUS_TAIL); |
1103 } | 1103 } |
1104 _gif_error(gif_ptr, "Decode Image Data Error"); | 1104 _gif_error(gif_ptr, "Decode Image Data Error"); |
1105 return 0; | 1105 return 0; |
1106 } | 1106 } |
1107 void _gif_save_decoding_status(gif_decompress_struct_p gif_ptr, FX_INT32 status) | 1107 void _gif_save_decoding_status(gif_decompress_struct_p gif_ptr, int32_t status) |
1108 { | 1108 { |
1109 gif_ptr->decode_status = status; | 1109 gif_ptr->decode_status = status; |
1110 gif_ptr->next_in += gif_ptr->skip_size; | 1110 gif_ptr->next_in += gif_ptr->skip_size; |
1111 gif_ptr->avail_in -= gif_ptr->skip_size; | 1111 gif_ptr->avail_in -= gif_ptr->skip_size; |
1112 gif_ptr->skip_size = 0; | 1112 gif_ptr->skip_size = 0; |
1113 } | 1113 } |
1114 FX_LPBYTE _gif_read_data(gif_decompress_struct_p gif_ptr, FX_LPBYTE* des_buf_pp,
FX_DWORD data_size) | 1114 FX_LPBYTE _gif_read_data(gif_decompress_struct_p gif_ptr, FX_LPBYTE* des_buf_pp,
FX_DWORD data_size) |
1115 { | 1115 { |
1116 if(gif_ptr == NULL || | 1116 if(gif_ptr == NULL || |
1117 gif_ptr->avail_in < gif_ptr->skip_size + data_size) { | 1117 gif_ptr->avail_in < gif_ptr->skip_size + data_size) { |
(...skipping 12 matching lines...) Expand all Loading... |
1130 FX_DWORD _gif_get_avail_input(gif_decompress_struct_p gif_ptr, FX_LPBYTE* avial_
buf_ptr) | 1130 FX_DWORD _gif_get_avail_input(gif_decompress_struct_p gif_ptr, FX_LPBYTE* avial_
buf_ptr) |
1131 { | 1131 { |
1132 if(avial_buf_ptr != NULL) { | 1132 if(avial_buf_ptr != NULL) { |
1133 *avial_buf_ptr = NULL; | 1133 *avial_buf_ptr = NULL; |
1134 if(gif_ptr->avail_in > 0) { | 1134 if(gif_ptr->avail_in > 0) { |
1135 *avial_buf_ptr = gif_ptr->next_in; | 1135 *avial_buf_ptr = gif_ptr->next_in; |
1136 } | 1136 } |
1137 } | 1137 } |
1138 return gif_ptr->avail_in; | 1138 return gif_ptr->avail_in; |
1139 } | 1139 } |
1140 FX_INT32 _gif_get_frame_num(gif_decompress_struct_p gif_ptr) | 1140 int32_t _gif_get_frame_num(gif_decompress_struct_p gif_ptr) |
1141 { | 1141 { |
1142 return gif_ptr->img_ptr_arr_ptr->GetSize(); | 1142 return gif_ptr->img_ptr_arr_ptr->GetSize(); |
1143 } | 1143 } |
1144 static FX_BOOL _gif_write_header( gif_compress_struct_p gif_ptr, FX_LPBYTE& dst_
buf, FX_DWORD& dst_len ) | 1144 static FX_BOOL _gif_write_header( gif_compress_struct_p gif_ptr, FX_LPBYTE& dst_
buf, FX_DWORD& dst_len ) |
1145 { | 1145 { |
1146 if (gif_ptr->cur_offset) { | 1146 if (gif_ptr->cur_offset) { |
1147 return TRUE; | 1147 return TRUE; |
1148 } | 1148 } |
1149 dst_len = sizeof(GifHeader) + sizeof(GifLSD) + sizeof(GifGF); | 1149 dst_len = sizeof(GifHeader) + sizeof(GifLSD) + sizeof(GifGF); |
1150 dst_buf = FX_TryAlloc(FX_BYTE, dst_len); | 1150 dst_buf = FX_TryAlloc(uint8_t, dst_len); |
1151 if (dst_buf == NULL) { | 1151 if (dst_buf == NULL) { |
1152 return FALSE; | 1152 return FALSE; |
1153 } | 1153 } |
1154 FXSYS_memset32(dst_buf, 0, dst_len); | 1154 FXSYS_memset32(dst_buf, 0, dst_len); |
1155 FXSYS_memcpy32(dst_buf, gif_ptr->header_ptr, sizeof(GifHeader)); | 1155 FXSYS_memcpy32(dst_buf, gif_ptr->header_ptr, sizeof(GifHeader)); |
1156 gif_ptr->cur_offset += sizeof(GifHeader); | 1156 gif_ptr->cur_offset += sizeof(GifHeader); |
1157 _SetWord_LSBFirst(dst_buf + gif_ptr->cur_offset, gif_ptr->lsd_ptr->width); | 1157 _SetWord_LSBFirst(dst_buf + gif_ptr->cur_offset, gif_ptr->lsd_ptr->width); |
1158 gif_ptr->cur_offset += 2; | 1158 gif_ptr->cur_offset += 2; |
1159 _SetWord_LSBFirst(dst_buf + gif_ptr->cur_offset, gif_ptr->lsd_ptr->height); | 1159 _SetWord_LSBFirst(dst_buf + gif_ptr->cur_offset, gif_ptr->lsd_ptr->height); |
1160 gif_ptr->cur_offset += 2; | 1160 gif_ptr->cur_offset += 2; |
(...skipping 20 matching lines...) Expand all Loading... |
1181 while (row < height) { | 1181 while (row < height) { |
1182 if (row % 8 == 0) { | 1182 if (row % 8 == 0) { |
1183 j = 0; | 1183 j = 0; |
1184 } else if (row % 4 == 0) { | 1184 } else if (row % 4 == 0) { |
1185 j = 1; | 1185 j = 1; |
1186 } else if (row % 2 == 0) { | 1186 } else if (row % 2 == 0) { |
1187 j = 2; | 1187 j = 2; |
1188 } else { | 1188 } else { |
1189 j = 3; | 1189 j = 3; |
1190 } | 1190 } |
1191 temp = FX_Alloc(FX_BYTE, pitch); | 1191 temp = FX_Alloc(uint8_t, pitch); |
1192 if (temp == NULL) { | 1192 if (temp == NULL) { |
1193 return; | 1193 return; |
1194 } | 1194 } |
1195 FXSYS_memcpy32(temp, &buf[pitch * row], pitch); | 1195 FXSYS_memcpy32(temp, &buf[pitch * row], pitch); |
1196 pass[j].Add(temp); | 1196 pass[j].Add(temp); |
1197 row ++; | 1197 row ++; |
1198 } | 1198 } |
1199 for (i = 0, row = 0; i < 4; i++) { | 1199 for (i = 0, row = 0; i < 4; i++) { |
1200 for (j = 0; j < pass[i].GetSize(); j++, row++) { | 1200 for (j = 0; j < pass[i].GetSize(); j++, row++) { |
1201 FXSYS_memcpy32((FX_LPBYTE)&buf[pitch * row], pass[i].GetAt(j), pitch
); | 1201 FXSYS_memcpy32((FX_LPBYTE)&buf[pitch * row], pass[i].GetAt(j), pitch
); |
1202 FX_Free(pass[i].GetAt(j)); | 1202 FX_Free(pass[i].GetAt(j)); |
1203 } | 1203 } |
1204 } | 1204 } |
1205 } | 1205 } |
1206 static void _gif_write_block_data(FX_LPCBYTE src_buf, FX_DWORD src_len, FX_LPBYT
E& dst_buf, FX_DWORD& dst_len, FX_DWORD& dst_offset) | 1206 static void _gif_write_block_data(FX_LPCBYTE src_buf, FX_DWORD src_len, FX_LPBYT
E& dst_buf, FX_DWORD& dst_len, FX_DWORD& dst_offset) |
1207 { | 1207 { |
1208 FX_DWORD src_offset = 0; | 1208 FX_DWORD src_offset = 0; |
1209 while (src_len > GIF_DATA_BLOCK) { | 1209 while (src_len > GIF_DATA_BLOCK) { |
1210 dst_buf[dst_offset++] = GIF_DATA_BLOCK; | 1210 dst_buf[dst_offset++] = GIF_DATA_BLOCK; |
1211 FXSYS_memcpy32(&dst_buf[dst_offset], &src_buf[src_offset], GIF_DATA_BLOC
K); | 1211 FXSYS_memcpy32(&dst_buf[dst_offset], &src_buf[src_offset], GIF_DATA_BLOC
K); |
1212 dst_offset += GIF_DATA_BLOCK; | 1212 dst_offset += GIF_DATA_BLOCK; |
1213 src_offset += GIF_DATA_BLOCK; | 1213 src_offset += GIF_DATA_BLOCK; |
1214 src_len -= GIF_DATA_BLOCK; | 1214 src_len -= GIF_DATA_BLOCK; |
1215 } | 1215 } |
1216 dst_buf[dst_offset++] = (FX_BYTE)src_len; | 1216 dst_buf[dst_offset++] = (uint8_t)src_len; |
1217 FXSYS_memcpy32(&dst_buf[dst_offset], &src_buf[src_offset], src_len); | 1217 FXSYS_memcpy32(&dst_buf[dst_offset], &src_buf[src_offset], src_len); |
1218 dst_offset += src_len; | 1218 dst_offset += src_len; |
1219 } | 1219 } |
1220 static FX_BOOL _gif_write_data( gif_compress_struct_p gif_ptr, FX_LPBYTE& dst_bu
f, FX_DWORD& dst_len ) | 1220 static FX_BOOL _gif_write_data( gif_compress_struct_p gif_ptr, FX_LPBYTE& dst_bu
f, FX_DWORD& dst_len ) |
1221 { | 1221 { |
1222 if (!_gif_grow_buf(dst_buf, dst_len, gif_ptr->cur_offset + GIF_DATA_BLOCK))
{ | 1222 if (!_gif_grow_buf(dst_buf, dst_len, gif_ptr->cur_offset + GIF_DATA_BLOCK))
{ |
1223 return FALSE; | 1223 return FALSE; |
1224 } | 1224 } |
1225 #ifdef GIF_SUPPORT_GRAPHIC_CONTROL_EXTENSION | 1225 #ifdef GIF_SUPPORT_GRAPHIC_CONTROL_EXTENSION |
1226 if (FXSYS_memcmp32(gif_ptr->header_ptr->version, "89a", 3) == 0) { | 1226 if (FXSYS_memcmp32(gif_ptr->header_ptr->version, "89a", 3) == 0) { |
(...skipping 26 matching lines...) Expand all Loading... |
1253 FX_DWORD pal_size = sizeof(GifPalette) * gif_ptr->lpal_num; | 1253 FX_DWORD pal_size = sizeof(GifPalette) * gif_ptr->lpal_num; |
1254 if (!_gif_grow_buf(dst_buf, dst_len, pal_size + gif_ptr->cur_offset)) { | 1254 if (!_gif_grow_buf(dst_buf, dst_len, pal_size + gif_ptr->cur_offset)) { |
1255 return FALSE; | 1255 return FALSE; |
1256 } | 1256 } |
1257 FXSYS_memcpy32(&dst_buf[gif_ptr->cur_offset], gif_ptr->local_pal, pal_si
ze); | 1257 FXSYS_memcpy32(&dst_buf[gif_ptr->cur_offset], gif_ptr->local_pal, pal_si
ze); |
1258 gif_ptr->cur_offset += pal_size; | 1258 gif_ptr->cur_offset += pal_size; |
1259 } | 1259 } |
1260 if (lf.interlace) { | 1260 if (lf.interlace) { |
1261 interlace_buf(gif_ptr->src_buf, gif_ptr->src_pitch, gif_ptr->image_info_
ptr->height); | 1261 interlace_buf(gif_ptr->src_buf, gif_ptr->src_pitch, gif_ptr->image_info_
ptr->height); |
1262 } | 1262 } |
1263 FX_BYTE code_bit = lf.pal_bits; | 1263 uint8_t code_bit = lf.pal_bits; |
1264 if (lf.local_pal == 0) { | 1264 if (lf.local_pal == 0) { |
1265 GifGF& gf = (GifGF&)gif_ptr->lsd_ptr->global_flag; | 1265 GifGF& gf = (GifGF&)gif_ptr->lsd_ptr->global_flag; |
1266 code_bit = gf.pal_bits; | 1266 code_bit = gf.pal_bits; |
1267 } | 1267 } |
1268 gif_ptr->img_encoder_ptr->Start(code_bit, gif_ptr->src_buf, dst_buf, gif_ptr
->cur_offset); | 1268 gif_ptr->img_encoder_ptr->Start(code_bit, gif_ptr->src_buf, dst_buf, gif_ptr
->cur_offset); |
1269 FX_DWORD i; | 1269 FX_DWORD i; |
1270 for (i = 0; i < gif_ptr->src_row; i++) { | 1270 for (i = 0; i < gif_ptr->src_row; i++) { |
1271 if (!gif_ptr->img_encoder_ptr->Encode(&gif_ptr->src_buf[i * gif_ptr->src
_pitch], gif_ptr->src_width * (code_bit + 1), | 1271 if (!gif_ptr->img_encoder_ptr->Encode(&gif_ptr->src_buf[i * gif_ptr->src
_pitch], gif_ptr->src_width * (code_bit + 1), |
1272 dst_buf, dst_len, gif_ptr->cur_off
set)) { | 1272 dst_buf, dst_len, gif_ptr->cur_off
set)) { |
1273 return FALSE; | 1273 return FALSE; |
(...skipping 66 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1340 gif_ptr->cur_offset = cur_offset; | 1340 gif_ptr->cur_offset = cur_offset; |
1341 res = FALSE; | 1341 res = FALSE; |
1342 } | 1342 } |
1343 dst_len = gif_ptr->cur_offset; | 1343 dst_len = gif_ptr->cur_offset; |
1344 dst_buf[dst_len - 1] = GIF_SIG_TRAILER; | 1344 dst_buf[dst_len - 1] = GIF_SIG_TRAILER; |
1345 if (res) { | 1345 if (res) { |
1346 gif_ptr->frames++; | 1346 gif_ptr->frames++; |
1347 } | 1347 } |
1348 return res; | 1348 return res; |
1349 } | 1349 } |
OLD | NEW |