From caa59f7b629d2c97e691ce455b2c7636470234df Mon Sep 17 00:00:00 2001 From: Hyunil Park Date: Fri, 10 Apr 2015 16:35:05 +0900 Subject: [PATCH] Add wayland feature 1. getting wl_surface 2. getting wl_display 3. getting window render rectangle Change-Id: Id8b07a8a0edf0a2b1c43a0cc8624d45223568112 Signed-off-by: Hyunil Park --- include/player_private.h | 3 +++ packaging/capi-media-player.spec | 2 +- src/player.c | 55 ++++++++++++++++++++++++++++++++++++---- test/player_test.c | 5 ++++ 4 files changed, 59 insertions(+), 6 deletions(-) mode change 100644 => 100755 include/player_private.h mode change 100644 => 100755 src/player.c diff --git a/include/player_private.h b/include/player_private.h old mode 100644 new mode 100755 index fbdae85..fa7d2df --- a/include/player_private.h +++ b/include/player_private.h @@ -68,6 +68,9 @@ typedef struct _player_s{ MMHandleType mm_handle; const void* user_cb[_PLAYER_EVENT_TYPE_NUM]; void* user_data[_PLAYER_EVENT_TYPE_NUM]; +#ifdef HAVE_WAYLAND + void* wl_display; +#endif void* display_handle; player_display_type_e display_type; int state; diff --git a/packaging/capi-media-player.spec b/packaging/capi-media-player.spec index f382420..8b778d2 100644 --- a/packaging/capi-media-player.spec +++ b/packaging/capi-media-player.spec @@ -4,7 +4,7 @@ Name: capi-media-player Summary: A Media Player library in Tizen Native API Version: 0.1.3 -Release: 0 +Release: 1 Group: Multimedia/API License: Apache-2.0 Source0: %{name}-%{version}.tar.gz diff --git a/src/player.c b/src/player.c old mode 100644 new mode 100755 index 4349f4e..2dfa3f3 --- a/src/player.c +++ b/src/player.c @@ -1655,7 +1655,14 @@ int player_set_display(player_h player, player_display_type_e type, player_displ Evas_Object *obj = NULL; const char *object_type = NULL; void *set_handle = NULL; - +#ifdef HAVE_WAYLAND + void *set_wl_display = NULL; + Ecore_Wl_Window * wl_window = NULL; + int wl_window_x = 0; + int wl_window_y = 0; + int wl_window_width = 0; + int wl_window_height = 0; +#endif int ret; if (!__player_state_validate(handle, PLAYER_STATE_IDLE)) { @@ -1702,10 +1709,30 @@ int player_set_display(player_h player, player_display_type_e type, player_displ temp = handle->display_handle; if (type == PLAYER_DISPLAY_TYPE_OVERLAY && !strcmp(object_type, "elm_win")) { - /* x window overlay surface */ - LOGI("overlay surface type"); - handle->display_handle = (void *)elm_win_xwindow_get(obj); - set_handle = &(handle->display_handle); +#ifdef HAVE_WAYLAND + /* wayland overlay surface*/ + LOGI("Wayland overlay surface type"); + + evas_object_geometry_get(obj, &wl_window_x, &wl_window_y, + &wl_window_width, &wl_window_height); + LOGI("get window rectangle: x(%d) y(%d) width(%d) height(%d)", + wl_window_x, wl_window_y, wl_window_width, wl_window_height); + + wl_window = elm_win_wl_window_get(obj); + + /* get wl_surface */ + handle->display_handle = (void *)ecore_wl_window_surface_get(wl_window); + set_handle = handle->display_handle; + + /* get wl_display */ + handle->wl_display = (void *)ecore_wl_display_get(); + set_wl_display = handle->wl_display; +#else // HAVE_X11 + /* x window overlay surface */ + LOGI("X overlay surface type"); + handle->display_handle = (void *)elm_win_xwindow_get(obj); + set_handle = &(handle->display_handle); +#endif } else if (type == PLAYER_DISPLAY_TYPE_EVAS && !strcmp(object_type, "image")) { @@ -1732,6 +1759,10 @@ int player_set_display(player_h player, player_display_type_e type, player_displ { ret = mm_player_set_attribute(handle->mm_handle, NULL, "display_surface_type", type, +#ifdef HAVE_WAYLAND + "wl_display", set_wl_display, + sizeof(void*), +#endif "display_overlay", set_handle, sizeof(display), (char*)NULL); @@ -1751,6 +1782,20 @@ int player_set_display(player_h player, player_display_type_e type, player_displ else LOGI("NULL surface"); } +#ifdef HAVE_WAYLAND + ret = mm_player_set_attribute(handle->mm_handle, NULL, + "wl_window_render_x", wl_window_x, + "wl_window_render_y", wl_window_y, + "wl_window_render_width", wl_window_width, + "wl_window_render_height", wl_window_height, + (char*)NULL); + + if (ret != MM_ERROR_NONE) + { + handle->display_handle = temp; + LOGE("[%s] Failed to set wl_window render rectangle :%d",__FUNCTION__,ret); + } +#endif } else //changing surface case { diff --git a/test/player_test.c b/test/player_test.c index ed2f1de..1b5a1d6 100755 --- a/test/player_test.c +++ b/test/player_test.c @@ -111,6 +111,8 @@ static void win_del(void *data, Evas_Object *obj, void *event) static Evas_Object* create_win(const char *name) { Evas_Object *eo = NULL; + int w = 0; + int h = 0; printf ("[%s][%d] name=%s\n", __func__, __LINE__, name); @@ -119,6 +121,9 @@ static Evas_Object* create_win(const char *name) elm_win_title_set(eo, name); elm_win_borderless_set(eo, EINA_TRUE); evas_object_smart_callback_add(eo, "delete,request",win_del, NULL); + elm_win_screen_size_get(eo, NULL, NULL, &w, &h); + printf ("window size :%d,%d", w, h); + evas_object_resize(eo, w, h); elm_win_autodel_set(eo, EINA_TRUE); } return eo; -- 2.7.4