The proxy object of wl_buffer for the last frame remains in the
wl_map. Even though we call wl_buffer_destroy() in
frame_release_callback(), the proxy object remains without being
removed, since proxy object is deleted when wayland server sees the
delete request and sends 'delete_id' event.
We need to call roundtrip before destroying event_queue so that the
proxy object is removed. Otherwise, it would be mess up as receiving
'delete_id' event from previous play, when playing in the next
va/wayland window with the same wl_display connection.
https://bugzilla.gnome.org/show_bug.cgi?id=773689
Signed-off-by: Víctor Manuel Jáquez Leal <vjaquez@igalia.com>
{
GstVaapiWindowWaylandPrivate *const priv =
GST_VAAPI_WINDOW_WAYLAND_GET_PRIVATE (window);
+ struct wl_display *const wl_display =
+ GST_VAAPI_OBJECT_NATIVE_DISPLAY (window);
/* Wait for the last frame to complete redraw */
gst_vaapi_window_wayland_sync (window);
+ if (priv->event_queue)
+ wl_display_roundtrip_queue (wl_display, priv->event_queue);
+
if (priv->last_frame) {
frame_state_free (priv->last_frame);
priv->last_frame = NULL;