Fix video thumbnail format issue 36/231636/1 accepted/tizen/unified/20200423.161050 submit/tizen/20200423.080104
authorMinje Ahn <minje.ahn@samsung.com>
Thu, 23 Apr 2020 06:49:54 +0000 (15:49 +0900)
committerMinje Ahn <minje.ahn@samsung.com>
Thu, 23 Apr 2020 06:49:54 +0000 (15:49 +0900)
Change-Id: Ic80e0951622747c62d97bbba5370b3b935e0c8a9
Signed-off-by: Minje Ahn <minje.ahn@samsung.com>
include/media-thumbnail.h
server/thumb-server-internal.c
src/media-thumbnail.c

index b35426a..395855f 100755 (executable)
@@ -44,7 +44,7 @@ int thumbnail_request_cancel_media(unsigned int request_id);
 int thumbnail_request_cancel_raw_data(int request_id);
 
 int create_video_thumbnail_to_file(const char *path, unsigned int width, unsigned int height, const char *thumb_path, bool auto_rotate);
-int create_video_thumbnail_to_buffer(const char *path, unsigned int width, unsigned int height, unsigned char **thumb_buffer, size_t *thumb_size, unsigned int *thumb_width, unsigned int *thumb_height, bool auto_rotate);
+int create_video_thumbnail_to_buffer(const char *path, unsigned int width, unsigned int height, unsigned char **thumb_buffer, size_t *thumb_size, unsigned int *thumb_width, unsigned int *thumb_height, bool auto_rotate, bool is_server_request);
 int create_image_thumbnail_to_file(const char *path, unsigned int width, unsigned int height, const char *thumb_path, bool auto_rotate);
 int create_image_thumbnail_to_buffer(const char *path, unsigned int width, unsigned int height, unsigned char **thumb_buffer, size_t *thumb_size, unsigned int *thumb_width, unsigned int *thumb_height);
 
index bd43605..4f1e5f9 100755 (executable)
@@ -78,7 +78,7 @@ static int __thumbnail_get_raw_data(const char *origin_path, unsigned int *width
        if (file_type == THUMB_IMAGE_TYPE) {
                err = create_image_thumbnail_to_buffer(origin_path, *width, *height, data, size, width, height);
        } else if (file_type == THUMB_VIDEO_TYPE) {
-               err = create_video_thumbnail_to_buffer(origin_path, *width, *height, data, size, width, height, true);
+               err = create_video_thumbnail_to_buffer(origin_path, *width, *height, data, size, width, height, true, true);
        } else {
                thumb_err("invalid file type");
                return MS_MEDIA_ERR_THUMB_UNSUPPORTED;
index f5d1326..03bbda9 100755 (executable)
@@ -447,7 +447,15 @@ int create_video_thumbnail_to_file(const char *path, unsigned int width, unsigne
        return err;
 }
 
-int create_video_thumbnail_to_buffer(const char *path, unsigned int width, unsigned int height, unsigned char **thumb_buffer, size_t *thumb_size, unsigned int *thumb_width, unsigned int *thumb_height, bool auto_rotate)
+int create_video_thumbnail_to_buffer(const char *path,
+                                                               unsigned int width,
+                                                               unsigned int height,
+                                                               unsigned char **thumb_buffer,
+                                                               size_t *thumb_size,
+                                                               unsigned int *thumb_width,
+                                                               unsigned int *thumb_height,
+                                                               bool auto_rotate,
+                                                               bool is_server_request)
 {
        int err = MS_MEDIA_ERR_NONE;
        int video_track_num = 0;
@@ -457,6 +465,7 @@ int create_video_thumbnail_to_buffer(const char *path, unsigned int width, unsig
        size_t frame_size = 0;
        mm_util_image_h img = NULL;
        mm_util_magick_rotate_type rot_type = MM_UTIL_ROTATE_NUM;
+       mm_util_image_h convert_img = NULL;
 
        err = __check_parameter_validity_for_buffer(path, width, height, thumb_buffer, thumb_size, thumb_width, thumb_height);
        thumb_retvm_if(err != MS_MEDIA_ERR_NONE, err, "Invalid parameter");
@@ -471,11 +480,24 @@ int create_video_thumbnail_to_buffer(const char *path, unsigned int width, unsig
 
        //Extract thumbnail
        err = __get_video_thumb_to_buffer(video_w, video_h, frame, frame_size, rot_type, width, height, &img);
-       if (err == MS_MEDIA_ERR_NONE)
-               err = mm_image_get_image(img, thumb_width, thumb_height, NULL, thumb_buffer, thumb_size);
-
-       mm_image_destroy_image(img);
        g_free(frame);
+       if (err != MS_MEDIA_ERR_NONE)
+               return err;
+
+       if (is_server_request) {
+               err = mm_util_convert_B_B(img, MM_UTIL_COLOR_BGRA, &convert_img);
+               mm_image_destroy_image(img);
+               if (err != MM_UTIL_ERROR_NONE) {
+                       thumb_err("mm_util_convert_B_B failed");
+                       return MS_MEDIA_ERR_INTERNAL;
+               }
+
+               err = mm_image_get_image(convert_img, thumb_width, thumb_height, NULL, thumb_buffer, thumb_size);
+               mm_image_destroy_image(convert_img);
+       } else {
+               err = mm_image_get_image(img, thumb_width, thumb_height, NULL, thumb_buffer, thumb_size);
+               mm_image_destroy_image(img);
+       }
 
        return err;
 }