static void gst_wayland_sink_end_geometry_change (GstWaylandVideo * video);
#ifdef GST_WLSINK_ENHANCEMENT
static void gst_wayland_sink_update_window_geometry (GstWaylandSink * sink);
+static void render_last_buffer (GstWaylandSink * sink);
+static void gst_wayland_sink_render_last_buffer (GstWaylandSink * sink);
+
#endif
#define gst_wayland_sink_parent_class parent_class
}
sink->video_info_changed = TRUE;
if (GST_STATE (sink) == GST_STATE_PAUSED) {
- /*need to render current buffer */
+ /*need to render last buffer */
+ gst_wayland_sink_render_last_buffer (sink);
}
break;
case PROP_DISPLAY_GEOMETRY_METHOD:
}
sink->video_info_changed = TRUE;
if (GST_STATE (sink) == GST_STATE_PAUSED) {
- /*need to render current buffer */
+ /*need to render last buffer */
+ gst_wayland_sink_render_last_buffer (sink);
}
break;
case PROP_ORIENTATION:
}
sink->video_info_changed = TRUE;
if (GST_STATE (sink) == GST_STATE_PAUSED) {
- /*need to render current buffer */
+ /*need to render last buffer */
+ gst_wayland_sink_render_last_buffer (sink);
}
break;
case PROP_FLIP:
}
sink->video_info_changed = TRUE;
if (GST_STATE (sink) == GST_STATE_PAUSED) {
- /*need to render current buffer */
+ /*need to render last buffer */
+ gst_wayland_sink_render_last_buffer (sink);
}
break;
#endif
if (G_UNLIKELY (sink->video_info_changed)) {
gst_wl_window_set_video_info (sink->window, &sink->video_info);
sink->video_info_changed = FALSE;
-
}
GST_INFO ("window->render_rectangle(%d,%d %d x %d)",
sink->window->render_rectangle.x,
gst_wayland_sink_update_window_geometry (GstWaylandSink * sink)
{
FUNCTION_ENTER ();
-
- if (sink == NULL || sink->window == NULL)
- return;
+ g_return_if_fail (sink != NULL);
+ g_return_if_fail (sink->window != NULL);
gst_wl_window_set_rotate_angle (sink->window, sink->rotate_angle);
gst_wl_window_set_disp_geo_method (sink->window,
gst_wl_window_set_orientation (sink->window, sink->orientation);
gst_wl_window_set_flip (sink->window, sink->flip);
}
+
+static void
+gst_wayland_sink_render_last_buffer (GstWaylandSink * sink)
+{
+ FUNCTION_ENTER ();
+ g_return_if_fail (sink != NULL);
+
+ g_mutex_lock (&sink->render_lock);
+ gst_wl_window_set_video_info (sink->window, &sink->video_info);
+ sink->video_info_changed = FALSE;
+ if (sink->last_buffer)
+ render_last_buffer (sink);
+ g_mutex_unlock (&sink->render_lock);
+}
#endif
static void
gst_wayland_sink_set_render_rectangle (GstVideoOverlay * overlay,