diff options
-rw-r--r-- | CMakeLists.txt | 2 | ||||
-rw-r--r-- | packaging/libmedia-thumbnail.spec | 5 | ||||
-rwxr-xr-x | server/thumb-server-internal.c | 39 | ||||
-rwxr-xr-x | src/include/media-thumb-internal.h | 10 | ||||
-rwxr-xr-x | src/include/util/media-thumb-util.h | 7 | ||||
-rwxr-xr-x | src/ipc/media-thumb-ipc.c | 41 | ||||
-rwxr-xr-x | src/media-thumb-internal.c | 420 | ||||
-rwxr-xr-x | src/util/media-thumb-util.c | 178 |
8 files changed, 398 insertions, 304 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt index 975f1d7..3563418 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -42,7 +42,7 @@ MESSAGE("Build type: ${CMAKE_BUILD_TYPE}") INCLUDE_DIRECTORIES(${CMAKE_SOURCE_DIR}/include ${CMAKE_SOURCE_DIR}/src/include ${CMAKE_SOURCE_DIR}/src/include/util ${CMAKE_SOURCE_DIR}/src/include/codec ${CMAKE_SOURCE_DIR}/src/include/util ${CMAKE_SOURCE_DIR}/src/include/ipc ${CMAKE_SOURCE_DIR}/server/include ${CMAKE_SOURCE_DIR}/md5) INCLUDE(FindPkgConfig) -pkg_check_modules(pkgs REQUIRED glib-2.0 gthread-2.0 dlog mm-fileinfo aul libexif mmutil-imgp mmutil-jpeg heynoti libmedia-utils vconf libtzplatform-config gdk-pixbuf-2.0) +pkg_check_modules(pkgs REQUIRED glib-2.0 gthread-2.0 dlog mm-fileinfo aul libexif ecore-evas evas mmutil-imgp mmutil-jpeg heynoti libmedia-utils vconf libtzplatform-config) FOREACH(flag ${pkgs_CFLAGS}) SET(EXTRA_CFLAGS "${EXTRA_CFLAGS} ${flag}") diff --git a/packaging/libmedia-thumbnail.spec b/packaging/libmedia-thumbnail.spec index b1bd9bf..f70b5e8 100644 --- a/packaging/libmedia-thumbnail.spec +++ b/packaging/libmedia-thumbnail.spec @@ -1,5 +1,5 @@ Name: libmedia-thumbnail -Version: 0.1.80 +Version: 0.1.81 Release: 0 License: Apache-2.0 Summary: Media thumbnail service Library @@ -17,11 +17,12 @@ BuildRequires: pkgconfig(mmutil-imgp) BuildRequires: pkgconfig(mmutil-jpeg) BuildRequires: pkgconfig(heynoti) BuildRequires: pkgconfig(libexif) +BuildRequires: pkgconfig(evas) +BuildRequires: pkgconfig(ecore) BuildRequires: pkgconfig(aul) BuildRequires: pkgconfig(vconf) BuildRequires: pkgconfig(libmedia-utils) BuildRequires: pkgconfig(libtzplatform-config) -BuildRequires: pkgconfig(gdk-pixbuf-2.0) %description Description: Media thumbnail service library for multimedia applications. diff --git a/server/thumb-server-internal.c b/server/thumb-server-internal.c index 3fd4bb5..de7f8fd 100755 --- a/server/thumb-server-internal.c +++ b/server/thumb-server-internal.c @@ -28,6 +28,7 @@ #include <dirent.h> #include <stdio.h> #include <string.h> +#include <Ecore_Evas.h> #include <vconf.h> #include <grp.h> #include <pwd.h> @@ -52,6 +53,8 @@ void _thumb_daemon_stop_job(); gboolean _thumb_daemon_start_jobs(gpointer data) { thumb_dbg(""); + /* Initialize ecore-evas to use evas library */ + ecore_evas_init(); _thumb_server_send_msg_to_agent(MS_MSG_THUMB_SERVER_READY); @@ -67,6 +70,8 @@ void _thumb_daemon_finish_jobs(void) thumb_dbg("sqlite3 handle is alive. So disconnect to sqlite3"); } + /* Shutdown ecore-evas */ + ecore_evas_shutdown(); g_main_loop_quit(g_thumb_server_mainloop); return; @@ -237,7 +242,7 @@ int _thumb_daemon_all_extract(uid_t uid) strncpy(path, (const char *)sqlite3_column_text(sqlite_stmt, 0), sizeof(path)); path[sizeof(path) - 1] = '\0'; - thumb_dbg("Path : %s", path); + thumb_dbg_slog("Path : %s", path); if (g_idx == 0) { arr_path = (char**)malloc(sizeof(char*)); @@ -367,10 +372,9 @@ gboolean _thumb_server_read_socket(GIOChannel *src, res_msg.request_id = recv_msg.request_id; strncpy(res_msg.org_path, recv_msg.org_path, recv_msg.origin_path_size); res_msg.origin_path_size = recv_msg.origin_path_size; - res_msg.thumb_data = (unsigned char *)"\0"; if(res_msg.msg_type != THUMB_RESPONSE_RAW_DATA) { - res_msg.dest_path_size = strlen(res_msg.dst_path) + 1; - res_msg.thumb_size = 1; + res_msg.dest_path_size = strlen(res_msg.dst_path)+1; + res_msg.thumb_size = 0; } else { res_msg.dest_path_size = 1; res_msg.dst_path[0] = '\0'; @@ -604,7 +608,7 @@ int _thumbnail_get_data(const char *origin_path, if (size) *size = thumb_info.size; if (width) *width = thumb_info.width; if (height) *height = thumb_info.height; - *data = thumb_info.gdkdata; + *data = thumb_info.data; if (origin_width) *origin_width = thumb_info.origin_width; if (origin_height) *origin_height = thumb_info.origin_height; if (alpha) *alpha = thumb_info.alpha; @@ -678,7 +682,7 @@ int _thumbnail_get_raw_data(const char *origin_path, int _media_thumb_process(thumbMsg *req_msg, thumbMsg *res_msg, uid_t uid) { int err = MS_MEDIA_ERR_NONE; - GdkPixbuf *gdkdata = NULL; + unsigned char *data = NULL; int thumb_size = 0; int thumb_w = 0; int thumb_h = 0; @@ -698,9 +702,7 @@ int _media_thumb_process(thumbMsg *req_msg, thumbMsg *res_msg, uid_t uid) media_thumb_type thumb_type = req_msg->thumb_type; const char *origin_path = req_msg->org_path; - // Currently, The color space that is supported by the gdk-pixbuf is only RGB. - media_thumb_format thumb_format = MEDIA_THUMB_RGB888; - + media_thumb_format thumb_format = MEDIA_THUMB_BGRA; thumb_path = res_msg->dst_path; thumb_path[0] = '\0'; max_length = sizeof(res_msg->dst_path); @@ -762,13 +764,11 @@ int _media_thumb_process(thumbMsg *req_msg, thumbMsg *res_msg, uid_t uid) _media_thumb_remove_file(thumb_path); } - err = _thumbnail_get_data(origin_path, thumb_type, thumb_format, &gdkdata, &thumb_size, &thumb_w, &thumb_h, &origin_w, &origin_h, &alpha, uid); + err = _thumbnail_get_data(origin_path, thumb_type, thumb_format, &data, &thumb_size, &thumb_w, &thumb_h, &origin_w, &origin_h, &alpha, uid); if (err != MS_MEDIA_ERR_NONE) { char *default_path = _media_thumb_get_default_path(uid); - thumb_err("_thumbnail_get_data failed - %d\n", err); - if ( gdkdata != NULL ){ - g_object_unref(gdkdata); - } + thumb_err("_thumbnail_get_data failed - %d", err); + SAFE_FREE(data); if(default_path) { strncpy(thumb_path, default_path, max_length); free(default_path); @@ -801,13 +801,11 @@ int _media_thumb_process(thumbMsg *req_msg, thumbMsg *res_msg, uid_t uid) thumb_dbg("Thumb path is changed : %s", thumb_path); } - err = _media_thumb_save_to_file_with_gdk(gdkdata, thumb_w, thumb_h, alpha, thumb_path); + err = _media_thumb_save_to_file_with_evas(data, thumb_w, thumb_h, alpha, thumb_path); if (err != MS_MEDIA_ERR_NONE) { char *default_path = _media_thumb_get_default_path(uid); - thumb_err("save_to_file_with_gdk failed - %d", err); - if ( gdkdata != NULL ){ - g_object_unref(gdkdata); - } + thumb_err("save_to_file_with_evas failed - %d", err); + SAFE_FREE(data); if (msg_type == THUMB_REQUEST_DB_INSERT || msg_type == THUMB_REQUEST_ALL_MEDIA) { if(default_path) { @@ -836,7 +834,7 @@ int _media_thumb_process(thumbMsg *req_msg, thumbMsg *res_msg, uid_t uid) } /* End of fsync */ - g_object_unref(gdkdata); + SAFE_FREE(data); /* DB update if needed */ if (need_update_db == 1) { @@ -894,6 +892,7 @@ _media_thumb_process_raw(thumbMsg *req_msg, thumbMsg *res_msg, thumbRawAddMsg *r res_msg->thumb_size = thumb_size + sizeof(thumbRawAddMsg) - sizeof(unsigned char*); //thumb_dbg("Size : %d, W:%d, H:%d", thumb_size, thumb_w, thumb_h); + SAFE_FREE(data); return MS_MEDIA_ERR_NONE; } diff --git a/src/include/media-thumb-internal.h b/src/include/media-thumb-internal.h index 0ab9eb7..ad50b04 100755 --- a/src/include/media-thumb-internal.h +++ b/src/include/media-thumb-internal.h @@ -25,7 +25,6 @@ #include "media-thumb-util.h" #include "media-thumb-types.h" #include "media-thumb-debug.h" -#include <gdk-pixbuf/gdk-pixbuf.h> #ifndef _MEDIA_THUMB_INTERNAL_H_ #define _MEDIA_THUMB_INTERNAL_H_ @@ -47,7 +46,6 @@ typedef struct { int origin_height; gboolean alpha; unsigned char *data; - GdkPixbuf *gdkdata; } media_thumb_info; enum Exif_Orientation { @@ -87,4 +85,12 @@ int _media_thumb_video(const char *origin_path, media_thumb_info *thumb_info, uid_t uid); +int _media_thumb_get_hash_name(const char *file_full_path, char *thumb_hash_path, size_t max_thumb_path, uid_t uid); + +int _media_thumb_save_to_file_with_evas(unsigned char *data, + int w, + int h, + int alpha, + char *thumb_path); + #endif /*_MEDIA_THUMB_INTERNAL_H_*/ diff --git a/src/include/util/media-thumb-util.h b/src/include/util/media-thumb-util.h index bee3b44..3bb71df 100755 --- a/src/include/util/media-thumb-util.h +++ b/src/include/util/media-thumb-util.h @@ -23,7 +23,6 @@ #include "media-thumb-debug.h" #include "media-util.h" #include <tzplatform_config.h> -#include <gdk-pixbuf/gdk-pixbuf.h> #ifndef _MEDIA_THUMB_UTIL_H_ #define _MEDIA_THUMB_UTIL_H_ @@ -62,12 +61,6 @@ char* _media_thumb_generate_hash_name(const char *file); int _media_thumb_get_hash_name(const char *file_full_path, char *thumb_hash_path, size_t max_thumb_path, uid_t uid); -int _media_thumb_save_to_file_with_gdk(GdkPixbuf *data, - int w, - int h, - gboolean alpha, - char *thumb_path); - int _media_thumb_get_width(media_thumb_type thumb_type); int _media_thumb_get_height(media_thumb_type thumb_type); diff --git a/src/ipc/media-thumb-ipc.c b/src/ipc/media-thumb-ipc.c index e98d629..7a94900 100755 --- a/src/ipc/media-thumb-ipc.c +++ b/src/ipc/media-thumb-ipc.c @@ -211,7 +211,7 @@ _media_thumb_recv_msg(int sock, int header_size, thumbMsg *msg) SAFE_FREE(buf); - remain_size = msg->origin_path_size + msg->dest_path_size + msg->thumb_size + 2; + remain_size = msg->origin_path_size + msg->dest_path_size + msg->thumb_size; buf = malloc(remain_size * sizeof(unsigned char)); memset(buf, 0, remain_size * sizeof(unsigned char)); @@ -231,11 +231,12 @@ _media_thumb_recv_msg(int sock, int header_size, thumbMsg *msg) } strncpy(msg->org_path, (char *)buf, msg->origin_path_size); - strncpy(msg->dst_path, (char *)buf + msg->origin_path_size + 1, msg->dest_path_size); + strncpy(msg->dst_path, (char *)buf + msg->origin_path_size, msg->dest_path_size); + SAFE_FREE(msg->thumb_data); msg->thumb_data = malloc(msg->thumb_size); memset(msg->thumb_data, 0, msg->thumb_size); - memcpy(msg->thumb_data, buf + msg->origin_path_size + msg->dest_path_size + 2, msg->thumb_size); + memcpy(msg->thumb_data, buf + msg->origin_path_size + msg->dest_path_size, msg->thumb_size); SAFE_FREE(buf); SAFE_FREE(block_buf); @@ -296,8 +297,8 @@ _media_thumb_set_buffer(thumbMsg *req_msg, unsigned char **buf, int *buf_size) int header_size = 0; header_size = sizeof(thumbMsg) -(MAX_FILEPATH_LEN * 2) - sizeof(unsigned char *); - org_path_len = req_msg->origin_path_size + 1; - dst_path_len = req_msg->dest_path_size + 1; + org_path_len = req_msg->origin_path_size; + dst_path_len = req_msg->dest_path_size; thumb_data_len = req_msg->thumb_size; //thumb_dbg("Basic Size : %d, org_path : %s[%d], dst_path : %s[%d], thumb_data_len : %d", header_size, req_msg->org_path, org_path_len, req_msg->dst_path, dst_path_len, thumb_data_len); @@ -312,7 +313,8 @@ _media_thumb_set_buffer(thumbMsg *req_msg, unsigned char **buf, int *buf_size) memcpy(*buf, req_msg, header_size); memcpy((*buf)+header_size, req_msg->org_path, org_path_len); memcpy((*buf)+header_size + org_path_len, req_msg->dst_path, dst_path_len); - memcpy((*buf)+header_size + org_path_len + dst_path_len, req_msg->thumb_data, thumb_data_len); + if(thumb_data_len > 0) + memcpy((*buf)+header_size + org_path_len + dst_path_len, req_msg->thumb_data, thumb_data_len); *buf_size = size; @@ -328,20 +330,17 @@ _media_thumb_set_buffer_for_response(thumbMsg *req_msg, unsigned char **buf, int int org_path_len = 0; int dst_path_len = 0; - int thumb_data_len = 0; int size = 0; int header_size = 0; header_size = sizeof(thumbMsg) -(MAX_FILEPATH_LEN * 2) - sizeof(unsigned char *); - org_path_len = req_msg->origin_path_size + 1; - dst_path_len = req_msg->dest_path_size + 1; - thumb_data_len = 1; + org_path_len = req_msg->origin_path_size; + dst_path_len = req_msg->dest_path_size; - thumb_dbg("Basic Size : %d, org_path : %s[%d], dst_path : %s[%d], thumb_data_len : %d", header_size, req_msg->org_path, org_path_len, req_msg->dst_path, dst_path_len, thumb_data_len); + thumb_dbg("Basic Size : %d, org_path : %s[%d], dst_path : %s[%d]", header_size, req_msg->org_path, org_path_len, req_msg->dst_path, dst_path_len); - size = header_size + org_path_len + dst_path_len + thumb_data_len; + size = header_size + org_path_len + dst_path_len; *buf = malloc(size); - if (*buf == NULL) { *buf_size = 0; return 0; @@ -349,7 +348,6 @@ _media_thumb_set_buffer_for_response(thumbMsg *req_msg, unsigned char **buf, int memcpy(*buf, req_msg, header_size); memcpy((*buf)+header_size, req_msg->org_path, org_path_len); memcpy((*buf)+header_size + org_path_len, req_msg->dst_path, dst_path_len); - memcpy((*buf)+header_size + org_path_len + dst_path_len, req_msg->thumb_data, thumb_data_len); *buf_size = size; @@ -431,11 +429,9 @@ _media_thumb_request(int msg_type, media_thumb_type thumb_type, const char *orig req_msg.dst_path[strlen(req_msg.dst_path)] = '\0'; } - req_msg.thumb_data = (unsigned char *) "\0"; - req_msg.origin_path_size = strlen(req_msg.org_path) + 1; req_msg.dest_path_size = strlen(req_msg.dst_path) + 1; - req_msg.thumb_size = 1; + req_msg.thumb_size = 0; if (req_msg.origin_path_size > MAX_PATH_SIZE || req_msg.dest_path_size > MAX_PATH_SIZE) { thumb_err("path's length exceeds %d", MAX_PATH_SIZE); @@ -650,11 +646,9 @@ int _media_thumb_request_async(int msg_type, media_thumb_type thumb_type, const strncpy(req_msg.org_path, origin_path, sizeof(req_msg.org_path)); req_msg.org_path[strlen(req_msg.org_path)] = '\0'; req_msg.dst_path[0] = '\0'; - req_msg.thumb_data = (unsigned char *)"\0"; - - req_msg.origin_path_size = strlen(req_msg.org_path); + req_msg.origin_path_size = strlen(req_msg.org_path) + 1; req_msg.dest_path_size = 1; - req_msg.thumb_size = 1; + req_msg.thumb_size = 0; if (req_msg.origin_path_size > MAX_PATH_SIZE || req_msg.dest_path_size > MAX_PATH_SIZE) { thumb_err("path's length exceeds %d", MAX_PATH_SIZE); @@ -768,11 +762,10 @@ int _media_thumb_request_raw_data_async(int msg_type, int request_id, const char strncpy(req_msg.org_path, origin_path, sizeof(req_msg.org_path)); req_msg.org_path[strlen(req_msg.org_path)] = '\0'; req_msg.dst_path[0] = '\0'; - req_msg.thumb_data = (unsigned char *)"\0"; - req_msg.origin_path_size = strlen(req_msg.org_path); + req_msg.origin_path_size = strlen(req_msg.org_path) + 1; req_msg.dest_path_size = 1; - req_msg.thumb_size = 1; + req_msg.thumb_size = 0; if (req_msg.origin_path_size > MAX_PATH_SIZE) { thumb_err("path's length exceeds %d", MAX_PATH_SIZE); diff --git a/src/media-thumb-internal.c b/src/media-thumb-internal.c index a8c7fd7..5ed752d 100755 --- a/src/media-thumb-internal.c +++ b/src/media-thumb-internal.c @@ -41,10 +41,16 @@ #include <mm_error.h> #include <mm_util_imgp.h> #include <mm_util_jpeg.h> +#include <Evas.h> +#include <Ecore_Evas.h> #include <libexif/exif-data.h> -#include <gdk-pixbuf/gdk-pixbuf.h> +#include <sys/stat.h> +#include <grp.h> +#include <pwd.h> +#include <sys/smack.h> -#define MEDA_THUMB_ROUND_UP_4(num) (((num)+3)&~3) +#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, @@ -82,8 +88,8 @@ int _media_thumb_get_proper_thumb_size(media_thumb_type thumb_type, *thumb_w = *thumb_h * ratio; } - /* The width of RGB888 raw data has to be rounded by 4 */ - *thumb_w = MEDA_THUMB_ROUND_UP_4(*thumb_w); + /** CAUTION :: The width of RGB888 raw data has to be rounded by 8 **/ + *thumb_w = MEDIA_THUMB_ROUND_UP_8(*thumb_w); thumb_dbg("proper thumb w: %d h: %d", *thumb_w, *thumb_h); @@ -117,7 +123,6 @@ int _media_thumb_get_exif_info(ExifData *ed, char *buf, int max_size, int *value ExifByteOrder mByteOrder = exif_data_get_byte_order(ed); short exif_value = exif_get_short(entry->data, mByteOrder); - thumb_dbg("%s : %d", exif_tag_get_name_in_ifd(tag,ifd), exif_value); *value = (int)exif_value; } else { /* Get the contents of the tag in human-readable form */ @@ -127,10 +132,6 @@ int _media_thumb_get_exif_info(ExifData *ed, char *buf, int max_size, int *value } exif_entry_get_value(entry, buf, max_size); buf[strlen(buf)] = '\0'; - - if (*buf) { - thumb_dbg("%s: %s\n", exif_tag_get_name_in_ifd(tag, ifd), buf); - } } } @@ -461,49 +462,83 @@ int _media_thumb_resize_data(unsigned char *src_data, return MS_MEDIA_ERR_NONE; } -int _media_thumb_get_wh_with_gdk(const char *origin_path, int *width, int *height) +int _media_thumb_get_wh_with_evas(const char *origin_path, int *width, int *height) { + /* using evas to get w/h */ + Ecore_Evas *ee = ecore_evas_buffer_new(0, 0); + if (!ee) { + thumb_err("ecore_evas_buffer_new fails"); + return MS_MEDIA_ERR_INTERNAL; + } - GdkPixbuf *pixbuf = NULL; - GError *error = NULL; + Evas *evas = ecore_evas_get(ee); + if (!evas) { + thumb_err("ecore_evas_get fails"); + ecore_evas_free(ee); + return MS_MEDIA_ERR_INTERNAL; + } - pixbuf = gdk_pixbuf_new_from_file(origin_path, &error); - if (error) { - thumb_err ("Error loading image file %s",origin_path); - g_error_free (error); + Evas_Object *image_object = evas_object_image_add(evas); + if (!image_object) { + thumb_err("evas_object_image_add fails"); + ecore_evas_free(ee); return MS_MEDIA_ERR_INTERNAL; } - /* Get w/h of original image */ - *width = gdk_pixbuf_get_width(pixbuf); - *height = gdk_pixbuf_get_height(pixbuf); + evas_object_image_file_set(image_object, origin_path, NULL); + evas_object_image_size_get(image_object, width, height); + + thumb_dbg("Width:%d, Height:%d", *width, *height); + + ecore_evas_free(ee); return MS_MEDIA_ERR_NONE; } -int _media_thumb_decode_with_gdk(const char *origin_path, +int _media_thumb_decode_with_evas(const char *origin_path, int thumb_width, int thumb_height, media_thumb_info *thumb_info, int need_scale, int orientation) { - GdkPixbuf *pixbuf = NULL; - GError *error = NULL; + Ecore_Evas *resize_img_ee; + + resize_img_ee = ecore_evas_buffer_new(thumb_width, thumb_height); + if (!resize_img_ee) { + thumb_err("ecore_evas_buffer_new failed"); + return MS_MEDIA_ERR_INTERNAL; + } + + Evas *resize_img_e = ecore_evas_get(resize_img_ee); + if (!resize_img_e) { + thumb_err("ecore_evas_get failed"); + ecore_evas_free(resize_img_ee); + return MS_MEDIA_ERR_INTERNAL; + } - pixbuf = gdk_pixbuf_new_from_file(origin_path, &error); - if (error) { - thumb_err ("Error loading image file %s",origin_path); - g_error_free (error); + Evas_Object *source_img = evas_object_image_add(resize_img_e); + if (!source_img) { + thumb_err("evas_object_image_add failed"); + ecore_evas_free(resize_img_ee); return MS_MEDIA_ERR_INTERNAL; } + evas_object_image_file_set(source_img, origin_path, NULL); + /* Get w/h of original image */ - int width = gdk_pixbuf_get_width(pixbuf); - int height = gdk_pixbuf_get_height(pixbuf); + int width = 0; + int height = 0; + evas_object_image_size_get(source_img, &width, &height); thumb_info->origin_width = width; thumb_info->origin_height = height; + //thumb_dbg("origin width:%d, origin height:%d", width, height); + if ((need_scale == 1) && (width * height > THUMB_MAX_ALLOWED_MEM_FOR_THUMB)) { + thumb_warn("This is too large image. so this's scale is going to be down"); + evas_object_image_load_scale_down_set(source_img, 10); + } - pixbuf = gdk_pixbuf_apply_embedded_orientation(pixbuf); + if (orientation != TRANSPOSE) + evas_object_image_load_orientation_set(source_img, 1); int rotated_orig_w = 0; int rotated_orig_h = 0; @@ -515,6 +550,7 @@ int _media_thumb_decode_with_gdk(const char *origin_path, rotated_orig_w = width; rotated_orig_h = height; } + //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; @@ -530,31 +566,81 @@ int _media_thumb_decode_with_gdk(const char *origin_path, &thumb_width, &thumb_height); if (err != MS_MEDIA_ERR_NONE) { thumb_err("_media_thumb_get_proper_thumb_size failed: %d", err); - g_object_unref(pixbuf); + ecore_evas_free(resize_img_ee); return err; } - pixbuf = gdk_pixbuf_scale_simple(pixbuf, thumb_width, thumb_height, GDK_INTERP_NEAREST); + ecore_evas_resize(resize_img_ee, thumb_width, thumb_height); - unsigned int buf_size = 0; + evas_object_image_load_size_set(source_img, thumb_width, thumb_height); + evas_object_image_fill_set(source_img, 0, 0, thumb_width, thumb_height); + evas_object_image_filled_set(source_img, 1); - if (mm_util_get_image_size(MM_UTIL_IMG_FMT_BGRA8888, thumb_width, - thumb_height, &buf_size) < 0) { - thumb_err("Failed to get buffer size"); + evas_object_resize(source_img, thumb_width, thumb_height); + evas_object_show(source_img); + + /* Set alpha from original */ + thumb_info->alpha = evas_object_image_alpha_get(source_img); + if (thumb_info->alpha) ecore_evas_alpha_set(resize_img_ee, EINA_TRUE); + + /* Create target buffer and copy origin resized img to it */ + Ecore_Evas *target_ee = ecore_evas_buffer_new(thumb_width, thumb_height); + if (!target_ee) { + thumb_err("ecore_evas_buffer_new failed"); + ecore_evas_free(resize_img_ee); + return MS_MEDIA_ERR_INTERNAL; + } + + Evas *target_evas = ecore_evas_get(target_ee); + if (!target_evas) { + thumb_err("ecore_evas_get failed"); + ecore_evas_free(resize_img_ee); + ecore_evas_free(target_ee); + return MS_MEDIA_ERR_INTERNAL; + } + + Evas_Object *ret_image = evas_object_image_add(target_evas); + evas_object_image_size_set(ret_image, thumb_width, thumb_height); + evas_object_image_fill_set(ret_image, 0, 0, thumb_width, thumb_height); + evas_object_image_filled_set(ret_image, EINA_TRUE); - g_object_unref(pixbuf); + evas_object_image_data_set(ret_image, (int *)ecore_evas_buffer_pixels_get(resize_img_ee)); + evas_object_image_data_update_add(ret_image, 0, 0, thumb_width, thumb_height); + + unsigned int buf_size = 0; + if (mm_util_get_image_size(MM_UTIL_IMG_FMT_BGRA8888, thumb_width, thumb_height, &buf_size) < 0) { + thumb_err("mm_util_get_image_size failed"); + + ecore_evas_free(resize_img_ee); + ecore_evas_free(target_ee); return MS_MEDIA_ERR_INTERNAL; } + //thumb_dbg("mm_util_get_image_size : %d", buf_size); thumb_info->size = buf_size; - thumb_info->alpha = gdk_pixbuf_get_has_alpha(pixbuf); thumb_info->width = thumb_width; thumb_info->height = thumb_height; - thumb_info->gdkdata = gdk_pixbuf_copy(pixbuf); + thumb_info->data = malloc(buf_size); + if (thumb_info->data == NULL) { + thumb_err("Failed to allocate memory" ); + ecore_evas_free(resize_img_ee); + ecore_evas_free(target_ee); - g_object_unref(pixbuf); - return MS_MEDIA_ERR_NONE; + return MS_MEDIA_ERR_OUT_OF_MEMORY; + } + + void *image_data = evas_object_image_data_get(ret_image, 1); + if (image_data != NULL) { + memcpy(thumb_info->data, image_data, buf_size); + } else { + thumb_err("image_data is NULL. evas_object_image_data_get failed"); + } + + ecore_evas_free(target_ee); + ecore_evas_free(resize_img_ee); + + return err; } mm_util_img_format _media_thumb_get_format(media_thumb_format src_format) @@ -583,7 +669,7 @@ int _media_thumb_convert_data(media_thumb_info *thumb_info, thumb_dbg("src format:%d, dst format:%d", src_format, dst_format); if (mm_util_get_image_size(dst_format, thumb_width, thumb_height, &buf_size) < 0) { - thumb_err("Failed to get buffer size"); + thumb_err("mm_util_get_image_size failed"); return MS_MEDIA_ERR_INTERNAL; } @@ -591,6 +677,11 @@ int _media_thumb_convert_data(media_thumb_info *thumb_info, dst_data = (unsigned char *)malloc(buf_size); + if (dst_data == NULL) { + thumb_err("Failed to allocate memory"); + return MS_MEDIA_ERR_OUT_OF_MEMORY; + } + if (src_format == MM_UTIL_IMG_FMT_RGB888 && dst_format == MM_UTIL_IMG_FMT_BGRA8888) { @@ -644,7 +735,7 @@ int _media_thumb_convert_format(media_thumb_info *thumb_info, src_mm_format = _media_thumb_get_format(src_format); dst_mm_format = _media_thumb_get_format(dst_format); - if (src_mm_format == -1 || dst_mm_format == -1) { + if ((int)src_mm_format == -1 || (int)dst_mm_format == -1) { thumb_err("Format is invalid"); return MS_MEDIA_ERR_INVALID_PARAMETER; } @@ -729,14 +820,14 @@ int _media_thumb_png(const char *origin_path, media_thumb_info *thumb_info) { int err = MS_MEDIA_ERR_NONE; - err = _media_thumb_decode_with_gdk(origin_path, thumb_width, thumb_height, thumb_info, 0, NORMAL); + err = _media_thumb_decode_with_evas(origin_path, thumb_width, thumb_height, thumb_info, 1, NORMAL); if (err != MS_MEDIA_ERR_NONE) { - thumb_err("decode_with_gdk failed : %d", err); + thumb_err("decode_with_evas failed : %d", err); return err; } - err = _media_thumb_convert_format(thumb_info, MEDIA_THUMB_RGB888, format); + err = _media_thumb_convert_format(thumb_info, MEDIA_THUMB_BGRA, format); if (err != MS_MEDIA_ERR_NONE) { thumb_err("_media_thumb_convert_format falied: %d", err); SAFE_FREE(thumb_info->data); @@ -753,14 +844,14 @@ int _media_thumb_bmp(const char *origin_path, media_thumb_info *thumb_info) { int err = MS_MEDIA_ERR_NONE; - err = _media_thumb_decode_with_gdk(origin_path, thumb_width, thumb_height, thumb_info, 0, NORMAL); + err = _media_thumb_decode_with_evas(origin_path, thumb_width, thumb_height, thumb_info, 1, NORMAL); if (err != MS_MEDIA_ERR_NONE) { - thumb_err("decode_with_gdk failed : %d", err); + thumb_err("decode_with_evas failed : %d", err); return err; } - err = _media_thumb_convert_format(thumb_info, MEDIA_THUMB_RGB888, format); + err = _media_thumb_convert_format(thumb_info, MEDIA_THUMB_BGRA, format); if (err != MS_MEDIA_ERR_NONE) { thumb_err("_media_thumb_convert_format falied: %d", err); SAFE_FREE(thumb_info->data); @@ -777,14 +868,14 @@ int _media_thumb_wbmp(const char *origin_path, media_thumb_info *thumb_info) { int err = MS_MEDIA_ERR_NONE; - err = _media_thumb_decode_with_gdk(origin_path, thumb_width, thumb_height, thumb_info, 0, NORMAL); + err = _media_thumb_decode_with_evas(origin_path, thumb_width, thumb_height, thumb_info, 1, NORMAL); if (err != MS_MEDIA_ERR_NONE) { - thumb_err("decode_with_gdk failed : %d", err); + thumb_err("decode_with_evas failed : %d", err); return err; } - err = _media_thumb_convert_format(thumb_info, MEDIA_THUMB_RGB888, format); + err = _media_thumb_convert_format(thumb_info, MEDIA_THUMB_BGRA, format); if (err != MS_MEDIA_ERR_NONE) { thumb_err("_media_thumb_convert_format falied: %d", err); SAFE_FREE(thumb_info->data); @@ -801,14 +892,14 @@ int _media_thumb_gif(const char *origin_path, media_thumb_info *thumb_info) { int err = MS_MEDIA_ERR_NONE; - err = _media_thumb_decode_with_gdk(origin_path, thumb_width, thumb_height, thumb_info, 0, NORMAL); + err = _media_thumb_decode_with_evas(origin_path, thumb_width, thumb_height, thumb_info, 1, NORMAL); if (err != MS_MEDIA_ERR_NONE) { - thumb_err("decode_with_gdk failed : %d", err); + thumb_err("decode_with_evas failed : %d", err); return err; } - err = _media_thumb_convert_format(thumb_info, MEDIA_THUMB_RGB888, format); + err = _media_thumb_convert_format(thumb_info, MEDIA_THUMB_BGRA, format); if (err != MS_MEDIA_ERR_NONE) { thumb_err("_media_thumb_convert_format falied: %d", err); SAFE_FREE(thumb_info->data); @@ -870,14 +961,14 @@ int _media_thumb_jpeg(const char *origin_path, if (!thumb_done) { - err = _media_thumb_decode_with_gdk(origin_path, thumb_width, thumb_height, thumb_info, 0, orientation); + err = _media_thumb_decode_with_evas(origin_path, thumb_width, thumb_height, thumb_info, 1, orientation); if (err != MS_MEDIA_ERR_NONE) { - thumb_err("decode_with_gdk failed : %d", err); + thumb_err("decode_with_evas failed : %d", err); return err; } - err = _media_thumb_convert_format(thumb_info, MEDIA_THUMB_RGB888, format); + err = _media_thumb_convert_format(thumb_info, MEDIA_THUMB_BGRA, format); if (err != MS_MEDIA_ERR_NONE) { thumb_err("_media_thumb_convert_format falied: %d", err); SAFE_FREE(thumb_info->data); @@ -898,16 +989,14 @@ int _media_thumb_jpeg_for_raw(const char *origin_path, int err = MS_MEDIA_ERR_NONE; int orientation = NORMAL; - err = _media_thumb_decode_with_gdk(origin_path, thumb_width, thumb_height, thumb_info, 0, orientation); + err = _media_thumb_decode_with_evas(origin_path, thumb_width, thumb_height, thumb_info, 1, orientation); if (err != MS_MEDIA_ERR_NONE) { - thumb_err("decode_with_gdk failed : %d", err); + thumb_err("decode_with_evas failed : %d", err); return err; } - /* Temporary process */ - thumb_info->data = gdk_pixbuf_get_pixels(thumb_info->gdkdata); - err = _media_thumb_convert_format(thumb_info, MEDIA_THUMB_RGB888, format); + err = _media_thumb_convert_format(thumb_info, MEDIA_THUMB_BGRA, format); if (err != MS_MEDIA_ERR_NONE) { thumb_err("_media_thumb_convert_format falied: %d", err); SAFE_FREE(thumb_info->data); @@ -920,7 +1009,7 @@ int _media_thumb_image(const char *origin_path, int thumb_width, int thumb_height, media_thumb_format format, - media_thumb_info *thumb_info, + media_thumb_info *thumb_info, bool is_raw, uid_t uid) { @@ -935,7 +1024,7 @@ int _media_thumb_image(const char *origin_path, thumb_info->origin_width = origin_w = image_info.width; thumb_info->origin_height = origin_h = image_info.height; - thumb_dbg("image type is %d\n", image_type); + //thumb_dbg("image type is %d, width:%d, height:%d", image_type, origin_w, origin_h); if ((image_type != IMG_CODEC_JPEG) && (origin_w * origin_h > THUMB_MAX_ALLOWED_MEM_FOR_THUMB)) { @@ -968,9 +1057,9 @@ int _media_thumb_image(const char *origin_path, int wbmp_width = 0; int wbmp_height = 0; - err = _media_thumb_get_wh_with_gdk(origin_path, &wbmp_width, &wbmp_height); + err = _media_thumb_get_wh_with_evas(origin_path, &wbmp_width, &wbmp_height); if (err != MS_MEDIA_ERR_NONE) { - thumb_err("_media_thumb_get_wh_with_gdk in WBMP : %d", err); + thumb_err("_media_thumb_get_wh_with_evas in WBMP : %d", err); return err; } @@ -1012,7 +1101,6 @@ int _media_thumb_video(const char *origin_path, int size = 0; int width = 0; int height = 0; - GdkPixbuf *pixbuf; bool drm_type = FALSE; is_drm = drm_type; @@ -1182,10 +1270,6 @@ int _media_thumb_video(const char *origin_path, SAFE_FREE(thumb_info->data); return err; } - pixbuf = gdk_pixbuf_new_from_data (thumb_info->data, GDK_COLORSPACE_RGB, FALSE, 8, thumb_info->width, thumb_info->height, 3*thumb_info->width, NULL, NULL); - thumb_info->gdkdata = gdk_pixbuf_copy(pixbuf); - g_object_unref(pixbuf); - } else { thumb_dbg("no contents information"); frame = NULL; @@ -1197,3 +1281,197 @@ 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; + struct group *grpinfo = NULL; + if(uid == getuid()) + { + result_psswd = strdup(THUMB_MMC_PATH); + grpinfo = getgrnam("users"); + if(grpinfo == NULL) { + thumb_err("getgrnam(users) returns NULL !"); + if(result_psswd) + free(result_psswd); + return NULL; + } + } + else + { + struct passwd *userinfo = getpwuid(uid); + if(userinfo == NULL) { + thumb_err("getpwuid(%d) returns NULL !", uid); + return NULL; + } + grpinfo = getgrnam("users"); + if(grpinfo == NULL) { + thumb_err("getgrnam(users) returns NULL !"); + return NULL; + } + // Compare git_t type and not group name + if (grpinfo->gr_gid != userinfo->pw_gid) { + thumb_err("UID [%d] does not belong to 'users' group!", uid); + return NULL; + } + 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; +} + +static char* _media_thumb_phone_get_path(uid_t uid) +{ + char *result_psswd = NULL; + struct group *grpinfo = NULL; + if(uid == getuid()) + { + result_psswd = strdup(THUMB_PHONE_PATH); + grpinfo = getgrnam("users"); + if(grpinfo == NULL) { + thumb_err("getgrnam(users) returns NULL !"); + if(result_psswd) + free(result_psswd); + return NULL; + } + } + else + { + struct passwd *userinfo = getpwuid(uid); + if(userinfo == NULL) { + thumb_err("getpwuid(%d) returns NULL !", uid); + return NULL; + } + grpinfo = getgrnam("users"); + if(grpinfo == NULL) { + thumb_err("getgrnam(users) returns NULL !"); + return NULL; + } + // Compare git_t type and not group name + if (grpinfo->gr_gid != userinfo->pw_gid) { + thumb_err("UID [%d] does not belong to 'users' group!", uid); + return NULL; + } + 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 file_ext[255] = { 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; + } + + _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) { + 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); + + 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; + } + + //thumb_dbg("thumb hash : %s", thumb_hash_path); + + return 0; +} + + +int _media_thumb_save_to_file_with_evas(unsigned char *data, + int w, + int h, + int alpha, + char *thumb_path) +{ + Ecore_Evas *ee = ecore_evas_buffer_new(w, h); + if (ee == NULL) { + thumb_err("ecore_evas_buffer_new failed"); + return MS_MEDIA_ERR_INTERNAL; + } + + Evas *evas = ecore_evas_get(ee); + if (evas == NULL) { + thumb_err("ecore_evas_get failed"); + ecore_evas_free(ee); + return MS_MEDIA_ERR_INTERNAL; + } + + Evas_Object *img = NULL; + img = evas_object_image_add(evas); + + if (img == NULL) { + thumb_err("evas_object_image_add failed"); + ecore_evas_free(ee); + return MS_MEDIA_ERR_INTERNAL; + } + + evas_object_image_colorspace_set(img, EVAS_COLORSPACE_ARGB8888); + evas_object_image_size_set(img, w, h); + evas_object_image_fill_set(img, 0, 0, w, h); + + if (alpha) evas_object_image_alpha_set(img, 1); + + evas_object_image_data_set(img, data); + evas_object_image_data_update_add(img, 0, 0, w, h); + + if (evas_object_image_save(img, thumb_path, NULL, "quality=90 compress=1")) { + thumb_dbg("evas_object_image_save success"); + ecore_evas_free(ee); + + return MS_MEDIA_ERR_NONE; + } else { + thumb_err("evas_object_image_save failed"); + ecore_evas_free(ee); + return MS_MEDIA_ERR_INTERNAL; + } +}
\ No newline at end of file diff --git a/src/util/media-thumb-util.c b/src/util/media-thumb-util.c index c86d55d..3ba1c06 100755 --- a/src/util/media-thumb-util.c +++ b/src/util/media-thumb-util.c @@ -26,12 +26,6 @@ #include <glib.h> #include <aul.h> #include <string.h> -#include <sys/stat.h> -#include <grp.h> -#include <pwd.h> -#include <sys/smack.h> - -#define GLOBAL_USER 0 //#define tzplatform_getenv(TZ_GLOBAL) //TODO int _media_thumb_get_width(media_thumb_type thumb_type) { @@ -90,7 +84,7 @@ _media_thumb_get_file_type(const char *file_full_path) ("aul_get_mime_from_file fail.. Now trying to get type by extension"); char ext[255] = { 0 }; - int ret = _media_thumb_get_file_ext(file_full_path, ext, sizeof(ext)); + ret = _media_thumb_get_file_ext(file_full_path, ext, sizeof(ext)); if (ret < 0) { thumb_err("_media_thumb_get_file_ext failed"); return THUMB_NONE_TYPE; @@ -155,174 +149,4 @@ int _media_thumb_remove_file(const char *path) thumb_stderror("fail to remove file[%s] result"); return FALSE; } -} - -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; - struct group *grpinfo = NULL; - if(uid == getuid()) - { - result_psswd = strdup(THUMB_MMC_PATH); - grpinfo = getgrnam("users"); - if(grpinfo == NULL) { - thumb_err("getgrnam(users) returns NULL !"); - if(result_psswd) - free(result_psswd); - return NULL; - } - } - else - { - struct passwd *userinfo = getpwuid(uid); - if(userinfo == NULL) { - thumb_err("getpwuid(%d) returns NULL !", uid); - return NULL; - } - grpinfo = getgrnam("users"); - if(grpinfo == NULL) { - thumb_err("getgrnam(users) returns NULL !"); - return NULL; - } - // Compare git_t type and not group name - if (grpinfo->gr_gid != userinfo->pw_gid) { - thumb_err("UID [%d] does not belong to 'users' group!", uid); - return NULL; - } - 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; -} - -static char* _media_thumb_phone_get_path(uid_t uid) -{ - char *result_psswd = NULL; - struct group *grpinfo = NULL; - if(uid == getuid()) - { - result_psswd = strdup(THUMB_PHONE_PATH); - grpinfo = getgrnam("users"); - if(grpinfo == NULL) { - thumb_err("getgrnam(users) returns NULL !"); - if(result_psswd) - free(result_psswd); - return NULL; - } - } - else - { - struct passwd *userinfo = getpwuid(uid); - if(userinfo == NULL) { - thumb_err("getpwuid(%d) returns NULL !", uid); - return NULL; - } - grpinfo = getgrnam("users"); - if(grpinfo == NULL) { - thumb_err("getgrnam(users) returns NULL !"); - return NULL; - } - // Compare git_t type and not group name - if (grpinfo->gr_gid != userinfo->pw_gid) { - thumb_err("UID [%d] does not belong to 'users' group!", uid); - return NULL; - } - 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 file_ext[255] = { 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; - } - - _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) { - 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); - - 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; - } - - //thumb_dbg("thumb hash : %s", thumb_hash_path); - - return 0; -} - -int _media_thumb_save_to_file_with_gdk(GdkPixbuf *data, - int w, - int h, - gboolean alpha, - char *thumb_path) -{ - GError *error = NULL; - - gdk_pixbuf_save(data,thumb_path,"jpeg", &error, NULL); - if (error) { - thumb_dbg ("Error saving image file %s", thumb_path); - g_error_free (error); - return -1; - } - - if(smack_setlabel(thumb_path, "User", SMACK_LABEL_ACCESS)){ - thumb_dbg("failed chsmack -a \"User\" %s", thumb_path); - return -1; - } else { - thumb_dbg("chsmack -a \"User\" %s", thumb_path); - } - - return 0; }
\ No newline at end of file |