From: Hyunsoo Park Date: Thu, 19 Aug 2021 07:53:51 +0000 (+0900) Subject: Add internal API for support ecore wl2 display X-Git-Tag: submit/tizen/20210820.053816^0 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=c0745fc01dbfc814646a3fe38e55c46dd8c32262;p=platform%2Fcore%2Fmultimedia%2Flibmm-wfd.git Add internal API for support ecore wl2 display Change-Id: I4d74f02861dd9e7bf96f41d9be3414af152b7320 Signed-off-by: Hyunsoo Park --- diff --git a/configure.ac b/configure.ac index 8c73ab7..e3d2be6 100644 --- a/configure.ac +++ b/configure.ac @@ -107,6 +107,10 @@ PKG_CHECK_MODULES(MM_RESOURCE_MANAGER, mm-resource-manager) AC_SUBST(MM_RESOURCE_MANAGER_CFLAGS) AC_SUBST(MM_RESOURCE_MANAGER_LIBS) +PKG_CHECK_MODULES(MM_DISPLAY_INTERFACE, mm-display-interface) +AC_SUBST(MM_DISPLAY_INTERFACE_CFLAGS) +AC_SUBST(MM_DISPLAY_INTERFACE_LIBS) + AC_ARG_ENABLE(tests, AC_HELP_STRING([--enable-tests], [unittest build]), [ case "${enableval}" in diff --git a/packaging/libmm-wfd.spec b/packaging/libmm-wfd.spec index 34e983d..544f1b2 100644 --- a/packaging/libmm-wfd.spec +++ b/packaging/libmm-wfd.spec @@ -22,6 +22,7 @@ BuildRequires: pkgconfig(libtbm) BuildRequires: pkgconfig(libtzplatform-config) BuildRequires: pkgconfig(capi-system-info) BuildRequires: pkgconfig(mm-resource-manager) +BuildRequires: pkgconfig(mm-display-interface) %if 0%{?gtests:1} BuildRequires: pkgconfig(gmock) %endif diff --git a/src/Makefile.am b/src/Makefile.am index c0aa245..6c83477 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -31,7 +31,8 @@ libmmfwfdsink_la_CFLAGS = -I$(srcdir)/include \ $(GST_VIDEO_CFLAGS) \ $(TZPLATFORM_CONFIG_CFLAGS) \ $(CAPI_SYSTEM_INFO_CFLAGS) \ - $(MM_RESOURCE_MANAGER_CFLAGS) + $(MM_RESOURCE_MANAGER_CFLAGS) \ + $(MM_DISPLAY_INTERFACE_CFLAGS) libmmfwfdsink_la_LDFLAGS = $(GST_PLUGIN_LDFLAGS) @@ -48,7 +49,8 @@ libmmfwfdsink_la_LIBADD = $(GST_LIBS) \ $(TZPLATFORM_CONFIG_LIBS) \ $(CAPI_SYSTEM_INFO_LIBS) \ $(GST_VIDEO_LIBS) \ - $(MM_RESOURCE_MANAGER_LIBS) + $(MM_RESOURCE_MANAGER_LIBS) \ + $(MM_DISPLAY_INTERFACE_LIBS) libmmfwfdsink_la_CFLAGS += $(MMLOG_CFLAGS) -DMMF_LOG_OWNER=0x02000000 -DMMF_DEBUG_PREFIX=\"MMF-WFD-SINK\" libmmfwfdsink_la_LIBADD += $(MMLOG_LIBS) diff --git a/src/include/mm_wfd_sink_priv.h b/src/include/mm_wfd_sink_priv.h index 854e784..1ed4868 100644 --- a/src/include/mm_wfd_sink_priv.h +++ b/src/include/mm_wfd_sink_priv.h @@ -33,7 +33,7 @@ #include #include #include - +#include #include "mm_wfd_sink_ini.h" #include "mm_wfd_sink_attrs.h" #include "mm_wfd_sink.h" @@ -311,7 +311,7 @@ int __mm_wfd_sink_destroy_audio_sinkbin(mm_wfd_sink_t *wfd_sink); int __mm_wfd_sink_destroy_video_sinkbin(mm_wfd_sink_t *wfd_sink); int __mm_wfd_sink_destroy_pipeline(mm_wfd_sink_t *wfd_sink); -int _mm_wfd_sink_set_display_overlay(mm_wfd_sink_t *wfd_sink, void *display_object); +int _mm_wfd_sink_set_display_overlay(mm_wfd_sink_t *wfd_sink, void *display_object, gint display_type); /* state */ int __mm_wfd_sink_set_state(mm_wfd_sink_t *wfd_sink, MMWFDSinkStateType state); diff --git a/src/mm_wfd_sink_attrs.c b/src/mm_wfd_sink_attrs.c index c1cd761..f7c0909 100644 --- a/src/mm_wfd_sink_attrs.c +++ b/src/mm_wfd_sink_attrs.c @@ -293,6 +293,16 @@ MMWfdAttrsSpec wfd_attrs[] = { MM_DISPLAY_SURFACE_REMOTE, NULL, }, + { + (char *)"display_type", + MM_ATTRS_TYPE_INT, + MM_ATTRS_FLAG_RW, + (void *) MM_DISPLAY_TYPE_OVERLAY, + MM_ATTRS_VALID_TYPE_INT_RANGE, + MM_DISPLAY_TYPE_OVERLAY, + MM_DISPLAY_TYPE_OVERLAY_SYNC_UI, + NULL, + }, { (char *)"display_width", /* dest width of fimcconvert ouput */ MM_ATTRS_TYPE_INT, @@ -639,29 +649,30 @@ _mmwfd_get_attributes_info(MMHandleType handle, const char *attribute_name, MMW static bool _mmwfd_set_display_info(MMHandleType handle, int attr_idx, const MMAttrsValue *value) { - gint surface_type = MM_DISPLAY_SURFACE_OVERLAY; + gint display_type = MM_DISPLAY_TYPE_OVERLAY; mm_wfd_sink_t *wfd_sink = MMWFDSINK_CAST(handle); wfd_sink_debug_fenter(); /* update display surface */ - mm_attrs_get_int_by_name(MMWFDSINK_GET_ATTRS(wfd_sink), "display_surface_type", &surface_type); - wfd_sink_info("check display surface type attribute: %d", surface_type); + mm_attrs_get_int_by_name(MMWFDSINK_GET_ATTRS(wfd_sink), "display_type", &display_type); + wfd_sink_info("check display type attribute: %d", display_type); /* configuring display */ - switch (surface_type) { - case MM_DISPLAY_SURFACE_EVAS: + switch (display_type) { + case MM_DISPLAY_TYPE_EVAS: /* nothing to do */ break; - case MM_DISPLAY_SURFACE_OVERLAY: - if (MM_ERROR_NONE != _mm_wfd_sink_set_display_overlay(wfd_sink, value->value.p_val)) { + case MM_DISPLAY_TYPE_OVERLAY: + case MM_DISPLAY_TYPE_OVERLAY_EXT: + wfd_sink_info("DISPLAY TYPE : %d", display_type); + if (MM_ERROR_NONE != _mm_wfd_sink_set_display_overlay(wfd_sink, value->value.p_val, display_type)) { wfd_sink_error("Setting overlay display is failed."); return false; } break; - case MM_DISPLAY_SURFACE_NULL: default: - wfd_sink_error("Not Supported Surface. surface_type: [%d]", surface_type); + wfd_sink_error("Not Supported Surface. display_type: [%d]", display_type); return false; } diff --git a/src/mm_wfd_sink_priv.c b/src/mm_wfd_sink_priv.c index 5244044..20544b2 100644 --- a/src/mm_wfd_sink_priv.c +++ b/src/mm_wfd_sink_priv.c @@ -4971,7 +4971,7 @@ int _mm_wfd_sink_set_resolution(mm_wfd_sink_t *wfd_sink, MMWFDSinkResolution res return MM_ERROR_NONE; } -int _mm_wfd_sink_set_display_overlay(mm_wfd_sink_t *wfd_sink, void *display_object) +int _mm_wfd_sink_set_display_overlay(mm_wfd_sink_t *wfd_sink, void *display_object, gint display_type) { int wl_surface_id = 0; static void *display_overlay = NULL; @@ -5000,26 +5000,27 @@ int _mm_wfd_sink_set_display_overlay(mm_wfd_sink_t *wfd_sink, void *display_obje wfd_sink_debug("display object is NULL!"); return MM_ERROR_WFD_INTERNAL; } - obj = (Evas_Object *)object; - object_type = evas_object_type_get(obj); - wfd_sink_debug("window object type : %s", object_type); - if (strcmp(object_type, "elm_win")) { - wfd_sink_error("Window type is not elm_win"); - return MM_ERROR_WFD_INTERNAL; - } + if (display_type == MM_DISPLAY_TYPE_OVERLAY) { + obj = (Evas_Object *)object; + object_type = evas_object_type_get(obj); + wfd_sink_debug("window object type : %s", object_type); - /* wayland overlay surface */ - wfd_sink_info("Wayland overlay surface type"); - evas_object_geometry_get(obj, &wl_window_x, &wl_window_y, &wl_window_width, &wl_window_height); - - wfd_sink_debug("x[%d] y[%d] width[%d] height[%d]", wl_window_x, wl_window_y, - wl_window_width, wl_window_height); + if (strcmp(object_type, "elm_win")) { + wfd_sink_error("Window type is not elm_win"); + return MM_ERROR_WFD_INTERNAL; + } - wl2_window = ecore_evas_wayland2_window_get(ecore_evas_ecore_evas_get(evas_object_evas_get(obj))); + /* wayland overlay surface */ + evas_object_geometry_get(obj, &wl_window_x, &wl_window_y, &wl_window_width, &wl_window_height); + wfd_sink_debug("x[%d] y[%d] width[%d] height[%d]", wl_window_x, wl_window_y, + wl_window_width, wl_window_height); + wl2_window = ecore_evas_wayland2_window_get(ecore_evas_ecore_evas_get(evas_object_evas_get(obj))); + } else if (display_type == MM_DISPLAY_TYPE_OVERLAY_EXT) { + wl2_window = (Ecore_Wl2_Window *)object; + } ecore_wl2_window_video_has(wl2_window, EINA_TRUE); wl_surface = ecore_wl2_window_surface_get(wl2_window); - /* get wl_display */ wl2_display = ecore_wl2_connected_display_get(NULL); wl_display = ecore_wl2_display_get(wl2_display);