Use gdk pixbuf for saving video thumbnail 15/32615/2 tizen_3.0.2014.q4_common tizen_3.0.2015.q1_common tizen_3.0_ivi accepted/tizen/common/20150109.094257 accepted/tizen/ivi/20150112.234217 accepted/tizen/wearable/20150128.040604 submit/tizen_common/20150108.112600 submit/tizen_ivi/20150112.111111 submit/tizen_mobile/20150116.000000 submit/tizen_mobile/20150116.000001 submit/tizen_mobile/20150116.000003 submit/tizen_mobile/20150129.000000 submit/tizen_mobile/20150213.000000 submit/tizen_tv/20150116.000000 submit/tizen_tv/20150119.000000 submit/tizen_tv/20150119.000001 submit/tizen_tv/20150120.000000 submit/tizen_tv/20150120.000002 submit/tizen_tv/20150130.000000 submit/tizen_tv/20150130.050505 submit/tizen_wearable/20150116.000000 submit/tizen_wearable/20150116.060702 submit/tizen_wearable/20150127.000000 tizen_3.0_ivi_release
authorJean-Benoit MARTIN <jean-benoit.martin@open.eurogiciel.org>
Mon, 15 Dec 2014 14:55:31 +0000 (15:55 +0100)
committerJean-Benoît MARTIN <jean-benoit.martin@open.eurogiciel.org>
Tue, 6 Jan 2015 10:23:42 +0000 (02:23 -0800)
change video frame into gdkpixbuff object

Bug-Tizen: TC-2270
Change-Id: I8204d0aed2763150ed4ea6bb136745c093b1af7a
Signed-off-by: Jean-Benoit MARTIN <jean-benoit.martin@open.eurogiciel.org>
src/include/media-thumb-internal.h
src/ipc/media-thumb-ipc.c
src/media-thumb-internal.c
src/util/media-thumb-util.c

index e9990b2..84556fc 100755 (executable)
@@ -45,7 +45,8 @@ typedef struct {
        int origin_width;
        int origin_height;
        gboolean alpha;
-       GdkPixbuf *data;
+       unsigned char *data;
+       GdkPixbuf *gdkdata;
 } media_thumb_info;
 
 enum Exif_Orientation {
index 080a817..6968101 100755 (executable)
@@ -523,7 +523,7 @@ int
 _media_thumb_process(thumbMsg *req_msg, thumbMsg *res_msg, uid_t uid)
 {
        int err = -1;
-       GdkPixbuf *data = NULL;
+       GdkPixbuf *gdkdata = NULL;
        int thumb_size = 0;
        int thumb_w = 0;
        int thumb_h = 0;
@@ -597,11 +597,12 @@ _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, &data, &thumb_size, &thumb_w, &thumb_h, &origin_w, &origin_h, &alpha, uid);
+       err = _thumbnail_get_data(origin_path, thumb_type, thumb_format, &gdkdata, &thumb_size, &thumb_w, &thumb_h, &origin_w, &origin_h, &alpha, uid);
        if (err < 0) {
                thumb_err("_thumbnail_get_data failed - %d\n", err);
-               g_object_unref(data);
-
+               if ( gdkdata != NULL ){
+                       g_object_unref(gdkdata);
+               }
                strncpy(thumb_path, _media_thumb_get_default_path(uid), max_length);
                _media_thumb_db_disconnect();
                return err;
@@ -631,10 +632,12 @@ _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(data, thumb_w, thumb_h, alpha, thumb_path);
+       err = _media_thumb_save_to_file_with_gdk(gdkdata, thumb_w, thumb_h, alpha, thumb_path);
        if (err < 0) {
                thumb_err("save_to_file_with_gdk failed - %d\n", err);
-               g_object_unref(data);
+               if ( gdkdata != NULL ){
+                       g_object_unref(gdkdata);
+               }
 
                if (msg_type == THUMB_REQUEST_DB_INSERT || msg_type == THUMB_REQUEST_ALL_MEDIA)
                        strncpy(thumb_path, _media_thumb_get_default_path(uid), max_length);
@@ -660,7 +663,7 @@ _media_thumb_process(thumbMsg *req_msg, thumbMsg *res_msg, uid_t uid)
        }
        /* End of fsync */
 
-       g_object_unref(data);
+       g_object_unref(gdkdata);
 
        /* DB update if needed */
        if (need_update_db == 1) {
index 9fc6086..b8ddb9c 100755 (executable)
@@ -581,7 +581,7 @@ int _media_thumb_decode_with_gdk(const char *origin_path,
        thumb_info->alpha = gdk_pixbuf_get_has_alpha(pixbuf);
        thumb_info->width = thumb_width;
        thumb_info->height = thumb_height;
-       thumb_info->data = gdk_pixbuf_copy(pixbuf);
+       thumb_info->gdkdata = gdk_pixbuf_copy(pixbuf);
 
        g_object_unref(pixbuf);
        return 0;
@@ -1012,6 +1012,7 @@ _media_thumb_video(const char *origin_path,
        int width = 0;
        int height = 0;
        int ret = 0;
+       GdkPixbuf *pixbuf;
        drm_bool_type_e drm_type;
 
        ret = (drm_is_drm_file(origin_path, &drm_type) == 1);
@@ -1192,6 +1193,10 @@ _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\n");
                frame = NULL;
index 3cccc9e..8421146 100755 (executable)
@@ -432,7 +432,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.data;
+       *data = thumb_info.gdkdata;
        if (origin_width) *origin_width = thumb_info.origin_width;
        if (origin_height) *origin_height = thumb_info.origin_height;
        if (alpha) *alpha = thumb_info.alpha;