#define WL_TBM_TRACE(fmt, ...)
#endif
+struct wayland_tbm_buffer *
+_wayland_tbm_client_find_tbm_buffer_wl_buffer(struct wayland_tbm_client *tbm_client,
+ struct wl_buffer *wl_buffer);
+
static tbm_surface_h
_wayland_tbm_client_create_surface_from_param(tbm_bufmgr bufmgr,
int is_fd,
wl_buffer_destroy(wl_buffer);
}
+static void
+handle_buffer_destroy(void *data,
+ struct wl_tbm *wl_tbm,
+ struct wl_buffer *wl_buffer)
+{
+ struct wayland_tbm_client *tbm_client = (struct wayland_tbm_client *)data;
+ tbm_surface_h tbm_surface;
+ struct wayland_tbm_buffer *buffer = NULL;
+
+#ifdef DEBUG_TRACE
+ WL_TBM_TRACE(" pid:%d wl_buffer:%p", getpid(), wl_buffer);
+#endif
+
+ buffer = _wayland_tbm_client_find_tbm_buffer_wl_buffer(tbm_client, wl_buffer);
+ if (buffer)
+ buffer->wl_buffer = NULL;
+
+ tbm_surface = wl_buffer_get_user_data(wl_buffer);
+ if (tbm_surface)
+ tbm_surface_internal_unref(tbm_surface);
+
+ wl_buffer_set_user_data(wl_buffer, NULL);
+ wl_buffer_destroy(wl_buffer);
+
+ return;
+}
+
static const struct wl_tbm_listener wl_tbm_client_listener = {
handle_tbm_buffer_import_with_id,
- handle_tbm_buffer_import_with_fd
+ handle_tbm_buffer_import_with_fd,
+ handle_buffer_destroy,
};
void _waylend_tbm_monitor_client_print_show_to_file(char* show_str)
free(tbm_client);
}
-
struct wayland_tbm_buffer *
_wayland_tbm_client_find_tbm_buffer_wl_buffer(struct wayland_tbm_client *tbm_client,
struct wl_buffer *wl_buffer)
return 0;
}
+
+int
+wayland_tbm_server_send_destroy_buffer(struct wl_resource *wl_tbm,
+ struct wl_resource *wl_buffer)
+{
+ WL_TBM_RETURN_VAL_IF_FAIL(wl_buffer != NULL, 0);
+ WL_TBM_RETURN_VAL_IF_FAIL(wl_tbm != NULL, 0);
+
+ wl_tbm_send_destroy_buffer(wl_tbm, wl_buffer);
+
+ return 1;
+}
\ No newline at end of file