GST_OBJECT_REFCOUNT_VALUE (sink->last_buffer));
wlbuffer = gst_buffer_get_wl_buffer (sink->last_buffer);
g_return_if_fail (wlbuffer != NULL);
- wlbuffer->used_by_compositor = FALSE;
+ wlbuffer->used_by_compositor = FALSE;
/*need to render last buffer, reuse current GstWlBuffer */
render_last_buffer (sink);
/* ref count is incresed in gst_wl_buffer_attach() of render_last_buffer(),
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
break;
}
- if (sink->video_info_changed && sink->window
- && GST_STATE (sink) == GST_STATE_PAUSED) {
- gst_wayland_sink_update_last_buffer_geometry (sink);
+#ifdef GST_WLSINK_ENHANCEMENT
+ if (sink->video_info_changed && sink->window) {
+ gst_wl_window_set_video_info_change (sink->window, TRUE);
+ if (GST_STATE (sink) == GST_STATE_PAUSED)
+ gst_wayland_sink_update_last_buffer_geometry (sink);
}
+#endif
g_mutex_unlock (&sink->render_lock);
}
struct wl_surface *surface;
struct wl_callback *callback;
FUNCTION;
+#ifdef GST_WLSINK_ENHANCEMENT
+ g_return_if_fail (sink->last_buffer != NULL);
+ g_return_if_fail (sink->window != NULL);
+#endif
wlbuffer = gst_buffer_get_wl_buffer (sink->last_buffer);
surface = gst_wl_window_get_wl_surface (sink->window);
wl_callback_add_listener (callback, &frame_callback_listener, sink);
if (G_UNLIKELY (sink->video_info_changed)) {
+#ifdef GST_WLSINK_ENHANCEMENT
+ gst_wl_window_set_video_info_change (sink->window, TRUE);
+#endif
info = &sink->video_info;
sink->video_info_changed = FALSE;
}
-#ifdef GST_WLSINK_ENHANCEMENT
- if (sink->last_buffer)
- gst_wl_window_render (sink->window, wlbuffer, info);
- else {
- if (G_UNLIKELY (info)) {
- gst_wl_window_set_video_info (sink->window, info);
- }
- }
-#else
gst_wl_window_render (sink->window, wlbuffer, info);
-#endif
}
static GstFlowReturn
sink->window =
gst_wl_window_new_toplevel (sink->display, &sink->video_info);
}
- }
#ifdef GST_WLSINK_ENHANCEMENT
- gst_wayland_sink_update_window_geometry (sink);
- sink->video_info_changed = TRUE;
+ gst_wayland_sink_update_window_geometry (sink);
#endif
+ }
/* drop buffers until we get a frame callback */
if (g_atomic_int_get (&sink->redraw_pending) == TRUE)
goto done;
}
}
gst_wayland_sink_update_window_geometry (sink);
-
g_mutex_unlock (&sink->render_lock);
}
"ignoring window handle");
}
}
+#ifdef GST_WLSINK_ENHANCEMENT
+ gst_wayland_sink_update_window_geometry (sink);
+#endif
g_mutex_unlock (&sink->render_lock);
}
#ifdef GST_WLSINK_ENHANCEMENT
if (window->display->USE_TBM) {
/* Inform enlightenment of surface which render video */
+ /* tizen_video(tbm) render on video_surface */
window->video_object =
tizen_video_get_object (display->tizen_video, window->video_surface);
static gint
gst_wl_window_find_transform (guint rotate_angle, guint flip)
{
- gint transform;
+ gint transform = WL_OUTPUT_TRANSFORM_NORMAL;
guint combine = rotate_angle * 10 + flip;
FUNCTION;
GST_DEBUG ("rotate %d, flip %d, combine %d", rotate_angle, flip, combine);
window->video_height = info->height;
wl_subsurface_set_sync (window->video_subsurface);
+#ifdef GST_WLSINK_ENHANCEMENT
+ /* check video_info_changed to remove repetitive IPC */
+ if (window->video_info_changed) {
+ gst_wl_window_resize_video_surface (window, FALSE);
+ window->video_info_changed = FALSE;
+ }
+#else
gst_wl_window_resize_video_surface (window, FALSE);
+#endif
}
+
GST_INFO ("GstWlBuffer(%p)", buffer);
if (G_LIKELY (buffer))
gst_wl_buffer_attach (buffer, window->video_surface);
#ifdef GST_WLSINK_ENHANCEMENT
void
-gst_wl_window_set_video_info (GstWlWindow * window, const GstVideoInfo * info)
-{
- FUNCTION;
- g_return_if_fail (window != NULL);
-
- window->video_width =
- gst_util_uint64_scale_int_round (info->width, info->par_n, info->par_d);
- window->video_height = info->height;
-
- if (window->render_rectangle.w != 0)
- gst_wl_window_resize_video_surface (window, FALSE);
-}
-
-void
gst_wl_window_set_rotate_angle (GstWlWindow * window, guint rotate_angle)
{
FUNCTION;
window->flip = flip;
GST_INFO ("flip value is (%d)", window->flip);
}
+
+void
+gst_wl_window_set_video_info_change (GstWlWindow * window, guint changed)
+{
+ FUNCTION;
+ g_return_if_fail (window != NULL);
+ window->video_info_changed = changed;
+ GST_INFO ("video_info_changed value is (%d)", window->video_info_changed);
+}
+
#endif
struct wl_shell_surface *shell_surface;
#ifdef GST_WLSINK_ENHANCEMENT
struct tizen_video_object *video_object;
+ guint video_info_changed;
/*Display geometry method */
guint disp_geo_method;
guint rotate_angle;
void gst_wl_window_set_render_rectangle (GstWlWindow * window, gint x, gint y,
gint w, gint h);
#ifdef GST_WLSINK_ENHANCEMENT
-void gst_wl_window_set_video_info (GstWlWindow * window, const GstVideoInfo * info);
+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_disp_geo_method (GstWlWindow * window,
guint disp_geo_method);
void gst_wl_window_set_orientation (GstWlWindow * window, guint orientation);
void gst_wl_window_set_flip (GstWlWindow * window, guint flip);
+void gst_wl_window_set_video_info_change (GstWlWindow * window, guint changed);
#endif
G_END_DECLS