diff options
author | Hyunil <hyunil46.park@samsung.com> | 2018-03-29 16:19:54 +0900 |
---|---|---|
committer | Hyunil <hyunil46.park@samsung.com> | 2018-03-29 17:03:02 +0900 |
commit | d346c166a25722c124df4d4b8ee00ec7c41f503e (patch) | |
tree | b54254328f1c9d0413718cb1a8e2326cadde78e7 | |
parent | 5b10822697c3eeb0e42dad7ff6fb46a4e05de60e (diff) | |
download | libmm-evas-renderer-d346c166a25722c124df4d4b8ee00ec7c41f503e.tar.gz libmm-evas-renderer-d346c166a25722c124df4d4b8ee00ec7c41f503e.tar.bz2 libmm-evas-renderer-d346c166a25722c124df4d4b8ee00ec7c41f503e.zip |
Change ROI mode behavior for player and camera ROI preconditiontizen_4.0
Change-Id: If61ef08b3fc6e151f1cf3bfff5beedcba6fa49c7
Signed-off-by: Hyunil <hyunil46.park@samsung.com>
-rw-r--r-- | src/include/mm_evas_renderer_private.h | 2 | ||||
-rw-r--r-- | src/mm_evas_renderer.c | 33 |
2 files changed, 22 insertions, 13 deletions
diff --git a/src/include/mm_evas_renderer_private.h b/src/include/mm_evas_renderer_private.h index 341620d..53603a6 100644 --- a/src/include/mm_evas_renderer_private.h +++ b/src/include/mm_evas_renderer_private.h @@ -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; diff --git a/src/mm_evas_renderer.c b/src/mm_evas_renderer.c index 173fca9..6241002 100644 --- a/src/mm_evas_renderer.c +++ b/src/mm_evas_renderer.c @@ -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; |