static const struct wl_message bq_consumer_requests[] = {
{ "release_buffer", "o", types + 10 },
+ { "destroy", "2", types + 0 },
};
static const struct wl_message bq_consumer_events[] = {
};
WL_EXPORT const struct wl_interface bq_consumer_interface = {
- "bq_consumer", 1,
- 1, bq_consumer_requests,
+ "bq_consumer", 2,
+ 2, bq_consumer_requests,
7, bq_consumer_events,
};
{ "set_buffer_fd", "ohiiiiii", types + 50 },
{ "detach_buffer", "o", types + 58 },
{ "enqueue_buffer", "ou", types + 59 },
+ { "destroy", "2", types + 0 },
};
static const struct wl_message bq_provider_events[] = {
};
WL_EXPORT const struct wl_interface bq_provider_interface = {
- "bq_provider", 1,
- 5, bq_provider_requests,
+ "bq_provider", 2,
+ 6, bq_provider_requests,
3, bq_provider_events,
};
+static const struct wl_message bq_buffer_requests[] = {
+ { "destroy", "2", types + 0 },
+};
+
WL_EXPORT const struct wl_interface bq_buffer_interface = {
- "bq_buffer", 1,
- 0, NULL,
+ "bq_buffer", 2,
+ 1, bq_buffer_requests,
0, NULL,
};
DBG("destroy buffer queue : %s\n", bq->name);
- if (bq->consumer)
- {
- wl_resource_destroy(e_object_data_get(E_OBJECT(bq->consumer)));
- bq->consumer = NULL;
- }
-
- if (bq->provider)
- {
- wl_resource_destroy(e_object_data_get(E_OBJECT(bq->provider)));
- bq->provider = NULL;
- }
-
while (bq->buffers)
{
bq_buf = EINA_INLIST_CONTAINER_GET(bq->buffers, E_Bq_Buffer);
- bq->buffers = eina_inlist_remove(bq->buffers, bq->buffers);
+ bq->buffers = eina_inlist_remove(bq->buffers, EINA_INLIST_GET(bq_buf));
if (bq_buf->consumer)
{
}
}
+static void
+_e_bq_mgr_consumer_cb_destroy(struct wl_client *client, struct wl_resource *resource)
+{
+ wl_resource_destroy(resource);
+}
+
static const struct bq_consumer_interface _bq_consumer_interface = {
- _e_bq_mgr_buffer_consumer_release_buffer
+ _e_bq_mgr_buffer_consumer_release_buffer,
+ _e_bq_mgr_consumer_cb_destroy
};
static void
while (bq->buffers)
{
bq_buf = EINA_INLIST_CONTAINER_GET(bq->buffers, E_Bq_Buffer);
- bq->buffers = eina_inlist_remove(bq->buffers, bq->buffers);
-
+ bq->buffers = eina_inlist_remove(bq->buffers, EINA_INLIST_GET(bq_buf));
DBG("destroy BUFFER : %d\n", bq_buf->type);
-
- if (bq_buf->consumer)
- {
- wl_resource_destroy(bq_buf->consumer);
- bq_buf->consumer = NULL;
- e_object_unref(E_OBJECT(bq_buf));
- }
-
- if (bq_buf->provider)
- {
- wl_resource_destroy(bq_buf->provider);
- bq_buf->provider = NULL;
- e_object_del(E_OBJECT(bq_buf));
- }
}
e_object_unref(E_OBJECT(bq));
}
static void
-_e_bq_mgr_buffer_destroy(struct wl_resource *resource)
-{
- E_Bq_Buffer *bq_buf = wl_resource_get_user_data(resource);
-
- if (!bq_buf)
- return;
-
- if (bq_buf->consumer == resource)
- {
- DBG("destroy buffer : consumer");
- }
- else if (bq_buf->provider == resource)
- {
- DBG("destroy buffer : provider");
- }
-}
-
-static void
-_e_bq_mgr_consumer_side_buffer_create(E_Bq_Consumer *consumer, E_Bq_Buffer *buffer)
-{
- struct wl_resource *resource;
-
- if (!consumer)
- return;
-
- resource = e_object_data_get(E_OBJECT(consumer));
- if (!resource)
- return;
-
- buffer->consumer = wl_resource_create(wl_resource_get_client(resource),
- &bq_buffer_interface, 1, 0);
- EINA_SAFETY_ON_NULL_RETURN(buffer->consumer);
-
- wl_resource_set_implementation(buffer->consumer, NULL, buffer, _e_bq_mgr_buffer_destroy);
- e_object_ref(E_OBJECT(buffer));
-
- bq_consumer_send_buffer_attached(resource,
- buffer->consumer,
- buffer->engine,
- buffer->width,
- buffer->height,
- buffer->format,
- buffer->flags);
-}
-
-static void
_e_bq_mgr_consumer_side_buffer_set(E_Bq_Consumer *consumer, E_Bq_Buffer *buffer)
{
struct wl_resource *resource;
}
static void
+_e_bq_mgr_buffer_cb_destroy(struct wl_client *client, struct wl_resource *resource)
+{
+ E_Bq_Buffer *bq_buf;
+
+ bq_buf = wl_resource_get_user_data(resource);
+ if (!bq_buf)
+ return;
+
+ if (bq_buf->consumer == resource)
+ {
+ e_object_unref(E_OBJECT(bq_buf));
+ bq_buf->consumer = NULL;
+ }
+ if (bq_buf->provider == resource)
+ {
+ e_object_del(E_OBJECT(bq_buf));
+ bq_buf->provider = NULL;
+ }
+
+ wl_resource_destroy(resource);
+}
+
+static const struct bq_buffer_interface _bq_buffer_interface = {
+ _e_bq_mgr_buffer_cb_destroy
+};
+
+static void
+_e_bq_mgr_consumer_side_buffer_create(E_Bq_Consumer *consumer, E_Bq_Buffer *buffer)
+{
+ struct wl_resource *resource;
+
+ if (!consumer)
+ return;
+
+ resource = e_object_data_get(E_OBJECT(consumer));
+ buffer->consumer = wl_resource_create(wl_resource_get_client(resource),
+ &bq_buffer_interface, 2, 0);
+
+ if(!buffer->consumer)
+ return;
+
+ wl_resource_set_implementation(buffer->consumer, &_bq_buffer_interface,
+ buffer, NULL);
+ e_object_ref(E_OBJECT(buffer));
+
+ bq_consumer_send_buffer_attached(resource,
+ buffer->consumer,
+ buffer->engine,
+ buffer->width,
+ buffer->height,
+ buffer->format,
+ buffer->flags);
+}
+
+static void
_e_bq_mgr_bq_create_consumer(struct wl_client *client, struct wl_resource *resource, uint32_t id, const char *name, int32_t queue_size, int32_t width, int32_t height)
{
E_Bq_Mgr *bq_mgr = wl_resource_get_user_data(resource);
new_resource = wl_resource_create(client,
&bq_consumer_interface,
- 1, id);
+ 2, id);
if (!new_resource)
{
free(consumer);
if (!bq_buf)
return;
- bq_buf->provider = wl_resource_create(client, &bq_buffer_interface, 1, buffer);
+ bq_buf->provider = wl_resource_create(client, &bq_buffer_interface, 2, buffer);
if (!bq_buf->provider)
{
free(bq_buf);
return;
}
- wl_resource_set_implementation(bq_buf->provider, NULL, bq_buf, _e_bq_mgr_buffer_destroy);
+ wl_resource_set_implementation(bq_buf->provider, &_bq_buffer_interface, bq_buf, NULL);
bq_buf->engine = strdup(engine);
bq_buf->width = width;
bq_buf= wl_resource_get_user_data(buffer);
if (consumer)
- {
- bq_consumer_send_buffer_detached(e_object_data_get(E_OBJECT(consumer)),
- bq_buf->consumer);
- wl_resource_destroy(bq_buf->consumer);
- e_object_unref(E_OBJECT(bq_buf));
- }
+ bq_consumer_send_buffer_detached(e_object_data_get(E_OBJECT(consumer)),
+ bq_buf->consumer);
- wl_resource_destroy(bq_buf->provider);
bq->buffers = eina_inlist_remove(bq->buffers, EINA_INLIST_GET(bq_buf));
- e_object_del(E_OBJECT(bq_buf));
}
static void
bq_buf->serial);
}
+static void
+_e_bq_mgr_provider_cb_destroy(struct wl_client *client, struct wl_resource *resource)
+{
+ wl_resource_destroy(resource);
+}
+
static const struct bq_provider_interface _bq_provider_interface = {
_e_bq_mgr_provider_buffer_attach,
_e_bq_mgr_provider_buffer_id_set,
_e_bq_mgr_provider_buffer_fd_set,
_e_bq_mgr_provider_buffer_detach,
- _e_bq_mgr_provider_buffer_enqueue
+ _e_bq_mgr_provider_buffer_enqueue,
+ _e_bq_mgr_provider_cb_destroy
};
static void
while (bq->buffers)
{
bq_buf = EINA_INLIST_CONTAINER_GET(bq->buffers, E_Bq_Buffer);
- bq->buffers = eina_inlist_remove(bq->buffers, bq->buffers);
+ bq->buffers = eina_inlist_remove(bq->buffers, EINA_INLIST_GET(bq_buf));
if (bq_buf->consumer)
- {
- bq_consumer_send_buffer_detached(e_object_data_get(E_OBJECT(consumer)),
- bq_buf->consumer);
- wl_resource_destroy(bq_buf->consumer);
- bq_buf->consumer = NULL;
- e_object_unref(E_OBJECT(bq_buf));
- }
-
- if (bq_buf->provider)
- {
- wl_resource_destroy(bq_buf->provider);
- bq_buf->provider = NULL;
- e_object_del(E_OBJECT(bq_buf));
- }
+ bq_consumer_send_buffer_detached(e_object_data_get(E_OBJECT(consumer)),
+ bq_buf->consumer);
}
if (consumer)
new_resource = wl_resource_create(client,
&bq_provider_interface,
- 1, id);
+ 2, id);
if (!new_resource)
goto on_error;