diff options
-rw-r--r-- | ext/wayland/gstwaylandsink.c | 7 | ||||
-rw-r--r-- | ext/wayland/wlbuffer.c | 12 |
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; } |