Index: core/src/fxcodec/lgif/fx_gif.h |
diff --git a/core/src/fxcodec/lgif/fx_gif.h b/core/src/fxcodec/lgif/fx_gif.h |
index 8b2acc86aec99cdb28ae35d54f2294000e4e70da..3b4ec0f0e6c52ad478cf745930cb6cc46829e2e3 100644 |
--- a/core/src/fxcodec/lgif/fx_gif.h |
+++ b/core/src/fxcodec/lgif/fx_gif.h |
@@ -1,332 +1,332 @@ |
-// Copyright 2014 PDFium Authors. All rights reserved. |
-// Use of this source code is governed by a BSD-style license that can be |
-// found in the LICENSE file. |
- |
-// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com |
- |
-#include <setjmp.h> |
- |
-#include "core/include/fxcrt/fx_basic.h" |
- |
-extern FX_WORD _GetWord_LSBFirst(uint8_t* p); |
-extern void _SetWord_LSBFirst(uint8_t* p, FX_WORD v); |
-extern void _BpcConvert(const uint8_t* src_buf, |
- FX_DWORD src_len, |
- int32_t src_bpc, |
- int32_t dst_bpc, |
- uint8_t*& dst_buf, |
- FX_DWORD& dst_len); |
-#define GIF_SUPPORT_COMMENT_EXTENSION |
-#define GIF_SUPPORT_GRAPHIC_CONTROL_EXTENSION |
-#define GIF_SUPPORT_PLAIN_TEXT_EXTENSION |
-#define GIF_SIGNATURE "GIF" |
-#define GIF_SIG_EXTENSION 0x21 |
-#define GIF_SIG_IMAGE 0x2C |
-#define GIF_SIG_TRAILER 0x3B |
-#define GIF_BLOCK_GCE 0xF9 |
-#define GIF_BLOCK_PTE 0x01 |
-#define GIF_BLOCK_CE 0xFE |
-#define GIF_BLOCK_AE 0xFF |
-#define GIF_BLOCK_TERMINAL 0x00 |
-#define GIF_MAX_LZW_CODE 4096 |
-#define GIF_DATA_BLOCK 255 |
-#define GIF_MAX_ERROR_SIZE 256 |
-#define GIF_D_STATUS_SIG 0x01 |
-#define GIF_D_STATUS_TAIL 0x02 |
-#define GIF_D_STATUS_EXT 0x03 |
-#define GIF_D_STATUS_EXT_AE 0x04 |
-#define GIF_D_STATUS_EXT_CE 0x05 |
-#define GIF_D_STATUS_EXT_GCE 0x06 |
-#define GIF_D_STATUS_EXT_PTE 0x07 |
-#define GIF_D_STATUS_EXT_UNE 0x08 |
-#define GIF_D_STATUS_IMG_INFO 0x09 |
-#define GIF_D_STATUS_IMG_DATA 0x0A |
-#pragma pack(1) |
-typedef struct tagGifGF { |
- uint8_t pal_bits : 3; |
- uint8_t sort_flag : 1; |
- uint8_t color_resolution : 3; |
- uint8_t global_pal : 1; |
-} GifGF; |
-typedef struct tagGifLF { |
- uint8_t pal_bits : 3; |
- uint8_t reserved : 2; |
- uint8_t sort_flag : 1; |
- uint8_t interlace : 1; |
- uint8_t local_pal : 1; |
-} GifLF; |
-typedef struct tagGifHeader { |
- char signature[3]; |
- char version[3]; |
-} GifHeader; |
-typedef struct tagGifLSD { |
- FX_WORD width; |
- FX_WORD height; |
- uint8_t global_flag; |
- uint8_t bc_index; |
- uint8_t pixel_aspect; |
-} GifLSD; |
-typedef struct tagGifImageInfo { |
- FX_WORD left; |
- FX_WORD top; |
- FX_WORD width; |
- FX_WORD height; |
- |
- uint8_t local_flag; |
-} GifImageInfo; |
-typedef struct tagGifCEF { |
- uint8_t transparency : 1; |
- uint8_t user_input : 1; |
- uint8_t disposal_method : 3; |
- uint8_t reserved : 3; |
-} GifCEF; |
-typedef struct tagGifGCE { |
- uint8_t block_size; |
- uint8_t gce_flag; |
- FX_WORD delay_time; |
- uint8_t trans_index; |
-} GifGCE; |
-typedef struct tagGifPTE { |
- uint8_t block_size; |
- FX_WORD grid_left; |
- FX_WORD grid_top; |
- FX_WORD grid_width; |
- FX_WORD grid_height; |
- |
- uint8_t char_width; |
- uint8_t char_height; |
- |
- uint8_t fc_index; |
- uint8_t bc_index; |
-} GifPTE; |
-typedef struct tagGifAE { |
- uint8_t block_size; |
- uint8_t app_identify[8]; |
- uint8_t app_authentication[3]; |
-} GifAE; |
-typedef struct tagGifPalette { uint8_t r, g, b; } GifPalette; |
-#pragma pack() |
-typedef struct tagGifImage { |
- GifGCE* image_gce_ptr; |
- GifPalette* local_pal_ptr; |
- GifImageInfo* image_info_ptr; |
- uint8_t image_code_size; |
- FX_DWORD image_data_pos; |
- uint8_t* image_row_buf; |
- int32_t image_row_num; |
-} GifImage; |
-typedef struct tagGifPlainText { |
- GifGCE* gce_ptr; |
- GifPTE* pte_ptr; |
- CFX_ByteString* string_ptr; |
-} GifPlainText; |
-class CGifLZWDecoder { |
- public: |
- struct tag_Table { |
- FX_WORD prefix; |
- uint8_t suffix; |
- }; |
- CGifLZWDecoder(FX_CHAR* error_ptr = NULL) { err_msg_ptr = error_ptr; } |
- void InitTable(uint8_t code_len); |
- |
- int32_t Decode(uint8_t* des_buf, FX_DWORD& des_size); |
- |
- void Input(uint8_t* src_buf, FX_DWORD src_size); |
- FX_DWORD GetAvailInput(); |
- |
- private: |
- void ClearTable(); |
- void AddCode(FX_WORD prefix_code, uint8_t append_char); |
- void DecodeString(FX_WORD code); |
- uint8_t code_size; |
- uint8_t code_size_cur; |
- FX_WORD code_clear; |
- FX_WORD code_end; |
- FX_WORD code_next; |
- uint8_t code_first; |
- uint8_t stack[GIF_MAX_LZW_CODE]; |
- FX_WORD stack_size; |
- tag_Table code_table[GIF_MAX_LZW_CODE]; |
- FX_WORD code_old; |
- |
- uint8_t* next_in; |
- FX_DWORD avail_in; |
- |
- uint8_t bits_left; |
- FX_DWORD code_store; |
- |
- FX_CHAR* err_msg_ptr; |
-}; |
-class CGifLZWEncoder { |
- public: |
- struct tag_Table { |
- FX_WORD prefix; |
- uint8_t suffix; |
- }; |
- CGifLZWEncoder(); |
- ~CGifLZWEncoder(); |
- void Start(uint8_t code_len, |
- const uint8_t* src_buf, |
- uint8_t*& dst_buf, |
- FX_DWORD& offset); |
- FX_BOOL Encode(const uint8_t* src_buf, |
- FX_DWORD src_len, |
- uint8_t*& dst_buf, |
- FX_DWORD& dst_len, |
- FX_DWORD& offset); |
- void Finish(uint8_t*& dst_buf, FX_DWORD& dst_len, FX_DWORD& offset); |
- |
- private: |
- void ClearTable(); |
- FX_BOOL LookUpInTable(const uint8_t* buf, |
- FX_DWORD& offset, |
- uint8_t& bit_offset); |
- void EncodeString(FX_DWORD index, |
- uint8_t*& dst_buf, |
- FX_DWORD& dst_len, |
- FX_DWORD& offset); |
- void WriteBlock(uint8_t*& dst_buf, FX_DWORD& dst_len, FX_DWORD& offset); |
- jmp_buf jmp; |
- FX_DWORD src_offset; |
- uint8_t src_bit_offset; |
- uint8_t src_bit_cut; |
- FX_DWORD src_bit_num; |
- uint8_t code_size; |
- FX_WORD code_clear; |
- FX_WORD code_end; |
- FX_WORD index_num; |
- uint8_t bit_offset; |
- uint8_t index_bit_cur; |
- uint8_t index_buf[GIF_DATA_BLOCK]; |
- uint8_t index_buf_len; |
- tag_Table code_table[GIF_MAX_LZW_CODE]; |
- FX_WORD table_cur; |
-}; |
-typedef struct tag_gif_decompress_struct gif_decompress_struct; |
-typedef gif_decompress_struct* gif_decompress_struct_p; |
-typedef gif_decompress_struct_p* gif_decompress_struct_pp; |
-static int32_t s_gif_interlace_step[4] = {8, 8, 4, 2}; |
-struct tag_gif_decompress_struct { |
- jmp_buf jmpbuf; |
- FX_CHAR* err_ptr; |
- void (*_gif_error_fn)(gif_decompress_struct_p gif_ptr, |
- const FX_CHAR* err_msg); |
- void* context_ptr; |
- int width; |
- int height; |
- GifPalette* global_pal_ptr; |
- int32_t global_pal_num; |
- uint8_t global_sort_flag; |
- uint8_t global_color_resolution; |
- |
- uint8_t bc_index; |
- uint8_t pixel_aspect; |
- CGifLZWDecoder* img_decoder_ptr; |
- FX_DWORD img_row_offset; |
- FX_DWORD img_row_avail_size; |
- uint8_t img_pass_num; |
- CFX_ArrayTemplate<GifImage*>* img_ptr_arr_ptr; |
- uint8_t* (*_gif_ask_buf_for_pal_fn)(gif_decompress_struct_p gif_ptr, |
- int32_t pal_size); |
- uint8_t* next_in; |
- FX_DWORD avail_in; |
- int32_t decode_status; |
- FX_DWORD skip_size; |
- void (*_gif_record_current_position_fn)(gif_decompress_struct_p gif_ptr, |
- FX_DWORD* cur_pos_ptr); |
- void (*_gif_get_row_fn)(gif_decompress_struct_p gif_ptr, |
- int32_t row_num, |
- uint8_t* row_buf); |
- FX_BOOL (*_gif_get_record_position_fn)(gif_decompress_struct_p gif_ptr, FX_DWORD cur_pos, |
- int32_t left, int32_t top, int32_t width, int32_t height, |
- int32_t pal_num, void* pal_ptr, |
- int32_t delay_time, FX_BOOL user_input, |
- int32_t trans_index, int32_t disposal_method, FX_BOOL interlace); |
-#ifdef GIF_SUPPORT_APPLICATION_EXTENSION |
- uint8_t app_identify[8]; |
- uint8_t app_authentication[3]; |
- FX_DWORD app_data_size; |
- uint8_t* app_data; |
-#endif |
-#ifdef GIF_SUPPORT_COMMENT_EXTENSION |
- CFX_ByteString* cmt_data_ptr; |
-#endif |
-#ifdef GIF_SUPPORT_GRAPHIC_CONTROL_EXTENSION |
- GifGCE* gce_ptr; |
-#endif |
-#ifdef GIF_SUPPORT_PLAIN_TEXT_EXTENSION |
- CFX_ArrayTemplate<GifPlainText*>* pt_ptr_arr_ptr; |
-#endif |
-}; |
-typedef struct tag_gif_compress_struct gif_compress_struct; |
-typedef gif_compress_struct* gif_compress_struct_p; |
-typedef gif_compress_struct_p* gif_compress_struct_pp; |
-struct tag_gif_compress_struct { |
- const uint8_t* src_buf; |
- FX_DWORD src_pitch; |
- FX_DWORD src_width; |
- FX_DWORD src_row; |
- FX_DWORD cur_offset; |
- FX_DWORD frames; |
- GifHeader* header_ptr; |
- GifLSD* lsd_ptr; |
- GifPalette* global_pal; |
- FX_WORD gpal_num; |
- GifPalette* local_pal; |
- FX_WORD lpal_num; |
- GifImageInfo* image_info_ptr; |
- CGifLZWEncoder* img_encoder_ptr; |
-#ifdef GIF_SUPPORT_APPLICATION_EXTENSION |
- uint8_t app_identify[8]; |
- uint8_t app_authentication[3]; |
- FX_DWORD app_data_size; |
- uint8_t* app_data; |
-#endif |
- |
-#ifdef GIF_SUPPORT_COMMENT_EXTENSION |
- uint8_t* cmt_data_ptr; |
- FX_DWORD cmt_data_len; |
-#endif |
- |
-#ifdef GIF_SUPPORT_GRAPHIC_CONTROL_EXTENSION |
- GifGCE* gce_ptr; |
-#endif |
- |
-#ifdef GIF_SUPPORT_PLAIN_TEXT_EXTENSION |
- GifPTE* pte_ptr; |
- const uint8_t* pte_data_ptr; |
- FX_DWORD pte_data_len; |
-#endif |
-}; |
-void _gif_error(gif_decompress_struct_p gif_ptr, const FX_CHAR* err_msg); |
-void _gif_warn(gif_decompress_struct_p gif_ptr, const FX_CHAR* err_msg); |
-gif_decompress_struct_p _gif_create_decompress(); |
-void _gif_destroy_decompress(gif_decompress_struct_pp gif_ptr_ptr); |
-gif_compress_struct_p _gif_create_compress(); |
-void _gif_destroy_compress(gif_compress_struct_pp gif_ptr_ptr); |
-int32_t _gif_read_header(gif_decompress_struct_p gif_ptr); |
-int32_t _gif_get_frame(gif_decompress_struct_p gif_ptr); |
-int32_t _gif_get_frame_num(gif_decompress_struct_p gif_ptr); |
-int32_t _gif_decode_extension(gif_decompress_struct_p gif_ptr); |
-int32_t _gif_decode_image_info(gif_decompress_struct_p gif_ptr); |
-void _gif_takeover_gce_ptr(gif_decompress_struct_p gif_ptr, |
- GifGCE** gce_ptr_ptr); |
-int32_t _gif_load_frame(gif_decompress_struct_p gif_ptr, int32_t frame_num); |
-uint8_t* _gif_read_data(gif_decompress_struct_p gif_ptr, |
- uint8_t** des_buf_pp, |
- FX_DWORD data_size); |
-void _gif_save_decoding_status(gif_decompress_struct_p gif_ptr, int32_t status); |
-void _gif_input_buffer(gif_decompress_struct_p gif_ptr, |
- uint8_t* src_buf, |
- FX_DWORD src_size); |
-FX_DWORD _gif_get_avail_input(gif_decompress_struct_p gif_ptr, |
- uint8_t** avial_buf_ptr); |
-void interlace_buf(const uint8_t* buf, FX_DWORD width, FX_DWORD height); |
-FX_BOOL _gif_encode(gif_compress_struct_p gif_ptr, |
- uint8_t*& dst_buf, |
- FX_DWORD& dst_len); |
-#define GIF_PTR_NOT_NULL(ptr, gif_ptr) \ |
- if (ptr == NULL) { \ |
- _gif_error(gif_ptr, "Out Of Memory"); \ |
- return 0; \ |
- } |
+// Copyright 2014 PDFium Authors. All rights reserved. |
+// Use of this source code is governed by a BSD-style license that can be |
+// found in the LICENSE file. |
+ |
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com |
+ |
+#include <setjmp.h> |
+ |
+#include "core/include/fxcrt/fx_basic.h" |
+ |
+extern FX_WORD _GetWord_LSBFirst(uint8_t* p); |
+extern void _SetWord_LSBFirst(uint8_t* p, FX_WORD v); |
+extern void _BpcConvert(const uint8_t* src_buf, |
+ FX_DWORD src_len, |
+ int32_t src_bpc, |
+ int32_t dst_bpc, |
+ uint8_t*& dst_buf, |
+ FX_DWORD& dst_len); |
+#define GIF_SUPPORT_COMMENT_EXTENSION |
+#define GIF_SUPPORT_GRAPHIC_CONTROL_EXTENSION |
+#define GIF_SUPPORT_PLAIN_TEXT_EXTENSION |
+#define GIF_SIGNATURE "GIF" |
+#define GIF_SIG_EXTENSION 0x21 |
+#define GIF_SIG_IMAGE 0x2C |
+#define GIF_SIG_TRAILER 0x3B |
+#define GIF_BLOCK_GCE 0xF9 |
+#define GIF_BLOCK_PTE 0x01 |
+#define GIF_BLOCK_CE 0xFE |
+#define GIF_BLOCK_AE 0xFF |
+#define GIF_BLOCK_TERMINAL 0x00 |
+#define GIF_MAX_LZW_CODE 4096 |
+#define GIF_DATA_BLOCK 255 |
+#define GIF_MAX_ERROR_SIZE 256 |
+#define GIF_D_STATUS_SIG 0x01 |
+#define GIF_D_STATUS_TAIL 0x02 |
+#define GIF_D_STATUS_EXT 0x03 |
+#define GIF_D_STATUS_EXT_AE 0x04 |
+#define GIF_D_STATUS_EXT_CE 0x05 |
+#define GIF_D_STATUS_EXT_GCE 0x06 |
+#define GIF_D_STATUS_EXT_PTE 0x07 |
+#define GIF_D_STATUS_EXT_UNE 0x08 |
+#define GIF_D_STATUS_IMG_INFO 0x09 |
+#define GIF_D_STATUS_IMG_DATA 0x0A |
+#pragma pack(1) |
+typedef struct tagGifGF { |
+ uint8_t pal_bits : 3; |
+ uint8_t sort_flag : 1; |
+ uint8_t color_resolution : 3; |
+ uint8_t global_pal : 1; |
+} GifGF; |
+typedef struct tagGifLF { |
+ uint8_t pal_bits : 3; |
+ uint8_t reserved : 2; |
+ uint8_t sort_flag : 1; |
+ uint8_t interlace : 1; |
+ uint8_t local_pal : 1; |
+} GifLF; |
+typedef struct tagGifHeader { |
+ char signature[3]; |
+ char version[3]; |
+} GifHeader; |
+typedef struct tagGifLSD { |
+ FX_WORD width; |
+ FX_WORD height; |
+ uint8_t global_flag; |
+ uint8_t bc_index; |
+ uint8_t pixel_aspect; |
+} GifLSD; |
+typedef struct tagGifImageInfo { |
+ FX_WORD left; |
+ FX_WORD top; |
+ FX_WORD width; |
+ FX_WORD height; |
+ |
+ uint8_t local_flag; |
+} GifImageInfo; |
+typedef struct tagGifCEF { |
+ uint8_t transparency : 1; |
+ uint8_t user_input : 1; |
+ uint8_t disposal_method : 3; |
+ uint8_t reserved : 3; |
+} GifCEF; |
+typedef struct tagGifGCE { |
+ uint8_t block_size; |
+ uint8_t gce_flag; |
+ FX_WORD delay_time; |
+ uint8_t trans_index; |
+} GifGCE; |
+typedef struct tagGifPTE { |
+ uint8_t block_size; |
+ FX_WORD grid_left; |
+ FX_WORD grid_top; |
+ FX_WORD grid_width; |
+ FX_WORD grid_height; |
+ |
+ uint8_t char_width; |
+ uint8_t char_height; |
+ |
+ uint8_t fc_index; |
+ uint8_t bc_index; |
+} GifPTE; |
+typedef struct tagGifAE { |
+ uint8_t block_size; |
+ uint8_t app_identify[8]; |
+ uint8_t app_authentication[3]; |
+} GifAE; |
+typedef struct tagGifPalette { uint8_t r, g, b; } GifPalette; |
+#pragma pack() |
+typedef struct tagGifImage { |
+ GifGCE* image_gce_ptr; |
+ GifPalette* local_pal_ptr; |
+ GifImageInfo* image_info_ptr; |
+ uint8_t image_code_size; |
+ FX_DWORD image_data_pos; |
+ uint8_t* image_row_buf; |
+ int32_t image_row_num; |
+} GifImage; |
+typedef struct tagGifPlainText { |
+ GifGCE* gce_ptr; |
+ GifPTE* pte_ptr; |
+ CFX_ByteString* string_ptr; |
+} GifPlainText; |
+class CGifLZWDecoder { |
+ public: |
+ struct tag_Table { |
+ FX_WORD prefix; |
+ uint8_t suffix; |
+ }; |
+ CGifLZWDecoder(FX_CHAR* error_ptr = NULL) { err_msg_ptr = error_ptr; } |
+ void InitTable(uint8_t code_len); |
+ |
+ int32_t Decode(uint8_t* des_buf, FX_DWORD& des_size); |
+ |
+ void Input(uint8_t* src_buf, FX_DWORD src_size); |
+ FX_DWORD GetAvailInput(); |
+ |
+ private: |
+ void ClearTable(); |
+ void AddCode(FX_WORD prefix_code, uint8_t append_char); |
+ void DecodeString(FX_WORD code); |
+ uint8_t code_size; |
+ uint8_t code_size_cur; |
+ FX_WORD code_clear; |
+ FX_WORD code_end; |
+ FX_WORD code_next; |
+ uint8_t code_first; |
+ uint8_t stack[GIF_MAX_LZW_CODE]; |
+ FX_WORD stack_size; |
+ tag_Table code_table[GIF_MAX_LZW_CODE]; |
+ FX_WORD code_old; |
+ |
+ uint8_t* next_in; |
+ FX_DWORD avail_in; |
+ |
+ uint8_t bits_left; |
+ FX_DWORD code_store; |
+ |
+ FX_CHAR* err_msg_ptr; |
+}; |
+class CGifLZWEncoder { |
+ public: |
+ struct tag_Table { |
+ FX_WORD prefix; |
+ uint8_t suffix; |
+ }; |
+ CGifLZWEncoder(); |
+ ~CGifLZWEncoder(); |
+ void Start(uint8_t code_len, |
+ const uint8_t* src_buf, |
+ uint8_t*& dst_buf, |
+ FX_DWORD& offset); |
+ FX_BOOL Encode(const uint8_t* src_buf, |
+ FX_DWORD src_len, |
+ uint8_t*& dst_buf, |
+ FX_DWORD& dst_len, |
+ FX_DWORD& offset); |
+ void Finish(uint8_t*& dst_buf, FX_DWORD& dst_len, FX_DWORD& offset); |
+ |
+ private: |
+ void ClearTable(); |
+ FX_BOOL LookUpInTable(const uint8_t* buf, |
+ FX_DWORD& offset, |
+ uint8_t& bit_offset); |
+ void EncodeString(FX_DWORD index, |
+ uint8_t*& dst_buf, |
+ FX_DWORD& dst_len, |
+ FX_DWORD& offset); |
+ void WriteBlock(uint8_t*& dst_buf, FX_DWORD& dst_len, FX_DWORD& offset); |
+ jmp_buf jmp; |
+ FX_DWORD src_offset; |
+ uint8_t src_bit_offset; |
+ uint8_t src_bit_cut; |
+ FX_DWORD src_bit_num; |
+ uint8_t code_size; |
+ FX_WORD code_clear; |
+ FX_WORD code_end; |
+ FX_WORD index_num; |
+ uint8_t bit_offset; |
+ uint8_t index_bit_cur; |
+ uint8_t index_buf[GIF_DATA_BLOCK]; |
+ uint8_t index_buf_len; |
+ tag_Table code_table[GIF_MAX_LZW_CODE]; |
+ FX_WORD table_cur; |
+}; |
+typedef struct tag_gif_decompress_struct gif_decompress_struct; |
+typedef gif_decompress_struct* gif_decompress_struct_p; |
+typedef gif_decompress_struct_p* gif_decompress_struct_pp; |
+static int32_t s_gif_interlace_step[4] = {8, 8, 4, 2}; |
+struct tag_gif_decompress_struct { |
+ jmp_buf jmpbuf; |
+ FX_CHAR* err_ptr; |
+ void (*_gif_error_fn)(gif_decompress_struct_p gif_ptr, |
+ const FX_CHAR* err_msg); |
+ void* context_ptr; |
+ int width; |
+ int height; |
+ GifPalette* global_pal_ptr; |
+ int32_t global_pal_num; |
+ uint8_t global_sort_flag; |
+ uint8_t global_color_resolution; |
+ |
+ uint8_t bc_index; |
+ uint8_t pixel_aspect; |
+ CGifLZWDecoder* img_decoder_ptr; |
+ FX_DWORD img_row_offset; |
+ FX_DWORD img_row_avail_size; |
+ uint8_t img_pass_num; |
+ CFX_ArrayTemplate<GifImage*>* img_ptr_arr_ptr; |
+ uint8_t* (*_gif_ask_buf_for_pal_fn)(gif_decompress_struct_p gif_ptr, |
+ int32_t pal_size); |
+ uint8_t* next_in; |
+ FX_DWORD avail_in; |
+ int32_t decode_status; |
+ FX_DWORD skip_size; |
+ void (*_gif_record_current_position_fn)(gif_decompress_struct_p gif_ptr, |
+ FX_DWORD* cur_pos_ptr); |
+ void (*_gif_get_row_fn)(gif_decompress_struct_p gif_ptr, |
+ int32_t row_num, |
+ uint8_t* row_buf); |
+ FX_BOOL (*_gif_get_record_position_fn)(gif_decompress_struct_p gif_ptr, FX_DWORD cur_pos, |
+ int32_t left, int32_t top, int32_t width, int32_t height, |
+ int32_t pal_num, void* pal_ptr, |
+ int32_t delay_time, FX_BOOL user_input, |
+ int32_t trans_index, int32_t disposal_method, FX_BOOL interlace); |
+#ifdef GIF_SUPPORT_APPLICATION_EXTENSION |
+ uint8_t app_identify[8]; |
+ uint8_t app_authentication[3]; |
+ FX_DWORD app_data_size; |
+ uint8_t* app_data; |
+#endif |
+#ifdef GIF_SUPPORT_COMMENT_EXTENSION |
+ CFX_ByteString* cmt_data_ptr; |
+#endif |
+#ifdef GIF_SUPPORT_GRAPHIC_CONTROL_EXTENSION |
+ GifGCE* gce_ptr; |
+#endif |
+#ifdef GIF_SUPPORT_PLAIN_TEXT_EXTENSION |
+ CFX_ArrayTemplate<GifPlainText*>* pt_ptr_arr_ptr; |
+#endif |
+}; |
+typedef struct tag_gif_compress_struct gif_compress_struct; |
+typedef gif_compress_struct* gif_compress_struct_p; |
+typedef gif_compress_struct_p* gif_compress_struct_pp; |
+struct tag_gif_compress_struct { |
+ const uint8_t* src_buf; |
+ FX_DWORD src_pitch; |
+ FX_DWORD src_width; |
+ FX_DWORD src_row; |
+ FX_DWORD cur_offset; |
+ FX_DWORD frames; |
+ GifHeader* header_ptr; |
+ GifLSD* lsd_ptr; |
+ GifPalette* global_pal; |
+ FX_WORD gpal_num; |
+ GifPalette* local_pal; |
+ FX_WORD lpal_num; |
+ GifImageInfo* image_info_ptr; |
+ CGifLZWEncoder* img_encoder_ptr; |
+#ifdef GIF_SUPPORT_APPLICATION_EXTENSION |
+ uint8_t app_identify[8]; |
+ uint8_t app_authentication[3]; |
+ FX_DWORD app_data_size; |
+ uint8_t* app_data; |
+#endif |
+ |
+#ifdef GIF_SUPPORT_COMMENT_EXTENSION |
+ uint8_t* cmt_data_ptr; |
+ FX_DWORD cmt_data_len; |
+#endif |
+ |
+#ifdef GIF_SUPPORT_GRAPHIC_CONTROL_EXTENSION |
+ GifGCE* gce_ptr; |
+#endif |
+ |
+#ifdef GIF_SUPPORT_PLAIN_TEXT_EXTENSION |
+ GifPTE* pte_ptr; |
+ const uint8_t* pte_data_ptr; |
+ FX_DWORD pte_data_len; |
+#endif |
+}; |
+void _gif_error(gif_decompress_struct_p gif_ptr, const FX_CHAR* err_msg); |
+void _gif_warn(gif_decompress_struct_p gif_ptr, const FX_CHAR* err_msg); |
+gif_decompress_struct_p _gif_create_decompress(); |
+void _gif_destroy_decompress(gif_decompress_struct_pp gif_ptr_ptr); |
+gif_compress_struct_p _gif_create_compress(); |
+void _gif_destroy_compress(gif_compress_struct_pp gif_ptr_ptr); |
+int32_t _gif_read_header(gif_decompress_struct_p gif_ptr); |
+int32_t _gif_get_frame(gif_decompress_struct_p gif_ptr); |
+int32_t _gif_get_frame_num(gif_decompress_struct_p gif_ptr); |
+int32_t _gif_decode_extension(gif_decompress_struct_p gif_ptr); |
+int32_t _gif_decode_image_info(gif_decompress_struct_p gif_ptr); |
+void _gif_takeover_gce_ptr(gif_decompress_struct_p gif_ptr, |
+ GifGCE** gce_ptr_ptr); |
+int32_t _gif_load_frame(gif_decompress_struct_p gif_ptr, int32_t frame_num); |
+uint8_t* _gif_read_data(gif_decompress_struct_p gif_ptr, |
+ uint8_t** des_buf_pp, |
+ FX_DWORD data_size); |
+void _gif_save_decoding_status(gif_decompress_struct_p gif_ptr, int32_t status); |
+void _gif_input_buffer(gif_decompress_struct_p gif_ptr, |
+ uint8_t* src_buf, |
+ FX_DWORD src_size); |
+FX_DWORD _gif_get_avail_input(gif_decompress_struct_p gif_ptr, |
+ uint8_t** avial_buf_ptr); |
+void interlace_buf(const uint8_t* buf, FX_DWORD width, FX_DWORD height); |
+FX_BOOL _gif_encode(gif_compress_struct_p gif_ptr, |
+ uint8_t*& dst_buf, |
+ FX_DWORD& dst_len); |
+#define GIF_PTR_NOT_NULL(ptr, gif_ptr) \ |
+ if (ptr == NULL) { \ |
+ _gif_error(gif_ptr, "Out Of Memory"); \ |
+ return 0; \ |
+ } |