summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ext/wayland/gstwaylandsink.c7
-rw-r--r--ext/wayland/wlbuffer.c12
2 files changed, 14 insertions, 5 deletions
diff --git a/ext/wayland/gstwaylandsink.c b/ext/wayland/gstwaylandsink.c
index 4fbb17c9b..0761304ce 100644
--- a/ext/wayland/gstwaylandsink.c
+++ b/ext/wayland/gstwaylandsink.c
@@ -829,7 +829,7 @@ gst_wayland_sink_show_frame (GstVideoSink * vsink, GstBuffer * buffer)
if (G_UNLIKELY (!wbuf))
goto no_wl_buffer_shm;
- gst_buffer_add_wl_buffer (to_render, wbuf, sink->display);
+ wlbuffer = gst_buffer_add_wl_buffer (to_render, wbuf, sink->display);
}
if (!gst_video_frame_map (&dst, &sink->video_info, to_render,
@@ -853,12 +853,13 @@ gst_wayland_sink_show_frame (GstVideoSink * vsink, GstBuffer * buffer)
if (!wbuf)
goto no_wl_buffer;
- gst_buffer_add_wl_buffer (buffer, wbuf, sink->display);
+ wlbuffer = gst_buffer_add_wl_buffer (buffer, wbuf, sink->display);
to_render = buffer;
render:
/* drop double rendering */
- if (G_UNLIKELY (to_render == sink->last_buffer)) {
+ if (G_UNLIKELY (wlbuffer ==
+ gst_buffer_get_wl_buffer (sink->display, sink->last_buffer))) {
GST_LOG_OBJECT (sink, "Buffer already being rendered");
goto done;
}
diff --git a/ext/wayland/wlbuffer.c b/ext/wayland/wlbuffer.c
index 0739bdaf2..caab58d35 100644
--- a/ext/wayland/wlbuffer.c
+++ b/ext/wayland/wlbuffer.c
@@ -185,10 +185,18 @@ gst_buffer_add_wl_buffer (GstBuffer * gstbuffer, struct wl_buffer *wlbuffer,
GstWlBuffer *
gst_buffer_get_wl_buffer (GstWlDisplay * display, GstBuffer * gstbuffer)
{
- GstMemory *mem0 = gst_buffer_peek_memory (gstbuffer, 0);
- GstWlBuffer *wlbuf = gst_wl_display_lookup_buffer (display, mem0);
+ GstMemory *mem0;
+ GstWlBuffer *wlbuf;
+
+ if (!gstbuffer)
+ return NULL;
+
+ mem0 = gst_buffer_peek_memory (gstbuffer, 0);
+
+ wlbuf = gst_wl_display_lookup_buffer (display, mem0);
if (wlbuf)
wlbuf->current_gstbuffer = gstbuffer;
+
return wlbuf;
}