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

Side by Side Diff: core/fxcodec/lgif/fx_gif.cpp

Issue 1832173003: Remove FX_DWORD from core/ and delete definition (Closed) Base URL: https://pdfium.googlesource.com/pdfium.git@master
Patch Set: Created 4 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « core/fxcodec/lgif/fx_gif.h ('k') | core/fxcrt/extension.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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 "core/fxcodec/lgif/fx_gif.h" 7 #include "core/fxcodec/lgif/fx_gif.h"
8 8
9 #include "core/fxcodec/lbmp/fx_bmp.h" 9 #include "core/fxcodec/lbmp/fx_bmp.h"
10 10
11 void CGifLZWDecoder::Input(uint8_t* src_buf, FX_DWORD src_size) { 11 void CGifLZWDecoder::Input(uint8_t* src_buf, uint32_t src_size) {
12 next_in = src_buf; 12 next_in = src_buf;
13 avail_in = src_size; 13 avail_in = src_size;
14 } 14 }
15 FX_DWORD CGifLZWDecoder::GetAvailInput() { 15 uint32_t CGifLZWDecoder::GetAvailInput() {
16 return avail_in; 16 return avail_in;
17 } 17 }
18 void CGifLZWDecoder::InitTable(uint8_t code_len) { 18 void CGifLZWDecoder::InitTable(uint8_t code_len) {
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;
(...skipping 29 matching lines...) Expand all
55 return; 55 return;
56 } 56 }
57 code_table[code_next].prefix = prefix_code; 57 code_table[code_next].prefix = prefix_code;
58 code_table[code_next].suffix = append_char; 58 code_table[code_next].suffix = append_char;
59 if (++code_next < GIF_MAX_LZW_CODE) { 59 if (++code_next < GIF_MAX_LZW_CODE) {
60 if (code_next >> code_size_cur) { 60 if (code_next >> code_size_cur) {
61 code_size_cur++; 61 code_size_cur++;
62 } 62 }
63 } 63 }
64 } 64 }
65 int32_t CGifLZWDecoder::Decode(uint8_t* des_buf, FX_DWORD& des_size) { 65 int32_t CGifLZWDecoder::Decode(uint8_t* des_buf, uint32_t& des_size) {
66 if (des_size == 0) { 66 if (des_size == 0) {
67 return 3; 67 return 3;
68 } 68 }
69 FX_DWORD i = 0; 69 uint32_t i = 0;
70 if (stack_size != 0) { 70 if (stack_size != 0) {
71 if (des_size < stack_size) { 71 if (des_size < stack_size) {
72 FXSYS_memcpy(des_buf, &stack[GIF_MAX_LZW_CODE - stack_size], des_size); 72 FXSYS_memcpy(des_buf, &stack[GIF_MAX_LZW_CODE - stack_size], des_size);
73 stack_size -= (uint16_t)des_size; 73 stack_size -= (uint16_t)des_size;
74 return 3; 74 return 3;
75 } 75 }
76 FXSYS_memcpy(des_buf, &stack[GIF_MAX_LZW_CODE - stack_size], stack_size); 76 FXSYS_memcpy(des_buf, &stack[GIF_MAX_LZW_CODE - stack_size], stack_size);
77 des_buf += stack_size; 77 des_buf += stack_size;
78 i += stack_size; 78 i += stack_size;
79 stack_size = 0; 79 stack_size = 0;
(...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after
138 } 138 }
139 } 139 }
140 } 140 }
141 if (avail_in == 0) { 141 if (avail_in == 0) {
142 des_size = i; 142 des_size = i;
143 return 2; 143 return 2;
144 } 144 }
145 return 0; 145 return 0;
146 } 146 }
147 static FX_BOOL gif_grow_buf(uint8_t*& dst_buf, 147 static FX_BOOL gif_grow_buf(uint8_t*& dst_buf,
148 FX_DWORD& dst_len, 148 uint32_t& dst_len,
149 FX_DWORD size) { 149 uint32_t size) {
150 if (dst_len < size) { 150 if (dst_len < size) {
151 FX_DWORD len_org = dst_len; 151 uint32_t len_org = dst_len;
152 while (dst_buf && dst_len < size) { 152 while (dst_buf && dst_len < size) {
153 dst_len <<= 1; 153 dst_len <<= 1;
154 dst_buf = FX_Realloc(uint8_t, dst_buf, dst_len); 154 dst_buf = FX_Realloc(uint8_t, dst_buf, dst_len);
155 } 155 }
156 if (dst_buf == NULL) { 156 if (dst_buf == NULL) {
157 dst_len = size; 157 dst_len = size;
158 dst_buf = FX_Realloc(uint8_t, dst_buf, dst_len); 158 dst_buf = FX_Realloc(uint8_t, dst_buf, dst_len);
159 if (dst_buf == NULL) { 159 if (dst_buf == NULL) {
160 return FALSE; 160 return FALSE;
161 } 161 }
162 } 162 }
163 FXSYS_memset(dst_buf + len_org, 0, dst_len - len_org); 163 FXSYS_memset(dst_buf + len_org, 0, dst_len - len_org);
164 return dst_buf != NULL; 164 return dst_buf != NULL;
165 } 165 }
166 return TRUE; 166 return TRUE;
167 } 167 }
168 static inline void gif_cut_index(uint8_t& val, 168 static inline void gif_cut_index(uint8_t& val,
169 FX_DWORD index, 169 uint32_t index,
170 uint8_t index_bit, 170 uint8_t index_bit,
171 uint8_t index_bit_use, 171 uint8_t index_bit_use,
172 uint8_t bit_use) { 172 uint8_t bit_use) {
173 FX_DWORD cut = ((1 << (index_bit - index_bit_use)) - 1) << index_bit_use; 173 uint32_t cut = ((1 << (index_bit - index_bit_use)) - 1) << index_bit_use;
174 val |= ((index & cut) >> index_bit_use) << bit_use; 174 val |= ((index & cut) >> index_bit_use) << bit_use;
175 } 175 }
176 static inline uint8_t gif_cut_buf(const uint8_t* buf, 176 static inline uint8_t gif_cut_buf(const uint8_t* buf,
177 FX_DWORD& offset, 177 uint32_t& offset,
178 uint8_t bit_cut, 178 uint8_t bit_cut,
179 uint8_t& bit_offset, 179 uint8_t& bit_offset,
180 FX_DWORD& bit_num) { 180 uint32_t& bit_num) {
181 if (bit_cut != 8) { 181 if (bit_cut != 8) {
182 uint16_t index = 0; 182 uint16_t index = 0;
183 index |= ((1 << bit_cut) - 1) << (7 - bit_offset); 183 index |= ((1 << bit_cut) - 1) << (7 - bit_offset);
184 uint8_t ret = ((index & buf[offset]) >> (7 - bit_offset)); 184 uint8_t ret = ((index & buf[offset]) >> (7 - bit_offset));
185 bit_offset += bit_cut; 185 bit_offset += bit_cut;
186 if (bit_offset >= 8) { 186 if (bit_offset >= 8) {
187 if (bit_offset > 8) { 187 if (bit_offset > 8) {
188 ret |= ((index & (buf[offset + 1] << 8)) >> 8); 188 ret |= ((index & (buf[offset + 1] << 8)) >> 8);
189 } 189 }
190 bit_offset -= 8; 190 bit_offset -= 8;
(...skipping 14 matching lines...) Expand all
205 index_num = code_end + 1; 205 index_num = code_end + 1;
206 table_cur = code_end + 1; 206 table_cur = code_end + 1;
207 for (uint16_t i = 0; i < GIF_MAX_LZW_CODE; i++) { 207 for (uint16_t i = 0; i < GIF_MAX_LZW_CODE; i++) {
208 code_table[i].prefix = 0; 208 code_table[i].prefix = 0;
209 code_table[i].suffix = 0; 209 code_table[i].suffix = 0;
210 } 210 }
211 } 211 }
212 void CGifLZWEncoder::Start(uint8_t code_len, 212 void CGifLZWEncoder::Start(uint8_t code_len,
213 const uint8_t* src_buf, 213 const uint8_t* src_buf,
214 uint8_t*& dst_buf, 214 uint8_t*& dst_buf,
215 FX_DWORD& offset) { 215 uint32_t& offset) {
216 code_size = code_len + 1; 216 code_size = code_len + 1;
217 src_bit_cut = code_size; 217 src_bit_cut = code_size;
218 if (code_len == 0) { 218 if (code_len == 0) {
219 src_bit_cut = 1; 219 src_bit_cut = 1;
220 code_size = 2; 220 code_size = 2;
221 } 221 }
222 code_clear = 1 << code_size; 222 code_clear = 1 << code_size;
223 code_end = code_clear + 1; 223 code_end = code_clear + 1;
224 dst_buf[offset++] = code_size; 224 dst_buf[offset++] = code_size;
225 bit_offset = 0; 225 bit_offset = 0;
226 ClearTable(); 226 ClearTable();
227 src_offset = 0; 227 src_offset = 0;
228 src_bit_offset = 0; 228 src_bit_offset = 0;
229 src_bit_num = 0; 229 src_bit_num = 0;
230 code_table[index_num].prefix = gif_cut_buf(src_buf, src_offset, src_bit_cut, 230 code_table[index_num].prefix = gif_cut_buf(src_buf, src_offset, src_bit_cut,
231 src_bit_offset, src_bit_num); 231 src_bit_offset, src_bit_num);
232 code_table[index_num].suffix = gif_cut_buf(src_buf, src_offset, src_bit_cut, 232 code_table[index_num].suffix = gif_cut_buf(src_buf, src_offset, src_bit_cut,
233 src_bit_offset, src_bit_num); 233 src_bit_offset, src_bit_num);
234 } 234 }
235 void CGifLZWEncoder::WriteBlock(uint8_t*& dst_buf, 235 void CGifLZWEncoder::WriteBlock(uint8_t*& dst_buf,
236 FX_DWORD& dst_len, 236 uint32_t& dst_len,
237 FX_DWORD& offset) { 237 uint32_t& offset) {
238 if (!gif_grow_buf(dst_buf, dst_len, offset + GIF_DATA_BLOCK + 1)) { 238 if (!gif_grow_buf(dst_buf, dst_len, offset + GIF_DATA_BLOCK + 1)) {
239 longjmp(jmp, 1); 239 longjmp(jmp, 1);
240 } 240 }
241 dst_buf[offset++] = index_buf_len; 241 dst_buf[offset++] = index_buf_len;
242 FXSYS_memcpy(&dst_buf[offset], index_buf, index_buf_len); 242 FXSYS_memcpy(&dst_buf[offset], index_buf, index_buf_len);
243 offset += index_buf_len; 243 offset += index_buf_len;
244 FXSYS_memset(index_buf, 0, GIF_DATA_BLOCK); 244 FXSYS_memset(index_buf, 0, GIF_DATA_BLOCK);
245 index_buf_len = 0; 245 index_buf_len = 0;
246 } 246 }
247 void CGifLZWEncoder::EncodeString(FX_DWORD index, 247 void CGifLZWEncoder::EncodeString(uint32_t index,
248 uint8_t*& dst_buf, 248 uint8_t*& dst_buf,
249 FX_DWORD& dst_len, 249 uint32_t& dst_len,
250 FX_DWORD& offset) { 250 uint32_t& offset) {
251 uint8_t index_bit_use; 251 uint8_t index_bit_use;
252 index_bit_use = 0; 252 index_bit_use = 0;
253 if (index_buf_len == GIF_DATA_BLOCK) { 253 if (index_buf_len == GIF_DATA_BLOCK) {
254 WriteBlock(dst_buf, dst_len, offset); 254 WriteBlock(dst_buf, dst_len, offset);
255 } 255 }
256 gif_cut_index(index_buf[index_buf_len], index, index_bit_cur, index_bit_use, 256 gif_cut_index(index_buf[index_buf_len], index, index_bit_cur, index_bit_use,
257 bit_offset); 257 bit_offset);
258 if (index_bit_cur <= (8 - bit_offset)) { 258 if (index_bit_cur <= (8 - bit_offset)) {
259 bit_offset += index_bit_cur; 259 bit_offset += index_bit_cur;
260 } else if (index_bit_cur <= (16 - bit_offset)) { 260 } else if (index_bit_cur <= (16 - bit_offset)) {
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after
295 } 295 }
296 if (index == code_end) { 296 if (index == code_end) {
297 index_buf_len++; 297 index_buf_len++;
298 WriteBlock(dst_buf, dst_len, offset); 298 WriteBlock(dst_buf, dst_len, offset);
299 } 299 }
300 if (index_num++ >> index_bit_cur) { 300 if (index_num++ >> index_bit_cur) {
301 index_bit_cur++; 301 index_bit_cur++;
302 } 302 }
303 } 303 }
304 FX_BOOL CGifLZWEncoder::Encode(const uint8_t* src_buf, 304 FX_BOOL CGifLZWEncoder::Encode(const uint8_t* src_buf,
305 FX_DWORD src_len, 305 uint32_t src_len,
306 uint8_t*& dst_buf, 306 uint8_t*& dst_buf,
307 FX_DWORD& dst_len, 307 uint32_t& dst_len,
308 FX_DWORD& offset) { 308 uint32_t& offset) {
309 uint8_t suffix; 309 uint8_t suffix;
310 if (setjmp(jmp)) { 310 if (setjmp(jmp)) {
311 return FALSE; 311 return FALSE;
312 } 312 }
313 while (src_bit_num < src_len) { 313 while (src_bit_num < src_len) {
314 if (!LookUpInTable(src_buf, src_offset, src_bit_offset)) { 314 if (!LookUpInTable(src_buf, src_offset, src_bit_offset)) {
315 EncodeString(code_table[index_num].prefix, dst_buf, dst_len, offset); 315 EncodeString(code_table[index_num].prefix, dst_buf, dst_len, offset);
316 if (index_num == GIF_MAX_LZW_CODE) { 316 if (index_num == GIF_MAX_LZW_CODE) {
317 suffix = code_table[index_num - 1].suffix; 317 suffix = code_table[index_num - 1].suffix;
318 EncodeString(code_clear, dst_buf, dst_len, offset); 318 EncodeString(code_clear, dst_buf, dst_len, offset);
319 ClearTable(); 319 ClearTable();
320 code_table[index_num].prefix = suffix; 320 code_table[index_num].prefix = suffix;
321 code_table[index_num].suffix = gif_cut_buf( 321 code_table[index_num].suffix = gif_cut_buf(
322 src_buf, src_offset, src_bit_cut, src_bit_offset, src_bit_num); 322 src_buf, src_offset, src_bit_cut, src_bit_offset, src_bit_num);
323 } else { 323 } else {
324 code_table[index_num].prefix = code_table[index_num - 1].suffix; 324 code_table[index_num].prefix = code_table[index_num - 1].suffix;
325 code_table[index_num].suffix = gif_cut_buf( 325 code_table[index_num].suffix = gif_cut_buf(
326 src_buf, src_offset, src_bit_cut, src_bit_offset, src_bit_num); 326 src_buf, src_offset, src_bit_cut, src_bit_offset, src_bit_num);
327 } 327 }
328 } 328 }
329 } 329 }
330 src_offset = 0; 330 src_offset = 0;
331 src_bit_offset = 0; 331 src_bit_offset = 0;
332 src_bit_num = 0; 332 src_bit_num = 0;
333 return TRUE; 333 return TRUE;
334 } 334 }
335 FX_BOOL CGifLZWEncoder::LookUpInTable(const uint8_t* buf, 335 FX_BOOL CGifLZWEncoder::LookUpInTable(const uint8_t* buf,
336 FX_DWORD& offset, 336 uint32_t& offset,
337 uint8_t& bit_offset) { 337 uint8_t& bit_offset) {
338 for (uint16_t i = table_cur; i < index_num; i++) { 338 for (uint16_t i = table_cur; i < index_num; i++) {
339 if (code_table[i].prefix == code_table[index_num].prefix && 339 if (code_table[i].prefix == code_table[index_num].prefix &&
340 code_table[i].suffix == code_table[index_num].suffix) { 340 code_table[i].suffix == code_table[index_num].suffix) {
341 code_table[index_num].prefix = i; 341 code_table[index_num].prefix = i;
342 code_table[index_num].suffix = 342 code_table[index_num].suffix =
343 gif_cut_buf(buf, offset, src_bit_cut, bit_offset, src_bit_num); 343 gif_cut_buf(buf, offset, src_bit_cut, bit_offset, src_bit_num);
344 table_cur = i; 344 table_cur = i;
345 return TRUE; 345 return TRUE;
346 } 346 }
347 } 347 }
348 table_cur = code_end + 1; 348 table_cur = code_end + 1;
349 return FALSE; 349 return FALSE;
350 } 350 }
351 void CGifLZWEncoder::Finish(uint8_t*& dst_buf, 351 void CGifLZWEncoder::Finish(uint8_t*& dst_buf,
352 FX_DWORD& dst_len, 352 uint32_t& dst_len,
353 FX_DWORD& offset) { 353 uint32_t& offset) {
354 EncodeString(code_table[index_num].prefix, dst_buf, dst_len, offset); 354 EncodeString(code_table[index_num].prefix, dst_buf, dst_len, offset);
355 EncodeString(code_end, dst_buf, dst_len, offset); 355 EncodeString(code_end, dst_buf, dst_len, offset);
356 bit_offset = 0; 356 bit_offset = 0;
357 ClearTable(); 357 ClearTable();
358 } 358 }
359 gif_decompress_struct_p gif_create_decompress() { 359 gif_decompress_struct_p gif_create_decompress() {
360 gif_decompress_struct_p gif_ptr = 360 gif_decompress_struct_p gif_ptr =
361 (gif_decompress_struct*)FX_Alloc(uint8_t, sizeof(gif_decompress_struct)); 361 (gif_decompress_struct*)FX_Alloc(uint8_t, sizeof(gif_decompress_struct));
362 if (gif_ptr == NULL) { 362 if (gif_ptr == NULL) {
363 return NULL; 363 return NULL;
(...skipping 120 matching lines...) Expand 10 before | Expand all | Expand 10 after
484 void gif_error(gif_decompress_struct_p gif_ptr, const FX_CHAR* err_msg) { 484 void gif_error(gif_decompress_struct_p gif_ptr, const FX_CHAR* err_msg) {
485 if (gif_ptr && gif_ptr->gif_error_fn) { 485 if (gif_ptr && gif_ptr->gif_error_fn) {
486 gif_ptr->gif_error_fn(gif_ptr, err_msg); 486 gif_ptr->gif_error_fn(gif_ptr, err_msg);
487 } 487 }
488 } 488 }
489 void gif_warn(gif_decompress_struct_p gif_ptr, const FX_CHAR* err_msg) {} 489 void gif_warn(gif_decompress_struct_p gif_ptr, const FX_CHAR* err_msg) {}
490 int32_t gif_read_header(gif_decompress_struct_p gif_ptr) { 490 int32_t gif_read_header(gif_decompress_struct_p gif_ptr) {
491 if (gif_ptr == NULL) { 491 if (gif_ptr == NULL) {
492 return 0; 492 return 0;
493 } 493 }
494 FX_DWORD skip_size_org = gif_ptr->skip_size; 494 uint32_t skip_size_org = gif_ptr->skip_size;
495 ASSERT(sizeof(GifHeader) == 6); 495 ASSERT(sizeof(GifHeader) == 6);
496 GifHeader* gif_header_ptr = NULL; 496 GifHeader* gif_header_ptr = NULL;
497 if (gif_read_data(gif_ptr, (uint8_t**)&gif_header_ptr, 6) == NULL) { 497 if (gif_read_data(gif_ptr, (uint8_t**)&gif_header_ptr, 6) == NULL) {
498 return 2; 498 return 2;
499 } 499 }
500 if (FXSYS_strncmp(gif_header_ptr->signature, GIF_SIGNATURE, 3) != 0 || 500 if (FXSYS_strncmp(gif_header_ptr->signature, GIF_SIGNATURE, 3) != 0 ||
501 gif_header_ptr->version[0] != '8' || gif_header_ptr->version[2] != 'a') { 501 gif_header_ptr->version[0] != '8' || gif_header_ptr->version[2] != 'a') {
502 gif_error(gif_ptr, "Not A Gif Image"); 502 gif_error(gif_ptr, "Not A Gif Image");
503 return 0; 503 return 0;
504 } 504 }
(...skipping 88 matching lines...) Expand 10 before | Expand all | Expand 10 after
593 case GIF_D_STATUS_IMG_INFO: { 593 case GIF_D_STATUS_IMG_INFO: {
594 ret = gif_decode_image_info(gif_ptr); 594 ret = gif_decode_image_info(gif_ptr);
595 if (ret != 1) { 595 if (ret != 1) {
596 return ret; 596 return ret;
597 } 597 }
598 continue; 598 continue;
599 } 599 }
600 case GIF_D_STATUS_IMG_DATA: { 600 case GIF_D_STATUS_IMG_DATA: {
601 uint8_t* data_size_ptr = NULL; 601 uint8_t* data_size_ptr = NULL;
602 uint8_t* data_ptr = NULL; 602 uint8_t* data_ptr = NULL;
603 FX_DWORD skip_size_org = gif_ptr->skip_size; 603 uint32_t skip_size_org = gif_ptr->skip_size;
604 if (gif_read_data(gif_ptr, &data_size_ptr, 1) == NULL) { 604 if (gif_read_data(gif_ptr, &data_size_ptr, 1) == NULL) {
605 return 2; 605 return 2;
606 } 606 }
607 while (*data_size_ptr != GIF_BLOCK_TERMINAL) { 607 while (*data_size_ptr != GIF_BLOCK_TERMINAL) {
608 if (gif_read_data(gif_ptr, &data_ptr, *data_size_ptr) == NULL) { 608 if (gif_read_data(gif_ptr, &data_ptr, *data_size_ptr) == NULL) {
609 gif_ptr->skip_size = skip_size_org; 609 gif_ptr->skip_size = skip_size_org;
610 return 2; 610 return 2;
611 } 611 }
612 gif_save_decoding_status(gif_ptr, GIF_D_STATUS_IMG_DATA); 612 gif_save_decoding_status(gif_ptr, GIF_D_STATUS_IMG_DATA);
613 skip_size_org = gif_ptr->skip_size; 613 skip_size_org = gif_ptr->skip_size;
(...skipping 19 matching lines...) Expand all
633 GifGCE** gce_ptr_ptr) { 633 GifGCE** gce_ptr_ptr) {
634 *gce_ptr_ptr = NULL; 634 *gce_ptr_ptr = NULL;
635 if (gif_ptr->gce_ptr && gce_ptr_ptr) { 635 if (gif_ptr->gce_ptr && gce_ptr_ptr) {
636 *gce_ptr_ptr = gif_ptr->gce_ptr; 636 *gce_ptr_ptr = gif_ptr->gce_ptr;
637 gif_ptr->gce_ptr = NULL; 637 gif_ptr->gce_ptr = NULL;
638 } 638 }
639 } 639 }
640 int32_t gif_decode_extension(gif_decompress_struct_p gif_ptr) { 640 int32_t gif_decode_extension(gif_decompress_struct_p gif_ptr) {
641 uint8_t* data_size_ptr = NULL; 641 uint8_t* data_size_ptr = NULL;
642 uint8_t* data_ptr = NULL; 642 uint8_t* data_ptr = NULL;
643 FX_DWORD skip_size_org = gif_ptr->skip_size; 643 uint32_t skip_size_org = gif_ptr->skip_size;
644 switch (gif_ptr->decode_status) { 644 switch (gif_ptr->decode_status) {
645 case GIF_D_STATUS_EXT_CE: { 645 case GIF_D_STATUS_EXT_CE: {
646 if (gif_read_data(gif_ptr, &data_size_ptr, 1) == NULL) { 646 if (gif_read_data(gif_ptr, &data_size_ptr, 1) == NULL) {
647 gif_ptr->skip_size = skip_size_org; 647 gif_ptr->skip_size = skip_size_org;
648 return 2; 648 return 2;
649 } 649 }
650 gif_ptr->cmt_data_ptr->Empty(); 650 gif_ptr->cmt_data_ptr->Empty();
651 while (*data_size_ptr != GIF_BLOCK_TERMINAL) { 651 while (*data_size_ptr != GIF_BLOCK_TERMINAL) {
652 uint8_t data_size = *data_size_ptr; 652 uint8_t data_size = *data_size_ptr;
653 if (gif_read_data(gif_ptr, &data_ptr, *data_size_ptr) == NULL || 653 if (gif_read_data(gif_ptr, &data_ptr, *data_size_ptr) == NULL ||
(...skipping 90 matching lines...) Expand 10 before | Expand all | Expand 10 after
744 } 744 }
745 } 745 }
746 gif_save_decoding_status(gif_ptr, GIF_D_STATUS_SIG); 746 gif_save_decoding_status(gif_ptr, GIF_D_STATUS_SIG);
747 return 1; 747 return 1;
748 } 748 }
749 int32_t gif_decode_image_info(gif_decompress_struct_p gif_ptr) { 749 int32_t gif_decode_image_info(gif_decompress_struct_p gif_ptr) {
750 if (gif_ptr->width == 0 || gif_ptr->height == 0) { 750 if (gif_ptr->width == 0 || gif_ptr->height == 0) {
751 gif_error(gif_ptr, "No Image Header Info"); 751 gif_error(gif_ptr, "No Image Header Info");
752 return 0; 752 return 0;
753 } 753 }
754 FX_DWORD skip_size_org = gif_ptr->skip_size; 754 uint32_t skip_size_org = gif_ptr->skip_size;
755 ASSERT(sizeof(GifImageInfo) == 9); 755 ASSERT(sizeof(GifImageInfo) == 9);
756 GifImageInfo* gif_img_info_ptr = NULL; 756 GifImageInfo* gif_img_info_ptr = NULL;
757 if (gif_read_data(gif_ptr, (uint8_t**)&gif_img_info_ptr, 9) == NULL) { 757 if (gif_read_data(gif_ptr, (uint8_t**)&gif_img_info_ptr, 9) == NULL) {
758 return 2; 758 return 2;
759 } 759 }
760 GifImage* gif_image_ptr = (GifImage*)FX_Alloc(uint8_t, sizeof(GifImage)); 760 GifImage* gif_image_ptr = (GifImage*)FX_Alloc(uint8_t, sizeof(GifImage));
761 FXSYS_memset(gif_image_ptr, 0, sizeof(GifImage)); 761 FXSYS_memset(gif_image_ptr, 0, sizeof(GifImage));
762 gif_image_ptr->image_info_ptr = 762 gif_image_ptr->image_info_ptr =
763 (GifImageInfo*)FX_Alloc(uint8_t, sizeof(GifImageInfo)); 763 (GifImageInfo*)FX_Alloc(uint8_t, sizeof(GifImageInfo));
764 gif_image_ptr->image_info_ptr->left = 764 gif_image_ptr->image_info_ptr->left =
(...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after
819 gif_save_decoding_status(gif_ptr, GIF_D_STATUS_IMG_DATA); 819 gif_save_decoding_status(gif_ptr, GIF_D_STATUS_IMG_DATA);
820 return 1; 820 return 1;
821 } 821 }
822 int32_t gif_load_frame(gif_decompress_struct_p gif_ptr, int32_t frame_num) { 822 int32_t gif_load_frame(gif_decompress_struct_p gif_ptr, int32_t frame_num) {
823 if (gif_ptr == NULL || frame_num < 0 || 823 if (gif_ptr == NULL || frame_num < 0 ||
824 frame_num >= gif_ptr->img_ptr_arr_ptr->GetSize()) { 824 frame_num >= gif_ptr->img_ptr_arr_ptr->GetSize()) {
825 return 0; 825 return 0;
826 } 826 }
827 uint8_t* data_size_ptr = NULL; 827 uint8_t* data_size_ptr = NULL;
828 uint8_t* data_ptr = NULL; 828 uint8_t* data_ptr = NULL;
829 FX_DWORD skip_size_org = gif_ptr->skip_size; 829 uint32_t skip_size_org = gif_ptr->skip_size;
830 GifImage* gif_image_ptr = gif_ptr->img_ptr_arr_ptr->GetAt(frame_num); 830 GifImage* gif_image_ptr = gif_ptr->img_ptr_arr_ptr->GetAt(frame_num);
831 FX_DWORD gif_img_row_bytes = gif_image_ptr->image_info_ptr->width; 831 uint32_t gif_img_row_bytes = gif_image_ptr->image_info_ptr->width;
832 if (gif_ptr->decode_status == GIF_D_STATUS_TAIL) { 832 if (gif_ptr->decode_status == GIF_D_STATUS_TAIL) {
833 if (gif_image_ptr->image_row_buf) { 833 if (gif_image_ptr->image_row_buf) {
834 FX_Free(gif_image_ptr->image_row_buf); 834 FX_Free(gif_image_ptr->image_row_buf);
835 gif_image_ptr->image_row_buf = NULL; 835 gif_image_ptr->image_row_buf = NULL;
836 } 836 }
837 gif_image_ptr->image_row_buf = FX_Alloc(uint8_t, gif_img_row_bytes); 837 gif_image_ptr->image_row_buf = FX_Alloc(uint8_t, gif_img_row_bytes);
838 GifGCE* gif_img_gce_ptr = gif_image_ptr->image_gce_ptr; 838 GifGCE* gif_img_gce_ptr = gif_image_ptr->image_gce_ptr;
839 int32_t loc_pal_num = 839 int32_t loc_pal_num =
840 ((GifLF*)&gif_image_ptr->image_info_ptr->local_flag)->local_pal 840 ((GifLF*)&gif_image_ptr->image_info_ptr->local_flag)->local_pal
841 ? (2 << ((GifLF*)&gif_image_ptr->image_info_ptr->local_flag) 841 ? (2 << ((GifLF*)&gif_image_ptr->image_info_ptr->local_flag)
(...skipping 142 matching lines...) Expand 10 before | Expand all | Expand 10 after
984 return 0; 984 return 0;
985 } 985 }
986 void gif_save_decoding_status(gif_decompress_struct_p gif_ptr, int32_t status) { 986 void gif_save_decoding_status(gif_decompress_struct_p gif_ptr, int32_t status) {
987 gif_ptr->decode_status = status; 987 gif_ptr->decode_status = status;
988 gif_ptr->next_in += gif_ptr->skip_size; 988 gif_ptr->next_in += gif_ptr->skip_size;
989 gif_ptr->avail_in -= gif_ptr->skip_size; 989 gif_ptr->avail_in -= gif_ptr->skip_size;
990 gif_ptr->skip_size = 0; 990 gif_ptr->skip_size = 0;
991 } 991 }
992 uint8_t* gif_read_data(gif_decompress_struct_p gif_ptr, 992 uint8_t* gif_read_data(gif_decompress_struct_p gif_ptr,
993 uint8_t** des_buf_pp, 993 uint8_t** des_buf_pp,
994 FX_DWORD data_size) { 994 uint32_t data_size) {
995 if (gif_ptr == NULL || gif_ptr->avail_in < gif_ptr->skip_size + data_size) { 995 if (gif_ptr == NULL || gif_ptr->avail_in < gif_ptr->skip_size + data_size) {
996 return NULL; 996 return NULL;
997 } 997 }
998 *des_buf_pp = gif_ptr->next_in + gif_ptr->skip_size; 998 *des_buf_pp = gif_ptr->next_in + gif_ptr->skip_size;
999 gif_ptr->skip_size += data_size; 999 gif_ptr->skip_size += data_size;
1000 return *des_buf_pp; 1000 return *des_buf_pp;
1001 } 1001 }
1002 void gif_input_buffer(gif_decompress_struct_p gif_ptr, 1002 void gif_input_buffer(gif_decompress_struct_p gif_ptr,
1003 uint8_t* src_buf, 1003 uint8_t* src_buf,
1004 FX_DWORD src_size) { 1004 uint32_t src_size) {
1005 gif_ptr->next_in = src_buf; 1005 gif_ptr->next_in = src_buf;
1006 gif_ptr->avail_in = src_size; 1006 gif_ptr->avail_in = src_size;
1007 gif_ptr->skip_size = 0; 1007 gif_ptr->skip_size = 0;
1008 } 1008 }
1009 FX_DWORD gif_get_avail_input(gif_decompress_struct_p gif_ptr, 1009 uint32_t gif_get_avail_input(gif_decompress_struct_p gif_ptr,
1010 uint8_t** avial_buf_ptr) { 1010 uint8_t** avial_buf_ptr) {
1011 if (avial_buf_ptr) { 1011 if (avial_buf_ptr) {
1012 *avial_buf_ptr = NULL; 1012 *avial_buf_ptr = NULL;
1013 if (gif_ptr->avail_in > 0) { 1013 if (gif_ptr->avail_in > 0) {
1014 *avial_buf_ptr = gif_ptr->next_in; 1014 *avial_buf_ptr = gif_ptr->next_in;
1015 } 1015 }
1016 } 1016 }
1017 return gif_ptr->avail_in; 1017 return gif_ptr->avail_in;
1018 } 1018 }
1019 int32_t gif_get_frame_num(gif_decompress_struct_p gif_ptr) { 1019 int32_t gif_get_frame_num(gif_decompress_struct_p gif_ptr) {
1020 return gif_ptr->img_ptr_arr_ptr->GetSize(); 1020 return gif_ptr->img_ptr_arr_ptr->GetSize();
1021 } 1021 }
1022 static FX_BOOL gif_write_header(gif_compress_struct_p gif_ptr, 1022 static FX_BOOL gif_write_header(gif_compress_struct_p gif_ptr,
1023 uint8_t*& dst_buf, 1023 uint8_t*& dst_buf,
1024 FX_DWORD& dst_len) { 1024 uint32_t& dst_len) {
1025 if (gif_ptr->cur_offset) { 1025 if (gif_ptr->cur_offset) {
1026 return TRUE; 1026 return TRUE;
1027 } 1027 }
1028 dst_len = sizeof(GifHeader) + sizeof(GifLSD) + sizeof(GifGF); 1028 dst_len = sizeof(GifHeader) + sizeof(GifLSD) + sizeof(GifGF);
1029 dst_buf = FX_TryAlloc(uint8_t, dst_len); 1029 dst_buf = FX_TryAlloc(uint8_t, dst_len);
1030 if (dst_buf == NULL) { 1030 if (dst_buf == NULL) {
1031 return FALSE; 1031 return FALSE;
1032 } 1032 }
1033 FXSYS_memset(dst_buf, 0, dst_len); 1033 FXSYS_memset(dst_buf, 0, dst_len);
1034 FXSYS_memcpy(dst_buf, gif_ptr->header_ptr, sizeof(GifHeader)); 1034 FXSYS_memcpy(dst_buf, gif_ptr->header_ptr, sizeof(GifHeader));
1035 gif_ptr->cur_offset += sizeof(GifHeader); 1035 gif_ptr->cur_offset += sizeof(GifHeader);
1036 SetWord_LSBFirst(dst_buf + gif_ptr->cur_offset, gif_ptr->lsd_ptr->width); 1036 SetWord_LSBFirst(dst_buf + gif_ptr->cur_offset, gif_ptr->lsd_ptr->width);
1037 gif_ptr->cur_offset += 2; 1037 gif_ptr->cur_offset += 2;
1038 SetWord_LSBFirst(dst_buf + gif_ptr->cur_offset, gif_ptr->lsd_ptr->height); 1038 SetWord_LSBFirst(dst_buf + gif_ptr->cur_offset, gif_ptr->lsd_ptr->height);
1039 gif_ptr->cur_offset += 2; 1039 gif_ptr->cur_offset += 2;
1040 dst_buf[gif_ptr->cur_offset++] = gif_ptr->lsd_ptr->global_flag; 1040 dst_buf[gif_ptr->cur_offset++] = gif_ptr->lsd_ptr->global_flag;
1041 dst_buf[gif_ptr->cur_offset++] = gif_ptr->lsd_ptr->bc_index; 1041 dst_buf[gif_ptr->cur_offset++] = gif_ptr->lsd_ptr->bc_index;
1042 dst_buf[gif_ptr->cur_offset++] = gif_ptr->lsd_ptr->pixel_aspect; 1042 dst_buf[gif_ptr->cur_offset++] = gif_ptr->lsd_ptr->pixel_aspect;
1043 if (gif_ptr->global_pal) { 1043 if (gif_ptr->global_pal) {
1044 uint16_t size = sizeof(GifPalette) * gif_ptr->gpal_num; 1044 uint16_t size = sizeof(GifPalette) * gif_ptr->gpal_num;
1045 if (!gif_grow_buf(dst_buf, dst_len, gif_ptr->cur_offset + size)) { 1045 if (!gif_grow_buf(dst_buf, dst_len, gif_ptr->cur_offset + size)) {
1046 return FALSE; 1046 return FALSE;
1047 } 1047 }
1048 FXSYS_memcpy(&dst_buf[gif_ptr->cur_offset], gif_ptr->global_pal, size); 1048 FXSYS_memcpy(&dst_buf[gif_ptr->cur_offset], gif_ptr->global_pal, size);
1049 gif_ptr->cur_offset += size; 1049 gif_ptr->cur_offset += size;
1050 } 1050 }
1051 return TRUE; 1051 return TRUE;
1052 } 1052 }
1053 void interlace_buf(const uint8_t* buf, FX_DWORD pitch, FX_DWORD height) { 1053 void interlace_buf(const uint8_t* buf, uint32_t pitch, uint32_t height) {
1054 CFX_ArrayTemplate<uint8_t*> pass[4]; 1054 CFX_ArrayTemplate<uint8_t*> pass[4];
1055 int i, j; 1055 int i, j;
1056 FX_DWORD row; 1056 uint32_t row;
1057 row = 0; 1057 row = 0;
1058 uint8_t* temp; 1058 uint8_t* temp;
1059 while (row < height) { 1059 while (row < height) {
1060 if (row % 8 == 0) { 1060 if (row % 8 == 0) {
1061 j = 0; 1061 j = 0;
1062 } else if (row % 4 == 0) { 1062 } else if (row % 4 == 0) {
1063 j = 1; 1063 j = 1;
1064 } else if (row % 2 == 0) { 1064 } else if (row % 2 == 0) {
1065 j = 2; 1065 j = 2;
1066 } else { 1066 } else {
1067 j = 3; 1067 j = 3;
1068 } 1068 }
1069 temp = FX_Alloc(uint8_t, pitch); 1069 temp = FX_Alloc(uint8_t, pitch);
1070 if (temp == NULL) { 1070 if (temp == NULL) {
1071 return; 1071 return;
1072 } 1072 }
1073 FXSYS_memcpy(temp, &buf[pitch * row], pitch); 1073 FXSYS_memcpy(temp, &buf[pitch * row], pitch);
1074 pass[j].Add(temp); 1074 pass[j].Add(temp);
1075 row++; 1075 row++;
1076 } 1076 }
1077 for (i = 0, row = 0; i < 4; i++) { 1077 for (i = 0, row = 0; i < 4; i++) {
1078 for (j = 0; j < pass[i].GetSize(); j++, row++) { 1078 for (j = 0; j < pass[i].GetSize(); j++, row++) {
1079 FXSYS_memcpy((uint8_t*)&buf[pitch * row], pass[i].GetAt(j), pitch); 1079 FXSYS_memcpy((uint8_t*)&buf[pitch * row], pass[i].GetAt(j), pitch);
1080 FX_Free(pass[i].GetAt(j)); 1080 FX_Free(pass[i].GetAt(j));
1081 } 1081 }
1082 } 1082 }
1083 } 1083 }
1084 static void gif_write_block_data(const uint8_t* src_buf, 1084 static void gif_write_block_data(const uint8_t* src_buf,
1085 FX_DWORD src_len, 1085 uint32_t src_len,
1086 uint8_t*& dst_buf, 1086 uint8_t*& dst_buf,
1087 FX_DWORD& dst_len, 1087 uint32_t& dst_len,
1088 FX_DWORD& dst_offset) { 1088 uint32_t& dst_offset) {
1089 FX_DWORD src_offset = 0; 1089 uint32_t src_offset = 0;
1090 while (src_len > GIF_DATA_BLOCK) { 1090 while (src_len > GIF_DATA_BLOCK) {
1091 dst_buf[dst_offset++] = GIF_DATA_BLOCK; 1091 dst_buf[dst_offset++] = GIF_DATA_BLOCK;
1092 FXSYS_memcpy(&dst_buf[dst_offset], &src_buf[src_offset], GIF_DATA_BLOCK); 1092 FXSYS_memcpy(&dst_buf[dst_offset], &src_buf[src_offset], GIF_DATA_BLOCK);
1093 dst_offset += GIF_DATA_BLOCK; 1093 dst_offset += GIF_DATA_BLOCK;
1094 src_offset += GIF_DATA_BLOCK; 1094 src_offset += GIF_DATA_BLOCK;
1095 src_len -= GIF_DATA_BLOCK; 1095 src_len -= GIF_DATA_BLOCK;
1096 } 1096 }
1097 dst_buf[dst_offset++] = (uint8_t)src_len; 1097 dst_buf[dst_offset++] = (uint8_t)src_len;
1098 FXSYS_memcpy(&dst_buf[dst_offset], &src_buf[src_offset], src_len); 1098 FXSYS_memcpy(&dst_buf[dst_offset], &src_buf[src_offset], src_len);
1099 dst_offset += src_len; 1099 dst_offset += src_len;
1100 } 1100 }
1101 static FX_BOOL gif_write_data(gif_compress_struct_p gif_ptr, 1101 static FX_BOOL gif_write_data(gif_compress_struct_p gif_ptr,
1102 uint8_t*& dst_buf, 1102 uint8_t*& dst_buf,
1103 FX_DWORD& dst_len) { 1103 uint32_t& dst_len) {
1104 if (!gif_grow_buf(dst_buf, dst_len, gif_ptr->cur_offset + GIF_DATA_BLOCK)) { 1104 if (!gif_grow_buf(dst_buf, dst_len, gif_ptr->cur_offset + GIF_DATA_BLOCK)) {
1105 return FALSE; 1105 return FALSE;
1106 } 1106 }
1107 if (FXSYS_memcmp(gif_ptr->header_ptr->version, "89a", 3) == 0) { 1107 if (FXSYS_memcmp(gif_ptr->header_ptr->version, "89a", 3) == 0) {
1108 dst_buf[gif_ptr->cur_offset++] = GIF_SIG_EXTENSION; 1108 dst_buf[gif_ptr->cur_offset++] = GIF_SIG_EXTENSION;
1109 dst_buf[gif_ptr->cur_offset++] = GIF_BLOCK_GCE; 1109 dst_buf[gif_ptr->cur_offset++] = GIF_BLOCK_GCE;
1110 gif_ptr->gce_ptr->block_size = 4; 1110 gif_ptr->gce_ptr->block_size = 4;
1111 dst_buf[gif_ptr->cur_offset++] = gif_ptr->gce_ptr->block_size; 1111 dst_buf[gif_ptr->cur_offset++] = gif_ptr->gce_ptr->block_size;
1112 gif_ptr->gce_ptr->gce_flag = 0; 1112 gif_ptr->gce_ptr->gce_flag = 0;
1113 dst_buf[gif_ptr->cur_offset++] = gif_ptr->gce_ptr->gce_flag; 1113 dst_buf[gif_ptr->cur_offset++] = gif_ptr->gce_ptr->gce_flag;
(...skipping 13 matching lines...) Expand all
1127 gif_ptr->cur_offset += 2; 1127 gif_ptr->cur_offset += 2;
1128 SetWord_LSBFirst(dst_buf + gif_ptr->cur_offset, 1128 SetWord_LSBFirst(dst_buf + gif_ptr->cur_offset,
1129 gif_ptr->image_info_ptr->width); 1129 gif_ptr->image_info_ptr->width);
1130 gif_ptr->cur_offset += 2; 1130 gif_ptr->cur_offset += 2;
1131 SetWord_LSBFirst(dst_buf + gif_ptr->cur_offset, 1131 SetWord_LSBFirst(dst_buf + gif_ptr->cur_offset,
1132 gif_ptr->image_info_ptr->height); 1132 gif_ptr->image_info_ptr->height);
1133 gif_ptr->cur_offset += 2; 1133 gif_ptr->cur_offset += 2;
1134 GifLF& lf = (GifLF&)gif_ptr->image_info_ptr->local_flag; 1134 GifLF& lf = (GifLF&)gif_ptr->image_info_ptr->local_flag;
1135 dst_buf[gif_ptr->cur_offset++] = gif_ptr->image_info_ptr->local_flag; 1135 dst_buf[gif_ptr->cur_offset++] = gif_ptr->image_info_ptr->local_flag;
1136 if (gif_ptr->local_pal) { 1136 if (gif_ptr->local_pal) {
1137 FX_DWORD pal_size = sizeof(GifPalette) * gif_ptr->lpal_num; 1137 uint32_t pal_size = sizeof(GifPalette) * gif_ptr->lpal_num;
1138 if (!gif_grow_buf(dst_buf, dst_len, pal_size + gif_ptr->cur_offset)) { 1138 if (!gif_grow_buf(dst_buf, dst_len, pal_size + gif_ptr->cur_offset)) {
1139 return FALSE; 1139 return FALSE;
1140 } 1140 }
1141 FXSYS_memcpy(&dst_buf[gif_ptr->cur_offset], gif_ptr->local_pal, pal_size); 1141 FXSYS_memcpy(&dst_buf[gif_ptr->cur_offset], gif_ptr->local_pal, pal_size);
1142 gif_ptr->cur_offset += pal_size; 1142 gif_ptr->cur_offset += pal_size;
1143 } 1143 }
1144 if (lf.interlace) { 1144 if (lf.interlace) {
1145 interlace_buf(gif_ptr->src_buf, gif_ptr->src_pitch, 1145 interlace_buf(gif_ptr->src_buf, gif_ptr->src_pitch,
1146 gif_ptr->image_info_ptr->height); 1146 gif_ptr->image_info_ptr->height);
1147 } 1147 }
1148 uint8_t code_bit = lf.pal_bits; 1148 uint8_t code_bit = lf.pal_bits;
1149 if (lf.local_pal == 0) { 1149 if (lf.local_pal == 0) {
1150 GifGF& gf = (GifGF&)gif_ptr->lsd_ptr->global_flag; 1150 GifGF& gf = (GifGF&)gif_ptr->lsd_ptr->global_flag;
1151 code_bit = gf.pal_bits; 1151 code_bit = gf.pal_bits;
1152 } 1152 }
1153 gif_ptr->img_encoder_ptr->Start(code_bit, gif_ptr->src_buf, dst_buf, 1153 gif_ptr->img_encoder_ptr->Start(code_bit, gif_ptr->src_buf, dst_buf,
1154 gif_ptr->cur_offset); 1154 gif_ptr->cur_offset);
1155 FX_DWORD i; 1155 uint32_t i;
1156 for (i = 0; i < gif_ptr->src_row; i++) { 1156 for (i = 0; i < gif_ptr->src_row; i++) {
1157 if (!gif_ptr->img_encoder_ptr->Encode( 1157 if (!gif_ptr->img_encoder_ptr->Encode(
1158 &gif_ptr->src_buf[i * gif_ptr->src_pitch], 1158 &gif_ptr->src_buf[i * gif_ptr->src_pitch],
1159 gif_ptr->src_width * (code_bit + 1), dst_buf, dst_len, 1159 gif_ptr->src_width * (code_bit + 1), dst_buf, dst_len,
1160 gif_ptr->cur_offset)) { 1160 gif_ptr->cur_offset)) {
1161 return FALSE; 1161 return FALSE;
1162 } 1162 }
1163 } 1163 }
1164 gif_ptr->img_encoder_ptr->Finish(dst_buf, dst_len, gif_ptr->cur_offset); 1164 gif_ptr->img_encoder_ptr->Finish(dst_buf, dst_len, gif_ptr->cur_offset);
1165 dst_buf[gif_ptr->cur_offset++] = 0; 1165 dst_buf[gif_ptr->cur_offset++] = 0;
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after
1200 gif_write_block_data(gif_ptr->pte_data_ptr, gif_ptr->pte_data_len, dst_buf, 1200 gif_write_block_data(gif_ptr->pte_data_ptr, gif_ptr->pte_data_len, dst_buf,
1201 dst_len, gif_ptr->cur_offset); 1201 dst_len, gif_ptr->cur_offset);
1202 gif_ptr->cur_offset += gif_ptr->pte_data_len; 1202 gif_ptr->cur_offset += gif_ptr->pte_data_len;
1203 dst_buf[gif_ptr->cur_offset++] = 0; 1203 dst_buf[gif_ptr->cur_offset++] = 0;
1204 } 1204 }
1205 dst_buf[gif_ptr->cur_offset++] = GIF_SIG_TRAILER; 1205 dst_buf[gif_ptr->cur_offset++] = GIF_SIG_TRAILER;
1206 return TRUE; 1206 return TRUE;
1207 } 1207 }
1208 FX_BOOL gif_encode(gif_compress_struct_p gif_ptr, 1208 FX_BOOL gif_encode(gif_compress_struct_p gif_ptr,
1209 uint8_t*& dst_buf, 1209 uint8_t*& dst_buf,
1210 FX_DWORD& dst_len) { 1210 uint32_t& dst_len) {
1211 if (!gif_write_header(gif_ptr, dst_buf, dst_len)) { 1211 if (!gif_write_header(gif_ptr, dst_buf, dst_len)) {
1212 return FALSE; 1212 return FALSE;
1213 } 1213 }
1214 FX_DWORD cur_offset = gif_ptr->cur_offset; 1214 uint32_t cur_offset = gif_ptr->cur_offset;
1215 FX_BOOL res = TRUE; 1215 FX_BOOL res = TRUE;
1216 if (gif_ptr->frames) { 1216 if (gif_ptr->frames) {
1217 gif_ptr->cur_offset--; 1217 gif_ptr->cur_offset--;
1218 } 1218 }
1219 if (!gif_write_data(gif_ptr, dst_buf, dst_len)) { 1219 if (!gif_write_data(gif_ptr, dst_buf, dst_len)) {
1220 gif_ptr->cur_offset = cur_offset; 1220 gif_ptr->cur_offset = cur_offset;
1221 res = FALSE; 1221 res = FALSE;
1222 } 1222 }
1223 dst_len = gif_ptr->cur_offset; 1223 dst_len = gif_ptr->cur_offset;
1224 dst_buf[dst_len - 1] = GIF_SIG_TRAILER; 1224 dst_buf[dst_len - 1] = GIF_SIG_TRAILER;
1225 if (res) { 1225 if (res) {
1226 gif_ptr->frames++; 1226 gif_ptr->frames++;
1227 } 1227 }
1228 return res; 1228 return res;
1229 } 1229 }
OLDNEW
« no previous file with comments | « core/fxcodec/lgif/fx_gif.h ('k') | core/fxcrt/extension.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698