return ret;
}
-int _write_png(mm_image_info_s *decoded, mm_util_png_compression compression_level, FILE *fp, void **buffer, size_t *size)
+static int __write_png(mm_util_image_h *decoded, mm_util_png_compression compression_level, FILE *fp, void **buffer, size_t *size)
{
+ mm_image_info_s *_decoded = (mm_image_info_s *)decoded;
png_structp png_ptr;
png_infop info_ptr;
guint row_index;
png_mem_s png_mem_ptr = {NULL, 0};
png_property_s png_prop;
- mm_util_retvm_if((decoded == NULL), MM_UTIL_ERROR_INVALID_PARAMETER, "invalid color image");
- mm_util_retvm_if(((fp == NULL) && (buffer == NULL || size == NULL)), MM_UTIL_ERROR_INVALID_PARAMETER, "invalid png image");
+ mm_util_retvm_if(!decoded, MM_UTIL_ERROR_INVALID_PARAMETER, "invalid image src");
+ mm_util_retvm_if(!fp && (!buffer || !size), MM_UTIL_ERROR_INVALID_PARAMETER, "invalid parameter");
+ mm_util_retvm_if(_decoded->color != MM_UTIL_COLOR_RGBA, MM_UTIL_ERROR_NOT_SUPPORTED_FORMAT, "not supported color [%d]", _decoded->color);
+
+ mm_util_fenter();
/* initialize png_prop */
png_prop.filter = PNG_FILTER_NONE;
/* set properties(header) from png_prop */
png_set_filter(png_ptr, 0, png_prop.filter);
png_set_compression_level(png_ptr, compression_level);
- png_set_IHDR(png_ptr, info_ptr, decoded->width, decoded->height, png_prop.bit_depth, png_prop.color_type, png_prop.interlace_type, png_prop.compression_type, png_prop.filter_type);
+ png_set_IHDR(png_ptr, info_ptr, _decoded->width, _decoded->height, png_prop.bit_depth, png_prop.color_type, png_prop.interlace_type, png_prop.compression_type, png_prop.filter_type);
rowbytes = (size_t)png_get_rowbytes(png_ptr, info_ptr);
- row_pointers = png_malloc(png_ptr, sizeof(png_bytep) * decoded->height);
+ row_pointers = png_malloc(png_ptr, sizeof(png_bytep) * _decoded->height);
if (row_pointers == NULL) {
mm_util_error("out of memory");
png_destroy_write_struct(&png_ptr, &info_ptr);
}
/* write png data */
- for (row_index = 0; row_index < decoded->height; row_index++)
- row_pointers[row_index] = decoded->data + (row_index * rowbytes);
+ for (row_index = 0; row_index < _decoded->height; row_index++)
+ row_pointers[row_index] = _decoded->data + (row_index * rowbytes);
png_write_info(png_ptr, info_ptr);
png_write_image(png_ptr, row_pointers);
*size = png_mem_ptr.size;
}
+ mm_util_fleave();
+
return MM_UTIL_ERROR_NONE;
}
return __read_png(NULL, memory, src_size, decoded);
}
-int mm_util_encode_to_png_file(mm_image_info_s *decoded, mm_util_png_compression compression_level, const char *fpath)
+int mm_util_encode_to_png_file(mm_util_image_h decoded, mm_util_png_compression compression_level, const char *file_path)
{
int ret = MM_UTIL_ERROR_NONE;
FILE *fp = NULL;
mm_util_retvm_if((decoded == NULL), MM_UTIL_ERROR_INVALID_PARAMETER, "invalid color image");
- mm_util_retvm_if(!MMUTIL_STRING_VALID(fpath), MM_UTIL_ERROR_INVALID_PARAMETER, "invalid path");
+ mm_util_retvm_if(!MMUTIL_STRING_VALID(file_path), MM_UTIL_ERROR_INVALID_PARAMETER, "invalid file_path");
- mm_util_fenter();
+ mm_util_sec_debug("Save to file [%s]", file_path);
- ret = mm_util_safe_fopen(fpath, "w", &fp);
+ ret = mm_util_safe_fopen(file_path, "w", &fp);
if (ret != MM_UTIL_ERROR_NONE) {
mm_util_error("mm_util_safe_fopen failed (%d)", ret);
mm_util_safe_fclose(fp);
return ret;
}
- ret = _write_png(decoded, compression_level, fp, NULL, NULL);
- if (ret != MM_UTIL_ERROR_NONE)
- mm_util_error("_write_png failed (%d)", ret);
+ ret = __write_png(decoded, compression_level, fp, NULL, NULL);
mm_util_safe_fclose(fp);
- mm_util_fleave();
-
return ret;
}
-int mm_util_encode_to_png_memory(mm_image_info_s *decoded, mm_util_png_compression compression_level, void **data, size_t *size)
+int mm_util_encode_to_png_memory(mm_util_image_h decoded, mm_util_png_compression compression_level, void **buffer, size_t *size)
{
- int ret = MM_UTIL_ERROR_NONE;
-
- mm_util_retvm_if((decoded == NULL), MM_UTIL_ERROR_INVALID_PARAMETER, "invalid color image");
- mm_util_retvm_if((data == NULL || size == NULL), MM_UTIL_ERROR_INVALID_PARAMETER, "invalid png image");
-
- mm_util_fenter();
+ mm_util_retvm_if(!buffer, MM_UTIL_ERROR_INVALID_PARAMETER, "invalid buffer");
+ mm_util_retvm_if(!size, MM_UTIL_ERROR_INVALID_PARAMETER, "invalid size");
- ret = _write_png(decoded, compression_level, NULL, data, size);
- if (ret != MM_UTIL_ERROR_NONE)
- mm_util_error("_write_png failed (%d)", ret);
-
- mm_util_fleave();
-
- return ret;
+ return __write_png(decoded, compression_level, NULL, buffer, size);
}