mirror of
https://gitlab.freedesktop.org/pipewire/pipewire.git
synced 2025-10-31 22:25:38 -04:00
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:
parent
4a219e81dd
commit
c3b73ba47d
45 changed files with 344 additions and 303 deletions
|
|
@ -107,6 +107,7 @@ 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];
|
||||
|
|
@ -215,19 +216,22 @@ static int make_node(struct data *data, struct spa_node **node, const char *lib,
|
|||
return SPA_RESULT_ERROR;
|
||||
}
|
||||
|
||||
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)
|
||||
{
|
||||
printf("got done %d %d\n", 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)
|
||||
{
|
||||
printf("got event %d\n", 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);
|
||||
|
||||
data->sink_node.action = SPA_GRAPH_ACTION_CHECK;
|
||||
data->sink_node.state = SPA_RESULT_NEED_BUFFER;
|
||||
|
|
@ -236,14 +240,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->volume_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,
|
||||
|
|
@ -291,7 +297,8 @@ static int make_nodes(struct data *data, const char *device)
|
|||
printf("can't create alsa-sink: %d\n", res);
|
||||
return res;
|
||||
}
|
||||
spa_node_set_callbacks(data->sink, &sink_callbacks, sizeof(sink_callbacks), data);
|
||||
data->sink_callbacks = sink_callbacks;
|
||||
spa_node_set_callbacks(data->sink, &data->sink_callbacks);
|
||||
|
||||
spa_pod_builder_init(&b, buffer, sizeof(buffer));
|
||||
spa_pod_builder_props(&b, &f[0], data->type.props,
|
||||
|
|
@ -531,7 +538,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;
|
||||
|
|
|
|||
|
|
@ -110,6 +110,7 @@ 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;
|
||||
|
|
@ -226,19 +227,22 @@ static int make_node(struct data *data, struct spa_node **node, const char *lib,
|
|||
return SPA_RESULT_ERROR;
|
||||
}
|
||||
|
||||
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)
|
||||
{
|
||||
printf("got done %d %d\n", 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)
|
||||
{
|
||||
printf("got event %d\n", 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);
|
||||
#ifdef USE_GRAPH
|
||||
data->sink_node.action = PROCESS_CHECK;
|
||||
data->sink_node.state = SPA_RESULT_NEED_BUFFER;
|
||||
|
|
@ -278,14 +282,18 @@ 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->mix_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,
|
||||
|
|
@ -333,7 +341,8 @@ static int make_nodes(struct data *data, const char *device)
|
|||
printf("can't create alsa-sink: %d\n", res);
|
||||
return res;
|
||||
}
|
||||
spa_node_set_callbacks(data->sink, &sink_callbacks, sizeof(sink_callbacks), data);
|
||||
data->sink_callbacks = sink_callbacks;
|
||||
spa_node_set_callbacks(data->sink, &data->sink_callbacks);
|
||||
|
||||
spa_pod_builder_init(&b, buffer, sizeof(buffer));
|
||||
spa_pod_builder_props(&b, &f[0], data->type.props,
|
||||
|
|
@ -636,7 +645,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;
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -98,6 +98,7 @@ 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;
|
||||
|
|
@ -205,19 +206,22 @@ static int make_node(struct data *data, struct spa_node **node, const char *lib,
|
|||
return SPA_RESULT_ERROR;
|
||||
}
|
||||
|
||||
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)
|
||||
{
|
||||
printf("got done %d %d\n", 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)
|
||||
{
|
||||
printf("got event %d\n", 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);
|
||||
int res;
|
||||
|
||||
res = spa_node_process_output(data->source);
|
||||
|
|
@ -229,13 +233,17 @@ 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,
|
||||
|
|
@ -283,7 +291,8 @@ static int make_nodes(struct data *data, const char *device)
|
|||
printf("can't create alsa-sink: %d\n", res);
|
||||
return res;
|
||||
}
|
||||
spa_node_set_callbacks(data->sink, &sink_callbacks, sizeof(sink_callbacks), data);
|
||||
data->sink_callbacks = sink_callbacks;
|
||||
spa_node_set_callbacks(data->sink, &data->sink_callbacks);
|
||||
|
||||
spa_pod_builder_init(&b, buffer, sizeof(buffer));
|
||||
spa_pod_builder_props(&b, &f[0], data->type.props,
|
||||
|
|
@ -465,7 +474,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;
|
||||
|
|
|
|||
|
|
@ -96,6 +96,7 @@ 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;
|
||||
|
|
@ -176,23 +177,26 @@ static void handle_events(struct data *data)
|
|||
}
|
||||
}
|
||||
|
||||
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)
|
||||
{
|
||||
printf("got done %d %d\n", 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);
|
||||
|
||||
handle_events(data);
|
||||
|
||||
printf("got event %d\n", 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);
|
||||
int res;
|
||||
struct spa_buffer *b;
|
||||
void *sdata, *ddata;
|
||||
|
|
@ -261,6 +265,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,
|
||||
|
|
@ -309,7 +314,9 @@ static int make_nodes(struct data *data, const char *device)
|
|||
printf("can't create v4l2-source: %d\n", res);
|
||||
return res;
|
||||
}
|
||||
spa_node_set_callbacks(data->source, &source_callbacks, sizeof(source_callbacks), data);
|
||||
|
||||
data->source_callbacks = source_callbacks;
|
||||
spa_node_set_callbacks(data->source, &data->source_callbacks);
|
||||
|
||||
spa_pod_builder_init(&b, buffer, sizeof(buffer));
|
||||
spa_pod_builder_props(&b, &f[0], data->type.props,
|
||||
|
|
@ -549,7 +556,7 @@ int main(int argc, char *argv[])
|
|||
if ((str = getenv("SPA_DEBUG")))
|
||||
data.log->level = atoi(str);
|
||||
|
||||
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;
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue