From fc5c162449c5fb66c2f0c557bf39d99cf2bfc2d3 Mon Sep 17 00:00:00 2001 From: "jiyong.min" Date: Fri, 12 Oct 2018 13:44:55 +0900 Subject: [PATCH] Remove `ext_blocks` from gif_image_s Change-Id: I3a502c1b30196123b5ae3fc64e71f29de1170dff --- gif/include/mm_util_gif_private.h | 3 -- gif/mm_util_gif.c | 87 ++++++++++----------------------------- 2 files changed, 22 insertions(+), 68 deletions(-) diff --git a/gif/include/mm_util_gif_private.h b/gif/include/mm_util_gif_private.h index 849cb18..c943e59 100644 --- a/gif/include/mm_util_gif_private.h +++ b/gif/include/mm_util_gif_private.h @@ -40,9 +40,6 @@ typedef struct { unsigned long height; void *image_data; int delay_time; - - int ext_block_count; - ExtensionBlock *ext_blocks; } gif_image_s; typedef struct { diff --git a/gif/mm_util_gif.c b/gif/mm_util_gif.c index e4040f0..4b1c7e2 100644 --- a/gif/mm_util_gif.c +++ b/gif/mm_util_gif.c @@ -503,76 +503,45 @@ int _gif_image_write_image(gif_file_s *gif_file, gif_image_s *gif_image) return MM_UTIL_ERROR_NONE; } -int _gif_image_alloc_ext_block(gif_image_s *gif_image, int function, int byte_count, ExtensionBlock **ext_block) +int _gif_image_create_ext_block(gif_image_s *gif_image, int function, int byte_count, ExtensionBlock **ext_block) { - int i = 0; ExtensionBlock *_ext_block = NULL; mm_util_retvm_if(gif_image == NULL, MM_UTIL_ERROR_INVALID_PARAMETER, "Invalid parameter"); mm_util_retvm_if(byte_count == 0, MM_UTIL_ERROR_INVALID_PARAMETER, "Invalid parameter"); mm_util_retvm_if(ext_block == NULL, MM_UTIL_ERROR_INVALID_PARAMETER, "Invalid parameter"); - if (gif_image->ext_blocks == NULL) { - gif_image->ext_blocks = (ExtensionBlock *)calloc(1, sizeof(ExtensionBlock)); - if (gif_image->ext_blocks == NULL) { - mm_util_error("Memory allocation failed"); - *ext_block = NULL; - return MM_UTIL_ERROR_OUT_OF_MEMORY; - } - } else { - /* check exist function block */ - for (i = 0; i < gif_image->ext_block_count; i++) { - _ext_block = &gif_image->ext_blocks[i]; - if (_ext_block != NULL && _ext_block->Function == function) { - mm_util_error("[Not Error] Ext block has already exist"); - *ext_block = _ext_block; - return MM_UTIL_ERROR_NONE; - } - } - ExtensionBlock *realloc_ptr = (ExtensionBlock *)realloc(gif_image->ext_blocks, (sizeof(ExtensionBlock) * (gif_image->ext_block_count + 1))); - if (realloc_ptr == NULL) { - mm_util_error("Memory reallocation failed"); - *ext_block = NULL; - return MM_UTIL_ERROR_OUT_OF_MEMORY; - } - gif_image->ext_blocks = realloc_ptr; - } - /* get allocated extention block */ - _ext_block = &gif_image->ext_blocks[gif_image->ext_block_count]; + _ext_block = (ExtensionBlock *)calloc(1, sizeof(ExtensionBlock)); + if (_ext_block == NULL) { + mm_util_error("Memory allocation failed"); + *ext_block = NULL; + return MM_UTIL_ERROR_OUT_OF_MEMORY; + } _ext_block->Function = function; _ext_block->ByteCount = byte_count; _ext_block->Bytes = (GifByteType *)calloc(1, (sizeof(GifByteType) * byte_count)); if (_ext_block->Bytes == NULL) { mm_util_error("Memory allocation failed"); - /* free all ext_blocks, TODO: free current ext_blocks */ - for (i = 0; i < gif_image->ext_block_count; i++) { - _ext_block = &gif_image->ext_blocks[i]; - MMUTIL_SAFE_FREE(_ext_block->Bytes); - } - MMUTIL_SAFE_FREE(gif_image->ext_blocks); - gif_image->ext_block_count = 0; + MMUTIL_SAFE_FREE(_ext_block); return MM_UTIL_ERROR_OUT_OF_MEMORY; } - gif_image->ext_block_count++; - *ext_block = _ext_block; return MM_UTIL_ERROR_NONE; } -int _gif_image_write_ext_blocks(gif_file_s *gif_file, gif_image_s *gif_image) +int _gif_image_write_ext_block(gif_file_s *gif_file, gif_image_s *gif_image) { int ret = MM_UTIL_ERROR_NONE; - int i = 0; ExtensionBlock *_ext_block = NULL; GraphicsControlBlock graphic_control_block; mm_util_retvm_if(gif_file == NULL, MM_UTIL_ERROR_INVALID_PARAMETER, "Invalid parameter"); mm_util_retvm_if(gif_image == NULL, MM_UTIL_ERROR_INVALID_PARAMETER, "Invalid parameter"); - ret = _gif_image_alloc_ext_block(gif_image, GRAPHICS_EXT_FUNC_CODE, GRAPHIC_EXT_BLOCK_SIZE, &_ext_block); + ret = _gif_image_create_ext_block(gif_image, GRAPHICS_EXT_FUNC_CODE, GRAPHIC_EXT_BLOCK_SIZE, &_ext_block); mm_util_retvm_if(ret != MM_UTIL_ERROR_NONE, ret, "_gif_image_alloc_ext_block failed"); mm_util_retvm_if(_ext_block->Bytes == NULL, MM_UTIL_ERROR_OUT_OF_MEMORY, "_gif_image_alloc_ext_block failed"); @@ -584,14 +553,15 @@ int _gif_image_write_ext_blocks(gif_file_s *gif_file, gif_image_s *gif_image) EGifGCBToExtension(&graphic_control_block, _ext_block->Bytes); - for (i = 0; i < gif_image->ext_block_count; i++) { - _ext_block = &gif_image->ext_blocks[i]; - mm_util_retvm_if(_ext_block == NULL, MM_UTIL_ERROR_INVALID_OPERATION, "extension block is empty"); + if (EGifPutExtension(gif_file->GifFile, _ext_block->Function, _ext_block->ByteCount, _ext_block->Bytes) == GIF_ERROR) { + mm_util_error("EGifPutExtension failed due to %s", GifErrorString(gif_file->GifFile->Error)); + ret = MM_UTIL_ERROR_INVALID_OPERATION; + } - if (EGifPutExtension(gif_file->GifFile, _ext_block->Function, _ext_block->ByteCount, _ext_block->Bytes) == GIF_ERROR) { - mm_util_error("EGifPutExtension failed due to %s", GifErrorString(gif_file->GifFile->Error)); - return MM_UTIL_ERROR_INVALID_OPERATION; - } + /* release extension blocks */ + if (_ext_block != NULL) { + MMUTIL_SAFE_FREE(_ext_block->Bytes); + MMUTIL_SAFE_FREE(_ext_block); } return MM_UTIL_ERROR_NONE; @@ -702,8 +672,6 @@ int mm_util_gif_image_create(mm_gif_file_h gif_file_h, mm_gif_image_h *gif_image /* set default width & height */ pImage->width = gif_file->width; pImage->height = gif_file->height; - pImage->ext_block_count = 0; - pImage->ext_blocks = NULL; *gif_image_h = (mm_gif_image_h)pImage; @@ -740,21 +708,10 @@ int mm_util_gif_image_set_image(mm_gif_image_h gif_image_h, const unsigned char void mm_util_gif_image_destory(mm_gif_image_h gif_image_h) { - int i = 0; - ExtensionBlock *_ext_block = NULL; gif_image_s *gif_image = (gif_image_s *)gif_image_h; mm_util_retm_if(gif_image == NULL, "Invalid parameter"); - /* release extension blocks */ - if (gif_image->ext_blocks != NULL) { - for (i = 0; i < gif_image->ext_block_count; i++) { - _ext_block = &gif_image->ext_blocks[i]; - MMUTIL_SAFE_FREE(_ext_block->Bytes); - } - MMUTIL_SAFE_FREE(gif_image->ext_blocks); - } - MMUTIL_SAFE_FREE(gif_image); } @@ -883,13 +840,13 @@ int mm_util_gif_encode_add_image(mm_gif_file_h gif_file_h, mm_gif_image_h gif_im mm_util_retvm_if(ret != MM_UTIL_ERROR_NONE, ret, "mm_util_gif_encode_start failed"); } - /* Write extension blocks */ - ret = _gif_image_write_ext_blocks(gif_file, gif_image); - mm_util_retvm_if(ret != MM_UTIL_ERROR_NONE, ret, "_gif_image_write_ext_blocks failed"); + /* Write graphic control block */ + ret = _gif_image_write_ext_block(gif_file, gif_image); + mm_util_retvm_if(ret != MM_UTIL_ERROR_NONE, ret, "_gif_image_write_ext_block failed"); /* Write image description & data */ ret = _gif_image_write_image(gif_file, gif_image); - mm_util_retvm_if(ret != MM_UTIL_ERROR_NONE, ret, "_gif_image_write_image_desc failed"); + mm_util_retvm_if(ret != MM_UTIL_ERROR_NONE, ret, "_gif_image_write_image failed"); gif_file->GifFile->ImageCount++; -- 2.7.4