summaryrefslogtreecommitdiff
path: root/src/media-thumb-internal.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/media-thumb-internal.c')
-rwxr-xr-xsrc/media-thumb-internal.c674
1 files changed, 327 insertions, 347 deletions
diff --git a/src/media-thumb-internal.c b/src/media-thumb-internal.c
index 5ed752d..04c92c4 100755
--- a/src/media-thumb-internal.c
+++ b/src/media-thumb-internal.c
@@ -52,12 +52,17 @@
#define GLOBAL_USER 0 //#define tzplatform_getenv(TZ_GLOBAL) //TODO
#define MEDIA_THUMB_ROUND_UP_8(num) (((num)+7)&~7)
-int _media_thumb_get_proper_thumb_size(media_thumb_type thumb_type,
- int orig_w, int orig_h,
+int _media_thumb_resize_data(unsigned char *src_data,
+ int src_width,
+ int src_height,
+ mm_util_img_format src_format,
+ media_thumb_info *thumb_info,
+ int dst_width,
+ int dst_height);
+
+int _media_thumb_get_proper_thumb_size(int orig_w, int orig_h,
int *thumb_w, int *thumb_h)
{
- thumb_dbg("orig w: %d orig h: %d thumb type: %d", orig_w, orig_h, thumb_type);
-
BOOL portrait = FALSE;
double ratio;
@@ -67,23 +72,13 @@ int _media_thumb_get_proper_thumb_size(media_thumb_type thumb_type,
/* Set smaller length to default size */
if (portrait) {
- if (orig_w < _media_thumb_get_width(thumb_type)) {
+ if (orig_w < *thumb_w)
*thumb_w = orig_w;
- } else {
- *thumb_w = _media_thumb_get_width(thumb_type);
- }
-
ratio = (double)orig_h / (double)orig_w;
*thumb_h = *thumb_w * ratio;
-
} else {
-
- if (orig_h < _media_thumb_get_width(thumb_type)) {
+ if (orig_h < *thumb_h)
*thumb_h = orig_h;
- } else {
- *thumb_h = _media_thumb_get_width(thumb_type);
- }
-
ratio = (double)orig_w / (double)orig_h;
*thumb_w = *thumb_h * ratio;
}
@@ -138,27 +133,18 @@ int _media_thumb_get_exif_info(ExifData *ed, char *buf, int max_size, int *value
return MS_MEDIA_ERR_NONE;
}
-int _media_thumb_get_thumb_from_exif(ExifData *ed,
- const char *file_full_path,
- int orientation,
- int required_width,
- int required_height,
- media_thumb_info *thumb_info, uid_t uid)
+static int _media_thumb_get_data_from_exif(ExifData *ed,
+ void **thumb_data,
+ int *thumb_size,
+ int *thumb_width,
+ int *thumb_height,
+ int *origin_width,
+ int *origin_height)
{
ExifEntry *entry;
ExifIfd ifd;
ExifTag tag;
- int err = -1;
- int size = 0;
- int thumb_width = 0;
- int thumb_height = 0;
- void *thumb = NULL;
-
- if (ed == NULL) {
- return -1;
- }
-
ExifByteOrder byte_order = exif_data_get_byte_order(ed);
ifd = EXIF_IFD_1;
@@ -182,241 +168,239 @@ int _media_thumb_get_thumb_from_exif(ExifData *ed,
return MS_MEDIA_ERR_INVALID_PARAMETER;
}
+ /* copy the real thumbnail data from exif data */
+ if (ed->data && ed->size) {
+ //thumb_dbg("Size: %d, thumb: 0x%x", ed->size, ed->data);
+ *thumb_data = (char *)malloc(ed->size);
+
+ if (*thumb_data == NULL) {
+ thumb_dbg("malloc failed!");
+ return MS_MEDIA_ERR_INVALID_PARAMETER;
+ }
+
+ memcpy(*thumb_data, (void *)ed->data, ed->size);
+ *thumb_size = ed->size;
+ } else {
+ thumb_dbg("data is NULL");
+ return MS_MEDIA_ERR_INVALID_PARAMETER;
+ }
+
/* Get width and height of thumbnail */
tag = EXIF_TAG_IMAGE_WIDTH;
entry = exif_content_get_entry(ed->ifd[ifd], tag);
if (entry) {
/* Get the contents of the tag in human-readable form */
- ExifShort value = exif_get_short(entry->data, byte_order);
- //thumb_dbg("%s: %d\n", exif_tag_get_name_in_ifd(tag,ifd), value);
+ char width[10] = {0,};
+ exif_entry_get_value(entry,width,10);
- thumb_width = value;
+ *thumb_width = atoi(width);
+ } else {
+ thumb_warn("EXIF_TAG_IMAGE_WIDTH does not exist");
+ *thumb_width = 0;
}
tag = EXIF_TAG_IMAGE_LENGTH;
entry = exif_content_get_entry(ed->ifd[ifd], tag);
if (entry) {
/* Get the contents of the tag in human-readable form */
- ExifShort value = exif_get_short(entry->data, byte_order);
- //thumb_dbg("%s: %d\n", exif_tag_get_name_in_ifd(tag,ifd), value);
-
- thumb_height = value;
- }
+ char height[10] = {0,};
+ exif_entry_get_value(entry,height,10);
- if (ed->data && ed->size) {
- //thumb_dbg("Size: %d, thumb: 0x%x\n", ed->size, ed->data);
- thumb = (char *)malloc(ed->size);
-
- if (thumb == NULL) {
- thumb_dbg("malloc failed!");
- return -1;
- }
-
- memcpy(thumb, (void *)ed->data, ed->size);
- size = ed->size;
+ *thumb_height = atoi(height);
} else {
- thumb_dbg("data is NULL");
- return -1;
+ thumb_warn("EXIF_TAG_IMAGE_LENGTH does not exist");
+ *thumb_height = 0;
}
+ thumb_dbg("thumb width : height [%d:%d]", *thumb_width, *thumb_height);
+
/* Get width and height of original image from exif */
ifd = EXIF_IFD_EXIF;
tag = EXIF_TAG_PIXEL_X_DIMENSION;
entry = exif_content_get_entry(ed->ifd[ifd], tag);
if (entry) {
- ExifShort value = exif_get_short(entry->data, byte_order);
- //thumb_dbg("%s: %d\n", exif_tag_get_name_in_ifd(tag,ifd), value);
- thumb_info->origin_width = value;
+ char width[10] = {0,};
+ exif_entry_get_value(entry,width,10);
+
+ *origin_width = atoi(width);
} else {
- thumb_dbg("entry is NULL");
+ thumb_warn("EXIF_TAG_PIXEL_X_DIMENSION does not exist");
+ *origin_width = 0;
}
tag = EXIF_TAG_PIXEL_Y_DIMENSION;
entry = exif_content_get_entry(ed->ifd[ifd], tag);
if (entry) {
- ExifShort value = exif_get_short(entry->data, byte_order);
- //thumb_dbg("%s: %d\n", exif_tag_get_name_in_ifd(tag,ifd), value);
- thumb_info->origin_height = value;
- } else {
- thumb_dbg("entry is NULL");
- }
-
- char thumb_path[1024];
+ char height[10] = {0,};
+ exif_entry_get_value(entry,height,10);
- err =
- _media_thumb_get_hash_name(file_full_path,
- thumb_path,
- sizeof(thumb_path), uid);
- if (err < 0) {
- thumb_dbg("_media_thumb_get_hash_name failed\n");
- SAFE_FREE(thumb);
- return err;
- }
-
- thumb_dbg("Thumb is :%s", thumb_path);
-
- int nwrite;
- int fd = open(thumb_path, O_RDWR | O_CREAT | O_EXCL | O_SYNC, 0644);
- if (fd < 0) {
- if (errno == EEXIST) {
- thumb_dbg("thumb alread exist!");
- } else {
- thumb_dbg("open failed\n");
- SAFE_FREE(thumb);
- return -1;
- }
+ *origin_height = atoi(height);
} else {
- nwrite = write(fd, thumb, size);
- if (nwrite < 0) {
- thumb_dbg("write failed\n");
- close(fd);
-
- SAFE_FREE(thumb);
- return -1;
- }
- close(fd);
+ thumb_warn("EXIF_TAG_PIXEL_Y_DIMENSION does not exist");
+ *origin_height = 0;
}
- SAFE_FREE(thumb);
+ return MS_MEDIA_ERR_NONE;
+}
+int _media_thumb_get_thumb_from_exif(ExifData *ed,
+ const char *file_full_path,
+ const char *thumb_path,
+ int orientation,
+ int required_width,
+ int required_height,
+ media_thumb_info *thumb_info)
+{
+ int err = MS_MEDIA_ERR_NONE;
+ int size = 0;
+ int thumb_width = 0;
+ int thumb_height = 0;
+ int origin_width = 0;
+ int origin_height = 0;
+ void *thumb = NULL;
+ bool is_rotated = (orientation == ROT_90 || orientation == ROT_180 || orientation == ROT_270) ? TRUE : FALSE;
mm_util_jpeg_yuv_data decoded = {0,};
- err = mm_util_decode_from_jpeg_file(&decoded, thumb_path, MM_UTIL_JPEG_FMT_RGB888);
- if (err < 0) {
- thumb_dbg("mm_util_decode_from_jpeg_turbo_memory failed : %d", err);
- return err;
+ if (ed == NULL) {
+ return MS_MEDIA_ERR_INVALID_PARAMETER;
}
- //thumb_dbg("size:%d, w:%d, h:%d\n", decoded.size, decoded.width, decoded.height);
-
- thumb_width = decoded.width;
- thumb_height = decoded.height;
-
- media_thumb_type thumb_type;
- int need_resize = 0;
- unsigned int buf_size = decoded.size;
-
- if (required_width == _media_thumb_get_width(MEDIA_THUMB_LARGE)) {
- thumb_type = MEDIA_THUMB_LARGE;
- } else {
- thumb_type = MEDIA_THUMB_SMALL;
- }
+ err = _media_thumb_get_data_from_exif(ed,
+ &thumb,
+ &size,
+ &thumb_width,
+ &thumb_height,
+ &origin_width,
+ &origin_height);
- if (thumb_type == MEDIA_THUMB_LARGE) {
- if (thumb_width < _media_thumb_get_width(MEDIA_THUMB_LARGE)) {
- thumb_dbg("Thumb data in exif is too small for MEDIA_THUMB_LARGE");
- SAFE_FREE(decoded.data);
- return -1;
- }
- } else {
- if (thumb_width > _media_thumb_get_width(MEDIA_THUMB_SMALL)) {
- need_resize = 1;
- }
+ if (err != MS_MEDIA_ERR_NONE) {
+ thumb_err("There is no exif data");
+ return err;
}
- if (need_resize == 1) {
- int resized_w = _media_thumb_get_width(MEDIA_THUMB_LARGE);
- int resized_h = _media_thumb_get_height(MEDIA_THUMB_LARGE);
+ thumb_dbg("thumb width : height [%d:%d]", thumb_width, thumb_height);
+ thumb_dbg("origin width : height [%d:%d]", origin_width, origin_height);
+ thumb_info->origin_height = origin_height;
+ thumb_info->origin_width = origin_width;
- err = mm_util_get_image_size(MM_UTIL_IMG_FMT_RGB888, resized_w, resized_h, &buf_size);
- if (err < 0) {
- thumb_dbg("mm_util_get_image_size failed : %d", err);
+ if (thumb_width < required_width) {
+ thumb_err("Thumb data in exif is too small");
+ SAFE_FREE(thumb);
+ return MS_MEDIA_ERR_INVALID_PARAMETER;
+ }
- SAFE_FREE(decoded.data);
+ if (is_rotated) {
+ err = mm_util_decode_from_jpeg_memory(&decoded, thumb, size, MM_UTIL_JPEG_FMT_RGB888);
+ SAFE_FREE(thumb);
+ if (err != MS_MEDIA_ERR_NONE) {
+ thumb_err("mm_util_decode_from_jpeg_turbo_memory failed : %d", err);
return err;
}
- //thumb_dbg("size(RGB888) : %d", buf_size);
-
- unsigned char *dst = (unsigned char *)malloc(buf_size);
- if (dst == NULL) {
- thumb_err("Failed to allocate memory!");
- SAFE_FREE(decoded.data);
- return -1;
- }
+ thumb_width = decoded.width;
+ thumb_height = decoded.height;
- if (mm_util_resize_image(decoded.data, thumb_width,
- thumb_height, MM_UTIL_IMG_FMT_RGB888,
- dst, (unsigned int *)&resized_w,
- (unsigned int *)&resized_h) < 0) {
- thumb_err("Failed to resize the thumbnails");
+ if (is_rotated) {
+ /* Start to decode to rotate */
+ unsigned char *rotated = NULL;
+ unsigned int r_w = decoded.height;
+ unsigned int r_h = decoded.width;
+ unsigned int r_size = 0;
+ mm_util_img_rotate_type rot_type = MM_UTIL_ROTATE_0;
- SAFE_FREE(decoded.data);
- SAFE_FREE(dst);
+ int i, rotate_cnt = 0;
- return -1;
- }
+ rot_type = MM_UTIL_ROTATE_90;
+ if (orientation == ROT_90) {
+ rotate_cnt = 1;
+ } else if (orientation == ROT_180) {
+ rotate_cnt = 2;
+ } else if (orientation == ROT_270) {
+ rotate_cnt = 3;
+ }
- SAFE_FREE(decoded.data);
- decoded.data = dst;
- decoded.width = thumb_width = resized_w;
- decoded.height = thumb_height = resized_h;
- }
+ for (i = 0; i < rotate_cnt; i++) {
+ if (i == 1) {
+ r_w = decoded.width;
+ r_h = decoded.height;
+ }
- if (orientation == ROT_90 || orientation == ROT_180 || orientation == ROT_270) {
- /* Start to decode to rotate */
- unsigned char *rotated = NULL;
- unsigned int r_w = decoded.height;
- unsigned int r_h = decoded.width;
- unsigned int r_size = 0;
- mm_util_img_rotate_type rot_type = MM_UTIL_ROTATE_0;
+ err = mm_util_get_image_size(MM_UTIL_IMG_FMT_RGB888, r_w, r_h, &r_size);
+ if (err != MS_MEDIA_ERR_NONE) {
+ thumb_err("mm_util_get_image_size failed : %d", err);
+ SAFE_FREE(decoded.data);
+ return err;
+ }
- if (orientation == ROT_90) {
- rot_type = MM_UTIL_ROTATE_90;
- } else if (orientation == ROT_180) {
- rot_type = MM_UTIL_ROTATE_180;
- r_w = decoded.width;
- r_h = decoded.height;
- } else if (orientation == ROT_270) {
- rot_type = MM_UTIL_ROTATE_270;
- }
+ rotated = (unsigned char *)malloc(r_size);
+ err = mm_util_rotate_image(decoded.data, decoded.width, decoded.height,
+ MM_UTIL_IMG_FMT_RGB888,
+ rotated, &r_w, &r_h,
+ rot_type);
- err = mm_util_get_image_size(MM_UTIL_IMG_FMT_RGB888, r_w, r_h, &r_size);
- if (err < 0) {
- thumb_dbg("mm_util_get_image_size failed : %d", err);
- SAFE_FREE(decoded.data);
- return err;
- }
+ if (err != MS_MEDIA_ERR_NONE) {
+ thumb_err("mm_util_rotate_image failed : %d", err);
+ SAFE_FREE(decoded.data);
+ SAFE_FREE(rotated);
+ return err;
+ } else {
+ thumb_err("mm_util_rotate_image succeed");
+ }
- //thumb_dbg("Size of Rotated : %d", r_size);
+ SAFE_FREE(decoded.data);
+ decoded.data = rotated;
+ decoded.width = r_w;
+ decoded.height = r_h;
+ }
- rotated = (unsigned char *)malloc(r_size);
- err = mm_util_rotate_image(decoded.data, decoded.width, decoded.height,
- MM_UTIL_IMG_FMT_RGB888,
- rotated, &r_w, &r_h,
- rot_type);
-
- if (err < 0) {
- thumb_err("mm_util_rotate_image failed : %d", err);
- SAFE_FREE(decoded.data);
- SAFE_FREE(rotated);
- return err;
+ //thumb_dbg("Width : %d, Height : %d", r_w, r_h);
+ thumb_info->data = rotated;
+ thumb_info->size = r_size;
+ thumb_info->width = r_w;
+ thumb_info->height = r_h;
} else {
- thumb_dbg("mm_util_rotate_image succeed");
+ thumb_warn("Unknown orientation");
+ SAFE_FREE(decoded.data);
+ return MS_MEDIA_ERR_INVALID_PARAMETER;
}
+ }else {
+ /*in this case, just write raw data in file */
+ thumb_dbg_slog("Thumb is :%s", thumb_path);
+
+ int nwrite;
+ int fd = open(thumb_path, O_RDWR | O_CREAT | O_EXCL | O_SYNC, 0644);
+ if (fd < 0) {
+ if (errno == EEXIST) {
+ thumb_err("thumb alread exist!");
+ } else {
+ thumb_err("open failed");
+ SAFE_FREE(thumb);
+ return MS_MEDIA_ERR_INVALID_PARAMETER;
+ }
+ } else {
+ nwrite = write(fd, thumb, size);
+ if (nwrite < 0) {
+ thumb_err("write failed");
+ close(fd);
- SAFE_FREE(decoded.data);
+ SAFE_FREE(thumb);
+ return MS_MEDIA_ERR_INVALID_PARAMETER;
+ }
+ close(fd);
+ }
- //thumb_dbg("Width : %d, Height : %d", r_w, r_h);
- thumb_info->data = rotated;
- thumb_info->size = r_size;
- thumb_info->width = r_w;
- thumb_info->height = r_h;
- } else if (orientation == NORMAL) {
- thumb_info->data = decoded.data;
- thumb_info->size = buf_size;
+ SAFE_FREE(thumb);
+ thumb_info->data = NULL;
+ thumb_info->size = size;
thumb_info->width = thumb_width;
thumb_info->height = thumb_height;
- } else {
- thumb_warn("Unknown orientation");
- SAFE_FREE(decoded.data);
- return -1;
+ thumb_info->is_saved = TRUE;
}
- return 0;
+ return err;
}
int _media_thumb_resize_data(unsigned char *src_data,
@@ -455,8 +439,12 @@ int _media_thumb_resize_data(unsigned char *src_data,
thumb_info->width = thumb_width;
thumb_info->height = thumb_height;
thumb_info->data = malloc(buf_size);
- memcpy(thumb_info->data, dst, buf_size);
-
+ if(thumb_info->data != NULL) {
+ memcpy(thumb_info->data, dst, buf_size);
+ } else {
+ thumb_err("malloc fails");
+ return MS_MEDIA_ERR_OUT_OF_MEMORY;
+ }
SAFE_FREE(dst);
return MS_MEDIA_ERR_NONE;
@@ -553,17 +541,8 @@ int _media_thumb_decode_with_evas(const char *origin_path,
//thumb_dbg("rotated - origin width:%d, origin height:%d", rotated_orig_w, rotated_orig_h);
int err = MS_MEDIA_ERR_NONE;
- media_thumb_type thumb_type;
-
- if (thumb_width == _media_thumb_get_width(MEDIA_THUMB_LARGE)) {
- thumb_type = MEDIA_THUMB_LARGE;
- } else {
- thumb_type = MEDIA_THUMB_SMALL;
- }
- err = _media_thumb_get_proper_thumb_size(thumb_type,
- rotated_orig_w, rotated_orig_h,
- &thumb_width, &thumb_height);
+ err = _media_thumb_get_proper_thumb_size(rotated_orig_w, rotated_orig_h, &thumb_width, &thumb_height);
if (err != MS_MEDIA_ERR_NONE) {
thumb_err("_media_thumb_get_proper_thumb_size failed: %d", err);
ecore_evas_free(resize_img_ee);
@@ -755,7 +734,8 @@ int _media_thumb_convert_format(media_thumb_info *thumb_info,
}
int _media_thumb_agif(const char *origin_path,
- ImgImageInfo *image_info,
+ int image_width,
+ int image_height,
int thumb_width,
int thumb_height,
media_thumb_format format,
@@ -763,24 +743,15 @@ int _media_thumb_agif(const char *origin_path,
{
int err = MS_MEDIA_ERR_NONE;
unsigned int *thumb = NULL;
- media_thumb_type thumb_type;
- thumb = ImgGetFirstFrameAGIFAtSize(origin_path, image_info);
+ thumb = ImgGetFirstFrameAGIFAtSize(origin_path, image_width, image_height);
if (!thumb) {
thumb_err("Frame data is NULL!!");
return MS_MEDIA_ERR_INTERNAL;
}
- if (thumb_width == _media_thumb_get_width(MEDIA_THUMB_LARGE)) {
- thumb_type = MEDIA_THUMB_LARGE;
- } else {
- thumb_type = MEDIA_THUMB_SMALL;
- }
-
- err = _media_thumb_get_proper_thumb_size(thumb_type,
- thumb_info->origin_width, thumb_info->origin_height,
- &thumb_width, &thumb_height);
+ err = _media_thumb_get_proper_thumb_size(thumb_info->origin_width, thumb_info->origin_height, &thumb_width, &thumb_height);
if (err != MS_MEDIA_ERR_NONE) {
thumb_err("_media_thumb_get_proper_thumb_size failed: %d", err);
SAFE_FREE(thumb);
@@ -788,8 +759,8 @@ int _media_thumb_agif(const char *origin_path,
}
err = _media_thumb_resize_data((unsigned char *)thumb,
- image_info->width,
- image_info->height,
+ image_width,
+ image_height,
MM_UTIL_IMG_FMT_RGB888,
thumb_info,
thumb_width,
@@ -910,11 +881,11 @@ int _media_thumb_gif(const char *origin_path,
}
int _media_thumb_jpeg(const char *origin_path,
+ const char *thumb_path,
int thumb_width,
int thumb_height,
media_thumb_format format,
- media_thumb_info *thumb_info,
- uid_t uid)
+ media_thumb_info *thumb_info)
{
int err = MS_MEDIA_ERR_NONE;
ExifData *ed = NULL;
@@ -933,7 +904,7 @@ int _media_thumb_jpeg(const char *origin_path,
}
/* Second, Get thumb from exif */
- err = _media_thumb_get_thumb_from_exif(ed, origin_path, orientation, thumb_width, thumb_height, thumb_info, uid);
+ err = _media_thumb_get_thumb_from_exif(ed, origin_path, thumb_path, orientation, thumb_width, thumb_height, thumb_info);
if (err != MS_MEDIA_ERR_NONE) {
thumb_dbg("_media_thumb_get_thumb_from_exif failed");
@@ -941,18 +912,31 @@ int _media_thumb_jpeg(const char *origin_path,
thumb_done = 1;
thumb_dbg("_media_thumb_get_thumb_from_exif succeed");
- mm_util_img_format dst_format = _media_thumb_get_format(format);
+ /* The case that original image's size is not in exif header. Use evas to get w/h */
+ if (thumb_info->origin_width == 0 || thumb_info->origin_height == 0) {
+ thumb_warn("original image's size is not in exif header. Use evas to get w/h");
+ err = _media_thumb_get_wh_with_evas(origin_path, &(thumb_info->origin_width), &(thumb_info->origin_height));
+ if (err != MS_MEDIA_ERR_NONE) {
+ thumb_err("Couldn't get w/h using evas : %s", origin_path);
+ } else {
+ thumb_dbg("origin w : %d, origin h : %d", thumb_info->origin_width, thumb_info->origin_height);
+ }
+ }
+
+ if (thumb_info->is_saved == FALSE) {
+ mm_util_img_format dst_format = _media_thumb_get_format(format);
- err = _media_thumb_convert_data(thumb_info,
- thumb_info->width,
- thumb_info->height,
- MM_UTIL_IMG_FMT_RGB888,
- dst_format);
+ err = _media_thumb_convert_data(thumb_info,
+ thumb_info->width,
+ thumb_info->height,
+ MM_UTIL_IMG_FMT_RGB888,
+ dst_format);
- if (err != MS_MEDIA_ERR_NONE) {
- thumb_err("_media_thumb_convert_data failed : %d", err);
- exif_data_unref(ed);
- return err;
+ if (err != MS_MEDIA_ERR_NONE) {
+ thumb_err("_media_thumb_convert_data failed : %d", err);
+ exif_data_unref(ed);
+ return err;
+ }
}
}
@@ -980,11 +964,11 @@ int _media_thumb_jpeg(const char *origin_path,
}
int _media_thumb_jpeg_for_raw(const char *origin_path,
+ const char *thumb_path,
int thumb_width,
int thumb_height,
media_thumb_format format,
- media_thumb_info *thumb_info,
- uid_t uid)
+ media_thumb_info *thumb_info)
{
int err = MS_MEDIA_ERR_NONE;
int orientation = NORMAL;
@@ -1006,23 +990,26 @@ int _media_thumb_jpeg_for_raw(const char *origin_path,
}
int _media_thumb_image(const char *origin_path,
+ const char *thumb_path,
int thumb_width,
int thumb_height,
media_thumb_format format,
media_thumb_info *thumb_info,
- bool is_raw,
- uid_t uid)
+ bool is_req_raw)
{
int err = MS_MEDIA_ERR_NONE;
- int image_type = 0;
- int origin_w = 0;
- int origin_h = 0;
- ImgImageInfo image_info = { 0 };
+ ImgCodecType image_type = 0;
+ unsigned int origin_w = 0;
+ unsigned int origin_h = 0;
- image_type = ImgGetInfoFile(origin_path, &image_info);
+ err = ImgGetImageInfoForThumb(origin_path, &image_type, &origin_w, &origin_h);
+
+ if (err != MS_MEDIA_ERR_NONE){
+ thumb_warn("Getting image info is failed err: %d", err);
+ }
- thumb_info->origin_width = origin_w = image_info.width;
- thumb_info->origin_height = origin_h = image_info.height;
+ thumb_info->origin_width = origin_w;
+ thumb_info->origin_height = origin_h;
//thumb_dbg("image type is %d, width:%d, height:%d", image_type, origin_w, origin_h);
@@ -1033,12 +1020,12 @@ int _media_thumb_image(const char *origin_path,
}
if (image_type == IMG_CODEC_AGIF) {
- err = _media_thumb_agif(origin_path, &image_info, thumb_width, thumb_height, format, thumb_info);
+ err = _media_thumb_agif(origin_path, origin_w, origin_h, thumb_width, thumb_height, format, thumb_info);
} else if (image_type == IMG_CODEC_JPEG) {
- if(is_raw) {
- err = _media_thumb_jpeg_for_raw(origin_path, thumb_width, thumb_height, format, thumb_info, uid);
+ if(is_req_raw == TRUE) {
+ err = _media_thumb_jpeg_for_raw(origin_path, thumb_path, thumb_width, thumb_height, format, thumb_info);
} else {
- err = _media_thumb_jpeg(origin_path, thumb_width, thumb_height, format, thumb_info, uid);
+ err = _media_thumb_jpeg(origin_path, thumb_path, thumb_width, thumb_height, format, thumb_info);
}
} else if (image_type == IMG_CODEC_PNG) {
err = _media_thumb_png(origin_path, thumb_width, thumb_height, format, thumb_info);
@@ -1088,8 +1075,7 @@ int _media_thumb_video(const char *origin_path,
int thumb_width,
int thumb_height,
media_thumb_format format,
- media_thumb_info *thumb_info,
- uid_t uid)
+ media_thumb_info *thumb_info)
{
int err = MS_MEDIA_ERR_NONE;
@@ -1104,7 +1090,59 @@ int _media_thumb_video(const char *origin_path,
bool drm_type = FALSE;
is_drm = drm_type;
- err = mm_file_create_content_attrs(&content, origin_path);
+
+ /* Get Content Tag attribute for orientatin */
+ MMHandleType tag = (MMHandleType) NULL;
+ char *p = NULL;
+ int cdis_value = 0;
+ err = mm_file_create_tag_attrs(&tag, origin_path);
+ mm_util_img_rotate_type rot_type = MM_UTIL_ROTATE_0;
+
+ if (err == MM_ERROR_NONE) {
+ err = mm_file_get_attrs(tag, &err_msg, MM_FILE_TAG_ROTATE, &p, &size, NULL);
+ if (err == MM_ERROR_NONE && size >= 0) {
+ if (p == NULL) {
+ rot_type = MM_UTIL_ROTATE_0;
+ } else {
+ if (strncmp(p, "90", size) == 0) {
+ rot_type = MM_UTIL_ROTATE_90;
+ } else if(strncmp(p, "180", size) == 0) {
+ rot_type = MM_UTIL_ROTATE_180;
+ } else if(strncmp(p, "270", size) == 0) {
+ rot_type = MM_UTIL_ROTATE_270;
+ } else {
+ rot_type = MM_UTIL_ROTATE_0;
+ }
+ }
+ thumb_dbg("There is tag rotate : %d", rot_type);
+ } else {
+ thumb_dbg("There is NOT tag rotate");
+ rot_type = MM_UTIL_ROTATE_0;
+ SAFE_FREE(err_msg);
+ }
+
+ err = mm_file_get_attrs(tag, &err_msg, MM_FILE_TAG_CDIS, &cdis_value, NULL);
+ if (err != MM_ERROR_NONE) {
+ cdis_value = 0;
+ SAFE_FREE(err_msg);
+ }
+
+ } else {
+ rot_type = MM_UTIL_ROTATE_0;
+ cdis_value = 0;
+ }
+
+ err = mm_file_destroy_tag_attrs(tag);
+ if (err != MM_ERROR_NONE) {
+ thumb_err("fail to free tag attr - err(%x)", err);
+ }
+
+ if (cdis_value == 1) {
+ thumb_warn("This is CDIS vlaue 1");
+ err = mm_file_create_content_attrs_safe(&content, origin_path);
+ } else {
+ err = mm_file_create_content_attrs(&content, origin_path);
+ }
if (err != MM_ERROR_NONE) {
thumb_err("mm_file_create_content_attrs fails : %d", err);
@@ -1148,17 +1186,10 @@ int _media_thumb_video(const char *origin_path,
return MS_MEDIA_ERR_INTERNAL;
}
- media_thumb_type thumb_type;
- if (thumb_width == _media_thumb_get_width(MEDIA_THUMB_LARGE)) {
- thumb_type = MEDIA_THUMB_LARGE;
- } else {
- thumb_type = MEDIA_THUMB_SMALL;
- }
-
thumb_info->origin_width = width;
thumb_info->origin_height = height;
- err = _media_thumb_get_proper_thumb_size(thumb_type, width, height, &thumb_width, &thumb_height);
+ err = _media_thumb_get_proper_thumb_size(width, height, &thumb_width, &thumb_height);
if (width > thumb_width || height > thumb_height) {
err = _media_thumb_resize_data(frame,
@@ -1180,48 +1211,15 @@ int _media_thumb_video(const char *origin_path,
thumb_info->width = width;
thumb_info->height = height;
thumb_info->data = malloc(size);
+ if (thumb_info->data == NULL) {
+ thumb_err("memory allcation failed" );
+ mm_file_destroy_content_attrs(content);
+ return MS_MEDIA_ERR_OUT_OF_MEMORY;
+ }
memcpy(thumb_info->data, frame, size);
}
mm_file_destroy_content_attrs(content);
-
- /* Get Content Tag attribute for orientatin */
- MMHandleType tag = (MMHandleType) NULL;
- char *p = NULL;
- int size = -1;
- err = mm_file_create_tag_attrs(&tag, origin_path);
- mm_util_img_rotate_type rot_type = MM_UTIL_ROTATE_0;
-
- if (err == MM_ERROR_NONE) {
- err = mm_file_get_attrs(tag, &err_msg, MM_FILE_TAG_ROTATE, &p, &size, NULL);
- if (err == MM_ERROR_NONE && size >= 0) {
-
- if (p == NULL) {
- rot_type = MM_UTIL_ROTATE_0;
- } else {
- if (strncmp(p, "90", size) == 0) {
- rot_type = MM_UTIL_ROTATE_90;
- } else if(strncmp(p, "180", size) == 0) {
- rot_type = MM_UTIL_ROTATE_180;
- } else if(strncmp(p, "270", size) == 0) {
- rot_type = MM_UTIL_ROTATE_270;
- } else {
- rot_type = MM_UTIL_ROTATE_0;
- }
- }
- } else {
- rot_type = MM_UTIL_ROTATE_0;
- SAFE_FREE(err_msg);
- }
- } else {
- rot_type = MM_UTIL_ROTATE_0;
- }
-
- err = mm_file_destroy_tag_attrs(tag);
- if (err != MM_ERROR_NONE) {
- thumb_err("fail to free tag attr - err(%x)", err);
- }
-
if (rot_type == MM_UTIL_ROTATE_90 || rot_type == MM_UTIL_ROTATE_180 || rot_type == MM_UTIL_ROTATE_270) {
/* Start to decode to rotate */
unsigned char *rotated = NULL;
@@ -1281,24 +1279,6 @@ int _media_thumb_video(const char *origin_path,
return err;
}
-static int _mkdir(const char *dir, mode_t mode) {
- char tmp[256];
- char *p = NULL;
- size_t len;
-
- snprintf(tmp, sizeof(tmp),"%s",dir);
- len = strlen(tmp);
- if(tmp[len - 1] == '/')
- tmp[len - 1] = 0;
- for(p = tmp + 1; *p; p++)
- if(*p == '/') {
- *p = 0;
- mkdir(tmp, mode);
- *p = '/';
- }
- return mkdir(tmp, mode);
-}
-
static char* _media_thumb_mmc_get_path(uid_t uid)
{
char *result_psswd = NULL;
@@ -1333,8 +1313,6 @@ static char* _media_thumb_mmc_get_path(uid_t uid)
}
asprintf(&result_psswd, "%s/data/file-manager-service/.thumb/mmc", userinfo->pw_dir);
}
-
- _mkdir(result_psswd,S_IRWXU | S_IRWXG | S_IRWXO);
return result_psswd;
}
@@ -1374,56 +1352,58 @@ static char* _media_thumb_phone_get_path(uid_t uid)
asprintf(&result_psswd, "%s/data/file-manager-service/.thumb/phone", userinfo->pw_dir);
}
- _mkdir(result_psswd,S_IRWXU | S_IRWXG | S_IRWXO);
-
return result_psswd;
}
int _media_thumb_get_hash_name(const char *file_full_path,
char *thumb_hash_path, size_t max_thumb_path, uid_t uid)
{
- char *hash_name;
- char *thumb_dir = NULL;
+ char *hash_name = NULL;
+ /*char *thumb_dir = NULL;*/
char file_ext[255] = { 0 };
+ int ret_len = 0;
media_thumb_store_type store_type = -1;
if (file_full_path == NULL || thumb_hash_path == NULL
|| max_thumb_path <= 0) {
thumb_err
("file_full_path==NULL || thumb_hash_path == NULL || max_thumb_path <= 0");
- return -1;
+ return MS_MEDIA_ERR_INVALID_PARAMETER;
}
_media_thumb_get_file_ext(file_full_path, file_ext, sizeof(file_ext));
store_type = _media_thumb_get_store_type_by_path(file_full_path);
- if (store_type == THUMB_PHONE) {
+ /*if (store_type == THUMB_PHONE) {
thumb_dir = _media_thumb_phone_get_path(uid);
} else if (store_type == THUMB_MMC) {
thumb_dir = _media_thumb_mmc_get_path(uid);
} else {
thumb_dir = _media_thumb_phone_get_path(uid);
- }
+ }*/
hash_name = _media_thumb_generate_hash_name(file_full_path);
+ if(hash_name == NULL)
+ {
+ thumb_err("_media_thumb_generate_hash_name fail");
+ return MS_MEDIA_ERR_INTERNAL;
+ }
- int ret_len;
- ret_len =
- snprintf(thumb_hash_path, max_thumb_path - 1, "%s/.%s-%s.jpg",
- thumb_dir, file_ext, hash_name);
- if(thumb_dir)
- free(thumb_dir);
- if (ret_len < 0) {
- thumb_err("Error when snprintf");
- return -1;
- } else if (ret_len > max_thumb_path) {
- thumb_err("Error for the length of thumb pathname");
- return -1;
+ if (store_type == THUMB_PHONE) {
+ ret_len = snprintf(thumb_hash_path, max_thumb_path - 1, "%s/.%s-%s.jpg", _media_thumb_phone_get_path(uid), file_ext, hash_name);
+ } else if (store_type == THUMB_MMC) {
+ ret_len = snprintf(thumb_hash_path, max_thumb_path - 1, "%s/.%s-%s.jpg", _media_thumb_mmc_get_path(uid), file_ext, hash_name);
+ } else {
+ ret_len = snprintf(thumb_hash_path, max_thumb_path - 1, "%s/.%s-%s.jpg", _media_thumb_phone_get_path(uid), file_ext, hash_name);
}
+ if ((ret_len < 0) || (ret_len > (int)max_thumb_path)) {
+ thumb_err("invalid hash path ret_len[%d]", ret_len);
+ return MS_MEDIA_ERR_INTERNAL;
+ }
//thumb_dbg("thumb hash : %s", thumb_hash_path);
- return 0;
+ return MS_MEDIA_ERR_NONE;
}
@@ -1474,4 +1454,4 @@ int _media_thumb_save_to_file_with_evas(unsigned char *data,
ecore_evas_free(ee);
return MS_MEDIA_ERR_INTERNAL;
}
-} \ No newline at end of file
+}