Add internal API for support ecore wl2 display 58/262758/2 accepted/tizen/unified/20210830.132236 submit/tizen/20210820.053816 submit/tizen/20210823.085109 submit/tizen/20210824.055220 submit/tizen/20210830.071422
authorHyunsoo Park <hance.park@samsung.com>
Thu, 19 Aug 2021 07:53:51 +0000 (16:53 +0900)
committerHyunsoo Park <hance.park@samsung.com>
Thu, 19 Aug 2021 08:24:09 +0000 (17:24 +0900)
Change-Id: I4d74f02861dd9e7bf96f41d9be3414af152b7320
Signed-off-by: Hyunsoo Park <hance.park@samsung.com>
configure.ac
packaging/libmm-wfd.spec
src/Makefile.am
src/include/mm_wfd_sink_priv.h
src/mm_wfd_sink_attrs.c
src/mm_wfd_sink_priv.c

index 8c73ab727052ccb321bf569643b3674cf17c8bce..e3d2be6ccf61714ca4d51dfb651c9f7fd831b5fd 100644 (file)
@@ -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
index 34e983dceb22cbbccfb1245ae40ce594f0c4d4f9..544f1b2f4cf8cb593d0e3c4dc1c86c6922137635 100644 (file)
@@ -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
index c0aa2455b6c1eaf32d5b4a6741a14f0374ad987d..6c83477f9c63a7f5f258ad210e2d1759cd9aae26 100644 (file)
@@ -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)
index 854e784fdc1f16c3fa8974ee0cf241c9112e5026..1ed4868714d866b0062e073817d8a3d5b125633e 100644 (file)
@@ -33,7 +33,7 @@
 #include <mm_error.h>
 #include <mm_types.h>
 #include <mm_resource_manager.h>
-
+#include <mm_display_interface.h>
 #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);
index c1cd761e10f3da86ed3b0186667131951f67fd40..f7c09098e5ec79f11cc281a4d2e0c828e7d26656 100644 (file)
@@ -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;
        }
 
index 52440440b26ee2e7cb2a6627b94965e29dae2cea..20544b23d7731814d5897b395e62827f7d1b3ec1 100644 (file)
@@ -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);