| 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 #ifndef CORE_FXCODEC_LGIF_FX_GIF_H_ | 7 #ifndef CORE_FXCODEC_LGIF_FX_GIF_H_ |
| 8 #define CORE_FXCODEC_LGIF_FX_GIF_H_ | 8 #define CORE_FXCODEC_LGIF_FX_GIF_H_ |
| 9 | 9 |
| 10 #include <setjmp.h> | 10 #include <setjmp.h> |
| (...skipping 85 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 96 uint8_t app_identify[8]; | 96 uint8_t app_identify[8]; |
| 97 uint8_t app_authentication[3]; | 97 uint8_t app_authentication[3]; |
| 98 } GifAE; | 98 } GifAE; |
| 99 typedef struct tagGifPalette { uint8_t r, g, b; } GifPalette; | 99 typedef struct tagGifPalette { uint8_t r, g, b; } GifPalette; |
| 100 #pragma pack() | 100 #pragma pack() |
| 101 typedef struct tagGifImage { | 101 typedef struct tagGifImage { |
| 102 GifGCE* image_gce_ptr; | 102 GifGCE* image_gce_ptr; |
| 103 GifPalette* local_pal_ptr; | 103 GifPalette* local_pal_ptr; |
| 104 GifImageInfo* image_info_ptr; | 104 GifImageInfo* image_info_ptr; |
| 105 uint8_t image_code_size; | 105 uint8_t image_code_size; |
| 106 FX_DWORD image_data_pos; | 106 uint32_t image_data_pos; |
| 107 uint8_t* image_row_buf; | 107 uint8_t* image_row_buf; |
| 108 int32_t image_row_num; | 108 int32_t image_row_num; |
| 109 } GifImage; | 109 } GifImage; |
| 110 typedef struct tagGifPlainText { | 110 typedef struct tagGifPlainText { |
| 111 GifGCE* gce_ptr; | 111 GifGCE* gce_ptr; |
| 112 GifPTE* pte_ptr; | 112 GifPTE* pte_ptr; |
| 113 CFX_ByteString* string_ptr; | 113 CFX_ByteString* string_ptr; |
| 114 } GifPlainText; | 114 } GifPlainText; |
| 115 class CGifLZWDecoder { | 115 class CGifLZWDecoder { |
| 116 public: | 116 public: |
| 117 struct tag_Table { | 117 struct tag_Table { |
| 118 uint16_t prefix; | 118 uint16_t prefix; |
| 119 uint8_t suffix; | 119 uint8_t suffix; |
| 120 }; | 120 }; |
| 121 CGifLZWDecoder(FX_CHAR* error_ptr = NULL) { err_msg_ptr = error_ptr; } | 121 CGifLZWDecoder(FX_CHAR* error_ptr = NULL) { err_msg_ptr = error_ptr; } |
| 122 void InitTable(uint8_t code_len); | 122 void InitTable(uint8_t code_len); |
| 123 | 123 |
| 124 int32_t Decode(uint8_t* des_buf, FX_DWORD& des_size); | 124 int32_t Decode(uint8_t* des_buf, uint32_t& des_size); |
| 125 | 125 |
| 126 void Input(uint8_t* src_buf, FX_DWORD src_size); | 126 void Input(uint8_t* src_buf, uint32_t src_size); |
| 127 FX_DWORD GetAvailInput(); | 127 uint32_t GetAvailInput(); |
| 128 | 128 |
| 129 private: | 129 private: |
| 130 void ClearTable(); | 130 void ClearTable(); |
| 131 void AddCode(uint16_t prefix_code, uint8_t append_char); | 131 void AddCode(uint16_t prefix_code, uint8_t append_char); |
| 132 void DecodeString(uint16_t code); | 132 void DecodeString(uint16_t code); |
| 133 uint8_t code_size; | 133 uint8_t code_size; |
| 134 uint8_t code_size_cur; | 134 uint8_t code_size_cur; |
| 135 uint16_t code_clear; | 135 uint16_t code_clear; |
| 136 uint16_t code_end; | 136 uint16_t code_end; |
| 137 uint16_t code_next; | 137 uint16_t code_next; |
| 138 uint8_t code_first; | 138 uint8_t code_first; |
| 139 uint8_t stack[GIF_MAX_LZW_CODE]; | 139 uint8_t stack[GIF_MAX_LZW_CODE]; |
| 140 uint16_t stack_size; | 140 uint16_t stack_size; |
| 141 tag_Table code_table[GIF_MAX_LZW_CODE]; | 141 tag_Table code_table[GIF_MAX_LZW_CODE]; |
| 142 uint16_t code_old; | 142 uint16_t code_old; |
| 143 | 143 |
| 144 uint8_t* next_in; | 144 uint8_t* next_in; |
| 145 FX_DWORD avail_in; | 145 uint32_t avail_in; |
| 146 | 146 |
| 147 uint8_t bits_left; | 147 uint8_t bits_left; |
| 148 FX_DWORD code_store; | 148 uint32_t code_store; |
| 149 | 149 |
| 150 FX_CHAR* err_msg_ptr; | 150 FX_CHAR* err_msg_ptr; |
| 151 }; | 151 }; |
| 152 class CGifLZWEncoder { | 152 class CGifLZWEncoder { |
| 153 public: | 153 public: |
| 154 struct tag_Table { | 154 struct tag_Table { |
| 155 uint16_t prefix; | 155 uint16_t prefix; |
| 156 uint8_t suffix; | 156 uint8_t suffix; |
| 157 }; | 157 }; |
| 158 CGifLZWEncoder(); | 158 CGifLZWEncoder(); |
| 159 ~CGifLZWEncoder(); | 159 ~CGifLZWEncoder(); |
| 160 void Start(uint8_t code_len, | 160 void Start(uint8_t code_len, |
| 161 const uint8_t* src_buf, | 161 const uint8_t* src_buf, |
| 162 uint8_t*& dst_buf, | 162 uint8_t*& dst_buf, |
| 163 FX_DWORD& offset); | 163 uint32_t& offset); |
| 164 FX_BOOL Encode(const uint8_t* src_buf, | 164 FX_BOOL Encode(const uint8_t* src_buf, |
| 165 FX_DWORD src_len, | 165 uint32_t src_len, |
| 166 uint8_t*& dst_buf, | 166 uint8_t*& dst_buf, |
| 167 FX_DWORD& dst_len, | 167 uint32_t& dst_len, |
| 168 FX_DWORD& offset); | 168 uint32_t& offset); |
| 169 void Finish(uint8_t*& dst_buf, FX_DWORD& dst_len, FX_DWORD& offset); | 169 void Finish(uint8_t*& dst_buf, uint32_t& dst_len, uint32_t& offset); |
| 170 | 170 |
| 171 private: | 171 private: |
| 172 void ClearTable(); | 172 void ClearTable(); |
| 173 FX_BOOL LookUpInTable(const uint8_t* buf, | 173 FX_BOOL LookUpInTable(const uint8_t* buf, |
| 174 FX_DWORD& offset, | 174 uint32_t& offset, |
| 175 uint8_t& bit_offset); | 175 uint8_t& bit_offset); |
| 176 void EncodeString(FX_DWORD index, | 176 void EncodeString(uint32_t index, |
| 177 uint8_t*& dst_buf, | 177 uint8_t*& dst_buf, |
| 178 FX_DWORD& dst_len, | 178 uint32_t& dst_len, |
| 179 FX_DWORD& offset); | 179 uint32_t& offset); |
| 180 void WriteBlock(uint8_t*& dst_buf, FX_DWORD& dst_len, FX_DWORD& offset); | 180 void WriteBlock(uint8_t*& dst_buf, uint32_t& dst_len, uint32_t& offset); |
| 181 jmp_buf jmp; | 181 jmp_buf jmp; |
| 182 FX_DWORD src_offset; | 182 uint32_t src_offset; |
| 183 uint8_t src_bit_offset; | 183 uint8_t src_bit_offset; |
| 184 uint8_t src_bit_cut; | 184 uint8_t src_bit_cut; |
| 185 FX_DWORD src_bit_num; | 185 uint32_t src_bit_num; |
| 186 uint8_t code_size; | 186 uint8_t code_size; |
| 187 uint16_t code_clear; | 187 uint16_t code_clear; |
| 188 uint16_t code_end; | 188 uint16_t code_end; |
| 189 uint16_t index_num; | 189 uint16_t index_num; |
| 190 uint8_t bit_offset; | 190 uint8_t bit_offset; |
| 191 uint8_t index_bit_cur; | 191 uint8_t index_bit_cur; |
| 192 uint8_t index_buf[GIF_DATA_BLOCK]; | 192 uint8_t index_buf[GIF_DATA_BLOCK]; |
| 193 uint8_t index_buf_len; | 193 uint8_t index_buf_len; |
| 194 tag_Table code_table[GIF_MAX_LZW_CODE]; | 194 tag_Table code_table[GIF_MAX_LZW_CODE]; |
| 195 uint16_t table_cur; | 195 uint16_t table_cur; |
| (...skipping 10 matching lines...) Expand all Loading... |
| 206 int width; | 206 int width; |
| 207 int height; | 207 int height; |
| 208 GifPalette* global_pal_ptr; | 208 GifPalette* global_pal_ptr; |
| 209 int32_t global_pal_num; | 209 int32_t global_pal_num; |
| 210 uint8_t global_sort_flag; | 210 uint8_t global_sort_flag; |
| 211 uint8_t global_color_resolution; | 211 uint8_t global_color_resolution; |
| 212 | 212 |
| 213 uint8_t bc_index; | 213 uint8_t bc_index; |
| 214 uint8_t pixel_aspect; | 214 uint8_t pixel_aspect; |
| 215 CGifLZWDecoder* img_decoder_ptr; | 215 CGifLZWDecoder* img_decoder_ptr; |
| 216 FX_DWORD img_row_offset; | 216 uint32_t img_row_offset; |
| 217 FX_DWORD img_row_avail_size; | 217 uint32_t img_row_avail_size; |
| 218 uint8_t img_pass_num; | 218 uint8_t img_pass_num; |
| 219 CFX_ArrayTemplate<GifImage*>* img_ptr_arr_ptr; | 219 CFX_ArrayTemplate<GifImage*>* img_ptr_arr_ptr; |
| 220 uint8_t* (*gif_ask_buf_for_pal_fn)(gif_decompress_struct_p gif_ptr, | 220 uint8_t* (*gif_ask_buf_for_pal_fn)(gif_decompress_struct_p gif_ptr, |
| 221 int32_t pal_size); | 221 int32_t pal_size); |
| 222 uint8_t* next_in; | 222 uint8_t* next_in; |
| 223 FX_DWORD avail_in; | 223 uint32_t avail_in; |
| 224 int32_t decode_status; | 224 int32_t decode_status; |
| 225 FX_DWORD skip_size; | 225 uint32_t skip_size; |
| 226 void (*gif_record_current_position_fn)(gif_decompress_struct_p gif_ptr, | 226 void (*gif_record_current_position_fn)(gif_decompress_struct_p gif_ptr, |
| 227 FX_DWORD* cur_pos_ptr); | 227 uint32_t* cur_pos_ptr); |
| 228 void (*gif_get_row_fn)(gif_decompress_struct_p gif_ptr, | 228 void (*gif_get_row_fn)(gif_decompress_struct_p gif_ptr, |
| 229 int32_t row_num, | 229 int32_t row_num, |
| 230 uint8_t* row_buf); | 230 uint8_t* row_buf); |
| 231 FX_BOOL (*gif_get_record_position_fn)(gif_decompress_struct_p gif_ptr, | 231 FX_BOOL (*gif_get_record_position_fn)(gif_decompress_struct_p gif_ptr, |
| 232 FX_DWORD cur_pos, | 232 uint32_t cur_pos, |
| 233 int32_t left, int32_t top, int32_t width, int32_t height, | 233 int32_t left, int32_t top, int32_t width, int32_t height, |
| 234 int32_t pal_num, void* pal_ptr, | 234 int32_t pal_num, void* pal_ptr, |
| 235 int32_t delay_time, FX_BOOL user_input, | 235 int32_t delay_time, FX_BOOL user_input, |
| 236 int32_t trans_index, int32_t disposal_method, FX_BOOL interlace); | 236 int32_t trans_index, int32_t disposal_method, FX_BOOL interlace); |
| 237 CFX_ByteString* cmt_data_ptr; | 237 CFX_ByteString* cmt_data_ptr; |
| 238 GifGCE* gce_ptr; | 238 GifGCE* gce_ptr; |
| 239 CFX_ArrayTemplate<GifPlainText*>* pt_ptr_arr_ptr; | 239 CFX_ArrayTemplate<GifPlainText*>* pt_ptr_arr_ptr; |
| 240 }; | 240 }; |
| 241 typedef struct tag_gif_compress_struct gif_compress_struct; | 241 typedef struct tag_gif_compress_struct gif_compress_struct; |
| 242 typedef gif_compress_struct* gif_compress_struct_p; | 242 typedef gif_compress_struct* gif_compress_struct_p; |
| 243 typedef gif_compress_struct_p* gif_compress_struct_pp; | 243 typedef gif_compress_struct_p* gif_compress_struct_pp; |
| 244 struct tag_gif_compress_struct { | 244 struct tag_gif_compress_struct { |
| 245 const uint8_t* src_buf; | 245 const uint8_t* src_buf; |
| 246 FX_DWORD src_pitch; | 246 uint32_t src_pitch; |
| 247 FX_DWORD src_width; | 247 uint32_t src_width; |
| 248 FX_DWORD src_row; | 248 uint32_t src_row; |
| 249 FX_DWORD cur_offset; | 249 uint32_t cur_offset; |
| 250 FX_DWORD frames; | 250 uint32_t frames; |
| 251 GifHeader* header_ptr; | 251 GifHeader* header_ptr; |
| 252 GifLSD* lsd_ptr; | 252 GifLSD* lsd_ptr; |
| 253 GifPalette* global_pal; | 253 GifPalette* global_pal; |
| 254 uint16_t gpal_num; | 254 uint16_t gpal_num; |
| 255 GifPalette* local_pal; | 255 GifPalette* local_pal; |
| 256 uint16_t lpal_num; | 256 uint16_t lpal_num; |
| 257 GifImageInfo* image_info_ptr; | 257 GifImageInfo* image_info_ptr; |
| 258 CGifLZWEncoder* img_encoder_ptr; | 258 CGifLZWEncoder* img_encoder_ptr; |
| 259 | 259 |
| 260 uint8_t* cmt_data_ptr; | 260 uint8_t* cmt_data_ptr; |
| 261 FX_DWORD cmt_data_len; | 261 uint32_t cmt_data_len; |
| 262 GifGCE* gce_ptr; | 262 GifGCE* gce_ptr; |
| 263 GifPTE* pte_ptr; | 263 GifPTE* pte_ptr; |
| 264 const uint8_t* pte_data_ptr; | 264 const uint8_t* pte_data_ptr; |
| 265 FX_DWORD pte_data_len; | 265 uint32_t pte_data_len; |
| 266 }; | 266 }; |
| 267 | 267 |
| 268 void gif_error(gif_decompress_struct_p gif_ptr, const FX_CHAR* err_msg); | 268 void gif_error(gif_decompress_struct_p gif_ptr, const FX_CHAR* err_msg); |
| 269 void gif_warn(gif_decompress_struct_p gif_ptr, const FX_CHAR* err_msg); | 269 void gif_warn(gif_decompress_struct_p gif_ptr, const FX_CHAR* err_msg); |
| 270 gif_decompress_struct_p gif_create_decompress(); | 270 gif_decompress_struct_p gif_create_decompress(); |
| 271 void gif_destroy_decompress(gif_decompress_struct_pp gif_ptr_ptr); | 271 void gif_destroy_decompress(gif_decompress_struct_pp gif_ptr_ptr); |
| 272 gif_compress_struct_p gif_create_compress(); | 272 gif_compress_struct_p gif_create_compress(); |
| 273 void gif_destroy_compress(gif_compress_struct_pp gif_ptr_ptr); | 273 void gif_destroy_compress(gif_compress_struct_pp gif_ptr_ptr); |
| 274 int32_t gif_read_header(gif_decompress_struct_p gif_ptr); | 274 int32_t gif_read_header(gif_decompress_struct_p gif_ptr); |
| 275 int32_t gif_get_frame(gif_decompress_struct_p gif_ptr); | 275 int32_t gif_get_frame(gif_decompress_struct_p gif_ptr); |
| 276 int32_t gif_get_frame_num(gif_decompress_struct_p gif_ptr); | 276 int32_t gif_get_frame_num(gif_decompress_struct_p gif_ptr); |
| 277 int32_t gif_decode_extension(gif_decompress_struct_p gif_ptr); | 277 int32_t gif_decode_extension(gif_decompress_struct_p gif_ptr); |
| 278 int32_t gif_decode_image_info(gif_decompress_struct_p gif_ptr); | 278 int32_t gif_decode_image_info(gif_decompress_struct_p gif_ptr); |
| 279 void gif_takeover_gce_ptr(gif_decompress_struct_p gif_ptr, | 279 void gif_takeover_gce_ptr(gif_decompress_struct_p gif_ptr, |
| 280 GifGCE** gce_ptr_ptr); | 280 GifGCE** gce_ptr_ptr); |
| 281 int32_t gif_load_frame(gif_decompress_struct_p gif_ptr, int32_t frame_num); | 281 int32_t gif_load_frame(gif_decompress_struct_p gif_ptr, int32_t frame_num); |
| 282 uint8_t* gif_read_data(gif_decompress_struct_p gif_ptr, | 282 uint8_t* gif_read_data(gif_decompress_struct_p gif_ptr, |
| 283 uint8_t** des_buf_pp, | 283 uint8_t** des_buf_pp, |
| 284 FX_DWORD data_size); | 284 uint32_t data_size); |
| 285 void gif_save_decoding_status(gif_decompress_struct_p gif_ptr, int32_t status); | 285 void gif_save_decoding_status(gif_decompress_struct_p gif_ptr, int32_t status); |
| 286 void gif_input_buffer(gif_decompress_struct_p gif_ptr, | 286 void gif_input_buffer(gif_decompress_struct_p gif_ptr, |
| 287 uint8_t* src_buf, | 287 uint8_t* src_buf, |
| 288 FX_DWORD src_size); | 288 uint32_t src_size); |
| 289 FX_DWORD gif_get_avail_input(gif_decompress_struct_p gif_ptr, | 289 uint32_t gif_get_avail_input(gif_decompress_struct_p gif_ptr, |
| 290 uint8_t** avial_buf_ptr); | 290 uint8_t** avial_buf_ptr); |
| 291 void interlace_buf(const uint8_t* buf, FX_DWORD width, FX_DWORD height); | 291 void interlace_buf(const uint8_t* buf, uint32_t width, uint32_t height); |
| 292 FX_BOOL gif_encode(gif_compress_struct_p gif_ptr, | 292 FX_BOOL gif_encode(gif_compress_struct_p gif_ptr, |
| 293 uint8_t*& dst_buf, | 293 uint8_t*& dst_buf, |
| 294 FX_DWORD& dst_len); | 294 uint32_t& dst_len); |
| 295 | 295 |
| 296 #endif // CORE_FXCODEC_LGIF_FX_GIF_H_ | 296 #endif // CORE_FXCODEC_LGIF_FX_GIF_H_ |
| OLD | NEW |