return MM_UTIL_ERROR_NONE;
}
-int mm_util_gif_image_create(mm_gif_file_h gif_file_h, mm_image_info_s **gif_image_h)
-{
- gif_file_s *gif_file = (gif_file_s *)gif_file_h;
- mm_image_info_s *pImage = NULL;
-
- mm_util_retvm_if(gif_file == NULL, MM_UTIL_ERROR_INVALID_PARAMETER, "Invalid parameter");
-
- pImage = (mm_image_info_s *)calloc(1, sizeof(mm_image_info_s));
- mm_util_retvm_if(pImage == NULL, MM_UTIL_ERROR_OUT_OF_MEMORY, "Memory allocation failed");
-
- /* init image when it is allocated */
- /* set default width & height */
- pImage->width = gif_file->width;
- pImage->height = gif_file->height;
-
- *gif_image_h = (mm_image_info_s *)pImage;
-
- return MM_UTIL_ERROR_NONE;
-}
-
-void mm_util_gif_image_destory(mm_image_info_s * gif_image_h)
-{
- mm_image_info_s *gif_image = (mm_image_info_s *)gif_image_h;
-
- mm_util_retm_if(gif_image == NULL, "Invalid parameter");
-
- MMUTIL_SAFE_FREE(gif_image->data);
- MMUTIL_SAFE_FREE(gif_image);
-}
-
int mm_util_gif_encode_create(mm_gif_file_h *gif_file_h)
{
gif_file_s *gif_file = NULL;
mm_util_retvm_if(gif_image->data == NULL, MM_UTIL_ERROR_INVALID_PARAMETER, "Invalid parameter");
if (gif_file->is_started == FALSE) {
+ ret = mm_util_gif_encode_set_resolution(gif_file_h, gif_image->width, gif_image->height);
+ mm_util_retvm_if(ret != MM_UTIL_ERROR_NONE, ret, "mm_util_gif_encode_set_file failed %d", ret);
+
mm_util_warn("first added image, mm_util_gif_encode_start is needed");
ret = mm_util_gif_encode_start(gif_file_h);
mm_util_retvm_if(ret != MM_UTIL_ERROR_NONE, ret, "mm_util_gif_encode_start failed");
return MM_UTIL_ERROR_NONE;
}
-int mm_util_gif_enocde_set_image_handle(mm_gif_file_h gif_file_h, mm_image_info_s *gif_image_h)
-{
- gif_file_s *gif_file = (gif_file_s *)gif_file_h;
- mm_image_info_s *gif_image = (mm_image_info_s *)gif_image_h;
-
- 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_file->is_started, MM_UTIL_ERROR_INVALID_OPERATION, "Encoding has already started");
-
- if (gif_file->saved_image == NULL) {
- gif_file->saved_image = (mm_image_info_s **)calloc(1, sizeof(mm_image_info_s *));
- mm_util_retvm_if(gif_file->saved_image == NULL, MM_UTIL_ERROR_OUT_OF_MEMORY, "memory allocation failed");
- } else {
- mm_image_info_s **tmp = (mm_image_info_s **)realloc(gif_file->saved_image, sizeof(mm_image_info_s *) * (gif_file->saved_image_count + 1));
- mm_util_retvm_if(tmp == NULL, MM_UTIL_ERROR_OUT_OF_MEMORY, "memory allocation failed");
- gif_file->saved_image = tmp;
- }
-
- gif_file->saved_image[gif_file->saved_image_count] = gif_image;
- gif_file->saved_image_count++;
-
- return MM_UTIL_ERROR_NONE;
-}
-
-int mm_util_gif_enocde_get_image_handle(mm_gif_file_h gif_file_h, const int index, mm_image_info_s **gif_image_h)
-{
- gif_file_s *gif_file = (gif_file_s *)gif_file_h;
-
- mm_util_fenter();
- mm_util_retvm_if(gif_file == NULL, MM_UTIL_ERROR_INVALID_PARAMETER, "Invalid parameter");
- mm_util_retvm_if(gif_image_h == NULL, MM_UTIL_ERROR_INVALID_PARAMETER, "Invalid parameter");
- mm_util_retvm_if(gif_file->is_started, MM_UTIL_ERROR_INVALID_OPERATION, "Encoding has already started");
-
- if (index < gif_file->saved_image_count)
- *gif_image_h = (mm_image_info_s *)gif_file->saved_image[index];
- else
- *gif_image_h = NULL;
-
- return MM_UTIL_ERROR_NONE;
-}
-
-int mm_util_encode_to_gif_file(mm_gif_file_h gif_file_h, const char *path)
+int mm_util_encode_to_gif_file(mm_image_info_s **images, const unsigned int image_count, const char *path)
{
int ret = MM_UTIL_ERROR_NONE;
int i = 0;
+ mm_gif_file_h gif_file_h = NULL;
- gif_file_s *gif_file = (gif_file_s *)gif_file_h;
- mm_image_info_s *gif_image = NULL;
+ mm_util_retvm_if(images == NULL, MM_UTIL_ERROR_INVALID_PARAMETER, "Invalid parameter");
+ mm_util_retvm_if(image_count == 0, MM_UTIL_ERROR_INVALID_OPERATION, "Invalid parameter");
+ mm_util_retvm_if(path == NULL, MM_UTIL_ERROR_INVALID_OPERATION, "Invalid parameter");
- mm_util_retvm_if(gif_file == NULL, MM_UTIL_ERROR_INVALID_PARAMETER, "Invalid parameter");
- mm_util_retvm_if(gif_file->saved_image == NULL, MM_UTIL_ERROR_INVALID_OPERATION, "Invalid parameter");
+ ret = mm_util_gif_encode_create(&gif_file_h);
+ mm_util_retvm_if(ret != MM_UTIL_ERROR_NONE, ret, "mm_util_gif_encode_create failed %d", ret);
- ret = mm_util_gif_encode_set_file(gif_file, path);
+ ret = mm_util_gif_encode_set_file(gif_file_h, path);
+ mm_util_retvm_if(ret != MM_UTIL_ERROR_NONE, ret, "mm_util_gif_encode_set_file failed %d", ret);
+
+ ret = mm_util_gif_encode_set_resolution(gif_file_h, images[0]->width, images[0]->height);
mm_util_retvm_if(ret != MM_UTIL_ERROR_NONE, ret, "mm_util_gif_encode_set_file failed %d", ret);
/* this way is for image_util_encode_run(), remove it later */
ret = mm_util_gif_encode_start(gif_file_h);
mm_util_retvm_if(ret != MM_UTIL_ERROR_NONE, ret, "mm_util_gif_encode_start failed");
- for (i = 0; i < gif_file->saved_image_count; i++) {
- gif_image = (mm_image_info_s *)gif_file->saved_image[i];
- ret = mm_util_gif_encode_add_image(gif_file_h, gif_image);
+ for (i = 0; i < image_count; i++) {
+ ret = mm_util_gif_encode_add_image(gif_file_h, images[i]);
mm_util_retvm_if(ret != MM_UTIL_ERROR_NONE, ret, "mm_util_gif_encode_add_image failed");
- mm_util_gif_image_destory(gif_image);
}
- MMUTIL_SAFE_FREE(gif_file->saved_image);
ret = mm_util_gif_encode_save(gif_file_h);
mm_util_retvm_if(ret != MM_UTIL_ERROR_NONE, ret, "mm_util_gif_encode_save failed");
return MM_UTIL_ERROR_NONE;
}
-int mm_util_encode_to_gif_memory(mm_gif_file_h gif_file_h, void **buffer, size_t *size)
+int mm_util_encode_to_gif_memory(mm_image_info_s **images, const unsigned int image_count, void **buffer, size_t *size)
{
int ret = MM_UTIL_ERROR_NONE;
int i = 0;
+ mm_gif_file_h gif_file_h = NULL;
- gif_file_s *gif_file = (gif_file_s *)gif_file_h;
- mm_image_info_s * gif_image = NULL;
+ mm_util_retvm_if(images == NULL, MM_UTIL_ERROR_INVALID_PARAMETER, "Invalid parameter");
+ mm_util_retvm_if(image_count == 0, MM_UTIL_ERROR_INVALID_OPERATION, "Invalid parameter");
+ mm_util_retvm_if(buffer == NULL || size == NULL, MM_UTIL_ERROR_INVALID_OPERATION, "Invalid parameter");
- mm_util_retvm_if(gif_file == NULL, MM_UTIL_ERROR_INVALID_PARAMETER, "Invalid parameter");
- mm_util_retvm_if(gif_file->saved_image == NULL, MM_UTIL_ERROR_INVALID_OPERATION, "Invalid parameter");
+ ret = mm_util_gif_encode_create(&gif_file_h);
+ mm_util_retvm_if(ret != MM_UTIL_ERROR_NONE, ret, "mm_util_gif_encode_create failed %d", ret);
- ret = mm_util_gif_encode_set_mem(gif_file, buffer, size);
+ ret = mm_util_gif_encode_set_mem(gif_file_h, buffer, size);
mm_util_retvm_if(ret != MM_UTIL_ERROR_NONE, ret, "mm_util_gif_encode_set_mem failed %d", ret);
+ ret = mm_util_gif_encode_set_resolution(gif_file_h, images[0]->width, images[0]->height);
+ mm_util_retvm_if(ret != MM_UTIL_ERROR_NONE, ret, "mm_util_gif_encode_set_file failed %d", ret);
+
/* this way is for image_util_encode_run(), remove it later */
ret = mm_util_gif_encode_start(gif_file_h);
mm_util_retvm_if(ret != MM_UTIL_ERROR_NONE, ret, "mm_util_gif_encode_start failed");
- for (i = 0; i < gif_file->saved_image_count; i++) {
- gif_image = (mm_image_info_s *)gif_file->saved_image[i];
- ret = mm_util_gif_encode_add_image(gif_file_h, gif_image);
+ for (i = 0; i < image_count; i++) {
+ ret = mm_util_gif_encode_add_image(gif_file_h, images[i]);
mm_util_retvm_if(ret != MM_UTIL_ERROR_NONE, ret, "mm_util_gif_encode_add_image failed");
- mm_util_gif_image_destory(gif_image);
}
- MMUTIL_SAFE_FREE(gif_file->saved_image);
ret = mm_util_gif_encode_save(gif_file_h);
mm_util_retvm_if(ret != MM_UTIL_ERROR_NONE, ret, "mm_util_gif_encode_save failed");
void mm_util_gif_encode_destroy(mm_gif_file_h gif_file_h)
{
int ret = MM_UTIL_ERROR_NONE;
- int i = 0;
gif_file_s *gif_file = (gif_file_s *)gif_file_h;
mm_util_retm_if(gif_file == NULL, "Invalid parameter");
mm_util_retm_if(ret != MM_UTIL_ERROR_NONE, "_gif_encode_close_file failed");
}
- if (gif_file->saved_image != NULL) {
- for (i = 0; i < gif_file->saved_image_count; i++) {
- mm_image_info_s * tmp = (mm_image_info_s *)gif_file->saved_image[i];
- mm_util_gif_image_destory(tmp);
- }
- MMUTIL_SAFE_FREE(gif_file->saved_image);
- }
-
MMUTIL_SAFE_G_FREE(gif_file->filename);
MMUTIL_SAFE_FREE(gif_file->buffer);
}