From: Jeongmo Yang Date: Tue, 23 Jun 2020 06:57:25 +0000 (+0900) Subject: Add new display types for Ecore_Wl2_Window X-Git-Tag: submit/tizen/20200624.034306^0 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=1f96e401b18e1a7a6d5595fc76c29a1f6d712214;p=platform%2Fcore%2Fmultimedia%2Flibmm-display.git Add new display types for Ecore_Wl2_Window [Version] 0.0.6 [Profile] Common [Issue Type] New feature Change-Id: Ic51efab42be2a7723dfbea114fcad3931988ec57 Signed-off-by: Jeongmo Yang --- diff --git a/packaging/libmm-display.spec b/packaging/libmm-display.spec index d2b7970..9bf9a7c 100644 --- a/packaging/libmm-display.spec +++ b/packaging/libmm-display.spec @@ -1,7 +1,7 @@ Name: libmm-display Summary: Multimedia framework display library -Version: 0.0.5 -Release: 1 +Version: 0.0.6 +Release: 0 Group: Multimedia/Libraries License: Apache-2.0 Source0: %{name}-%{version}.tar.gz diff --git a/src/include/mm_display.h b/src/include/mm_display.h index 75a0d1c..7658777 100644 --- a/src/include/mm_display.h +++ b/src/include/mm_display.h @@ -26,8 +26,8 @@ extern "C" { typedef struct mm_display { mm_display_type_e type; - /* Evas */ - Evas_Object *eo; + /* display handle - Evas Object or Ecore WL Window */ + void *display; /* wayland */ int parent_id; /* parent id of window for wayland display */ diff --git a/src/include/mm_display_interface.h b/src/include/mm_display_interface.h index 5e3571b..c305463 100644 --- a/src/include/mm_display_interface.h +++ b/src/include/mm_display_interface.h @@ -27,9 +27,10 @@ extern "C" { typedef void *mm_display_interface_h; typedef enum { - MM_DISPLAY_TYPE_INVALID = -1, MM_DISPLAY_TYPE_OVERLAY = 0, - MM_DISPLAY_TYPE_EVAS + MM_DISPLAY_TYPE_EVAS, + MM_DISPLAY_TYPE_NONE, + MM_DISPLAY_TYPE_OVERLAY_EXT } mm_display_type_e; typedef void (*mm_display_evas_rendered_cb)(media_packet_h packet, void *user_data); diff --git a/src/mm_display.c b/src/mm_display.c index ee47d68..bf38db5 100644 --- a/src/mm_display.c +++ b/src/mm_display.c @@ -46,7 +46,7 @@ /* - * wayland parent id related functiosn + * wayland parent id related function */ static void __global(void *data, struct wl_registry *registry, uint32_t name, const char *interface, uint32_t version) @@ -110,7 +110,7 @@ static const struct tizen_resource_listener _mm_display_tz_resource_listener = { }; -int _mm_display_get_parent_id(Evas_Object *obj, int *parent_id) +int _mm_display_get_parent_id(mm_display_type_e type, void *handle, int *parent_id) { int ret = MM_ERROR_NONE; Ecore_Wl2_Window *wl2_window = NULL; @@ -121,12 +121,16 @@ int _mm_display_get_parent_id(Evas_Object *obj, int *parent_id) struct tizen_surface *tz_surface = NULL; struct tizen_resource *tz_resource = NULL; - if (!obj || !parent_id) { - LOGE("NULL parameter %p %p", obj, parent_id); + if (!handle || !parent_id) { + LOGE("NULL parameter %p %p", handle, parent_id); return MM_ERROR_INVALID_ARGUMENT; } - wl2_window = ecore_evas_wayland2_window_get(ecore_evas_ecore_evas_get(evas_object_evas_get(obj))); + if (type == MM_DISPLAY_TYPE_OVERLAY) + wl2_window = ecore_evas_wayland2_window_get(ecore_evas_ecore_evas_get(evas_object_evas_get((Evas_Object *)handle))); + else + wl2_window = (Ecore_Wl2_Window *)handle; + if (!wl2_window) { LOGE("failed to get wayland window"); ret = MM_ERROR_UNKNOWN; @@ -177,7 +181,7 @@ int _mm_display_get_parent_id(Evas_Object *obj, int *parent_id) /* Get parent_id which is unique in a entire system. */ tz_resource = tizen_surface_get_tizen_resource(tz_surface, surface); if (!tz_resource) { - LOGE("failed to get tizen resurce"); + LOGE("failed to get tizen resource"); ret = MM_ERROR_UNKNOWN; goto _DONE; } @@ -231,7 +235,7 @@ int mm_display_init(mm_display_h *handle) return MM_ERROR_OUT_OF_MEMORY; } - new_handle->type = MM_DISPLAY_TYPE_INVALID; + new_handle->type = MM_DISPLAY_TYPE_OVERLAY; *handle = (mm_display_h)new_handle; @@ -271,13 +275,11 @@ int mm_display_set_display(mm_display_h handle, mm_display_type_e type, void *di { int ret = MM_ERROR_NONE; const char *object_type = NULL; - Evas_Object *obj = NULL; mm_display_t *dp_handle = NULL; - if (!handle || !display || - type < MM_DISPLAY_TYPE_OVERLAY || - type > MM_DISPLAY_TYPE_EVAS) { - LOGE("invalid param %p %p %d", handle, display, type); + if (!handle || !display || !parent_id || + type > MM_DISPLAY_TYPE_OVERLAY_EXT) { + LOGE("invalid param %p %d %p %p", handle, type, display, parent_id); return MM_ERROR_INVALID_ARGUMENT; } @@ -285,21 +287,18 @@ int mm_display_set_display(mm_display_h handle, mm_display_type_e type, void *di LOGD("enter - type %d", type); - obj = (Evas_Object *)display; - object_type = evas_object_type_get(obj); - if (!object_type) { - LOGE("failed to get evas object type from %p", obj); - return MM_ERROR_INVALID_ARGUMENT; - } - - if (type == MM_DISPLAY_TYPE_OVERLAY && !strcmp(object_type, "elm_win")) { - /* get wayland parent id */ - if (!parent_id) { - LOGE("NULL parant_id"); + if (type != MM_DISPLAY_TYPE_OVERLAY_EXT) { + object_type = evas_object_type_get((Evas_Object *)display); + if (!object_type) { + LOGE("failed to get evas object type from %p", display); return MM_ERROR_INVALID_ARGUMENT; } + } - ret = _mm_display_get_parent_id(obj, &dp_handle->parent_id); + if ((type == MM_DISPLAY_TYPE_OVERLAY && !strcmp(object_type, "elm_win")) || + type == MM_DISPLAY_TYPE_OVERLAY_EXT) { + /* get wayland parent id */ + ret = _mm_display_get_parent_id(type, display, &dp_handle->parent_id); if (ret == MM_ERROR_NONE) *parent_id = dp_handle->parent_id; else @@ -310,7 +309,7 @@ int mm_display_set_display(mm_display_h handle, mm_display_type_e type, void *di MMHandleType new_evas_renderer = NULL; /* create evas renderer */ - ret = mm_evas_renderer_create(&new_evas_renderer, obj); + ret = mm_evas_renderer_create(&new_evas_renderer, (Evas_Object *)display); if (ret != MM_ERROR_NONE) { LOGE("failed to creat evas renderer 0x%x", ret); ret = MM_ERROR_UNKNOWN; @@ -334,13 +333,14 @@ int mm_display_set_display(mm_display_h handle, mm_display_type_e type, void *di ret = MM_ERROR_NOT_SUPPORT_API; #endif /* TIZEN_FEATURE_EVAS_RENDERER */ } else { - LOGE("unknown evas object [%p,%s] or type [%d] mismatch", obj, object_type, type); + LOGE("unknown display handle [%p,%s] or type [%d] mismatch", + display, object_type ? object_type : "UNKNOWN", type); ret = MM_ERROR_INVALID_ARGUMENT; } if (ret == MM_ERROR_NONE) { dp_handle->type = type; - dp_handle->eo = obj; + dp_handle->display = display; } return ret; @@ -364,13 +364,14 @@ int mm_display_get_window_rect(mm_display_h handle, MMRectType *window_rect) return MM_ERROR_COMMON_INTERNAL; } - LOGD("get window rect for parent id : %d, eo %p", - dp_handle->parent_id, dp_handle->eo); + LOGD("get window rect for parent id : %d, display %p", + dp_handle->parent_id, dp_handle->display); - evas_object_geometry_get(dp_handle->eo, &window_rect->x, &window_rect->y, + evas_object_geometry_get((Evas_Object *)dp_handle->display, + &window_rect->x, &window_rect->y, &window_rect->width, &window_rect->height); - ee = ecore_evas_ecore_evas_get(evas_object_evas_get(dp_handle->eo)); + ee = ecore_evas_ecore_evas_get(evas_object_evas_get((Evas_Object *)dp_handle->display)); if (ee) { rotation = ecore_evas_rotation_get(ee); if (rotation == 90 || rotation == 270) {