diff --git a/src/extensions/client-node.h b/src/extensions/client-node.h index 26ae63654..56a55ebdf 100644 --- a/src/extensions/client-node.h +++ b/src/extensions/client-node.h @@ -38,14 +38,6 @@ struct pw_client_node_proxy; struct pw_client_node_message; -/** Shared structure between client and server \memberof pw_client_node */ -struct pw_client_node_area { - uint32_t max_input_ports; /**< max input ports of the node */ - uint32_t n_input_ports; /**< number of input ports of the node */ - uint32_t max_output_ports; /**< max output ports of the node */ - uint32_t n_output_ports; /**< number of output ports of the node */ -}; - /** \class pw_client_node_transport * * \brief Transport object @@ -55,7 +47,6 @@ struct pw_client_node_area { * lockfree way. */ struct pw_client_node_transport { - struct pw_client_node_area *area; /**< the transport area */ void *input_data; /**< input memory for ringbuffer */ struct spa_ringbuffer *input_buffer; /**< ringbuffer for input memory */ void *output_data; /**< output memory for ringbuffer */ diff --git a/src/modules/module-client-node/client-node.c b/src/modules/module-client-node/client-node.c index 0faf2795d..a49ba6903 100644 --- a/src/modules/module-client-node/client-node.c +++ b/src/modules/module-client-node/client-node.c @@ -938,17 +938,6 @@ static int handle_node_message(struct node *this, struct pw_client_node_message return 0; } -static void setup_transport(struct impl *impl) -{ - uint32_t max_inputs = 0, max_outputs = 0, n_inputs = 0, n_outputs = 0; - - spa_node_get_n_ports(&impl->node.node, &n_inputs, &max_inputs, &n_outputs, &max_outputs); - - impl->transport = pw_client_node_transport_new(max_inputs, max_outputs); - impl->transport->area->n_input_ports = n_inputs; - impl->transport->area->n_output_ports = n_outputs; -} - static void client_node_done(void *data, int seq, int res) { @@ -956,7 +945,7 @@ client_node_done(void *data, int seq, int res) struct node *this = &impl->node; if (seq == 0 && res == 0 && impl->transport == NULL) - setup_transport(impl); + impl->transport = pw_client_node_transport_new(); this->callbacks->done(this->callbacks_data, seq, res); } @@ -1259,6 +1248,8 @@ static int port_init_mix(void *data, struct pw_port_mix *mix) ioid = pw_map_insert_new(&impl->io_map, NULL); mix->port.io = SPA_MEMBER(impl->io_areas->ptr, ioid * sizeof(struct spa_io_buffers), void); + mix->port.io->buffer_id = SPA_ID_INVALID; + mix->port.io->status = SPA_STATUS_NEED_BUFFER; pw_log_debug("client-node %p: init mix io %d %p", impl, ioid, mix->port.io); diff --git a/src/modules/module-client-node/transport.c b/src/modules/module-client-node/transport.c index cbcdf8d4c..01736b28a 100644 --- a/src/modules/module-client-node/transport.c +++ b/src/modules/module-client-node/transport.c @@ -44,11 +44,10 @@ struct transport { }; /** \endcond */ -static size_t area_get_size(struct pw_client_node_area *area) +static size_t area_get_size(void) { size_t size; - size = sizeof(struct pw_client_node_area); - size += sizeof(struct spa_ringbuffer); + size = sizeof(struct spa_ringbuffer); size += INPUT_BUFFER_SIZE; size += sizeof(struct spa_ringbuffer); size += OUTPUT_BUFFER_SIZE; @@ -57,11 +56,6 @@ static size_t area_get_size(struct pw_client_node_area *area) static void transport_setup_area(void *p, struct pw_client_node_transport *trans) { - struct pw_client_node_area *a; - - trans->area = a = p; - p = SPA_MEMBER(p, sizeof(struct pw_client_node_area), struct spa_io_buffers); - trans->input_buffer = p; p = SPA_MEMBER(p, sizeof(struct spa_ringbuffer), void); @@ -158,28 +152,20 @@ static int parse_message(struct pw_client_node_transport *trans, void *message) } /** Create a new transport - * \param max_input_ports maximum number of input_ports - * \param max_output_ports maximum number of output_ports * \return a newly allocated \ref pw_client_node_transport * \memberof pw_client_node_transport */ struct pw_client_node_transport * -pw_client_node_transport_new(uint32_t max_input_ports, uint32_t max_output_ports) +pw_client_node_transport_new(void) { struct transport *impl; struct pw_client_node_transport *trans; - struct pw_client_node_area area = { 0 }; - - area.max_input_ports = max_input_ports; - area.n_input_ports = 0; - area.max_output_ports = max_output_ports; - area.n_output_ports = 0; impl = calloc(1, sizeof(struct transport)); if (impl == NULL) return NULL; - pw_log_debug("transport %p: new %d %d", impl, max_input_ports, max_output_ports); + pw_log_debug("transport %p: new", impl); trans = &impl->trans; impl->offset = 0; @@ -187,11 +173,10 @@ pw_client_node_transport_new(uint32_t max_input_ports, uint32_t max_output_ports if (pw_memblock_alloc(PW_MEMBLOCK_FLAG_WITH_FD | PW_MEMBLOCK_FLAG_MAP_READWRITE | PW_MEMBLOCK_FLAG_SEAL, - area_get_size(&area), + area_get_size(), &impl->mem) < 0) return NULL; - memcpy(impl->mem->ptr, &area, sizeof(struct pw_client_node_area)); transport_setup_area(impl->mem->ptr, trans); transport_reset_area(trans); diff --git a/src/modules/module-client-node/transport.h b/src/modules/module-client-node/transport.h index ebf12f5d0..047eb2768 100644 --- a/src/modules/module-client-node/transport.h +++ b/src/modules/module-client-node/transport.h @@ -38,7 +38,7 @@ struct pw_client_node_transport_info { }; struct pw_client_node_transport * -pw_client_node_transport_new(uint32_t max_input_ports, uint32_t max_output_ports); +pw_client_node_transport_new(void); struct pw_client_node_transport * pw_client_node_transport_new_from_info(struct pw_client_node_transport_info *info);