*blue = blueP;
mm_util_retvm_if((redP == NULL || greenP == NULL || blueP == NULL), MM_UTIL_ERROR_OUT_OF_MEMORY, "Memory allocation failed");
- for (i = 0; i < gif_image->image_desc.Height; i++) {
- for (j = 0; j < gif_image->image_desc.Width; j++) {
+ for (i = 0; i < gif_image->height; i++) {
+ for (j = 0; j < gif_image->width; j++) {
*redP++ = *buffer++;
*greenP++ = *buffer++;
*blueP++ = *buffer++;
return MM_UTIL_ERROR_NONE;
}
-int __gif_make_color_map(gif_image_s *gif_image, GifByteType **intermediate_image, unsigned long *intermediate_image_size)
+int __gif_make_color_map(gif_image_s *gif_image, ColorMapObject **color_map, GifByteType **intermediate_image, unsigned long *intermediate_image_size)
{
int ret = MM_UTIL_ERROR_NONE;
int colormap_size = DEFAULT_COLORMAP_SIZE;
mm_util_retvm_if(gif_image == NULL, MM_UTIL_ERROR_INVALID_PARAMETER, "Invalid parameter");
- unsigned long num_of_pixels = gif_image->image_desc.Width * gif_image->image_desc.Height;
+ unsigned long num_of_pixels = gif_image->width * gif_image->height;
/* make colormap and quantization for the color table of gif */
ret = __gif_extract_rgb(gif_image, num_of_pixels, &red, &green, &blue);
goto FAIL;
}
- if ((gif_image->image_desc.ColorMap = GifMakeMapObject(colormap_size, NULL)) == NULL) {
+ if ((*color_map = GifMakeMapObject(colormap_size, NULL)) == NULL) {
mm_util_error("To make color map is failed");
ret = MM_UTIL_ERROR_INVALID_OPERATION;
goto FAIL;
}
*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, *intermediate_image, gif_image->image_desc.ColorMap->Colors) == GIF_ERROR) {
+ if (GifQuantizeBuffer(gif_image->width, gif_image->height, &colormap_size, red, green, blue, *intermediate_image, (*color_map)->Colors) == GIF_ERROR) {
mm_util_error("could not quantize buffer");
ret = MM_UTIL_ERROR_INVALID_OPERATION;
goto FAIL;
MMUTIL_SAFE_FREE(*intermediate_image);
*intermediate_image_size = 0;
- COLORMAP_FREE(gif_image->image_desc.ColorMap);
+ COLORMAP_FREE(*color_map);
SUCCESS:
RGB_FREE(red, green, blue);
int _gif_image_write_image(gif_file_s *gif_file, gif_image_s *gif_image)
{
int ret = MM_UTIL_ERROR_NONE;
-
+ ColorMapObject *color_map = NULL;
GifByteType *intermediate_image = NULL;
unsigned long intermediate_image_size = 0;
unsigned long idx = 0;
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);
+ ret = __gif_make_color_map(gif_image, &color_map, &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) {
+ if (EGifPutImageDesc(gif_file->GifFile, 0, 0, gif_image->width, gif_image->height,
+ FALSE, color_map) == GIF_ERROR) {
mm_util_error("EGifPutImageDesc failed due to %s", GifErrorString(gif_file->GifFile->Error));
+ COLORMAP_FREE(color_map);
MMUTIL_SAFE_FREE(intermediate_image);
return MM_UTIL_ERROR_INVALID_OPERATION;
}
+ /* release color map */
+ COLORMAP_FREE(color_map);
mm_util_debug("put pixel count: %lu", (intermediate_image_size / sizeof(GifPixelType)));
/* init image when it is allocated */
/* set default width & height */
- pImage->width = pImage->image_desc.Width = gif_file->width;
- pImage->height = pImage->image_desc.Height = gif_file->height;
- pImage->image_desc.Interlace = FALSE; /* don't change this, fixed value */
+ pImage->width = gif_file->width;
+ pImage->height = gif_file->height;
pImage->ext_block_count = 0;
pImage->ext_blocks = NULL;
return MM_UTIL_ERROR_NONE;
}
-int mm_util_gif_image_set_position(mm_gif_image_h gif_image_h, const int left, const int top, const int width, const int height)
-{
- gif_image_s *gif_image = (gif_image_s *)gif_image_h;
-
- mm_util_retvm_if(gif_image == NULL, MM_UTIL_ERROR_INVALID_PARAMETER, "Invalid parameter");
- mm_util_retvm_if((left < 0) || (top < 0), MM_UTIL_ERROR_INVALID_PARAMETER, "Invalid parameter");
- mm_util_retvm_if((width <= 0) || (height <= 0), MM_UTIL_ERROR_INVALID_PARAMETER, "Invalid parameter");
- mm_util_retvm_if((gif_image->width > 0) && (left + width > gif_image->width), MM_UTIL_ERROR_INVALID_PARAMETER, "Invalid parameter");
- mm_util_retvm_if((gif_image->height > 0) && (top + height > gif_image->height), MM_UTIL_ERROR_INVALID_PARAMETER, "Invalid parameter");
-
- mm_util_info("l = %d, t = %d, w= %d, h = %d", left, top, width, height);
-
- gif_image->image_desc.Left = left;
- gif_image->image_desc.Top = top;
- gif_image->image_desc.Width = width;
- gif_image->image_desc.Height = height;
-
- return MM_UTIL_ERROR_NONE;
-}
-
int mm_util_gif_image_set_delay_time(mm_gif_image_h gif_image_h, const int delay_time)
{
gif_image_s *gif_image = (gif_image_s *)gif_image_h;
mm_util_retm_if(gif_image == NULL, "Invalid parameter");
- /* release color map */
- COLORMAP_FREE(gif_image->image_desc.ColorMap);
-
/* release extension blocks */
if (gif_image->ext_blocks != NULL) {
for (i = 0; i < gif_image->ext_block_count; i++) {
mm_util_fenter();
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");
- mm_util_retvm_if((gif_image->image_desc.Width <= 0) || (gif_image->image_desc.Height <= 0), MM_UTIL_ERROR_INVALID_PARAMETER, "Invalid parameter");
- mm_util_retvm_if((gif_image->image_desc.Left + gif_image->image_desc.Width > gif_file->width), MM_UTIL_ERROR_INVALID_PARAMETER, "Invalid parameter");
- mm_util_retvm_if((gif_image->image_desc.Top + gif_image->image_desc.Height > gif_file->height), MM_UTIL_ERROR_INVALID_PARAMETER, "Invalid parameter");
+ mm_util_retvm_if((gif_image->width == 0) || (gif_image->height == 0), MM_UTIL_ERROR_INVALID_PARAMETER, "Invalid parameter");
mm_util_retvm_if(gif_image->image_data == NULL, MM_UTIL_ERROR_INVALID_PARAMETER, "Invalid parameter");
if (gif_file->is_started == FALSE) {
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 */
+ /* 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");