From 5eade77475c976422f9dcc30024f2723eda8d76f Mon Sep 17 00:00:00 2001 From: Hyunil Date: Tue, 30 Aug 2016 11:13:31 +0900 Subject: [PATCH] Add ENABLE_FUNCTION define and lock some property. Change-Id: I3ab4dc8d6b9b29f5acef7678d2226649e58f4b6c Signed-off-by: Hyunil --- ext/wayland/gstwaylandsink.c | 90 ++++++++++++++++++++++++++------------------ ext/wayland/gstwaylandsink.h | 2 + ext/wayland/wlwindow.c | 61 ++++++++++++++++-------------- ext/wayland/wlwindow.h | 9 ++++- 4 files changed, 96 insertions(+), 66 deletions(-) diff --git a/ext/wayland/gstwaylandsink.c b/ext/wayland/gstwaylandsink.c index 66a14a2..bec1875 100755 --- a/ext/wayland/gstwaylandsink.c +++ b/ext/wayland/gstwaylandsink.c @@ -325,6 +325,19 @@ gst_wayland_sink_class_init (GstWaylandSinkClass * klass) "Draws screen or blacks out, true means visible, false blacks out", TRUE, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); +#ifdef ENABLE_FUNCTION + g_object_class_install_property (gobject_class, PROP_SCALE_WIDTH, + g_param_spec_double ("scale-w", "ratio width", + "scale width for rendering video," + "Function is not supported in DISP_GEO_METHOD_CUSTOM_ROI. ", 0.0, + G_MAXDOUBLE, 1.0, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); + + g_object_class_install_property (gobject_class, PROP_SCALE_HEIGHT, + g_param_spec_double ("scale-h", "scale height", + "scale width for rendering video, " + "Function is not support in DISP_GEO_METHOD_CUSTOM_ROI. ", 0.0, + G_MAXDOUBLE, 1.0, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); + g_object_class_install_property (gobject_class, PROP_FOLLOW_PARENT_TRANSFORM, g_param_spec_boolean ("follow-parent-transform", "follow parent transform", @@ -378,18 +391,6 @@ gst_wayland_sink_class_init (GstWaylandSinkClass * klass) "Function is not support in DISP_GEO_METHOD_CUSTOM_ROI. ", -1.0, G_MAXDOUBLE, -1.0, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); - g_object_class_install_property (gobject_class, PROP_SCALE_WIDTH, - g_param_spec_double ("scale-w", "ratio width", - "scale width for rendering video," - "Function is not supported in DISP_GEO_METHOD_CUSTOM_ROI. ", 0.0, - G_MAXDOUBLE, 1.0, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); - - g_object_class_install_property (gobject_class, PROP_SCALE_HEIGHT, - g_param_spec_double ("scale-h", "scale height", - "scale width for rendering video, " - "Function is not support in DISP_GEO_METHOD_CUSTOM_ROI. ", 0.0, - G_MAXDOUBLE, 1.0, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); - g_object_class_install_property (gobject_class, PROP_OFFSET_X, g_param_spec_uint ("offset-x", "offset x", "x offset for moving x-coordinate of video pixel, " @@ -431,6 +432,7 @@ gst_wayland_sink_class_init (GstWaylandSinkClass * klass) "Please set align-w and align-h togethrer" "Function is not supported in DISP_GEO_METHOD_CUSTOM_ROI. ", 0.0, 1.0, 0.5, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); +#endif /* fakesink function for stream callback of MSL with browser */ g_object_class_install_property (gobject_class, PROP_SIGNAL_HANDOFFS, @@ -482,13 +484,15 @@ gst_wayland_sink_init (GstWaylandSink * sink) sink->flip = DEF_DISPLAY_FLIP; sink->rotate_angle = DEGREE_0; sink->visible = TRUE; - sink->follow_parent_transform = FALSE; sink->crop_x = sink->crop_y = sink->crop_w = sink->crop_h = 0; +#ifdef ENABLE_FUNCTION + sink->follow_parent_transform = FALSE; sink->ratio_w = sink->ratio_h = -1.0; //need to set -1.0 for original video ratio - sink->scale_w = sink->scale_h = 1.0; sink->align_w = sink->align_h = 0.5; + sink->scale_w = sink->scale_h = 1.0; sink->offset_x = sink->offset_y = sink->offset_w = sink->offset_h = 0; #endif +#endif g_mutex_init (&sink->display_lock); g_mutex_init (&sink->render_lock); } @@ -816,6 +820,13 @@ gst_wayland_sink_get_property (GObject * object, case PROP_VISIBLE: g_value_set_boolean (value, sink->visible); break; +#ifdef ENABLE_FUNCTION + case PROP_SCALE_WIDTH: + g_value_set_double (value, sink->scale_w); + break; + case PROP_SCALE_HEIGHT: + g_value_set_double (value, sink->scale_h); + break; case PROP_FOLLOW_PARENT_TRANSFORM: g_value_set_boolean (value, sink->follow_parent_transform); break; @@ -837,12 +848,6 @@ gst_wayland_sink_get_property (GObject * object, case PROP_RATIO_HEIGHT: g_value_set_double (value, sink->ratio_h); break; - case PROP_SCALE_WIDTH: - g_value_set_double (value, sink->scale_w); - break; - case PROP_SCALE_HEIGHT: - g_value_set_double (value, sink->scale_h); - break; case PROP_OFFSET_X: g_value_set_uint (value, sink->offset_x); break; @@ -862,6 +867,7 @@ gst_wayland_sink_get_property (GObject * object, g_value_set_double (value, sink->align_h); break; #endif +#endif default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); break; @@ -946,6 +952,29 @@ gst_wayland_sink_set_property (GObject * object, } } break; +#ifdef ENABLE_FUNCTION + case PROP_SCALE_WIDTH: + if (sink->scale_w == g_value_get_double (value) + || sink->display_geometry_method == DISP_GEO_METHOD_CUSTOM_ROI) + break; + sink->scale_w = g_value_get_double (value); + GST_WARNING_OBJECT (sink, "scale-w is set (%f)", sink->scale_w); + sink->video_info_changed = TRUE; + if (sink->window) + gst_wl_window_set_destination_mode_scale (sink->window, sink->scale_w, + sink->scale_h); + break; + case PROP_SCALE_HEIGHT: + if (sink->scale_h == g_value_get_double (value) + || sink->display_geometry_method == DISP_GEO_METHOD_CUSTOM_ROI) + break; + sink->scale_h = g_value_get_double (value); + GST_WARNING_OBJECT (sink, "scale-h is set (%f)", sink->scale_h); + sink->video_info_changed = TRUE; + if (sink->window) + gst_wl_window_set_destination_mode_scale (sink->window, sink->scale_w, + sink->scale_h); + break; case PROP_FOLLOW_PARENT_TRANSFORM: if (sink->follow_parent_transform == g_value_get_boolean (value) || sink->display_geometry_method == DISP_GEO_METHOD_CUSTOM_ROI) @@ -1019,17 +1048,6 @@ gst_wayland_sink_set_property (GObject * object, gst_wl_window_set_destination_mode_ratio (sink->window, sink->ratio_w, sink->ratio_h); break; - case PROP_SCALE_WIDTH: - if (sink->scale_w == g_value_get_double (value) - || sink->display_geometry_method == DISP_GEO_METHOD_CUSTOM_ROI) - break; - sink->scale_w = g_value_get_double (value); - GST_WARNING_OBJECT (sink, "scale-h is set (%f)", sink->scale_w); - sink->video_info_changed = TRUE; - if (sink->window) - gst_wl_window_set_destination_mode_scale (sink->window, sink->ratio_w, - sink->ratio_h); - break; case PROP_OFFSET_X: if (sink->offset_x == g_value_get_uint (value) || sink->display_geometry_method == DISP_GEO_METHOD_CUSTOM_ROI) @@ -1080,7 +1098,7 @@ gst_wayland_sink_set_property (GObject * object, gst_wl_window_set_destination_mode_align (sink->window, sink->align_w, sink->align_h); break; - +#endif #endif default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); @@ -1706,9 +1724,6 @@ gst_wayland_sink_update_window_geometry (GstWaylandSink * sink) gst_wl_window_set_destination_mode (sink->window, sink->display_geometry_method); gst_wl_window_set_flip (sink->window, sink->flip); - gst_wl_window_set_destination_mode_follow_parent_transform (sink->window, - sink->follow_parent_transform); - if (sink->crop_w == 0 && sink->crop_h == 0) { sink->crop_w = gst_util_uint64_scale_int_round (sink->video_info.width, @@ -1717,6 +1732,9 @@ gst_wayland_sink_update_window_geometry (GstWaylandSink * sink) } gst_wl_window_set_destination_mode_crop_wl_buffer (sink->window, sink->crop_x, sink->crop_y, sink->crop_w, sink->crop_h); +#ifdef ENABLE_FUNCTION + gst_wl_window_set_destination_mode_follow_parent_transform (sink->window, + sink->follow_parent_transform); gst_wl_window_set_destination_mode_ratio (sink->window, sink->ratio_w, sink->ratio_h); gst_wl_window_set_destination_mode_scale (sink->window, sink->scale_w, @@ -1725,7 +1743,7 @@ gst_wayland_sink_update_window_geometry (GstWaylandSink * sink) sink->offset_y, sink->offset_w, sink->offset_h); gst_wl_window_set_destination_mode_align (sink->window, sink->align_w, sink->align_h); - +#endif } #endif /* must be called with the render lock */ diff --git a/ext/wayland/gstwaylandsink.h b/ext/wayland/gstwaylandsink.h index 702ec4e..331cdc8 100644 --- a/ext/wayland/gstwaylandsink.h +++ b/ext/wayland/gstwaylandsink.h @@ -110,11 +110,13 @@ struct _GstWaylandSink guint display_geometry_method; guint flip; guint crop_x, crop_y, crop_w, crop_h; +#ifdef ENABLE_FUNCTION guint offset_x, offset_y, offset_w, offset_h; gdouble ratio_w, ratio_h; gdouble scale_w, scale_h; gdouble align_w, align_h; #endif +#endif }; struct _GstWaylandSinkClass diff --git a/ext/wayland/wlwindow.c b/ext/wayland/wlwindow.c index e416c8b..fad56f3 100644 --- a/ext/wayland/wlwindow.c +++ b/ext/wayland/wlwindow.c @@ -297,7 +297,7 @@ gst_wl_window_new_internal (GstWlDisplay * display) window->tizen_video_viewport = tizen_video_get_viewport (display->tizen_video, window->video_surface); GST_INFO - ("tizen_video_viewport(tizen_viewport)@%p = tizen_video_get_viewport(tizen_video@%p, video_surface(wl_surface%p)", + ("tizen_video_viewport(tizen_viewport)@%p = tizen_video_get_viewport(tizen_video@%p, video_surface(wl_surface)@%p)", window->tizen_video_viewport, display->tizen_video, window->video_surface); window->tizen_video_dest_mode = @@ -619,7 +619,7 @@ gst_wl_window_resize_tizen_video_viewport (GstWlWindow * window, g_return_if_fail (window->tizen_video_viewport != NULL); g_return_if_fail (window->tizen_video_dest_mode != NULL); - /* Set crop, wayland need to set tizen_viewport_set_source always when change video info */ + /* Set crop, wayland need to set "tizen_viewport_set_source" always when change video info */ if (window->mode_crop.changed) { /* we have known issue about mobile team kernel, when set orign green line can be shown with tbm */ GST_INFO @@ -677,6 +677,8 @@ gst_wl_window_resize_tizen_video_viewport (GstWlWindow * window, if (window->disp_geo_method.value == DISP_GEO_METHOD_CUSTOM_ROI) goto done; + /* Even though area_viewport is set to ROI mode, we can set below functions too if video_viewport is set to tizen_destination_mode_set. */ +#ifdef ENABLE_FUNCTION /* set or unset follow parent transform */ if (window->follow_parent_transform.changed && !gst_wl_window_is_toplevel (window)) { @@ -722,6 +724,18 @@ gst_wl_window_resize_tizen_video_viewport (GstWlWindow * window, window->mode_ratio.changed = FALSE; } + /* set offset */ + if (window->mode_offset.changed) { + GST_INFO + ("tizen_destination_mode_set_offset (tizen_destination_mode@%p, x@%d, y@%d, w@%d, h@%d)", + window->tizen_video_dest_mode, window->mode_offset.x, + window->mode_offset.y, window->mode_offset.w, window->mode_offset.h); + tizen_destination_mode_set_offset (window->tizen_video_dest_mode, + window->mode_offset.x, window->mode_offset.y, window->mode_offset.w, + window->mode_offset.h); + window->mode_offset.changed = FALSE; + } + /* set scale */ if (window->mode_scale.changed) { wl_fixed_t f_width, f_height; @@ -734,19 +748,7 @@ gst_wl_window_resize_tizen_video_viewport (GstWlWindow * window, window->mode_scale.h); tizen_destination_mode_set_scale (window->tizen_video_dest_mode, f_width, f_height); - window->mode_ratio.changed = FALSE; - } - - /* set offset */ - if (window->mode_offset.changed) { - GST_INFO - ("tizen_destination_mode_set_offset (tizen_destination_mode@%p, x@%d, y@%d, w@%d, h@%d)", - window->tizen_video_dest_mode, window->mode_offset.x, - window->mode_offset.y, window->mode_offset.w, window->mode_offset.h); - tizen_destination_mode_set_offset (window->tizen_video_dest_mode, - window->mode_offset.x, window->mode_offset.y, window->mode_offset.w, - window->mode_offset.h); - window->mode_offset.changed = FALSE; + window->mode_scale.changed = FALSE; } /* set align */ @@ -762,6 +764,7 @@ gst_wl_window_resize_tizen_video_viewport (GstWlWindow * window, f_height); window->mode_align.changed = FALSE; } +#endif done: @@ -1024,18 +1027,6 @@ gst_wl_window_set_flip (GstWlWindow * window, guint flip) } void -gst_wl_window_set_destination_mode_follow_parent_transform (GstWlWindow * - window, gboolean follow_parent_transform) -{ - FUNCTION; - g_return_if_fail (window != NULL); - window->follow_parent_transform.value = follow_parent_transform; - GST_LOG ("follow_parent_transform value is (%d)", - window->follow_parent_transform.value); - window->follow_parent_transform.changed = TRUE; -} - -void gst_wl_window_set_destination_mode_crop_wl_buffer (GstWlWindow * window, guint x, guint y, guint w, guint h) { @@ -1049,6 +1040,20 @@ gst_wl_window_set_destination_mode_crop_wl_buffer (GstWlWindow * window, window->mode_crop.changed = TRUE; } +#ifdef ENABLE_FUNCTION +void +gst_wl_window_set_destination_mode_follow_parent_transform (GstWlWindow * + window, gboolean follow_parent_transform) +{ + FUNCTION; + g_return_if_fail (window != NULL); + window->follow_parent_transform.value = follow_parent_transform; + GST_LOG ("follow_parent_transform value is (%d)", + window->follow_parent_transform.value); + window->follow_parent_transform.changed = TRUE; +} + + void gst_wl_window_set_destination_mode_offset (GstWlWindow * window, guint x, guint y, guint w, guint h) @@ -1098,7 +1103,7 @@ gst_wl_window_set_destination_mode_align (GstWlWindow * window, gdouble w, window->mode_align.h = h; window->mode_align.changed = TRUE; } - +#endif void gst_wl_window_set_video_info_change (GstWlWindow * window, guint changed) { diff --git a/ext/wayland/wlwindow.h b/ext/wayland/wlwindow.h index 0cc48a1..a5eb65f 100644 --- a/ext/wayland/wlwindow.h +++ b/ext/wayland/wlwindow.h @@ -84,13 +84,15 @@ struct _GstWlWindow WinGeometryValue disp_geo_method; WinGeometryValue rotate_angle; WinGeometryValue flip; - WinGeometryValue follow_parent_transform; WinGeometryRect mode_crop; +#ifdef ENABLE_FUNCTION + WinGeometryValue follow_parent_transform; WinGeometryRect mode_offset; WinGeometryRange mode_ratio; WinGeometryRange mode_scale; WinGeometryRange mode_align; #endif +#endif /* the size and position of the area_(sub)surface */ GstVideoRectangle render_rectangle; @@ -125,13 +127,16 @@ void gst_wl_window_set_video_info (GstWlWindow * window, const GstVideoInfo * info); void gst_wl_window_set_rotate_angle (GstWlWindow * window, guint rotate_angle); void gst_wl_window_set_flip (GstWlWindow * window, guint flip); +void gst_wl_window_set_destination_mode_crop_wl_buffer (GstWlWindow * window, guint x, guint y, guint w, guint h); void gst_wl_window_set_destination_mode (GstWlWindow * window, guint disp_geo_method); +#ifdef ENABLE_FUNCTION +/* if video mode is set, below function can use */ void gst_wl_window_set_destination_mode_follow_parent_transform (GstWlWindow * window, gboolean follow_parent_transform); -void gst_wl_window_set_destination_mode_crop_wl_buffer (GstWlWindow * window, guint x, guint y, guint w, guint h); void gst_wl_window_set_destination_mode_offset (GstWlWindow * window, guint x, guint y, guint w, guint h); void gst_wl_window_set_destination_mode_ratio (GstWlWindow * window, gdouble w, gdouble h); void gst_wl_window_set_destination_mode_scale (GstWlWindow * window, gdouble w, gdouble h); void gst_wl_window_set_destination_mode_align (GstWlWindow * window, gdouble w, gdouble h); +#endif void gst_wl_window_set_video_info_change (GstWlWindow * window, guint changed); #endif -- 2.7.4