| 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/include/fxcodec/fx_codec.h" | 7 #include "core/include/fxcodec/fx_codec.h" |
| 8 #include "core/include/fxge/fx_dib.h" | 8 #include "core/include/fxge/fx_dib.h" |
| 9 #include "core/src/fxcodec/codec/codec_int.h" | 9 #include "core/src/fxcodec/codec/codec_int.h" |
| 10 #include "core/src/fxcodec/lgif/fx_gif.h" | 10 #include "core/src/fxcodec/lgif/fx_gif.h" |
| 11 struct FXGIF_Context { | 11 struct FXGIF_Context { |
| 12 gif_decompress_struct_p gif_ptr; | 12 gif_decompress_struct_p gif_ptr; |
| 13 void* parent_ptr; | 13 void* parent_ptr; |
| 14 void* child_ptr; | 14 void* child_ptr; |
| 15 | 15 |
| 16 void* (*m_AllocFunc)(unsigned int); | 16 void* (*m_AllocFunc)(unsigned int); |
| 17 void (*m_FreeFunc)(void*); | 17 void (*m_FreeFunc)(void*); |
| 18 }; | 18 }; |
| 19 extern "C" { | 19 extern "C" { |
| 20 static void* _gif_alloc_func(unsigned int size) { | 20 static void* _gif_alloc_func(unsigned int size) { |
| 21 return FX_Alloc(char, size); | 21 return FX_Alloc(char, size); |
| 22 } | 22 } |
| 23 static void _gif_free_func(void* p) { | 23 static void _gif_free_func(void* p) { |
| 24 if (p != NULL) { | 24 FX_Free(p); |
| 25 FX_Free(p); | |
| 26 } | |
| 27 } | 25 } |
| 28 }; | 26 }; |
| 29 static void _gif_error_data(gif_decompress_struct_p gif_ptr, | 27 static void _gif_error_data(gif_decompress_struct_p gif_ptr, |
| 30 const FX_CHAR* err_msg) { | 28 const FX_CHAR* err_msg) { |
| 31 FXSYS_strncpy((char*)gif_ptr->err_ptr, err_msg, GIF_MAX_ERROR_SIZE - 1); | 29 FXSYS_strncpy((char*)gif_ptr->err_ptr, err_msg, GIF_MAX_ERROR_SIZE - 1); |
| 32 longjmp(gif_ptr->jmpbuf, 1); | 30 longjmp(gif_ptr->jmpbuf, 1); |
| 33 } | 31 } |
| 34 static uint8_t* _gif_ask_buf_for_pal(gif_decompress_struct_p gif_ptr, | 32 static uint8_t* _gif_ask_buf_for_pal(gif_decompress_struct_p gif_ptr, |
| 35 int32_t pal_size) { | 33 int32_t pal_size) { |
| 36 FXGIF_Context* p = (FXGIF_Context*)gif_ptr->context_ptr; | 34 FXGIF_Context* p = (FXGIF_Context*)gif_ptr->context_ptr; |
| (...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 91 p->gif_ptr->err_ptr = m_szLastError; | 89 p->gif_ptr->err_ptr = m_szLastError; |
| 92 p->gif_ptr->_gif_error_fn = _gif_error_data; | 90 p->gif_ptr->_gif_error_fn = _gif_error_data; |
| 93 p->gif_ptr->_gif_ask_buf_for_pal_fn = _gif_ask_buf_for_pal; | 91 p->gif_ptr->_gif_ask_buf_for_pal_fn = _gif_ask_buf_for_pal; |
| 94 p->gif_ptr->_gif_record_current_position_fn = _gif_record_current_position; | 92 p->gif_ptr->_gif_record_current_position_fn = _gif_record_current_position; |
| 95 p->gif_ptr->_gif_get_row_fn = _gif_read_scanline; | 93 p->gif_ptr->_gif_get_row_fn = _gif_read_scanline; |
| 96 p->gif_ptr->_gif_get_record_position_fn = _gif_get_record_position; | 94 p->gif_ptr->_gif_get_record_position_fn = _gif_get_record_position; |
| 97 return p; | 95 return p; |
| 98 } | 96 } |
| 99 void CCodec_GifModule::Finish(void* pContext) { | 97 void CCodec_GifModule::Finish(void* pContext) { |
| 100 FXGIF_Context* p = (FXGIF_Context*)pContext; | 98 FXGIF_Context* p = (FXGIF_Context*)pContext; |
| 101 if (p != NULL) { | 99 if (p) { |
| 102 _gif_destroy_decompress(&p->gif_ptr); | 100 _gif_destroy_decompress(&p->gif_ptr); |
| 103 p->m_FreeFunc(p); | 101 p->m_FreeFunc(p); |
| 104 } | 102 } |
| 105 } | 103 } |
| 106 int32_t CCodec_GifModule::ReadHeader(void* pContext, | 104 int32_t CCodec_GifModule::ReadHeader(void* pContext, |
| 107 int* width, | 105 int* width, |
| 108 int* height, | 106 int* height, |
| 109 int* pal_num, | 107 int* pal_num, |
| 110 void** pal_pp, | 108 void** pal_pp, |
| 111 int* bg_index, | 109 int* bg_index, |
| (...skipping 68 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 180 uint8_t** avial_buf_ptr) { | 178 uint8_t** avial_buf_ptr) { |
| 181 FXGIF_Context* p = (FXGIF_Context*)pContext; | 179 FXGIF_Context* p = (FXGIF_Context*)pContext; |
| 182 return _gif_get_avail_input(p->gif_ptr, avial_buf_ptr); | 180 return _gif_get_avail_input(p->gif_ptr, avial_buf_ptr); |
| 183 } | 181 } |
| 184 void CCodec_GifModule::Input(void* pContext, | 182 void CCodec_GifModule::Input(void* pContext, |
| 185 const uint8_t* src_buf, | 183 const uint8_t* src_buf, |
| 186 FX_DWORD src_size) { | 184 FX_DWORD src_size) { |
| 187 FXGIF_Context* p = (FXGIF_Context*)pContext; | 185 FXGIF_Context* p = (FXGIF_Context*)pContext; |
| 188 _gif_input_buffer(p->gif_ptr, (uint8_t*)src_buf, src_size); | 186 _gif_input_buffer(p->gif_ptr, (uint8_t*)src_buf, src_size); |
| 189 } | 187 } |
| OLD | NEW |