Remove 'intermediate_image' buffer from gif_image_s 63/191163/1
authorjiyong.min <jiyong.min@samsung.com>
Fri, 12 Oct 2018 03:53:19 +0000 (12:53 +0900)
committerjiyong.min <jiyong.min@samsung.com>
Fri, 12 Oct 2018 03:54:25 +0000 (12:54 +0900)
Change-Id: I4f7a59a38c76bd9bf4bbb7f727e767ee77cb1a75

gif/include/mm_util_gif_private.h
gif/mm_util_gif.c [changed mode: 0755->0644]

index f8a0167..1c856dc 100755 (executable)
@@ -45,8 +45,6 @@ typedef struct {
        GifWord width;
        GifWord height;
        GraphicsControlBlock graphic_control_block;
-       GifByteType *intermediate_image;
-       unsigned long intermediate_image_size;
 } gif_image_s;
 
 typedef struct {
old mode 100755 (executable)
new mode 100644 (file)
index 4a5080f..7977740
@@ -307,7 +307,7 @@ static int __gif_extract_rgb(gif_image_s *gif_image, unsigned long num_of_pixels
        return MM_UTIL_ERROR_NONE;
 }
 
-int __gif_make_color_map(gif_image_s *gif_image)
+int __gif_make_color_map(gif_image_s *gif_image, GifByteType **intermediate_image, unsigned long *intermediate_image_size)
 {
        int ret = MM_UTIL_ERROR_NONE;
        int colormap_size = DEFAULT_COLORMAP_SIZE;
@@ -331,15 +331,15 @@ int __gif_make_color_map(gif_image_s *gif_image)
        }
 
        /* allocate output buffer */
-       gif_image->intermediate_image = (GifByteType *) calloc(1, num_of_pixels * sizeof(GifByteType));
-       if (gif_image->intermediate_image == NULL) {
+       *intermediate_image = (GifByteType *) calloc(1, num_of_pixels * sizeof(GifByteType));
+       if (*intermediate_image == NULL) {
                mm_util_error("Memory allocation failed");
                ret = MM_UTIL_ERROR_INVALID_OPERATION;
                goto FAIL;
        }
-       gif_image->intermediate_image_size = num_of_pixels * sizeof(GifByteType);
+       *intermediate_image_size = num_of_pixels * sizeof(GifByteType);
 
-       if (GifQuantizeBuffer(gif_image->image_desc.Width, gif_image->image_desc.Height, &colormap_size, red, green, blue, gif_image->intermediate_image, gif_image->image_desc.ColorMap->Colors) == GIF_ERROR) {
+       if (GifQuantizeBuffer(gif_image->image_desc.Width, gif_image->image_desc.Height, &colormap_size, red, green, blue, *intermediate_image, gif_image->image_desc.ColorMap->Colors) == GIF_ERROR) {
                mm_util_error("could not quantize buffer");
                ret = MM_UTIL_ERROR_INVALID_OPERATION;
                goto FAIL;
@@ -347,10 +347,10 @@ int __gif_make_color_map(gif_image_s *gif_image)
        goto SUCCESS;
 
 FAIL:
-       if (gif_image->intermediate_image)
-               MMUTIL_SAFE_FREE(gif_image->intermediate_image);
+       if (*intermediate_image)
+               MMUTIL_SAFE_FREE(*intermediate_image);
 
-       gif_image->intermediate_image_size = 0;
+       *intermediate_image_size = 0;
        COLORMAP_FREE(gif_image->image_desc.ColorMap);
 SUCCESS:
        RGB_FREE(red, green, blue);
@@ -462,40 +462,42 @@ int _gif_encode_move_to_mem(const unsigned char *src, size_t src_size, void **ds
        return MM_UTIL_ERROR_NONE;
 }
 
-int _gif_image_write_image_desc(gif_file_s *gif_file, gif_image_s *gif_image)
+int _gif_image_write_image(gif_file_s *gif_file, gif_image_s *gif_image)
 {
+       int ret = MM_UTIL_ERROR_NONE;
+
+       GifByteType *intermediate_image = NULL;
+       unsigned long intermediate_image_size = 0;
+       unsigned long idx = 0;
+
        mm_util_retvm_if(gif_image == NULL, MM_UTIL_ERROR_INVALID_PARAMETER, "Invalid parameter");
        mm_util_retvm_if(gif_image->image_data == NULL, MM_UTIL_ERROR_INVALID_PARAMETER, "Invalid parameter");
 
+       /* Make local color map */
+       ret = __gif_make_color_map(gif_image, &intermediate_image, &intermediate_image_size);
+       mm_util_retvm_if(ret != MM_UTIL_ERROR_NONE, ret, "__gif_make_color_map failed");
+
        if (EGifPutImageDesc(gif_file->GifFile, gif_image->image_desc.Left, gif_image->image_desc.Top,
                gif_image->image_desc.Width, gif_image->image_desc.Height, gif_image->image_desc.Interlace,
                gif_image->image_desc.ColorMap) == GIF_ERROR) {
                mm_util_error("EGifPutImageDesc failed due to %s", GifErrorString(gif_file->GifFile->Error));
+               MMUTIL_SAFE_FREE(intermediate_image);
                return MM_UTIL_ERROR_INVALID_OPERATION;
        }
 
-       return MM_UTIL_ERROR_NONE;
-}
+       mm_util_debug("put pixel count: %lu", (intermediate_image_size / sizeof(GifPixelType)));
 
-int _gif_image_write_image_data(gif_file_s *gif_file, gif_image_s *gif_image)
-{
-       unsigned long idx = 0;
-       mm_util_retvm_if(gif_image == NULL, MM_UTIL_ERROR_INVALID_PARAMETER, "Invalid parameter");
-       mm_util_retvm_if(gif_image->image_data == NULL, MM_UTIL_ERROR_INVALID_PARAMETER, "Invalid parameter");
-
-       /* encode OutputBuffer to GifFile */
-       mm_util_retvm_if(gif_image->intermediate_image == NULL, MM_UTIL_ERROR_INVALID_OPERATION, "Intermediate_image is null");
-
-       mm_util_debug("put pixel count: %lu", (gif_image->intermediate_image_size / sizeof(GifPixelType)));
-
-       for (idx = 0; idx < (gif_image->intermediate_image_size / sizeof(GifPixelType)); idx++) {
-               GifPixelType pixel = (GifPixelType)gif_image->intermediate_image[idx];
+       for (idx = 0; idx < (intermediate_image_size / sizeof(GifPixelType)); idx++) {
+               GifPixelType pixel = (GifPixelType)intermediate_image[idx];
                if (EGifPutPixel(gif_file->GifFile, pixel) == GIF_ERROR) {
                        mm_util_error("could not put pixel");
                        return MM_UTIL_ERROR_INVALID_OPERATION;
                }
        }
 
+       /* release intermediate_image */
+       MMUTIL_SAFE_FREE(intermediate_image);
+
        return MM_UTIL_ERROR_NONE;
 }
 
@@ -771,8 +773,6 @@ void mm_util_gif_image_destory(mm_gif_image_h gif_image_h)
                MMUTIL_SAFE_FREE(gif_image->ext_blocks);
        }
 
-       /* release intermediate_image */
-       MMUTIL_SAFE_FREE(gif_image->intermediate_image);
        MMUTIL_SAFE_FREE(gif_image);
 }
 
@@ -903,22 +903,14 @@ 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");
        }
 
-       /* Make local color map */
-       ret = __gif_make_color_map(gif_image);
-       mm_util_retvm_if(ret != MM_UTIL_ERROR_NONE, ret, "__gif_make_color_map 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 image description */
-       ret = _gif_image_write_image_desc(gif_file, gif_image);
+       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");
 
-       /* Write image data */
-       ret = _gif_image_write_image_data(gif_file, gif_image);
-       mm_util_retvm_if(ret != MM_UTIL_ERROR_NONE, ret, "_gif_image_write_image_data failed");
-
        gif_file->GifFile->ImageCount++;
 
        return MM_UTIL_ERROR_NONE;