Add user_data to callbacks

Add user data to callbacks, it's more flexible and natural
This commit is contained in:
Wim Taymans 2017-06-18 19:48:31 +02:00
parent 59ec32c039
commit 763bd1100e
27 changed files with 156 additions and 165 deletions

View file

@ -107,7 +107,6 @@ struct data {
struct spa_node *sink;
struct spa_port_io volume_sink_io[1];
struct spa_node_callbacks sink_callbacks;
struct spa_node *volume;
struct spa_buffer *volume_buffers[1];
@ -216,22 +215,19 @@ static int make_node(struct data *data, struct spa_node **node, const char *lib,
return SPA_RESULT_ERROR;
}
static void on_sink_done(const struct spa_node_callbacks *callbacks,
struct spa_node *node, int seq, int res)
static void on_sink_done(struct spa_node *node, int seq, int res, void *user_data)
{
printf("got done %d %d\n", seq, res);
}
static void on_sink_event(const struct spa_node_callbacks *callbacks,
struct spa_node *node, struct spa_event *event)
static void on_sink_event(struct spa_node *node, struct spa_event *event, void *user_data)
{
printf("got event %d\n", SPA_EVENT_TYPE(event));
}
static void on_sink_need_input(const struct spa_node_callbacks *callbacks,
struct spa_node *node)
static void on_sink_need_input(struct spa_node *node, void *user_data)
{
struct data *data = SPA_CONTAINER_OF(callbacks, struct data, sink_callbacks);
struct data *data = user_data;
data->sink_node.action = SPA_GRAPH_ACTION_CHECK;
data->sink_node.state = SPA_RESULT_NEED_BUFFER;
@ -240,10 +236,9 @@ static void on_sink_need_input(const struct spa_node_callbacks *callbacks,
}
static void
on_sink_reuse_buffer(const struct spa_node_callbacks *callbacks,
struct spa_node *node, uint32_t port_id, uint32_t buffer_id)
on_sink_reuse_buffer(struct spa_node *node, uint32_t port_id, uint32_t buffer_id, void *user_data)
{
struct data *data = SPA_CONTAINER_OF(callbacks, struct data, sink_callbacks);
struct data *data = user_data;
data->volume_sink_io[0].buffer_id = buffer_id;
}
@ -297,8 +292,7 @@ static int make_nodes(struct data *data, const char *device)
printf("can't create alsa-sink: %d\n", res);
return res;
}
data->sink_callbacks = sink_callbacks;
spa_node_set_callbacks(data->sink, &data->sink_callbacks);
spa_node_set_callbacks(data->sink, &sink_callbacks, data);
spa_pod_builder_init(&b, buffer, sizeof(buffer));
spa_pod_builder_props(&b, &f[0], data->type.props,

View file

@ -110,7 +110,6 @@ struct data {
struct spa_graph_node sink_node;
struct spa_node *sink;
struct spa_node_callbacks sink_callbacks;
struct spa_port_io mix_sink_io[1];
struct spa_node *mix;
@ -227,22 +226,19 @@ static int make_node(struct data *data, struct spa_node **node, const char *lib,
return SPA_RESULT_ERROR;
}
static void on_sink_done(const struct spa_node_callbacks *callbacks,
struct spa_node *node, int seq, int res)
static void on_sink_done(struct spa_node *node, int seq, int res, void *user_data)
{
printf("got done %d %d\n", seq, res);
}
static void on_sink_event(const struct spa_node_callbacks *callbacks,
struct spa_node *node, struct spa_event *event)
static void on_sink_event(struct spa_node *node, struct spa_event *event, void *user_data)
{
printf("got event %d\n", SPA_EVENT_TYPE(event));
}
static void on_sink_need_input(const struct spa_node_callbacks *callbacks,
struct spa_node *node)
static void on_sink_need_input(struct spa_node *node, void *user_data)
{
struct data *data = SPA_CONTAINER_OF(callbacks, struct data, sink_callbacks);
struct data *data = user_data;
#ifdef USE_GRAPH
data->sink_node.action = PROCESS_CHECK;
data->sink_node.state = SPA_RESULT_NEED_BUFFER;
@ -282,12 +278,12 @@ static void on_sink_need_input(const struct spa_node_callbacks *callbacks,
}
static void
on_sink_reuse_buffer(const struct spa_node_callbacks *callbacks,
struct spa_node *node,
on_sink_reuse_buffer(struct spa_node *node,
uint32_t port_id,
uint32_t buffer_id)
uint32_t buffer_id,
void *user_data)
{
struct data *data = SPA_CONTAINER_OF(callbacks, struct data, sink_callbacks);
struct data *data = user_data;
data->mix_sink_io[0].buffer_id = buffer_id;
}
@ -341,8 +337,7 @@ static int make_nodes(struct data *data, const char *device)
printf("can't create alsa-sink: %d\n", res);
return res;
}
data->sink_callbacks = sink_callbacks;
spa_node_set_callbacks(data->sink, &data->sink_callbacks);
spa_node_set_callbacks(data->sink, &sink_callbacks, data);
spa_pod_builder_init(&b, buffer, sizeof(buffer));
spa_pod_builder_props(&b, &f[0], data->type.props,

View file

@ -109,12 +109,10 @@ struct data {
struct spa_node *sink;
struct spa_port_io source_sink_io[1];
struct spa_node_callbacks sink_callbacks;
struct spa_node *source;
struct spa_buffer *source_buffers[1];
struct buffer source_buffer[1];
struct spa_node_callbacks source_callbacks;
bool running;
pthread_t thread;
@ -242,24 +240,21 @@ static void on_source_push(struct data *data)
}
}
static void on_sink_done(const struct spa_node_callbacks *callbacks,
struct spa_node *node, int seq, int res)
static void on_sink_done(struct spa_node *node, int seq, int res, void *user_data)
{
struct data *data = SPA_CONTAINER_OF(callbacks, struct data, sink_callbacks);
struct data *data = user_data;
spa_log_trace(data->log, "got sink done %d %d", seq, res);
}
static void on_sink_event(const struct spa_node_callbacks *callbacks,
struct spa_node *node, struct spa_event *event)
static void on_sink_event(struct spa_node *node, struct spa_event *event, void *user_data)
{
struct data *data = SPA_CONTAINER_OF(callbacks, struct data, sink_callbacks);
struct data *data = user_data;
spa_log_trace(data->log, "got sink event %d", SPA_EVENT_TYPE(event));
}
static void on_sink_need_input(const struct spa_node_callbacks *callbacks,
struct spa_node *node)
static void on_sink_need_input(struct spa_node *node, void *user_data)
{
struct data *data = SPA_CONTAINER_OF(callbacks, struct data, sink_callbacks);
struct data *data = user_data;
spa_log_trace(data->log, "need input");
on_sink_pull(data);
if (--data->iterations == 0)
@ -267,10 +262,9 @@ static void on_sink_need_input(const struct spa_node_callbacks *callbacks,
}
static void
on_sink_reuse_buffer(const struct spa_node_callbacks *callbacks,
struct spa_node *node, uint32_t port_id, uint32_t buffer_id)
on_sink_reuse_buffer(struct spa_node *node, uint32_t port_id, uint32_t buffer_id, void *user_data)
{
struct data *data = SPA_CONTAINER_OF(callbacks, struct data, sink_callbacks);
struct data *data = user_data;
data->source_sink_io[0].buffer_id = buffer_id;
}
@ -284,24 +278,21 @@ static const struct spa_node_callbacks sink_callbacks = {
&on_sink_reuse_buffer
};
static void on_source_done(const struct spa_node_callbacks *callbacks,
struct spa_node *node, int seq, int res)
static void on_source_done(struct spa_node *node, int seq, int res, void *user_data)
{
struct data *data = SPA_CONTAINER_OF(callbacks, struct data, source_callbacks);
struct data *data = user_data;
spa_log_trace(data->log, "got source done %d %d", seq, res);
}
static void on_source_event(const struct spa_node_callbacks *callbacks,
struct spa_node *node, struct spa_event *event)
static void on_source_event(struct spa_node *node, struct spa_event *event, void *user_data)
{
struct data *data = SPA_CONTAINER_OF(callbacks, struct data, source_callbacks);
struct data *data = user_data;
spa_log_trace(data->log, "got source event %d", SPA_EVENT_TYPE(event));
}
static void on_source_have_output(const struct spa_node_callbacks *callbacks,
struct spa_node *node)
static void on_source_have_output(struct spa_node *node, void *user_data)
{
struct data *data = SPA_CONTAINER_OF(callbacks, struct data, source_callbacks);
struct data *data = user_data;
spa_log_trace(data->log, "have_output");
on_source_push(data);
if (--data->iterations == 0)
@ -355,9 +346,8 @@ static int make_nodes(struct data *data)
return res;
}
data->sink_callbacks = sink_callbacks;
if (data->mode & MODE_ASYNC_PULL)
spa_node_set_callbacks(data->sink, &data->sink_callbacks);
spa_node_set_callbacks(data->sink, &sink_callbacks, data);
if ((res = make_node(data, &data->source,
"build/spa/plugins/test/libspa-test.so", "fakesrc")) < 0) {
@ -365,9 +355,8 @@ static int make_nodes(struct data *data)
return res;
}
data->source_callbacks = source_callbacks;
if (data->mode & MODE_ASYNC_PUSH)
spa_node_set_callbacks(data->source, &data->source_callbacks);
spa_node_set_callbacks(data->source, &source_callbacks, data);
data->source_sink_io[0] = SPA_PORT_IO_INIT;
data->source_sink_io[0].status = SPA_RESULT_NEED_BUFFER;

View file

@ -98,7 +98,6 @@ struct data {
uint32_t n_support;
struct spa_node *sink;
struct spa_node_callbacks sink_callbacks;
struct spa_port_io source_sink_io[1];
struct spa_node *source;
@ -206,22 +205,19 @@ static int make_node(struct data *data, struct spa_node **node, const char *lib,
return SPA_RESULT_ERROR;
}
static void on_sink_done(const struct spa_node_callbacks *callbacks,
struct spa_node *node, int seq, int res)
static void on_sink_done(struct spa_node *node, int seq, int res, void *user_data)
{
printf("got done %d %d\n", seq, res);
}
static void on_sink_event(const struct spa_node_callbacks *callbacks,
struct spa_node *node, struct spa_event *event)
static void on_sink_event(struct spa_node *node, struct spa_event *event, void *user_data)
{
printf("got event %d\n", SPA_EVENT_TYPE(event));
}
static void on_sink_need_input(const struct spa_node_callbacks *callbacks,
struct spa_node *node)
static void on_sink_need_input(struct spa_node *node, void *user_data)
{
struct data *data = SPA_CONTAINER_OF(callbacks, struct data, sink_callbacks);
struct data *data = user_data;
int res;
res = spa_node_process_output(data->source);
@ -233,12 +229,12 @@ static void on_sink_need_input(const struct spa_node_callbacks *callbacks,
}
static void
on_sink_reuse_buffer(const struct spa_node_callbacks *callbacks,
struct spa_node *node,
on_sink_reuse_buffer(struct spa_node *node,
uint32_t port_id,
uint32_t buffer_id)
uint32_t buffer_id,
void *user_data)
{
struct data *data = SPA_CONTAINER_OF(callbacks, struct data, sink_callbacks);
struct data *data = user_data;
data->source_sink_io[0].buffer_id = buffer_id;
}
@ -291,8 +287,7 @@ static int make_nodes(struct data *data, const char *device)
printf("can't create alsa-sink: %d\n", res);
return res;
}
data->sink_callbacks = sink_callbacks;
spa_node_set_callbacks(data->sink, &data->sink_callbacks);
spa_node_set_callbacks(data->sink, &sink_callbacks, data);
spa_pod_builder_init(&b, buffer, sizeof(buffer));
spa_pod_builder_props(&b, &f[0], data->type.props,

View file

@ -96,7 +96,6 @@ struct data {
struct spa_node *source;
struct spa_port_io source_output[1];
struct spa_node_callbacks source_callbacks;
SDL_Renderer *renderer;
SDL_Window *window;
@ -177,26 +176,23 @@ static void handle_events(struct data *data)
}
}
static void on_source_done(const struct spa_node_callbacks *callbacks,
struct spa_node *node, int seq, int res)
static void on_source_done(struct spa_node *node, int seq, int res, void *user_data)
{
printf("got done %d %d\n", seq, res);
}
static void on_source_event(const struct spa_node_callbacks *callbacks,
struct spa_node *node, struct spa_event *event)
static void on_source_event(struct spa_node *node, struct spa_event *event, void *user_data)
{
struct data *data = SPA_CONTAINER_OF(callbacks, struct data, source_callbacks);
struct data *data = user_data;
handle_events(data);
printf("got event %d\n", SPA_EVENT_TYPE(event));
}
static void on_source_have_output(const struct spa_node_callbacks *callbacks,
struct spa_node *node)
static void on_source_have_output(struct spa_node *node, void *user_data)
{
struct data *data = SPA_CONTAINER_OF(callbacks, struct data, source_callbacks);
struct data *data = user_data;
int res;
struct spa_buffer *b;
void *sdata, *ddata;
@ -315,8 +311,7 @@ static int make_nodes(struct data *data, const char *device)
return res;
}
data->source_callbacks = source_callbacks;
spa_node_set_callbacks(data->source, &data->source_callbacks);
spa_node_set_callbacks(data->source, &source_callbacks, data);
spa_pod_builder_init(&b, buffer, sizeof(buffer));
spa_pod_builder_props(&b, &f[0], data->type.props,