Add new display types for Ecore_Wl2_Window 93/236893/2 accepted/tizen/unified/20200625.110555 submit/tizen/20200624.034306
authorJeongmo Yang <jm80.yang@samsung.com>
Tue, 23 Jun 2020 06:57:25 +0000 (15:57 +0900)
committerJeongmo Yang <jm80.yang@samsung.com>
Tue, 23 Jun 2020 07:38:53 +0000 (16:38 +0900)
[Version] 0.0.6
[Profile] Common
[Issue Type] New feature

Change-Id: Ic51efab42be2a7723dfbea114fcad3931988ec57
Signed-off-by: Jeongmo Yang <jm80.yang@samsung.com>
packaging/libmm-display.spec
src/include/mm_display.h
src/include/mm_display_interface.h
src/mm_display.c

index d2b7970..9bf9a7c 100644 (file)
@@ -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
index 75a0d1c..7658777 100644 (file)
@@ -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 */
index 5e3571b..c305463 100644 (file)
@@ -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);
index ee47d68..bf38db5 100644 (file)
@@ -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) {