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 8c73ab7..e3d2be6 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 34e983d..544f1b2 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 c0aa245..6c83477 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 854e784..1ed4868 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 c1cd761..f7c0909 100644 (file)
@@ -294,6 +294,16 @@ MMWfdAttrsSpec wfd_attrs[] = {
                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,
                MM_ATTRS_FLAG_RW,
@@ -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 5244044..20544b2 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);