fix bug about letterbox mode ratio 38/118738/4
authorHyunil <hyunil46.park@samsung.com>
Tue, 14 Mar 2017 02:00:18 +0000 (11:00 +0900)
committerHyunil <hyunil46.park@samsung.com>
Tue, 14 Mar 2017 03:43:18 +0000 (12:43 +0900)
Change-Id: I5d31e9ca9e0603cbafdb304e19d4d867102e379d
Signed-off-by: Hyunil <hyunil46.park@samsung.com>
packaging/libmm-evas-renderer.spec
src/include/mm_evas_renderer.h
src/mm_evas_renderer.c

index 3d0a29c..988db1a 100644 (file)
@@ -1,6 +1,6 @@
 Name:       libmm-evas-renderer
 Summary:    Multimedia Framework Evas Renderer Library
-Version:    0.0.15
+Version:    0.0.16
 Release:    0
 Group:      Multimedia/Libraries
 License:    Apache-2.0
index 4823789..dce7322 100644 (file)
@@ -99,7 +99,7 @@ typedef struct {
        gboolean visible;
        rect_info eo_size;
        rect_info dst_roi;
-       float ratio;
+       float ratio; /* need to set original ratio, not swap */
        guint rotate_angle;
        guint display_geometry_method;
        guint flip;
index fcb4920..9cd4722 100755 (executable)
@@ -848,17 +848,24 @@ static int _mm_evas_renderer_reset(mm_evas_info *evas_info)
 static void _mm_evas_renderer_update_geometry(mm_evas_info *evas_info, rect_info *result)
 {
        MMER_FENTER();
+
+       gint video_width = 0;
+       gint video_height = 0;
+
        MMEVAS_RETURN_IF_FAIL(evas_info);
        MMEVAS_RETURN_IF_FAIL(evas_info->eo); //need to check evas object
        MMEVAS_RETURN_IF_FAIL(result);
 
        result->x = 0;
        result->y = 0;
+       video_width = evas_info->w;
+       video_height = evas_info->h;
 
+       /* Only SWAP is needed for result coordination calculation */
        if (evas_info->rotate_angle == DEGREE_90 || evas_info->rotate_angle == DEGREE_270) {
-               SWAP(evas_info->w, evas_info->h);
+               SWAP(video_width, video_height);
 #ifdef _INTERNAL_DEBUG_
-               LOGD("swapped width %d, height %d", evas_info->w, evas_info->h);
+               LOGD("swapped width %d, height %d", video_width, video_height);
 #endif
        }
 
@@ -866,7 +873,7 @@ static void _mm_evas_renderer_update_geometry(mm_evas_info *evas_info, rect_info
        case DISP_GEO_METHOD_LETTER_BOX:
                /* set black padding for letter box mode */
                LOGD("letter box mode");
-               evas_info->ratio = (float) evas_info->w / evas_info->h;
+               evas_info->ratio = (float) evas_info->w / evas_info->h; /* need to set original video ratio */
                result->w = evas_info->eo_size.w;
                result->h = evas_info->eo_size.h;
                break;
@@ -874,10 +881,10 @@ static void _mm_evas_renderer_update_geometry(mm_evas_info *evas_info, rect_info
                LOGD("origin size mode");
                evas_info->ratio = 0;
                /* set coordinate for each case */
-               result->x = (evas_info->eo_size.w - evas_info->w) / 2;
-               result->y = (evas_info->eo_size.h - evas_info->h) / 2;
-               result->w = evas_info->w;
-               result->h = evas_info->h;
+               result->x = (evas_info->eo_size.w - video_width) / 2;
+               result->y = (evas_info->eo_size.h - video_height) / 2;
+               result->w = video_width;
+               result->h = video_height;
                break;
        case DISP_GEO_METHOD_FULL_SCREEN:
                LOGD("full screen mode");
@@ -889,14 +896,14 @@ static void _mm_evas_renderer_update_geometry(mm_evas_info *evas_info, rect_info
                LOGD("cropped full screen mode");
                evas_info->ratio = 0;
                float eo_ratio = (float)evas_info->eo_size.w / evas_info->eo_size.h;
-               float video_ratio = (float)evas_info->w / evas_info->h;
+               float video_ratio = (float)video_width / video_height;
                /* compare evas object's ratio with video's */
                if (eo_ratio > video_ratio) {
                        result->w = evas_info->eo_size.w;
-                       result->h = evas_info->eo_size.w * evas_info->h / evas_info->w;
+                       result->h = evas_info->eo_size.w * video_height / video_width;
                        result->y = -(result->h - evas_info->eo_size.h) / 2;
                } else {
-                       result->w = evas_info->eo_size.h * evas_info->w / evas_info->h;
+                       result->w = evas_info->eo_size.h * video_width / video_height;
                        result->h = evas_info->eo_size.h;
                        result->x = -(result->w - evas_info->eo_size.w) / 2;
                }
@@ -904,17 +911,17 @@ static void _mm_evas_renderer_update_geometry(mm_evas_info *evas_info, rect_info
        case DISP_GEO_METHOD_ORIGIN_SIZE_OR_LETTER_BOX:
                LOGD("origin size or letter box mode");
                /* if video size is smaller than evas object's, it will be set to origin size mode */
-               if ((evas_info->eo_size.w > evas_info->w) && (evas_info->eo_size.h > evas_info->h)) {
+               if ((evas_info->eo_size.w > video_width) && (evas_info->eo_size.h > video_height)) {
                        LOGD("origin size mode");
                        evas_info->ratio = 0;
                        /* set coordinate for each case */
-                       result->x = (evas_info->eo_size.w - evas_info->w) / 2;
-                       result->y = (evas_info->eo_size.h - evas_info->h) / 2;
-                       result->w = evas_info->w;
-                       result->h = evas_info->h;
+                       result->x = (evas_info->eo_size.w - video_width) / 2;
+                       result->y = (evas_info->eo_size.h - video_height) / 2;
+                       result->w = video_width;
+                       result->h = video_height;
                } else {
                        LOGD("letter box mode");
-                       evas_info->ratio = (float) evas_info->w / evas_info->h;
+                       evas_info->ratio = (float) evas_info->w / evas_info->h; /* need to set original video ratio */
                        result->w = evas_info->eo_size.w;
                        result->h = evas_info->eo_size.h;
                }
@@ -935,9 +942,6 @@ static void _mm_evas_renderer_update_geometry(mm_evas_info *evas_info, rect_info
                break;
        }
 
-       if (evas_info->rotate_angle == DEGREE_90 || evas_info->rotate_angle == DEGREE_270)
-               SWAP(evas_info->w, evas_info->h);
-
        LOGD("geometry result [%d, %d, %d, %d]", result->x, result->y, result->w, result->h);
 
        MMER_FLEAVE();