tizenwlsink: Apply gst_video_overlay_set_wl_window_exported_shell_handle interface 59/261559/2
authorHyunil <hyunil46.park@samsung.com>
Wed, 21 Jul 2021 06:48:08 +0000 (15:48 +0900)
committerHyunil <hyunil46.park@samsung.com>
Thu, 22 Jul 2021 01:14:07 +0000 (10:14 +0900)
- Exported shell handle can be set by video overlay interface

[Version] 1.16.2-36
[Issue Type] New feature

Change-Id: Ia58bb5cd7b8428034b2c2ef481f5810df46a4c5d
Signed-off-by: Hyunil <hyunil46.park@samsung.com>
tizenwlsink/src/gsttizenwlsink.c
tizenwlsink/src/gsttizenwlsink.h

index 308b568..3ac4f1c 100644 (file)
@@ -225,7 +225,7 @@ static void
 gst_tizen_wl_sink_set_wl_window_wl_surface_id (GstVideoOverlay * overlay,
     gint wl_surface_id);
 static void
-gst_tizen_wl_sink_set_wtz_exported_shell_handle (GstTizenWlSink * sink,
+gst_tizen_wl_sink_set_wl_window_exported_shell_handle (GstVideoOverlay * overlay,
     const char *exported_shell_handle);
 static void gst_tizen_wl_sink_set_roi_area (GstVideoOverlay * overlay,
     gint x, gint y, gint w, gint h);
@@ -581,6 +581,7 @@ gst_tizen_wl_sink_init (GstTizenWlSink * sink)
   FUNCTION;
 #ifdef TIZEN_FEATURE_WLSINK_ENHANCEMENT
   sink->wtz_exported_shell_handle = NULL;
+  sink->use_wtz_exported_shell = FALSE;
   sink->last_sample = NULL;
   sink->dump_video = FALSE;
   sink->total_dump = DEFAULT_DUMP_COUNT;
@@ -642,7 +643,7 @@ gst_tizen_wl_sink_recover_display_window_info (GstTizenWlSink * sink)
   sink->display->is_native_format = sink->is_native_format;
   self = GST_TIZEN_WL_SHM_ALLOCATOR (gst_tizen_wl_shm_allocator_get ());
   self->display = sink->display;
-  if (sink->wtz_exported_shell_handle) {
+  if (sink->use_wtz_exported_shell) {
     /* In case of wtz_exported_shell_handle, window geometry is changed by UI */
     return;
   }
@@ -946,7 +947,7 @@ gst_tizen_wl_sink_set_property (GObject * object,
       GST_OBJECT_UNLOCK (sink);
       GST_WARNING ("set wtz_exported_shell_handle (%s)", sink->wtz_exported_shell_handle);
       g_mutex_unlock (&sink->render_lock);
-      gst_tizen_wl_sink_set_wtz_exported_shell_handle(sink, sink->wtz_exported_shell_handle);
+      gst_tizen_wl_sink_set_wl_window_exported_shell_handle(GST_VIDEO_OVERLAY (sink), sink->wtz_exported_shell_handle);
       g_mutex_lock (&sink->render_lock);
       break;
     case PROP_SURFACE_ID:
@@ -1023,7 +1024,7 @@ gst_tizen_wl_sink_set_property (GObject * object,
       GST_WARNING ("set use %s", (sink->use_tbm) ? "TBM" : "SHM");
       break;
     case PROP_ROTATE_ANGLE:
-      if (sink->rotate_angle == g_value_get_enum (value) || sink->wtz_exported_shell_handle)
+      if (sink->rotate_angle == g_value_get_enum (value) || sink->use_wtz_exported_shell)
         break;
       sink->rotate_angle = g_value_get_enum (value);
       GST_WARNING_OBJECT (sink, "Rotate angle is set (%d)", sink->rotate_angle);
@@ -1033,7 +1034,7 @@ gst_tizen_wl_sink_set_property (GObject * object,
       }
       break;
     case PROP_DISPLAY_GEOMETRY_METHOD:
-      if (sink->display_geometry_method == g_value_get_enum (value) || sink->wtz_exported_shell_handle)
+      if (sink->display_geometry_method == g_value_get_enum (value) || sink->use_wtz_exported_shell)
         break;
       sink->display_geometry_method = g_value_get_enum (value);
       GST_WARNING_OBJECT (sink, "Display geometry method is set (%d)",
@@ -1045,7 +1046,7 @@ gst_tizen_wl_sink_set_property (GObject * object,
       }
       break;
     case PROP_FLIP:
-      if (sink->flip == g_value_get_enum (value) || sink->wtz_exported_shell_handle)
+      if (sink->flip == g_value_get_enum (value) || sink->use_wtz_exported_shell)
         break;
       sink->flip = g_value_get_enum (value);
       GST_WARNING_OBJECT (sink, "flip is set (%d)", sink->flip);
@@ -1077,26 +1078,26 @@ gst_tizen_wl_sink_set_property (GObject * object,
       }
       break;
     case PROP_SCALE_SRC_X:
-      if (sink->scale_src_x == g_value_get_double (value) || sink->wtz_exported_shell_handle)
+      if (sink->scale_src_x == g_value_get_double (value) || sink->use_wtz_exported_shell)
         break;
       sink->scale_src_x = g_value_get_double (value);
       GST_WARNING_OBJECT (sink, "scale-src-x is set (%f)", sink->scale_src_x);
       break;
     case PROP_SCALE_SRC_Y:
-      if (sink->scale_src_y == g_value_get_double (value) || sink->wtz_exported_shell_handle)
+      if (sink->scale_src_y == g_value_get_double (value) || sink->use_wtz_exported_shell)
         break;
       sink->scale_src_y = g_value_get_double (value);
       GST_WARNING_OBJECT (sink, "scale-src-y is set (%f)", sink->scale_src_y);
       break;
     case PROP_SCALE_SRC_WIDTH:
-      if (sink->scale_src_w == g_value_get_double (value) || sink->wtz_exported_shell_handle)
+      if (sink->scale_src_w == g_value_get_double (value) || sink->use_wtz_exported_shell)
         break;
       sink->scale_src_w = g_value_get_double (value);
       GST_WARNING_OBJECT (sink, "scale-src-width is set (%f)",
           sink->scale_src_w);
       break;
     case PROP_SCALE_SRC_HEIGHT:
-      if (sink->scale_src_h == g_value_get_double (value) || sink->wtz_exported_shell_handle)
+      if (sink->scale_src_h == g_value_get_double (value) || sink->use_wtz_exported_shell)
         break;
       sink->scale_src_h = g_value_get_double (value);
       GST_WARNING_OBJECT (sink, "scale-src-height is set (%f)",
@@ -1112,26 +1113,26 @@ gst_tizen_wl_sink_set_property (GObject * object,
       }
       break;
     case PROP_DISPLAY_ROI_X:
-      if (sink->disp_roi_x == g_value_get_int (value) || sink->wtz_exported_shell_handle)
+      if (sink->disp_roi_x == g_value_get_int (value) || sink->use_wtz_exported_shell)
         break;
       sink->disp_roi_x = g_value_get_int (value);
       GST_WARNING_OBJECT (sink, "display-roi-x is set (%d)", sink->disp_roi_x);
       break;
     case PROP_DISPLAY_ROI_Y:
-      if (sink->disp_roi_y == g_value_get_int (value) || sink->wtz_exported_shell_handle)
+      if (sink->disp_roi_y == g_value_get_int (value) || sink->use_wtz_exported_shell)
         break;
       sink->disp_roi_y = g_value_get_int (value);
       GST_WARNING_OBJECT (sink, "display-roi-y is set (%d)", sink->disp_roi_y);
       break;
     case PROP_DISPLAY_ROI_WIDTH:
-      if (sink->disp_roi_width == g_value_get_uint (value) || sink->wtz_exported_shell_handle)
+      if (sink->disp_roi_width == g_value_get_uint (value) || sink->use_wtz_exported_shell)
         break;
       sink->disp_roi_width = g_value_get_uint (value);
       GST_WARNING_OBJECT (sink, "display-roi-width is set (%d)",
           sink->disp_roi_width);
       break;
     case PROP_DISPLAY_ROI_HEIGHT:
-      if (sink->disp_roi_height == g_value_get_uint (value) || sink->wtz_exported_shell_handle)
+      if (sink->disp_roi_height == g_value_get_uint (value) || sink->use_wtz_exported_shell)
         break;
       sink->disp_roi_height = g_value_get_uint (value);
       GST_WARNING_OBJECT (sink, "display-roi-height is set (%d)",
@@ -1148,7 +1149,7 @@ gst_tizen_wl_sink_set_property (GObject * object,
     case PROP_SCALE_DST_WIDTH:
       if (sink->scale_dst_w == g_value_get_double (value)
           || sink->display_geometry_method == DISP_GEO_METHOD_CUSTOM_ROI
-          || sink->wtz_exported_shell_handle)
+          || sink->use_wtz_exported_shell)
         break;
       sink->scale_dst_w = g_value_get_double (value);
       GST_WARNING_OBJECT (sink, "scale-destination-width is set (%f)",
@@ -1161,7 +1162,7 @@ gst_tizen_wl_sink_set_property (GObject * object,
     case PROP_SCALE_DST_HEIGHT:
       if (sink->scale_dst_h == g_value_get_double (value)
           || sink->display_geometry_method == DISP_GEO_METHOD_CUSTOM_ROI
-          || sink->wtz_exported_shell_handle)
+          || sink->use_wtz_exported_shell)
         break;
       sink->scale_dst_h = g_value_get_double (value);
       GST_WARNING_OBJECT (sink, "scale-destination-height is set (%f)",
@@ -1174,7 +1175,7 @@ gst_tizen_wl_sink_set_property (GObject * object,
     case PROP_FOLLOW_PARENT_TRANSFORM:
       if (sink->follow_parent_transform == g_value_get_boolean (value)
           || sink->display_geometry_method == DISP_GEO_METHOD_CUSTOM_ROI
-          || sink->wtz_exported_shell_handle)
+          || sink->use_wtz_exported_shell)
         break;
       sink->follow_parent_transform = g_value_get_boolean (value);
       GST_WARNING_OBJECT (sink, "follow parent transform is set (%d)",
@@ -1188,7 +1189,7 @@ gst_tizen_wl_sink_set_property (GObject * object,
     case PROP_RATIO_WIDTH:
       if (sink->ratio_w == g_value_get_double (value)
           || sink->display_geometry_method == DISP_GEO_METHOD_CUSTOM_ROI
-          || sink->wtz_exported_shell_handle)
+          || sink->use_wtz_exported_shell)
         break;
       sink->ratio_w = g_value_get_double (value);
       GST_WARNING_OBJECT (sink, "ratio-w is set (%f)", sink->ratio_w);
@@ -1196,7 +1197,7 @@ gst_tizen_wl_sink_set_property (GObject * object,
     case PROP_RATIO_HEIGHT:
       if (sink->ratio_h == g_value_get_double (value)
           || sink->display_geometry_method == DISP_GEO_METHOD_CUSTOM_ROI
-          || sink->wtz_exported_shell_handle)
+          || sink->use_wtz_exported_shell)
         break;
       sink->ratio_h = g_value_get_double (value);
       GST_WARNING_OBJECT (sink, "ratio-h is set (%f)", sink->ratio_h);
@@ -1208,7 +1209,7 @@ gst_tizen_wl_sink_set_property (GObject * object,
     case PROP_OFFSET_X:
       if (sink->offset_x == g_value_get_uint (value)
           || sink->display_geometry_method == DISP_GEO_METHOD_CUSTOM_ROI
-          || sink->wtz_exported_shell_handle)
+          || sink->use_wtz_exported_shell)
         break;
       sink->offset_x = g_value_get_uint (value);
       GST_WARNING_OBJECT (sink, "offset-x is set (%d)", sink->offset_x);
@@ -1216,7 +1217,7 @@ gst_tizen_wl_sink_set_property (GObject * object,
     case PROP_OFFSET_Y:
       if (sink->offset_y == g_value_get_uint (value)
           || sink->display_geometry_method == DISP_GEO_METHOD_CUSTOM_ROI
-          || sink->wtz_exported_shell_handle)
+          || sink->use_wtz_exported_shell)
         break;
       sink->offset_y = g_value_get_uint (value);
       GST_WARNING_OBJECT (sink, "offset-y is set (%d)", sink->offset_y);
@@ -1224,7 +1225,7 @@ gst_tizen_wl_sink_set_property (GObject * object,
     case PROP_OFFSET_WIDTH:
       if (sink->offset_w == g_value_get_uint (value)
           || sink->display_geometry_method == DISP_GEO_METHOD_CUSTOM_ROI
-          || sink->wtz_exported_shell_handle)
+          || sink->use_wtz_exported_shell)
         break;
       sink->offset_w = g_value_get_uint (value);
       GST_WARNING_OBJECT (sink, "offset-w is set (%d)", sink->offset_w);
@@ -1232,7 +1233,7 @@ gst_tizen_wl_sink_set_property (GObject * object,
     case PROP_OFFSET_HEIGHT:
       if (sink->offset_h == g_value_get_uint (value)
           || sink->display_geometry_method == DISP_GEO_METHOD_CUSTOM_ROI
-          || sink->wtz_exported_shell_handle)
+          || sink->use_wtz_exported_shell)
         break;
       sink->offset_h = g_value_get_uint (value);
       GST_WARNING_OBJECT (sink, "offset-h is set (%d)", sink->offset_h);
@@ -1244,7 +1245,7 @@ gst_tizen_wl_sink_set_property (GObject * object,
     case PROP_ALIGN_WIDTH:
       if (sink->align_w == g_value_get_double (value)
           || sink->display_geometry_method == DISP_GEO_METHOD_CUSTOM_ROI
-          || sink->wtz_exported_shell_handle)
+          || sink->use_wtz_exported_shell)
         break;
       sink->align_w = g_value_get_double (value);
       GST_WARNING_OBJECT (sink, "align_w is set (%f)", sink->align_w);
@@ -1252,7 +1253,7 @@ gst_tizen_wl_sink_set_property (GObject * object,
     case PROP_ALIGN_HEIGHT:
       if (sink->align_h == g_value_get_double (value)
           || sink->display_geometry_method == DISP_GEO_METHOD_CUSTOM_ROI
-          || sink->wtz_exported_shell_handle)
+          || sink->use_wtz_exported_shell)
         break;
       sink->align_h = g_value_get_double (value);
       GST_WARNING_OBJECT (sink, "align_h is set (%f)", sink->align_h);
@@ -1796,7 +1797,7 @@ gst_tizen_wl_sink_set_caps (GstBaseSink * bsink, GstCaps * caps)
 
   sink->is_native_format = sink->display->is_native_format;
 
-  if (sink->window && !sink->wtz_exported_shell_handle)
+  if (sink->window && !sink->use_wtz_exported_shell)
     gst_tizen_wl_sink_update_window_geometry (sink);
 
 #endif
@@ -1974,7 +1975,7 @@ render_last_buffer (GstTizenWlSink * sink)
       callback, &frame_callback_listener, sink);
   wl_callback_add_listener (callback, &frame_callback_listener, sink);
 
-  if (G_UNLIKELY (sink->video_info_changed) && !sink->wtz_exported_shell_handle) {
+  if (G_UNLIKELY (sink->video_info_changed) && !sink->use_wtz_exported_shell) {
 #ifdef TIZEN_FEATURE_WLSINK_ENHANCEMENT
     gst_wl_window_set_video_info_change (sink->window, TRUE);
 #endif
@@ -2383,6 +2384,8 @@ gst_tizen_wl_sink_videooverlay_init (GstVideoOverlayInterface * iface)
 #ifdef TIZEN_FEATURE_WLSINK_ENHANCEMENT /* use unique_id */
   iface->set_wl_window_wl_surface_id =
       gst_tizen_wl_sink_set_wl_window_wl_surface_id;
+  iface->set_wl_window_exported_shell_handle =
+      gst_tizen_wl_sink_set_wl_window_exported_shell_handle;
   iface->set_display_roi_area = gst_tizen_wl_sink_set_roi_area;
   iface->set_video_roi_area = gst_tizen_wl_sink_set_video_source_roi_area;
 #endif
@@ -2429,9 +2432,10 @@ gst_tizen_wl_sink_set_wl_window_wl_surface_id (GstVideoOverlay * overlay,
 }
 
 static void
-gst_tizen_wl_sink_set_wtz_exported_shell_handle (GstTizenWlSink * sink,
+gst_tizen_wl_sink_set_wl_window_exported_shell_handle (GstVideoOverlay * overlay,
     const char *exported_shell_handle)
 {
+  GstTizenWlSink *sink = GST_TIZEN_WL_SINK (overlay);
   FUNCTION;
   g_return_if_fail (sink != NULL);
   g_return_if_fail (exported_shell_handle != NULL);
@@ -2449,10 +2453,11 @@ gst_tizen_wl_sink_set_wtz_exported_shell_handle (GstTizenWlSink * sink,
   if (G_LIKELY (gst_tizen_wl_sink_find_display (sink))) {
     /* we can use our own display with an external window handle */
     if (G_LIKELY (sink->display->own_display)) {
-      sink->display->wtz_exported_shell_handle = g_strdup(sink->wtz_exported_shell_handle);
+      sink->display->wtz_exported_shell_handle = g_strdup(exported_shell_handle);
       sink->window =
           gst_wl_window_new_in_surface (sink->display, NULL,
           &sink->render_lock);
+      sink->use_wtz_exported_shell = TRUE;
     }
   } else {
     GST_ERROR_OBJECT (sink, "Failed to find display handle, "
index d346231..ac260ca 100644 (file)
@@ -99,6 +99,7 @@ struct _GstTizenWlSink
   gboolean use_tbm;
   gboolean is_native_format;
   gboolean disable_overlay;
+  gboolean use_wtz_exported_shell;
   gint disp_roi_x, disp_roi_y;
   guint disp_roi_width, disp_roi_height;
   guint surface_id;