Change ROI mode behavior for player and camera ROI precondition 47/174447/1 accepted/tizen/unified/20180404.063341 submit/tizen/20180403.040759
authorHyunil <hyunil46.park@samsung.com>
Mon, 2 Apr 2018 07:25:53 +0000 (16:25 +0900)
committerHyunil <hyunil46.park@samsung.com>
Mon, 2 Apr 2018 07:25:53 +0000 (16:25 +0900)
Change-Id: Idbbb1afa2ff2c7104d5763d8792058b34c1b2765
Signed-off-by: Hyunil <hyunil46.park@samsung.com>
packaging/libmm-evas-renderer.spec
src/include/mm_evas_renderer_private.h
src/mm_evas_renderer.c

index 6bd97c91ab8fb8a2764fe8c02f855ab2d53b7c74..da2dad4dcb9bacd65965553c270d40bfdc83aaac 100644 (file)
@@ -1,6 +1,6 @@
 Name:       libmm-evas-renderer
 Summary:    Multimedia Framework Evas Renderer Library
-Version:    0.0.19
+Version:    0.0.20
 Release:    0
 Group:      Multimedia/Libraries
 License:    Apache-2.0
index 341620d1d3490f9b5400ea90d824afca9db1bc96..53603a6b22fab1260b75055a040012d1de9ab412 100644 (file)
@@ -90,6 +90,7 @@ typedef struct {
 
        gboolean rendering_info_changed;
        gboolean video_size_changed;
+       gboolean is_set_roi_area;
 
        /* properties */
        gboolean update_needed; /* to update geometry information on pause state */
@@ -100,6 +101,7 @@ typedef struct {
        float ratio; /* need to set original ratio, not swap */
        guint rotate_angle;
        guint display_geometry_method;
+       guint pre_display_geometry_method;
        guint flip;
 
        tbm_surface_h tbm_surf;
index 173fca921bba164998a793b37071f4a6c860cd36..6241002fa88941e9e9422397118116abb4a532ea 100644 (file)
@@ -811,6 +811,8 @@ static int _mm_evas_renderer_set_info(mm_evas_info *evas_info, Evas_Object *eo)
        evas_info->w = evas_info->h = 0;
        evas_info->cur_idx = -1;
        evas_info->dst_roi.x = evas_info->dst_roi.y = evas_info->dst_roi.w = evas_info->dst_roi.h = 0;
+       evas_info->is_set_roi_area = FALSE;
+       evas_info->display_geometry_method = evas_info->pre_display_geometry_method = DISP_GEO_METHOD_LETTER_BOX;
        evas_info->eo = eo;
        evas_info->epipe = ecore_pipe_add((Ecore_Pipe_Cb) _evas_pipe_cb, evas_info);
        if (!evas_info->epipe) {
@@ -893,6 +895,7 @@ static void _mm_evas_renderer_update_geometry(mm_evas_info *evas_info)
        gint video_width = 0;
        gint video_height = 0;
        rect_info result = { 0 };
+       gint disp_mode = -1;
 
        MMEVAS_RETURN_IF_FAIL(evas_info);
        MMEVAS_RETURN_IF_FAIL(evas_info->eo); //need to check evas object
@@ -911,7 +914,14 @@ static void _mm_evas_renderer_update_geometry(mm_evas_info *evas_info)
        }
        LOGD("eo size (x:%d,y:%d,w:%d,h:%d)", evas_info->eo_size.x, evas_info->eo_size.y, evas_info->eo_size.w, evas_info->eo_size.h);
        LOGD("video size (w:%d,h:%d)", video_width, video_height);
-       switch (evas_info->display_geometry_method) {
+
+       if (evas_info->display_geometry_method == DISP_GEO_METHOD_CUSTOM_ROI && evas_info->is_set_roi_area == FALSE) {
+               disp_mode = evas_info->pre_display_geometry_method;
+               LOGD("ROI area isn't set. and use previous display geometry method(%d)", disp_mode);
+       } else {
+               disp_mode = evas_info->display_geometry_method;
+       }
+       switch (disp_mode) {
        case DISP_GEO_METHOD_LETTER_BOX:
                /* set black padding for letter box mode */
                LOGD("letter box mode");
@@ -970,6 +980,10 @@ static void _mm_evas_renderer_update_geometry(mm_evas_info *evas_info)
                break;
        case DISP_GEO_METHOD_CUSTOM_ROI:
                LOGD("custom roi mode");
+               if (evas_info->is_set_roi_area == FALSE) {
+                       LOGW("ROI Area isn't set");
+                       return;
+               }
                /* roi need to set -1 */
                evas_info->ratio = -1;
                result.x = evas_info->dst_roi.x;
@@ -1437,6 +1451,7 @@ int mm_evas_renderer_set_geometry(MMHandleType handle, int mode)
 
        if (evas_info->display_geometry_method != mode) {
                evas_info->update_needed = TRUE;
+               evas_info->pre_display_geometry_method = evas_info->display_geometry_method;
                evas_info->display_geometry_method = mode;
        }
 
@@ -1472,22 +1487,19 @@ int mm_evas_renderer_set_roi_area(MMHandleType handle, int x, int y, int w, int
        mm_evas_info *evas_info = (mm_evas_info *)handle;
        MMEVAS_RETURN_VAL_IF_FAIL(evas_info, MM_ERROR_EVASRENDER_NOT_INITIALIZED);
 
-       if (!w || !h) {
-               LOGE("invalid resolution");
+       if (w <= 0 || h <= 0) {
+               LOGE("invalid resolution w(%d), h(%d)", w, h);
                return MM_ERROR_EVASRENDER_INVALID_ARGUMENT;
        }
-       if (evas_info->display_geometry_method != DISP_GEO_METHOD_CUSTOM_ROI) {
-               LOGE("invalid mode");
-               return MM_ERROR_EVASRENDER_INVALID_OPERATION;
-       }
 
        if (evas_info->dst_roi.x != x || evas_info->dst_roi.y != y
                || evas_info->dst_roi.w != w || evas_info->dst_roi.h != h) {
-               evas_info->update_needed = TRUE;
                evas_info->dst_roi.x = x;
                evas_info->dst_roi.y = y;
                evas_info->dst_roi.w = w;
                evas_info->dst_roi.h = h;
+               evas_info->update_needed = TRUE;
+               evas_info->is_set_roi_area = TRUE;
        }
 
        evas_info->rendering_info_changed = TRUE;
@@ -1507,11 +1519,6 @@ int mm_evas_renderer_get_roi_area(MMHandleType handle, int *x, int *y, int *w, i
        mm_evas_info *evas_info = (mm_evas_info *)handle;
        MMEVAS_RETURN_VAL_IF_FAIL(evas_info, MM_ERROR_EVASRENDER_NOT_INITIALIZED);
 
-       if (evas_info->display_geometry_method != DISP_GEO_METHOD_CUSTOM_ROI) {
-               LOGE("invalid mode");
-               return MM_ERROR_EVASRENDER_INVALID_OPERATION;
-       }
-
        *x = evas_info->dst_roi.x;
        *y = evas_info->dst_roi.y;
        *w = evas_info->dst_roi.w;