return rotation;
}
+
+static int __create_gif_thumbnail_to_file(const char *path, unsigned int thumb_w, unsigned int thumb_h, const char *thumb_path)
+{
+ int err = MS_MEDIA_ERR_NONE;
+ mm_util_image_h decode_image = NULL;
+
+ err = mm_util_decode_from_gif_file(path, &decode_image);
+ thumb_retvm_if(err != MM_UTIL_ERROR_NONE, MS_MEDIA_ERR_INTERNAL, "mm_util_decode_from_gif_file failed : %d", err);
+
+ err = mm_util_resize_B_P(decode_image, thumb_w, thumb_h, thumb_path);
+ mm_image_destroy_image(decode_image);
+ thumb_retvm_if(err != MM_UTIL_ERROR_NONE, MS_MEDIA_ERR_INTERNAL, "mm_util_resize_B_P failed : %d", err);
+
+ return MS_MEDIA_ERR_NONE;
+}
+
+static int __create_gif_thumbnail_to_buffer(const char *path, unsigned int thumb_w, unsigned int thumb_h, mm_util_image_h *thumbnail)
+{
+ int err = MS_MEDIA_ERR_NONE;
+ mm_util_image_h decode_image = NULL;
+
+ err = mm_util_decode_from_gif_file(path, &decode_image);
+ thumb_retvm_if(err != MM_UTIL_ERROR_NONE, MS_MEDIA_ERR_INTERNAL, "mm_util_decode_from_gif_file failed : %d", err);
+
+ err = mm_util_resize_B_B(decode_image, thumb_w, thumb_h, thumbnail);
+ mm_image_destroy_image(decode_image);
+ thumb_retvm_if(err != MM_UTIL_ERROR_NONE, MS_MEDIA_ERR_INTERNAL, "mm_util_resize_B_B failed : %d", err);
+
+ return MS_MEDIA_ERR_NONE;
+}
+
+static int __decode_jpeg_with_downscale(const char *path, size_t image_size, size_t thumb_size, mm_util_image_h *decode_image)
+{
+ mm_util_jpeg_decode_downscale downscale = MM_UTIL_JPEG_DECODE_DOWNSCALE_1_1;
+
+ // The downscale divide each width & height, so we should use squares 4(2*2), 16(4*4), 64(8*8).
+ if ((image_size >= thumb_size * 4) && (image_size < thumb_size * 16))
+ downscale = MM_UTIL_JPEG_DECODE_DOWNSCALE_1_2;
+ else if ((image_size >= thumb_size * 16) && (image_size < thumb_size * 64))
+ downscale = MM_UTIL_JPEG_DECODE_DOWNSCALE_1_4;
+ else if (image_size >= thumb_size * 64)
+ downscale = MM_UTIL_JPEG_DECODE_DOWNSCALE_1_8;
+
+ thumb_info("downscale: %d", downscale);
+
+ return mm_util_decode_from_jpeg_file(path, MM_UTIL_COLOR_RGB24, downscale, decode_image);
+}
+
+static int __create_jpeg_thumbnail_to_file(const char *path, size_t image_size, unsigned int thumb_w, unsigned int thumb_h, const char *thumb_path, bool auto_rotate)
+{
+ int err = MS_MEDIA_ERR_NONE;
+ mm_util_image_h decode_image = NULL;
+ mm_util_image_h resize_image = NULL;
+ mm_util_rotate_type_e rotation = __get_image_orientation(path);
+
+ err = __decode_jpeg_with_downscale(path, image_size, (size_t)(thumb_w * thumb_h), &decode_image);
+ thumb_retvm_if(err != MM_UTIL_ERROR_NONE, MS_MEDIA_ERR_INTERNAL, "mm_util_decode_from_jpeg_file failed : %d", err);
+
+ if (auto_rotate && (rotation != MM_UTIL_ROTATE_0)) {
+ err = mm_util_resize_B_B(decode_image, thumb_w, thumb_h, &resize_image);
+ mm_image_destroy_image(decode_image);
+ thumb_retvm_if(err != MM_UTIL_ERROR_NONE, MS_MEDIA_ERR_INTERNAL, "mm_util_resize_B_B failed : %d", err);
+
+ err = mm_util_rotate_B_P(resize_image, rotation, thumb_path);
+ mm_image_destroy_image(resize_image);
+ thumb_retvm_if(err != MM_UTIL_ERROR_NONE, MS_MEDIA_ERR_INTERNAL, "mm_util_rotate_B_P failed : %d", err);
+ } else {
+ err = mm_util_resize_B_P(decode_image, thumb_w, thumb_h, thumb_path);
+ mm_image_destroy_image(decode_image);
+ thumb_retvm_if(err != MM_UTIL_ERROR_NONE, MS_MEDIA_ERR_INTERNAL, "mm_util_resize_B_P failed : %d", err);
+ }
+
+ return MS_MEDIA_ERR_NONE;
+}
+
+static int __create_jpeg_thumbnail_to_buffer(const char *path, size_t image_size, unsigned int thumb_w, unsigned int thumb_h, mm_util_image_h *thumbnail)
+{
+ int err = MS_MEDIA_ERR_NONE;
+ mm_util_image_h decode_image = NULL;
+
+ err = __decode_jpeg_with_downscale(path, image_size, (size_t)(thumb_w * thumb_h), &decode_image);
+ thumb_retvm_if(err != MM_UTIL_ERROR_NONE, MS_MEDIA_ERR_INTERNAL, "mm_util_decode_from_jpeg_file failed : %d", err);
+
+ err = mm_util_resize_B_B(decode_image, thumb_w, thumb_h, thumbnail);
+ mm_image_destroy_image(decode_image);
+ thumb_retvm_if(err != MM_UTIL_ERROR_NONE, MS_MEDIA_ERR_INTERNAL, "mm_util_resize_B_B failed : %d", err);
+
+ return MS_MEDIA_ERR_NONE;
+}
#endif
int create_image_thumbnail_to_file(const char *path, unsigned int width, unsigned int height, const char *thumb_path, bool auto_rotate)
__media_thumb_get_proper_thumb_size(image_w, image_h, &thumb_w, &thumb_h);
#if defined(USE_MEMORY_USAGE_REDUCTION)
- if (image_type == IMG_CODEC_GIF) {
- mm_util_image_h decode_image = NULL;
-
- err = mm_util_decode_from_gif_file(path, &decode_image);
- thumb_retvm_if(err != MM_UTIL_ERROR_NONE, MS_MEDIA_ERR_INTERNAL, "mm_util_decode_from_gif_file failed : %d", err);
-
- err = mm_util_resize_B_P(decode_image, thumb_w, thumb_h, thumb_path);
- mm_image_destroy_image(decode_image);
- thumb_retvm_if(err != MM_UTIL_ERROR_NONE, MS_MEDIA_ERR_INTERNAL, "mm_util_resize_B_P failed : %d", err);
-
- return MS_MEDIA_ERR_NONE;
- } else if (image_type == IMG_CODEC_JPEG) {
- mm_util_image_h decode_image = NULL;
- mm_util_image_h resize_image = NULL;
- mm_util_jpeg_decode_downscale downscale = MM_UTIL_JPEG_DECODE_DOWNSCALE_1_1;
- unsigned int thumb_size = thumb_w * thumb_h;
- unsigned int image_size = image_w * image_h;
- mm_util_rotate_type_e rotation = __get_image_orientation(path);
-
- // The downscale divide each width & height, so we should use squares 4(2*2), 16(4*4), 64(8*8).
- if ((image_size >= thumb_size * 4) && (image_size < thumb_size * 16)) {
- downscale = MM_UTIL_JPEG_DECODE_DOWNSCALE_1_2;
- } else if ((image_size >= thumb_size * 16) && (image_size < thumb_size * 64)) {
- downscale = MM_UTIL_JPEG_DECODE_DOWNSCALE_1_4;
- } else if (image_size >= thumb_size * 64) {
- downscale = MM_UTIL_JPEG_DECODE_DOWNSCALE_1_8;
- }
-
- thumb_info("downscale: %d", downscale);
-
- err = mm_util_decode_from_jpeg_file(path, MM_UTIL_COLOR_RGB24, downscale, &decode_image);
- thumb_retvm_if(err != MM_UTIL_ERROR_NONE, MS_MEDIA_ERR_INTERNAL, "mm_util_decode_from_jpeg_file failed : %d", err);
-
- if (auto_rotate && (rotation != MM_UTIL_ROTATE_0)) {
- err = mm_util_resize_B_B(decode_image, thumb_w, thumb_h, &resize_image);
- mm_image_destroy_image(decode_image);
- thumb_retvm_if(err != MM_UTIL_ERROR_NONE, MS_MEDIA_ERR_INTERNAL, "mm_util_resize_B_B failed : %d", err);
-
- err = mm_util_rotate_B_P(resize_image, rotation, thumb_path);
- mm_image_destroy_image(resize_image);
- thumb_retvm_if(err != MM_UTIL_ERROR_NONE, MS_MEDIA_ERR_INTERNAL, "mm_util_rotate_B_P failed : %d", err);
- } else {
- err = mm_util_resize_B_P(decode_image, thumb_w, thumb_h, thumb_path);
- mm_image_destroy_image(decode_image);
- thumb_retvm_if(err != MM_UTIL_ERROR_NONE, MS_MEDIA_ERR_INTERNAL, "mm_util_resize_B_P failed : %d", err);
- }
-
- return MS_MEDIA_ERR_NONE;
- }
+ if (image_type == IMG_CODEC_GIF)
+ return __create_gif_thumbnail_to_file(path, thumb_w, thumb_h, thumb_path);
+ else if (image_type == IMG_CODEC_JPEG)
+ return __create_jpeg_thumbnail_to_file(path, (size_t)(image_w * image_h), thumb_w, thumb_h, thumb_path, auto_rotate);
#endif
if (auto_rotate)
#if defined(USE_MEMORY_USAGE_REDUCTION)
if (image_type == IMG_CODEC_GIF) {
- mm_util_image_h decode_image = NULL;
-
- err = mm_util_decode_from_gif_file(path, &decode_image);
- thumb_retvm_if(err != MM_UTIL_ERROR_NONE, MS_MEDIA_ERR_INTERNAL, "mm_util_decode_from_gif_file failed : %d", err);
-
- err = mm_util_resize_B_B(decode_image, thumb_w, thumb_h, &img);
- mm_image_destroy_image(decode_image);
- thumb_retvm_if(err != MM_UTIL_ERROR_NONE, MS_MEDIA_ERR_INTERNAL, "mm_util_resize_B_B failed : %d", err);
+ err = __create_gif_thumbnail_to_buffer(path, thumb_w, thumb_h, &img);
+ thumb_retvm_if(err != MM_UTIL_ERROR_NONE, MS_MEDIA_ERR_INTERNAL, "__create_gif_thumbnail_to_buffer failed : %d", err);
} else if (image_type == IMG_CODEC_JPEG) {
- mm_util_image_h decode_image = NULL;
- mm_util_jpeg_decode_downscale downscale = MM_UTIL_JPEG_DECODE_DOWNSCALE_1_1;
- unsigned int thumb_size = thumb_w * thumb_h;
- unsigned int image_size = image_w * image_h;
-
- // The downscale divide each width & height, so we should use squares 4(2*2), 16(4*4), 64(8*8).
- if ((image_size >= thumb_size * 4) && (image_size < thumb_size * 16)) {
- downscale = MM_UTIL_JPEG_DECODE_DOWNSCALE_1_2;
- } else if ((image_size >= thumb_size * 16) && (image_size < thumb_size * 64)) {
- downscale = MM_UTIL_JPEG_DECODE_DOWNSCALE_1_4;
- } else if (image_size >= thumb_size * 64) {
- downscale = MM_UTIL_JPEG_DECODE_DOWNSCALE_1_8;
- }
-
- thumb_info("downscale: %d", downscale);
- err = mm_util_decode_from_jpeg_file(path, MM_UTIL_COLOR_RGB24, downscale, &decode_image);
- thumb_retvm_if(err != MM_UTIL_ERROR_NONE, MS_MEDIA_ERR_INTERNAL, "mm_util_decode_from_jpeg_file failed : %d", err);
-
- err = mm_util_resize_B_B(decode_image, thumb_w, thumb_h, &img);
- mm_image_destroy_image(decode_image);
- thumb_retvm_if(err != MM_UTIL_ERROR_NONE, MS_MEDIA_ERR_INTERNAL, "mm_util_resize_B_B failed : %d", err);
-
- return MS_MEDIA_ERR_NONE;
+ err = __create_jpeg_thumbnail_to_buffer(path, (size_t)(image_w * image_h), thumb_w, thumb_h, &img);
+ thumb_retvm_if(err != MM_UTIL_ERROR_NONE, MS_MEDIA_ERR_INTERNAL, "__create_jpeg_thumbnail_to_buffer failed : %d", err);
} else
#endif
{