| 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 "core/src/fxcodec/lgif/fx_gif.h" | 7 #include "core/src/fxcodec/lgif/fx_gif.h" |
| 8 void CGifLZWDecoder::Input(uint8_t* src_buf, FX_DWORD src_size) { | 8 void CGifLZWDecoder::Input(uint8_t* src_buf, FX_DWORD src_size) { |
| 9 next_in = src_buf; | 9 next_in = src_buf; |
| 10 avail_in = src_size; | 10 avail_in = src_size; |
| (...skipping 358 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 369 gif_ptr->pt_ptr_arr_ptr = new CFX_ArrayTemplate<GifPlainText*>; | 369 gif_ptr->pt_ptr_arr_ptr = new CFX_ArrayTemplate<GifPlainText*>; |
| 370 #endif | 370 #endif |
| 371 return gif_ptr; | 371 return gif_ptr; |
| 372 } | 372 } |
| 373 void _gif_destroy_decompress(gif_decompress_struct_pp gif_ptr_ptr) { | 373 void _gif_destroy_decompress(gif_decompress_struct_pp gif_ptr_ptr) { |
| 374 if (gif_ptr_ptr == NULL || *gif_ptr_ptr == NULL) { | 374 if (gif_ptr_ptr == NULL || *gif_ptr_ptr == NULL) { |
| 375 return; | 375 return; |
| 376 } | 376 } |
| 377 gif_decompress_struct_p gif_ptr = *gif_ptr_ptr; | 377 gif_decompress_struct_p gif_ptr = *gif_ptr_ptr; |
| 378 *gif_ptr_ptr = NULL; | 378 *gif_ptr_ptr = NULL; |
| 379 if (gif_ptr->global_pal_ptr != NULL) { | 379 FX_Free(gif_ptr->global_pal_ptr); |
| 380 FX_Free(gif_ptr->global_pal_ptr); | 380 delete gif_ptr->img_decoder_ptr; |
| 381 } | 381 if (gif_ptr->img_ptr_arr_ptr) { |
| 382 if (gif_ptr->img_decoder_ptr != NULL) { | |
| 383 delete gif_ptr->img_decoder_ptr; | |
| 384 } | |
| 385 if (gif_ptr->img_ptr_arr_ptr != NULL) { | |
| 386 int32_t size_img_arr = gif_ptr->img_ptr_arr_ptr->GetSize(); | 382 int32_t size_img_arr = gif_ptr->img_ptr_arr_ptr->GetSize(); |
| 387 for (int32_t i = 0; i < size_img_arr; i++) { | 383 for (int32_t i = 0; i < size_img_arr; i++) { |
| 388 GifImage* p = gif_ptr->img_ptr_arr_ptr->GetAt(i); | 384 GifImage* p = gif_ptr->img_ptr_arr_ptr->GetAt(i); |
| 389 if (p->image_info_ptr != NULL) { | 385 FX_Free(p->image_info_ptr); |
| 390 FX_Free(p->image_info_ptr); | 386 FX_Free(p->image_gce_ptr); |
| 391 } | 387 FX_Free(p->image_row_buf); |
| 392 if (p->image_gce_ptr != NULL) { | 388 if (p->local_pal_ptr && p->local_pal_ptr != gif_ptr->global_pal_ptr) { |
| 393 FX_Free(p->image_gce_ptr); | |
| 394 } | |
| 395 if (p->image_row_buf != NULL) { | |
| 396 FX_Free(p->image_row_buf); | |
| 397 } | |
| 398 if (p->local_pal_ptr != NULL && | |
| 399 p->local_pal_ptr != gif_ptr->global_pal_ptr) { | |
| 400 FX_Free(p->local_pal_ptr); | 389 FX_Free(p->local_pal_ptr); |
| 401 } | 390 } |
| 402 FX_Free(p); | 391 FX_Free(p); |
| 403 } | 392 } |
| 404 gif_ptr->img_ptr_arr_ptr->RemoveAll(); | 393 gif_ptr->img_ptr_arr_ptr->RemoveAll(); |
| 405 delete gif_ptr->img_ptr_arr_ptr; | 394 delete gif_ptr->img_ptr_arr_ptr; |
| 406 } | 395 } |
| 407 #ifdef GIF_SUPPORT_APPLICATION_EXTENSION | 396 #ifdef GIF_SUPPORT_APPLICATION_EXTENSION |
| 408 if (gif_ptr->app_data != NULL) { | 397 FX_Free(gif_ptr->app_data); |
| 409 FX_Free(gif_ptr->app_data); | |
| 410 } | |
| 411 #endif | 398 #endif |
| 412 #ifdef GIF_SUPPORT_COMMENT_EXTENSION | 399 #ifdef GIF_SUPPORT_COMMENT_EXTENSION |
| 413 if (gif_ptr->cmt_data_ptr != NULL) { | 400 delete gif_ptr->cmt_data_ptr; |
| 414 delete gif_ptr->cmt_data_ptr; | |
| 415 } | |
| 416 #endif | 401 #endif |
| 417 #ifdef GIF_SUPPORT_GRAPHIC_CONTROL_EXTENSION | 402 #ifdef GIF_SUPPORT_GRAPHIC_CONTROL_EXTENSION |
| 418 if (gif_ptr->gce_ptr != NULL) { | 403 FX_Free(gif_ptr->gce_ptr); |
| 419 FX_Free(gif_ptr->gce_ptr); | |
| 420 } | |
| 421 #endif | 404 #endif |
| 422 #ifdef GIF_SUPPORT_PLAIN_TEXT_EXTENSION | 405 #ifdef GIF_SUPPORT_PLAIN_TEXT_EXTENSION |
| 423 if (gif_ptr->pt_ptr_arr_ptr != NULL) { | 406 if (gif_ptr->pt_ptr_arr_ptr) { |
| 424 int32_t size_pt_arr = gif_ptr->pt_ptr_arr_ptr->GetSize(); | 407 int32_t size_pt_arr = gif_ptr->pt_ptr_arr_ptr->GetSize(); |
| 425 for (int32_t i = 0; i < size_pt_arr; i++) { | 408 for (int32_t i = 0; i < size_pt_arr; i++) { |
| 426 GifPlainText* p = gif_ptr->pt_ptr_arr_ptr->GetAt(i); | 409 GifPlainText* p = gif_ptr->pt_ptr_arr_ptr->GetAt(i); |
| 427 if (p->gce_ptr != NULL) { | 410 FX_Free(p->gce_ptr); |
| 428 FX_Free(p->gce_ptr); | 411 FX_Free(p->pte_ptr); |
| 429 } | 412 delete p->string_ptr; |
| 430 if (p->pte_ptr != NULL) { | |
| 431 FX_Free(p->pte_ptr); | |
| 432 } | |
| 433 if (p->string_ptr != NULL) { | |
| 434 delete p->string_ptr; | |
| 435 } | |
| 436 } | 413 } |
| 437 gif_ptr->pt_ptr_arr_ptr->RemoveAll(); | 414 gif_ptr->pt_ptr_arr_ptr->RemoveAll(); |
| 438 delete gif_ptr->pt_ptr_arr_ptr; | 415 delete gif_ptr->pt_ptr_arr_ptr; |
| 439 } | 416 } |
| 440 #endif | 417 #endif |
| 441 FX_Free(gif_ptr); | 418 FX_Free(gif_ptr); |
| 442 } | 419 } |
| 443 gif_compress_struct_p _gif_create_compress() { | 420 gif_compress_struct_p _gif_create_compress() { |
| 444 gif_compress_struct_p gif_ptr = | 421 gif_compress_struct_p gif_ptr = |
| 445 (gif_compress_struct*)FX_Alloc(uint8_t, sizeof(gif_compress_struct)); | 422 (gif_compress_struct*)FX_Alloc(uint8_t, sizeof(gif_compress_struct)); |
| (...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 504 gif_ptr->pte_ptr->block_size = 12; | 481 gif_ptr->pte_ptr->block_size = 12; |
| 505 #endif | 482 #endif |
| 506 return gif_ptr; | 483 return gif_ptr; |
| 507 } | 484 } |
| 508 void _gif_destroy_compress(gif_compress_struct_pp gif_ptr_ptr) { | 485 void _gif_destroy_compress(gif_compress_struct_pp gif_ptr_ptr) { |
| 509 if (gif_ptr_ptr == NULL || *gif_ptr_ptr == NULL) { | 486 if (gif_ptr_ptr == NULL || *gif_ptr_ptr == NULL) { |
| 510 return; | 487 return; |
| 511 } | 488 } |
| 512 gif_compress_struct_p gif_ptr = *gif_ptr_ptr; | 489 gif_compress_struct_p gif_ptr = *gif_ptr_ptr; |
| 513 *gif_ptr_ptr = NULL; | 490 *gif_ptr_ptr = NULL; |
| 514 if (gif_ptr->header_ptr != NULL) { | 491 FX_Free(gif_ptr->header_ptr); |
| 515 FX_Free(gif_ptr->header_ptr); | 492 FX_Free(gif_ptr->lsd_ptr); |
| 516 } | 493 FX_Free(gif_ptr->global_pal); |
| 517 if (gif_ptr->lsd_ptr != NULL) { | 494 FX_Free(gif_ptr->image_info_ptr); |
| 518 FX_Free(gif_ptr->lsd_ptr); | 495 FX_Free(gif_ptr->local_pal); |
| 519 } | 496 delete gif_ptr->img_encoder_ptr; |
| 520 if (gif_ptr->global_pal != NULL) { | |
| 521 FX_Free(gif_ptr->global_pal); | |
| 522 } | |
| 523 if (gif_ptr->image_info_ptr != NULL) { | |
| 524 FX_Free(gif_ptr->image_info_ptr); | |
| 525 } | |
| 526 if (gif_ptr->local_pal != NULL) { | |
| 527 FX_Free(gif_ptr->local_pal); | |
| 528 } | |
| 529 if (gif_ptr->img_encoder_ptr != NULL) { | |
| 530 delete gif_ptr->img_encoder_ptr; | |
| 531 } | |
| 532 #ifdef GIF_SUPPORT_APPLICATION_EXTENSION | 497 #ifdef GIF_SUPPORT_APPLICATION_EXTENSION |
| 533 if (gif_ptr->app_data != NULL) { | 498 FX_Free(gif_ptr->app_data); |
| 534 FX_Free(gif_ptr->app_data); | |
| 535 } | |
| 536 #endif | 499 #endif |
| 537 #ifdef GIF_SUPPORT_GRAPHIC_CONTROL_EXTENSION | 500 #ifdef GIF_SUPPORT_GRAPHIC_CONTROL_EXTENSION |
| 538 if (gif_ptr->gce_ptr != NULL) { | 501 FX_Free(gif_ptr->gce_ptr); |
| 539 FX_Free(gif_ptr->gce_ptr); | |
| 540 } | |
| 541 #endif | 502 #endif |
| 542 #ifdef GIF_SUPPORT_COMMENT_EXTENSION | 503 #ifdef GIF_SUPPORT_COMMENT_EXTENSION |
| 543 if (gif_ptr->cmt_data_ptr != NULL) { | 504 FX_Free(gif_ptr->cmt_data_ptr); |
| 544 FX_Free(gif_ptr->cmt_data_ptr); | |
| 545 } | |
| 546 #endif | 505 #endif |
| 547 #ifdef GIF_SUPPORT_PLAIN_TEXT_EXTENSION | 506 #ifdef GIF_SUPPORT_PLAIN_TEXT_EXTENSION |
| 548 if (gif_ptr->pte_ptr != NULL) { | 507 FX_Free(gif_ptr->pte_ptr); |
| 549 FX_Free(gif_ptr->pte_ptr); | |
| 550 } | |
| 551 #endif | 508 #endif |
| 552 FX_Free(gif_ptr); | 509 FX_Free(gif_ptr); |
| 553 } | 510 } |
| 554 void _gif_error(gif_decompress_struct_p gif_ptr, const FX_CHAR* err_msg) { | 511 void _gif_error(gif_decompress_struct_p gif_ptr, const FX_CHAR* err_msg) { |
| 555 if (gif_ptr != NULL && gif_ptr->_gif_error_fn != NULL) { | 512 if (gif_ptr && gif_ptr->_gif_error_fn) { |
| 556 gif_ptr->_gif_error_fn(gif_ptr, err_msg); | 513 gif_ptr->_gif_error_fn(gif_ptr, err_msg); |
| 557 } | 514 } |
| 558 } | 515 } |
| 559 void _gif_warn(gif_decompress_struct_p gif_ptr, const FX_CHAR* err_msg) {} | 516 void _gif_warn(gif_decompress_struct_p gif_ptr, const FX_CHAR* err_msg) {} |
| 560 int32_t _gif_read_header(gif_decompress_struct_p gif_ptr) { | 517 int32_t _gif_read_header(gif_decompress_struct_p gif_ptr) { |
| 561 if (gif_ptr == NULL) { | 518 if (gif_ptr == NULL) { |
| 562 return 0; | 519 return 0; |
| 563 } | 520 } |
| 564 FX_DWORD skip_size_org = gif_ptr->skip_size; | 521 FX_DWORD skip_size_org = gif_ptr->skip_size; |
| 565 ASSERT(sizeof(GifHeader) == 6); | 522 ASSERT(sizeof(GifHeader) == 6); |
| (...skipping 18 matching lines...) Expand all Loading... |
| 584 ASSERT(sizeof(GifPalette) == 3); | 541 ASSERT(sizeof(GifPalette) == 3); |
| 585 int32_t global_pal_size = gif_ptr->global_pal_num * 3; | 542 int32_t global_pal_size = gif_ptr->global_pal_num * 3; |
| 586 uint8_t* global_pal_ptr = NULL; | 543 uint8_t* global_pal_ptr = NULL; |
| 587 if (_gif_read_data(gif_ptr, &global_pal_ptr, global_pal_size) == NULL) { | 544 if (_gif_read_data(gif_ptr, &global_pal_ptr, global_pal_size) == NULL) { |
| 588 gif_ptr->skip_size = skip_size_org; | 545 gif_ptr->skip_size = skip_size_org; |
| 589 return 2; | 546 return 2; |
| 590 } | 547 } |
| 591 gif_ptr->global_sort_flag = ((GifGF*)&gif_lsd_ptr->global_flag)->sort_flag; | 548 gif_ptr->global_sort_flag = ((GifGF*)&gif_lsd_ptr->global_flag)->sort_flag; |
| 592 gif_ptr->global_color_resolution = | 549 gif_ptr->global_color_resolution = |
| 593 ((GifGF*)&gif_lsd_ptr->global_flag)->color_resolution; | 550 ((GifGF*)&gif_lsd_ptr->global_flag)->color_resolution; |
| 594 if (gif_ptr->global_pal_ptr != NULL) { | 551 FX_Free(gif_ptr->global_pal_ptr); |
| 595 FX_Free(gif_ptr->global_pal_ptr); | |
| 596 } | |
| 597 gif_ptr->global_pal_ptr = NULL; | |
| 598 gif_ptr->global_pal_ptr = (GifPalette*)FX_Alloc(uint8_t, global_pal_size); | 552 gif_ptr->global_pal_ptr = (GifPalette*)FX_Alloc(uint8_t, global_pal_size); |
| 599 GIF_PTR_NOT_NULL(gif_ptr->global_pal_ptr, gif_ptr); | |
| 600 FXSYS_memcpy(gif_ptr->global_pal_ptr, global_pal_ptr, global_pal_size); | 553 FXSYS_memcpy(gif_ptr->global_pal_ptr, global_pal_ptr, global_pal_size); |
| 601 } | 554 } |
| 602 gif_ptr->width = (int)_GetWord_LSBFirst((uint8_t*)&gif_lsd_ptr->width); | 555 gif_ptr->width = (int)_GetWord_LSBFirst((uint8_t*)&gif_lsd_ptr->width); |
| 603 gif_ptr->height = (int)_GetWord_LSBFirst((uint8_t*)&gif_lsd_ptr->height); | 556 gif_ptr->height = (int)_GetWord_LSBFirst((uint8_t*)&gif_lsd_ptr->height); |
| 604 gif_ptr->bc_index = gif_lsd_ptr->bc_index; | 557 gif_ptr->bc_index = gif_lsd_ptr->bc_index; |
| 605 gif_ptr->pixel_aspect = gif_lsd_ptr->pixel_aspect; | 558 gif_ptr->pixel_aspect = gif_lsd_ptr->pixel_aspect; |
| 606 return 1; | 559 return 1; |
| 607 } | 560 } |
| 608 int32_t _gif_get_frame(gif_decompress_struct_p gif_ptr) { | 561 int32_t _gif_get_frame(gif_decompress_struct_p gif_ptr) { |
| 609 if (gif_ptr == NULL) { | 562 if (gif_ptr == NULL) { |
| (...skipping 103 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 713 continue; | 666 continue; |
| 714 } | 667 } |
| 715 } | 668 } |
| 716 } | 669 } |
| 717 return 1; | 670 return 1; |
| 718 } | 671 } |
| 719 void _gif_takeover_gce_ptr(gif_decompress_struct_p gif_ptr, | 672 void _gif_takeover_gce_ptr(gif_decompress_struct_p gif_ptr, |
| 720 GifGCE** gce_ptr_ptr) { | 673 GifGCE** gce_ptr_ptr) { |
| 721 *gce_ptr_ptr = NULL; | 674 *gce_ptr_ptr = NULL; |
| 722 #ifdef GIF_SUPPORT_GRAPHIC_CONTROL_EXTENSION | 675 #ifdef GIF_SUPPORT_GRAPHIC_CONTROL_EXTENSION |
| 723 if (gif_ptr->gce_ptr != NULL && gce_ptr_ptr != NULL) { | 676 if (gif_ptr->gce_ptr && gce_ptr_ptr) { |
| 724 *gce_ptr_ptr = gif_ptr->gce_ptr; | 677 *gce_ptr_ptr = gif_ptr->gce_ptr; |
| 725 gif_ptr->gce_ptr = NULL; | 678 gif_ptr->gce_ptr = NULL; |
| 726 } | 679 } |
| 727 #endif | 680 #endif |
| 728 } | 681 } |
| 729 int32_t _gif_decode_extension(gif_decompress_struct_p gif_ptr) { | 682 int32_t _gif_decode_extension(gif_decompress_struct_p gif_ptr) { |
| 730 uint8_t* data_size_ptr = NULL; | 683 uint8_t* data_size_ptr = NULL; |
| 731 uint8_t* data_ptr = NULL; | 684 uint8_t* data_ptr = NULL; |
| 732 FX_DWORD skip_size_org = gif_ptr->skip_size; | 685 FX_DWORD skip_size_org = gif_ptr->skip_size; |
| 733 switch (gif_ptr->decode_status) { | 686 switch (gif_ptr->decode_status) { |
| (...skipping 15 matching lines...) Expand all Loading... |
| 749 _gif_read_data(gif_ptr, &data_size_ptr, 1) == NULL) { | 702 _gif_read_data(gif_ptr, &data_size_ptr, 1) == NULL) { |
| 750 gif_ptr->skip_size = skip_size_org; | 703 gif_ptr->skip_size = skip_size_org; |
| 751 return 2; | 704 return 2; |
| 752 } | 705 } |
| 753 gif_ae_data_str += CFX_ByteString((const uint8_t*)data_ptr, data_size); | 706 gif_ae_data_str += CFX_ByteString((const uint8_t*)data_ptr, data_size); |
| 754 } | 707 } |
| 755 FXSYS_memcpy(gif_ptr->app_identify, gif_ae_ptr->app_identify, 8); | 708 FXSYS_memcpy(gif_ptr->app_identify, gif_ae_ptr->app_identify, 8); |
| 756 FXSYS_memcpy(gif_ptr->app_authentication, gif_ae_ptr->app_authentication, | 709 FXSYS_memcpy(gif_ptr->app_authentication, gif_ae_ptr->app_authentication, |
| 757 3); | 710 3); |
| 758 gif_ptr->app_data_size = gif_ae_data_str.GetLength(); | 711 gif_ptr->app_data_size = gif_ae_data_str.GetLength(); |
| 759 if (gif_ptr->app_data != NULL) { | 712 FX_Free(gif_ptr->app_data); |
| 760 FX_Free(gif_ptr->app_data); | |
| 761 gif_ptr->app_data = NULL; | |
| 762 } | |
| 763 gif_ptr->app_data = FX_Alloc(uint8_t, gif_ptr->app_data_size); | 713 gif_ptr->app_data = FX_Alloc(uint8_t, gif_ptr->app_data_size); |
| 764 GIF_PTR_NOT_NULL(gif_ptr->app_data, gif_ptr); | |
| 765 FXSYS_memcpy(gif_ptr->app_data, const uint8_t*(gif_ae_data_str), | 714 FXSYS_memcpy(gif_ptr->app_data, const uint8_t*(gif_ae_data_str), |
| 766 gif_ptr->app_data_size); | 715 gif_ptr->app_data_size); |
| 767 } break; | 716 } break; |
| 768 #endif | 717 #endif |
| 769 #ifdef GIF_SUPPORT_COMMENT_EXTENSION | 718 #ifdef GIF_SUPPORT_COMMENT_EXTENSION |
| 770 case GIF_D_STATUS_EXT_CE: { | 719 case GIF_D_STATUS_EXT_CE: { |
| 771 if (_gif_read_data(gif_ptr, &data_size_ptr, 1) == NULL) { | 720 if (_gif_read_data(gif_ptr, &data_size_ptr, 1) == NULL) { |
| 772 gif_ptr->skip_size = skip_size_org; | 721 gif_ptr->skip_size = skip_size_org; |
| 773 return 2; | 722 return 2; |
| 774 } | 723 } |
| (...skipping 11 matching lines...) Expand all Loading... |
| 786 } break; | 735 } break; |
| 787 #endif | 736 #endif |
| 788 #ifdef GIF_SUPPORT_PLAIN_TEXT_EXTENSION | 737 #ifdef GIF_SUPPORT_PLAIN_TEXT_EXTENSION |
| 789 case GIF_D_STATUS_EXT_PTE: { | 738 case GIF_D_STATUS_EXT_PTE: { |
| 790 ASSERT(sizeof(GifPTE) == 13); | 739 ASSERT(sizeof(GifPTE) == 13); |
| 791 GifPTE* gif_pte_ptr = NULL; | 740 GifPTE* gif_pte_ptr = NULL; |
| 792 if (_gif_read_data(gif_ptr, (uint8_t**)&gif_pte_ptr, 13) == NULL) { | 741 if (_gif_read_data(gif_ptr, (uint8_t**)&gif_pte_ptr, 13) == NULL) { |
| 793 return 2; | 742 return 2; |
| 794 } | 743 } |
| 795 GifPlainText* gif_pt_ptr = FX_Alloc(GifPlainText, 1); | 744 GifPlainText* gif_pt_ptr = FX_Alloc(GifPlainText, 1); |
| 796 GIF_PTR_NOT_NULL(gif_pt_ptr, gif_ptr); | |
| 797 FXSYS_memset(gif_pt_ptr, 0, sizeof(GifPlainText)); | 745 FXSYS_memset(gif_pt_ptr, 0, sizeof(GifPlainText)); |
| 798 _gif_takeover_gce_ptr(gif_ptr, &gif_pt_ptr->gce_ptr); | 746 _gif_takeover_gce_ptr(gif_ptr, &gif_pt_ptr->gce_ptr); |
| 799 gif_pt_ptr->pte_ptr = (GifPTE*)FX_Alloc(uint8_t, sizeof(GifPTE)); | 747 gif_pt_ptr->pte_ptr = (GifPTE*)FX_Alloc(uint8_t, sizeof(GifPTE)); |
| 800 GIF_PTR_NOT_NULL(gif_pt_ptr->pte_ptr, gif_ptr); | |
| 801 gif_pt_ptr->string_ptr = new CFX_ByteString; | 748 gif_pt_ptr->string_ptr = new CFX_ByteString; |
| 802 GIF_PTR_NOT_NULL(gif_pt_ptr->string_ptr, gif_ptr); | |
| 803 gif_pt_ptr->pte_ptr->block_size = gif_pte_ptr->block_size; | 749 gif_pt_ptr->pte_ptr->block_size = gif_pte_ptr->block_size; |
| 804 gif_pt_ptr->pte_ptr->grid_left = | 750 gif_pt_ptr->pte_ptr->grid_left = |
| 805 _GetWord_LSBFirst((uint8_t*)&gif_pte_ptr->grid_left); | 751 _GetWord_LSBFirst((uint8_t*)&gif_pte_ptr->grid_left); |
| 806 gif_pt_ptr->pte_ptr->grid_top = | 752 gif_pt_ptr->pte_ptr->grid_top = |
| 807 _GetWord_LSBFirst((uint8_t*)&gif_pte_ptr->grid_top); | 753 _GetWord_LSBFirst((uint8_t*)&gif_pte_ptr->grid_top); |
| 808 gif_pt_ptr->pte_ptr->grid_width = | 754 gif_pt_ptr->pte_ptr->grid_width = |
| 809 _GetWord_LSBFirst((uint8_t*)&gif_pte_ptr->grid_width); | 755 _GetWord_LSBFirst((uint8_t*)&gif_pte_ptr->grid_width); |
| 810 gif_pt_ptr->pte_ptr->grid_height = | 756 gif_pt_ptr->pte_ptr->grid_height = |
| 811 _GetWord_LSBFirst((uint8_t*)&gif_pte_ptr->grid_height); | 757 _GetWord_LSBFirst((uint8_t*)&gif_pte_ptr->grid_height); |
| 812 gif_pt_ptr->pte_ptr->char_width = gif_pte_ptr->char_width; | 758 gif_pt_ptr->pte_ptr->char_width = gif_pte_ptr->char_width; |
| 813 gif_pt_ptr->pte_ptr->char_height = gif_pte_ptr->char_height; | 759 gif_pt_ptr->pte_ptr->char_height = gif_pte_ptr->char_height; |
| 814 gif_pt_ptr->pte_ptr->fc_index = gif_pte_ptr->fc_index; | 760 gif_pt_ptr->pte_ptr->fc_index = gif_pte_ptr->fc_index; |
| 815 gif_pt_ptr->pte_ptr->bc_index = gif_pte_ptr->bc_index; | 761 gif_pt_ptr->pte_ptr->bc_index = gif_pte_ptr->bc_index; |
| 816 if (_gif_read_data(gif_ptr, &data_size_ptr, 1) == NULL) { | 762 if (_gif_read_data(gif_ptr, &data_size_ptr, 1) == NULL) { |
| 817 gif_ptr->skip_size = skip_size_org; | 763 gif_ptr->skip_size = skip_size_org; |
| 818 if (gif_pt_ptr != NULL) { | 764 if (gif_pt_ptr) { |
| 819 if (gif_pt_ptr->gce_ptr != NULL) { | 765 FX_Free(gif_pt_ptr->gce_ptr); |
| 820 FX_Free(gif_pt_ptr->gce_ptr); | 766 FX_Free(gif_pt_ptr->pte_ptr); |
| 821 } | 767 delete gif_pt_ptr->string_ptr; |
| 822 if (gif_pt_ptr->pte_ptr != NULL) { | |
| 823 FX_Free(gif_pt_ptr->pte_ptr); | |
| 824 } | |
| 825 if (gif_pt_ptr->string_ptr != NULL) { | |
| 826 delete gif_pt_ptr->string_ptr; | |
| 827 } | |
| 828 FX_Free(gif_pt_ptr); | 768 FX_Free(gif_pt_ptr); |
| 829 } | 769 } |
| 830 return 2; | 770 return 2; |
| 831 } | 771 } |
| 832 while (*data_size_ptr != GIF_BLOCK_TERMINAL) { | 772 while (*data_size_ptr != GIF_BLOCK_TERMINAL) { |
| 833 uint8_t data_size = *data_size_ptr; | 773 uint8_t data_size = *data_size_ptr; |
| 834 if (_gif_read_data(gif_ptr, &data_ptr, *data_size_ptr) == NULL || | 774 if (_gif_read_data(gif_ptr, &data_ptr, *data_size_ptr) == NULL || |
| 835 _gif_read_data(gif_ptr, &data_size_ptr, 1) == NULL) { | 775 _gif_read_data(gif_ptr, &data_size_ptr, 1) == NULL) { |
| 836 gif_ptr->skip_size = skip_size_org; | 776 gif_ptr->skip_size = skip_size_org; |
| 837 if (gif_pt_ptr != NULL) { | 777 if (gif_pt_ptr) { |
| 838 if (gif_pt_ptr->gce_ptr != NULL) { | 778 FX_Free(gif_pt_ptr->gce_ptr); |
| 839 FX_Free(gif_pt_ptr->gce_ptr); | 779 FX_Free(gif_pt_ptr->pte_ptr); |
| 840 } | 780 delete gif_pt_ptr->string_ptr; |
| 841 if (gif_pt_ptr->pte_ptr != NULL) { | |
| 842 FX_Free(gif_pt_ptr->pte_ptr); | |
| 843 } | |
| 844 if (gif_pt_ptr->string_ptr != NULL) { | |
| 845 delete gif_pt_ptr->string_ptr; | |
| 846 } | |
| 847 FX_Free(gif_pt_ptr); | 781 FX_Free(gif_pt_ptr); |
| 848 } | 782 } |
| 849 return 2; | 783 return 2; |
| 850 } | 784 } |
| 851 *(gif_pt_ptr->string_ptr) += | 785 *(gif_pt_ptr->string_ptr) += |
| 852 CFX_ByteString((const FX_CHAR*)data_ptr, data_size); | 786 CFX_ByteString((const FX_CHAR*)data_ptr, data_size); |
| 853 } | 787 } |
| 854 gif_ptr->pt_ptr_arr_ptr->Add(gif_pt_ptr); | 788 gif_ptr->pt_ptr_arr_ptr->Add(gif_pt_ptr); |
| 855 } break; | 789 } break; |
| 856 #endif | 790 #endif |
| 857 #ifdef GIF_SUPPORT_GRAPHIC_CONTROL_EXTENSION | 791 #ifdef GIF_SUPPORT_GRAPHIC_CONTROL_EXTENSION |
| 858 case GIF_D_STATUS_EXT_GCE: { | 792 case GIF_D_STATUS_EXT_GCE: { |
| 859 ASSERT(sizeof(GifGCE) == 5); | 793 ASSERT(sizeof(GifGCE) == 5); |
| 860 GifGCE* gif_gce_ptr = NULL; | 794 GifGCE* gif_gce_ptr = NULL; |
| 861 if (_gif_read_data(gif_ptr, (uint8_t**)&gif_gce_ptr, 6) == NULL) { | 795 if (_gif_read_data(gif_ptr, (uint8_t**)&gif_gce_ptr, 6) == NULL) { |
| 862 return 2; | 796 return 2; |
| 863 } | 797 } |
| 864 if (gif_ptr->gce_ptr == NULL) { | 798 if (gif_ptr->gce_ptr == NULL) { |
| 865 gif_ptr->gce_ptr = (GifGCE*)FX_Alloc(uint8_t, sizeof(GifGCE)); | 799 gif_ptr->gce_ptr = (GifGCE*)FX_Alloc(uint8_t, sizeof(GifGCE)); |
| 866 GIF_PTR_NOT_NULL(gif_ptr->gce_ptr, gif_ptr); | |
| 867 } | 800 } |
| 868 gif_ptr->gce_ptr->block_size = gif_gce_ptr->block_size; | 801 gif_ptr->gce_ptr->block_size = gif_gce_ptr->block_size; |
| 869 gif_ptr->gce_ptr->gce_flag = gif_gce_ptr->gce_flag; | 802 gif_ptr->gce_ptr->gce_flag = gif_gce_ptr->gce_flag; |
| 870 gif_ptr->gce_ptr->delay_time = | 803 gif_ptr->gce_ptr->delay_time = |
| 871 _GetWord_LSBFirst((uint8_t*)&gif_gce_ptr->delay_time); | 804 _GetWord_LSBFirst((uint8_t*)&gif_gce_ptr->delay_time); |
| 872 gif_ptr->gce_ptr->trans_index = gif_gce_ptr->trans_index; | 805 gif_ptr->gce_ptr->trans_index = gif_gce_ptr->trans_index; |
| 873 } break; | 806 } break; |
| 874 #endif | 807 #endif |
| 875 default: { | 808 default: { |
| 876 #ifndef GIF_SUPPORT_PLAIN_TEXT_EXTENSION | 809 #ifndef GIF_SUPPORT_PLAIN_TEXT_EXTENSION |
| 810 #ifdef GIF_SUPPORT_GRAPHIC_CONTROL_EXTENSION |
| 877 if (gif_ptr->decode_status == GIF_D_STATUS_EXT_PTE) { | 811 if (gif_ptr->decode_status == GIF_D_STATUS_EXT_PTE) { |
| 878 #ifdef GIF_SUPPORT_GRAPHIC_CONTROL_EXTENSION | 812 FX_Free(gif_ptr->gce_ptr); |
| 879 if (gif_ptr->gce_ptr != NULL) { | 813 gif_ptr->gce_ptr = NULL; |
| 880 FX_Free(gif_ptr->gce_ptr); | 814 } |
| 881 gif_ptr->gce_ptr = NULL; | |
| 882 } | |
| 883 #endif | 815 #endif |
| 884 } | |
| 885 #endif | 816 #endif |
| 886 if (_gif_read_data(gif_ptr, &data_size_ptr, 1) == NULL) { | 817 if (_gif_read_data(gif_ptr, &data_size_ptr, 1) == NULL) { |
| 887 return 2; | 818 return 2; |
| 888 } | 819 } |
| 889 while (*data_size_ptr != GIF_BLOCK_TERMINAL) { | 820 while (*data_size_ptr != GIF_BLOCK_TERMINAL) { |
| 890 if (_gif_read_data(gif_ptr, &data_ptr, *data_size_ptr) == NULL || | 821 if (_gif_read_data(gif_ptr, &data_ptr, *data_size_ptr) == NULL || |
| 891 _gif_read_data(gif_ptr, &data_size_ptr, 1) == NULL) { | 822 _gif_read_data(gif_ptr, &data_size_ptr, 1) == NULL) { |
| 892 gif_ptr->skip_size = skip_size_org; | 823 gif_ptr->skip_size = skip_size_org; |
| 893 return 2; | 824 return 2; |
| 894 } | 825 } |
| 895 } | 826 } |
| 896 } | 827 } |
| 897 } | 828 } |
| 898 _gif_save_decoding_status(gif_ptr, GIF_D_STATUS_SIG); | 829 _gif_save_decoding_status(gif_ptr, GIF_D_STATUS_SIG); |
| 899 return 1; | 830 return 1; |
| 900 } | 831 } |
| 901 int32_t _gif_decode_image_info(gif_decompress_struct_p gif_ptr) { | 832 int32_t _gif_decode_image_info(gif_decompress_struct_p gif_ptr) { |
| 902 if (gif_ptr->width == 0 || gif_ptr->height == 0) { | 833 if (gif_ptr->width == 0 || gif_ptr->height == 0) { |
| 903 _gif_error(gif_ptr, "No Image Header Info"); | 834 _gif_error(gif_ptr, "No Image Header Info"); |
| 904 return 0; | 835 return 0; |
| 905 } | 836 } |
| 906 FX_DWORD skip_size_org = gif_ptr->skip_size; | 837 FX_DWORD skip_size_org = gif_ptr->skip_size; |
| 907 ASSERT(sizeof(GifImageInfo) == 9); | 838 ASSERT(sizeof(GifImageInfo) == 9); |
| 908 GifImageInfo* gif_img_info_ptr = NULL; | 839 GifImageInfo* gif_img_info_ptr = NULL; |
| 909 if (_gif_read_data(gif_ptr, (uint8_t**)&gif_img_info_ptr, 9) == NULL) { | 840 if (_gif_read_data(gif_ptr, (uint8_t**)&gif_img_info_ptr, 9) == NULL) { |
| 910 return 2; | 841 return 2; |
| 911 } | 842 } |
| 912 GifImage* gif_image_ptr = (GifImage*)FX_Alloc(uint8_t, sizeof(GifImage)); | 843 GifImage* gif_image_ptr = (GifImage*)FX_Alloc(uint8_t, sizeof(GifImage)); |
| 913 GIF_PTR_NOT_NULL(gif_image_ptr, gif_ptr); | |
| 914 FXSYS_memset(gif_image_ptr, 0, sizeof(GifImage)); | 844 FXSYS_memset(gif_image_ptr, 0, sizeof(GifImage)); |
| 915 gif_image_ptr->image_info_ptr = | 845 gif_image_ptr->image_info_ptr = |
| 916 (GifImageInfo*)FX_Alloc(uint8_t, sizeof(GifImageInfo)); | 846 (GifImageInfo*)FX_Alloc(uint8_t, sizeof(GifImageInfo)); |
| 917 GIF_PTR_NOT_NULL(gif_image_ptr->image_info_ptr, gif_ptr); | |
| 918 gif_image_ptr->image_info_ptr->left = | 847 gif_image_ptr->image_info_ptr->left = |
| 919 _GetWord_LSBFirst((uint8_t*)&gif_img_info_ptr->left); | 848 _GetWord_LSBFirst((uint8_t*)&gif_img_info_ptr->left); |
| 920 gif_image_ptr->image_info_ptr->top = | 849 gif_image_ptr->image_info_ptr->top = |
| 921 _GetWord_LSBFirst((uint8_t*)&gif_img_info_ptr->top); | 850 _GetWord_LSBFirst((uint8_t*)&gif_img_info_ptr->top); |
| 922 gif_image_ptr->image_info_ptr->width = | 851 gif_image_ptr->image_info_ptr->width = |
| 923 _GetWord_LSBFirst((uint8_t*)&gif_img_info_ptr->width); | 852 _GetWord_LSBFirst((uint8_t*)&gif_img_info_ptr->width); |
| 924 gif_image_ptr->image_info_ptr->height = | 853 gif_image_ptr->image_info_ptr->height = |
| 925 _GetWord_LSBFirst((uint8_t*)&gif_img_info_ptr->height); | 854 _GetWord_LSBFirst((uint8_t*)&gif_img_info_ptr->height); |
| 926 gif_image_ptr->image_info_ptr->local_flag = gif_img_info_ptr->local_flag; | 855 gif_image_ptr->image_info_ptr->local_flag = gif_img_info_ptr->local_flag; |
| 927 if (gif_image_ptr->image_info_ptr->left + | 856 if (gif_image_ptr->image_info_ptr->left + |
| 928 gif_image_ptr->image_info_ptr->width > | 857 gif_image_ptr->image_info_ptr->width > |
| 929 gif_ptr->width || | 858 gif_ptr->width || |
| 930 gif_image_ptr->image_info_ptr->top + | 859 gif_image_ptr->image_info_ptr->top + |
| 931 gif_image_ptr->image_info_ptr->height > | 860 gif_image_ptr->image_info_ptr->height > |
| 932 gif_ptr->height) { | 861 gif_ptr->height) { |
| 933 if (gif_image_ptr->image_info_ptr != NULL) { | 862 FX_Free(gif_image_ptr->image_info_ptr); |
| 934 FX_Free(gif_image_ptr->image_info_ptr); | 863 FX_Free(gif_image_ptr->image_row_buf); |
| 935 } | |
| 936 if (gif_image_ptr->image_row_buf != NULL) { | |
| 937 FX_Free(gif_image_ptr->image_row_buf); | |
| 938 } | |
| 939 FX_Free(gif_image_ptr); | 864 FX_Free(gif_image_ptr); |
| 940 _gif_error(gif_ptr, "Image Data Out Of LSD, The File May Be Corrupt"); | 865 _gif_error(gif_ptr, "Image Data Out Of LSD, The File May Be Corrupt"); |
| 941 return 0; | 866 return 0; |
| 942 } | 867 } |
| 943 GifLF* gif_img_info_lf_ptr = (GifLF*)&gif_img_info_ptr->local_flag; | 868 GifLF* gif_img_info_lf_ptr = (GifLF*)&gif_img_info_ptr->local_flag; |
| 944 if (gif_img_info_lf_ptr->local_pal) { | 869 if (gif_img_info_lf_ptr->local_pal) { |
| 945 ASSERT(sizeof(GifPalette) == 3); | 870 ASSERT(sizeof(GifPalette) == 3); |
| 946 int32_t loc_pal_size = (2 << gif_img_info_lf_ptr->pal_bits) * 3; | 871 int32_t loc_pal_size = (2 << gif_img_info_lf_ptr->pal_bits) * 3; |
| 947 uint8_t* loc_pal_ptr = NULL; | 872 uint8_t* loc_pal_ptr = NULL; |
| 948 if (_gif_read_data(gif_ptr, &loc_pal_ptr, loc_pal_size) == NULL) { | 873 if (_gif_read_data(gif_ptr, &loc_pal_ptr, loc_pal_size) == NULL) { |
| 949 gif_ptr->skip_size = skip_size_org; | 874 gif_ptr->skip_size = skip_size_org; |
| 950 if (gif_image_ptr->image_info_ptr != NULL) { | 875 FX_Free(gif_image_ptr->image_info_ptr); |
| 951 FX_Free(gif_image_ptr->image_info_ptr); | 876 FX_Free(gif_image_ptr->image_row_buf); |
| 952 } | |
| 953 if (gif_image_ptr->image_row_buf != NULL) { | |
| 954 FX_Free(gif_image_ptr->image_row_buf); | |
| 955 } | |
| 956 FX_Free(gif_image_ptr); | 877 FX_Free(gif_image_ptr); |
| 957 return 2; | 878 return 2; |
| 958 } | 879 } |
| 959 gif_image_ptr->local_pal_ptr = | 880 gif_image_ptr->local_pal_ptr = |
| 960 (GifPalette*)gif_ptr->_gif_ask_buf_for_pal_fn(gif_ptr, loc_pal_size); | 881 (GifPalette*)gif_ptr->_gif_ask_buf_for_pal_fn(gif_ptr, loc_pal_size); |
| 961 if (gif_image_ptr->local_pal_ptr != NULL) { | 882 if (gif_image_ptr->local_pal_ptr) { |
| 962 FXSYS_memcpy((uint8_t*)gif_image_ptr->local_pal_ptr, loc_pal_ptr, | 883 FXSYS_memcpy((uint8_t*)gif_image_ptr->local_pal_ptr, loc_pal_ptr, |
| 963 loc_pal_size); | 884 loc_pal_size); |
| 964 } | 885 } |
| 965 } | 886 } |
| 966 uint8_t* code_size_ptr = NULL; | 887 uint8_t* code_size_ptr = NULL; |
| 967 if (_gif_read_data(gif_ptr, &code_size_ptr, 1) == NULL) { | 888 if (_gif_read_data(gif_ptr, &code_size_ptr, 1) == NULL) { |
| 968 gif_ptr->skip_size = skip_size_org; | 889 gif_ptr->skip_size = skip_size_org; |
| 969 if (gif_image_ptr->image_info_ptr != NULL) { | 890 FX_Free(gif_image_ptr->image_info_ptr); |
| 970 FX_Free(gif_image_ptr->image_info_ptr); | 891 FX_Free(gif_image_ptr->local_pal_ptr); |
| 971 } | 892 FX_Free(gif_image_ptr->image_row_buf); |
| 972 if (gif_image_ptr->local_pal_ptr != NULL) { | |
| 973 FX_Free(gif_image_ptr->local_pal_ptr); | |
| 974 } | |
| 975 if (gif_image_ptr->image_row_buf != NULL) { | |
| 976 FX_Free(gif_image_ptr->image_row_buf); | |
| 977 } | |
| 978 FX_Free(gif_image_ptr); | 893 FX_Free(gif_image_ptr); |
| 979 return 2; | 894 return 2; |
| 980 } | 895 } |
| 981 gif_image_ptr->image_code_size = *code_size_ptr; | 896 gif_image_ptr->image_code_size = *code_size_ptr; |
| 982 gif_ptr->_gif_record_current_position_fn(gif_ptr, | 897 gif_ptr->_gif_record_current_position_fn(gif_ptr, |
| 983 &gif_image_ptr->image_data_pos); | 898 &gif_image_ptr->image_data_pos); |
| 984 gif_image_ptr->image_data_pos += gif_ptr->skip_size; | 899 gif_image_ptr->image_data_pos += gif_ptr->skip_size; |
| 985 _gif_takeover_gce_ptr(gif_ptr, &gif_image_ptr->image_gce_ptr); | 900 _gif_takeover_gce_ptr(gif_ptr, &gif_image_ptr->image_gce_ptr); |
| 986 gif_ptr->img_ptr_arr_ptr->Add(gif_image_ptr); | 901 gif_ptr->img_ptr_arr_ptr->Add(gif_image_ptr); |
| 987 _gif_save_decoding_status(gif_ptr, GIF_D_STATUS_IMG_DATA); | 902 _gif_save_decoding_status(gif_ptr, GIF_D_STATUS_IMG_DATA); |
| 988 return 1; | 903 return 1; |
| 989 } | 904 } |
| 990 int32_t _gif_load_frame(gif_decompress_struct_p gif_ptr, int32_t frame_num) { | 905 int32_t _gif_load_frame(gif_decompress_struct_p gif_ptr, int32_t frame_num) { |
| 991 if (gif_ptr == NULL || frame_num < 0 || | 906 if (gif_ptr == NULL || frame_num < 0 || |
| 992 frame_num >= gif_ptr->img_ptr_arr_ptr->GetSize()) { | 907 frame_num >= gif_ptr->img_ptr_arr_ptr->GetSize()) { |
| 993 return 0; | 908 return 0; |
| 994 } | 909 } |
| 995 uint8_t* data_size_ptr = NULL; | 910 uint8_t* data_size_ptr = NULL; |
| 996 uint8_t* data_ptr = NULL; | 911 uint8_t* data_ptr = NULL; |
| 997 FX_DWORD skip_size_org = gif_ptr->skip_size; | 912 FX_DWORD skip_size_org = gif_ptr->skip_size; |
| 998 GifImage* gif_image_ptr = gif_ptr->img_ptr_arr_ptr->GetAt(frame_num); | 913 GifImage* gif_image_ptr = gif_ptr->img_ptr_arr_ptr->GetAt(frame_num); |
| 999 FX_DWORD gif_img_row_bytes = gif_image_ptr->image_info_ptr->width; | 914 FX_DWORD gif_img_row_bytes = gif_image_ptr->image_info_ptr->width; |
| 1000 if (gif_ptr->decode_status == GIF_D_STATUS_TAIL) { | 915 if (gif_ptr->decode_status == GIF_D_STATUS_TAIL) { |
| 1001 if (gif_image_ptr->image_row_buf) { | 916 if (gif_image_ptr->image_row_buf) { |
| 1002 FX_Free(gif_image_ptr->image_row_buf); | 917 FX_Free(gif_image_ptr->image_row_buf); |
| 1003 gif_image_ptr->image_row_buf = NULL; | 918 gif_image_ptr->image_row_buf = NULL; |
| 1004 } | 919 } |
| 1005 gif_image_ptr->image_row_buf = FX_Alloc(uint8_t, gif_img_row_bytes); | 920 gif_image_ptr->image_row_buf = FX_Alloc(uint8_t, gif_img_row_bytes); |
| 1006 GIF_PTR_NOT_NULL(gif_image_ptr->image_row_buf, gif_ptr); | |
| 1007 GifGCE* gif_img_gce_ptr = gif_image_ptr->image_gce_ptr; | 921 GifGCE* gif_img_gce_ptr = gif_image_ptr->image_gce_ptr; |
| 1008 int32_t loc_pal_num = | 922 int32_t loc_pal_num = |
| 1009 ((GifLF*)&gif_image_ptr->image_info_ptr->local_flag)->local_pal | 923 ((GifLF*)&gif_image_ptr->image_info_ptr->local_flag)->local_pal |
| 1010 ? (2 << ((GifLF*)&gif_image_ptr->image_info_ptr->local_flag) | 924 ? (2 << ((GifLF*)&gif_image_ptr->image_info_ptr->local_flag) |
| 1011 ->pal_bits) | 925 ->pal_bits) |
| 1012 : 0; | 926 : 0; |
| 1013 gif_ptr->avail_in = 0; | 927 gif_ptr->avail_in = 0; |
| 1014 if (gif_img_gce_ptr == NULL) { | 928 if (gif_img_gce_ptr == NULL) { |
| 1015 FX_BOOL bRes = gif_ptr->_gif_get_record_position_fn( | 929 FX_BOOL bRes = gif_ptr->_gif_get_record_position_fn( |
| 1016 gif_ptr, gif_image_ptr->image_data_pos, | 930 gif_ptr, gif_image_ptr->image_data_pos, |
| (...skipping 30 matching lines...) Expand all Loading... |
| 1047 ->interlace); | 961 ->interlace); |
| 1048 if (!bRes) { | 962 if (!bRes) { |
| 1049 FX_Free(gif_image_ptr->image_row_buf); | 963 FX_Free(gif_image_ptr->image_row_buf); |
| 1050 gif_image_ptr->image_row_buf = NULL; | 964 gif_image_ptr->image_row_buf = NULL; |
| 1051 _gif_error(gif_ptr, "Error Read Record Position Data"); | 965 _gif_error(gif_ptr, "Error Read Record Position Data"); |
| 1052 return 0; | 966 return 0; |
| 1053 } | 967 } |
| 1054 } | 968 } |
| 1055 if (gif_ptr->img_decoder_ptr == NULL) { | 969 if (gif_ptr->img_decoder_ptr == NULL) { |
| 1056 gif_ptr->img_decoder_ptr = new CGifLZWDecoder(gif_ptr->err_ptr); | 970 gif_ptr->img_decoder_ptr = new CGifLZWDecoder(gif_ptr->err_ptr); |
| 1057 GIF_PTR_NOT_NULL(gif_ptr->img_decoder_ptr, gif_ptr); | |
| 1058 } | 971 } |
| 1059 gif_ptr->img_decoder_ptr->InitTable(gif_image_ptr->image_code_size); | 972 gif_ptr->img_decoder_ptr->InitTable(gif_image_ptr->image_code_size); |
| 1060 gif_ptr->img_row_offset = 0; | 973 gif_ptr->img_row_offset = 0; |
| 1061 gif_ptr->img_row_avail_size = 0; | 974 gif_ptr->img_row_avail_size = 0; |
| 1062 gif_ptr->img_pass_num = 0; | 975 gif_ptr->img_pass_num = 0; |
| 1063 gif_image_ptr->image_row_num = 0; | 976 gif_image_ptr->image_row_num = 0; |
| 1064 _gif_save_decoding_status(gif_ptr, GIF_D_STATUS_IMG_DATA); | 977 _gif_save_decoding_status(gif_ptr, GIF_D_STATUS_IMG_DATA); |
| 1065 } | 978 } |
| 1066 CGifLZWDecoder* img_decoder_ptr = gif_ptr->img_decoder_ptr; | 979 CGifLZWDecoder* img_decoder_ptr = gif_ptr->img_decoder_ptr; |
| 1067 if (gif_ptr->decode_status == GIF_D_STATUS_IMG_DATA) { | 980 if (gif_ptr->decode_status == GIF_D_STATUS_IMG_DATA) { |
| (...skipping 104 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1172 } | 1085 } |
| 1173 void _gif_input_buffer(gif_decompress_struct_p gif_ptr, | 1086 void _gif_input_buffer(gif_decompress_struct_p gif_ptr, |
| 1174 uint8_t* src_buf, | 1087 uint8_t* src_buf, |
| 1175 FX_DWORD src_size) { | 1088 FX_DWORD src_size) { |
| 1176 gif_ptr->next_in = src_buf; | 1089 gif_ptr->next_in = src_buf; |
| 1177 gif_ptr->avail_in = src_size; | 1090 gif_ptr->avail_in = src_size; |
| 1178 gif_ptr->skip_size = 0; | 1091 gif_ptr->skip_size = 0; |
| 1179 } | 1092 } |
| 1180 FX_DWORD _gif_get_avail_input(gif_decompress_struct_p gif_ptr, | 1093 FX_DWORD _gif_get_avail_input(gif_decompress_struct_p gif_ptr, |
| 1181 uint8_t** avial_buf_ptr) { | 1094 uint8_t** avial_buf_ptr) { |
| 1182 if (avial_buf_ptr != NULL) { | 1095 if (avial_buf_ptr) { |
| 1183 *avial_buf_ptr = NULL; | 1096 *avial_buf_ptr = NULL; |
| 1184 if (gif_ptr->avail_in > 0) { | 1097 if (gif_ptr->avail_in > 0) { |
| 1185 *avial_buf_ptr = gif_ptr->next_in; | 1098 *avial_buf_ptr = gif_ptr->next_in; |
| 1186 } | 1099 } |
| 1187 } | 1100 } |
| 1188 return gif_ptr->avail_in; | 1101 return gif_ptr->avail_in; |
| 1189 } | 1102 } |
| 1190 int32_t _gif_get_frame_num(gif_decompress_struct_p gif_ptr) { | 1103 int32_t _gif_get_frame_num(gif_decompress_struct_p gif_ptr) { |
| 1191 return gif_ptr->img_ptr_arr_ptr->GetSize(); | 1104 return gif_ptr->img_ptr_arr_ptr->GetSize(); |
| 1192 } | 1105 } |
| (...skipping 224 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1417 gif_ptr->cur_offset = cur_offset; | 1330 gif_ptr->cur_offset = cur_offset; |
| 1418 res = FALSE; | 1331 res = FALSE; |
| 1419 } | 1332 } |
| 1420 dst_len = gif_ptr->cur_offset; | 1333 dst_len = gif_ptr->cur_offset; |
| 1421 dst_buf[dst_len - 1] = GIF_SIG_TRAILER; | 1334 dst_buf[dst_len - 1] = GIF_SIG_TRAILER; |
| 1422 if (res) { | 1335 if (res) { |
| 1423 gif_ptr->frames++; | 1336 gif_ptr->frames++; |
| 1424 } | 1337 } |
| 1425 return res; | 1338 return res; |
| 1426 } | 1339 } |
| OLD | NEW |