Add versions to structures

Use versions instead of size
Remove user_data from callbacks, we can simply pass the callback struct.
This commit is contained in:
Wim Taymans 2017-06-14 18:32:39 +02:00
parent 4a219e81dd
commit c3b73ba47d
45 changed files with 344 additions and 303 deletions

View file

@ -109,10 +109,12 @@ 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;
@ -240,21 +242,24 @@ static void on_source_push(struct data *data)
}
}
static void on_sink_done(struct spa_node *node, int seq, int res, void *user_data)
static void on_sink_done(const struct spa_node_callbacks *callbacks,
struct spa_node *node, int seq, int res)
{
struct data *data = user_data;
struct data *data = SPA_CONTAINER_OF(callbacks, struct data, sink_callbacks);
spa_log_trace(data->log, "got sink done %d %d", seq, res);
}
static void on_sink_event(struct spa_node *node, struct spa_event *event, void *user_data)
static void on_sink_event(const struct spa_node_callbacks *callbacks,
struct spa_node *node, struct spa_event *event)
{
struct data *data = user_data;
struct data *data = SPA_CONTAINER_OF(callbacks, struct data, sink_callbacks);
spa_log_trace(data->log, "got sink event %d", SPA_EVENT_TYPE(event));
}
static void on_sink_need_input(struct spa_node *node, void *user_data)
static void on_sink_need_input(const struct spa_node_callbacks *callbacks,
struct spa_node *node)
{
struct data *data = user_data;
struct data *data = SPA_CONTAINER_OF(callbacks, struct data, sink_callbacks);
spa_log_trace(data->log, "need input");
on_sink_pull(data);
if (--data->iterations == 0)
@ -262,14 +267,16 @@ static void on_sink_need_input(struct spa_node *node, void *user_data)
}
static void
on_sink_reuse_buffer(struct spa_node *node, uint32_t port_id, uint32_t buffer_id, void *user_data)
on_sink_reuse_buffer(const struct spa_node_callbacks *callbacks,
struct spa_node *node, uint32_t port_id, uint32_t buffer_id)
{
struct data *data = user_data;
struct data *data = SPA_CONTAINER_OF(callbacks, struct data, sink_callbacks);
data->source_sink_io[0].buffer_id = buffer_id;
}
static const struct spa_node_callbacks sink_callbacks = {
SPA_VERSION_NODE_CALLBACKS,
&on_sink_done,
&on_sink_event,
&on_sink_need_input,
@ -277,21 +284,24 @@ static const struct spa_node_callbacks sink_callbacks = {
&on_sink_reuse_buffer
};
static void on_source_done(struct spa_node *node, int seq, int res, void *user_data)
static void on_source_done(const struct spa_node_callbacks *callbacks,
struct spa_node *node, int seq, int res)
{
struct data *data = user_data;
struct data *data = SPA_CONTAINER_OF(callbacks, struct data, source_callbacks);
spa_log_trace(data->log, "got source done %d %d", seq, res);
}
static void on_source_event(struct spa_node *node, struct spa_event *event, void *user_data)
static void on_source_event(const struct spa_node_callbacks *callbacks,
struct spa_node *node, struct spa_event *event)
{
struct data *data = user_data;
struct data *data = SPA_CONTAINER_OF(callbacks, struct data, source_callbacks);
spa_log_trace(data->log, "got source event %d", SPA_EVENT_TYPE(event));
}
static void on_source_have_output(struct spa_node *node, void *user_data)
static void on_source_have_output(const struct spa_node_callbacks *callbacks,
struct spa_node *node)
{
struct data *data = user_data;
struct data *data = SPA_CONTAINER_OF(callbacks, struct data, source_callbacks);
spa_log_trace(data->log, "have_output");
on_source_push(data);
if (--data->iterations == 0)
@ -299,6 +309,7 @@ static void on_source_have_output(struct spa_node *node, void *user_data)
}
static const struct spa_node_callbacks source_callbacks = {
SPA_VERSION_NODE_CALLBACKS,
&on_source_done,
&on_source_event,
NULL,
@ -344,8 +355,9 @@ 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, &sink_callbacks, sizeof(sink_callbacks), data);
spa_node_set_callbacks(data->sink, &data->sink_callbacks);
if ((res = make_node(data, &data->source,
"build/spa/plugins/test/libspa-test.so", "fakesrc")) < 0) {
@ -353,9 +365,9 @@ 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, &source_callbacks, sizeof(source_callbacks),
data);
spa_node_set_callbacks(data->source, &data->source_callbacks);
data->source_sink_io[0] = SPA_PORT_IO_INIT;
data->source_sink_io[0].status = SPA_RESULT_NEED_BUFFER;
@ -528,7 +540,7 @@ int main(int argc, char *argv[])
data.map = &default_map.map;
data.log = &default_log.log;
data.data_loop.size = sizeof(struct spa_loop);
data.data_loop.version = SPA_VERSION_LOOP;
data.data_loop.add_source = do_add_source;
data.data_loop.update_source = do_update_source;
data.data_loop.remove_source = do_remove_source;