| 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 |