summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHyunil <hyunil46.park@samsung.com>2018-03-29 16:19:54 +0900
committerHyunil <hyunil46.park@samsung.com>2018-03-29 17:03:02 +0900
commitd346c166a25722c124df4d4b8ee00ec7c41f503e (patch)
treeb54254328f1c9d0413718cb1a8e2326cadde78e7
parent5b10822697c3eeb0e42dad7ff6fb46a4e05de60e (diff)
downloadlibmm-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.h2
-rw-r--r--src/mm_evas_renderer.c33
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;