mirror of
				https://gitlab.freedesktop.org/pipewire/pipewire.git
				synced 2025-11-03 09:01:54 -05:00 
			
		
		
		
	small cleanups
This commit is contained in:
		
							parent
							
								
									03b914405d
								
							
						
					
					
						commit
						f4f2e4bf68
					
				
					 8 changed files with 63 additions and 42 deletions
				
			
		| 
						 | 
				
			
			@ -141,13 +141,9 @@ struct impl {
 | 
			
		|||
 | 
			
		||||
	bool started;
 | 
			
		||||
 | 
			
		||||
	const struct buffer *src;
 | 
			
		||||
 | 
			
		||||
	const struct conv_info *conv[2];
 | 
			
		||||
 | 
			
		||||
	convert_func_t convert;
 | 
			
		||||
 | 
			
		||||
	uint8_t temp[8192];
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
#define CHECK_PORT(this,d,id)		(id == 0)
 | 
			
		||||
| 
						 | 
				
			
			@ -606,7 +602,8 @@ static int port_set_format(struct spa_node *node,
 | 
			
		|||
		if (other->have_format)
 | 
			
		||||
			res = setup_convert(this);
 | 
			
		||||
 | 
			
		||||
		spa_log_info(this->log, NAME " %p: set format on port %d %d", this, port_id, res);
 | 
			
		||||
		spa_log_info(this->log, NAME " %p: set format on port %d %d %d %d",
 | 
			
		||||
				this, port_id, res, port->stride, other->stride);
 | 
			
		||||
	}
 | 
			
		||||
	return res;
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -845,6 +842,9 @@ static int impl_node_process(struct spa_node *node)
 | 
			
		|||
			db->datas[i].chunk->size = (n_bytes / inport->stride) * outport->stride;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		spa_log_trace(this->log, NAME " %p: %d %d %d %d", this,
 | 
			
		||||
				n_src_datas, n_dst_datas, n_bytes, inport->offset);
 | 
			
		||||
 | 
			
		||||
		this->convert(this, n_dst_datas, dst_datas, n_src_datas, src_datas, n_bytes);
 | 
			
		||||
 | 
			
		||||
		inport->offset += n_bytes;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -48,7 +48,6 @@ pipewire_module_client_node = shared_library('pipewire-module-client-node',
 | 
			
		|||
  [ 'module-client-node.c',
 | 
			
		||||
    'module-client-node/client-node.c',
 | 
			
		||||
    'module-client-node/protocol-native.c',
 | 
			
		||||
    'module-protocol-native/connection.c',
 | 
			
		||||
    'spa/spa-node.c', ],
 | 
			
		||||
  c_args : pipewire_module_c_args,
 | 
			
		||||
  include_directories : [configinc, spa_inc],
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -317,14 +317,6 @@ static int impl_node_set_param(struct spa_node *node, uint32_t id, uint32_t flag
 | 
			
		|||
	return SPA_RESULT_RETURN_ASYNC(this->seq++);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static inline void send_process(struct node *this)
 | 
			
		||||
{
 | 
			
		||||
	uint64_t cmd = 1;
 | 
			
		||||
	pw_log_trace("client-node %p: send process", this);
 | 
			
		||||
	if (write(this->writefd, &cmd, 8) != 8)
 | 
			
		||||
		spa_log_warn(this->log, "node %p: error %s", this, strerror(errno));
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static int impl_node_send_command(struct spa_node *node, const struct spa_command *command)
 | 
			
		||||
{
 | 
			
		||||
	struct node *this;
 | 
			
		||||
| 
						 | 
				
			
			@ -895,8 +887,13 @@ impl_node_port_send_command(struct spa_node *node,
 | 
			
		|||
static int impl_node_process(struct spa_node *node)
 | 
			
		||||
{
 | 
			
		||||
	struct node *this = SPA_CONTAINER_OF(node, struct node, node);
 | 
			
		||||
	spa_log_trace(this->log, "%p: process", this);
 | 
			
		||||
	send_process(this);
 | 
			
		||||
	uint64_t cmd = 1;
 | 
			
		||||
 | 
			
		||||
	spa_log_trace(this->log, "%p: send process", this);
 | 
			
		||||
 | 
			
		||||
	if (write(this->writefd, &cmd, 8) != 8)
 | 
			
		||||
		spa_log_warn(this->log, "node %p: error %s", this, strerror(errno));
 | 
			
		||||
 | 
			
		||||
	return SPA_STATUS_OK;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -1137,6 +1134,8 @@ static void node_initialized(void *data)
 | 
			
		|||
	struct pw_client_node *this = &impl->this;
 | 
			
		||||
	struct pw_node *node = this->node;
 | 
			
		||||
	struct pw_type *t = impl->t;
 | 
			
		||||
	struct pw_global *global;
 | 
			
		||||
	uint32_t node_id;
 | 
			
		||||
 | 
			
		||||
	if (this->resource == NULL)
 | 
			
		||||
		return;
 | 
			
		||||
| 
						 | 
				
			
			@ -1161,8 +1160,13 @@ static void node_initialized(void *data)
 | 
			
		|||
	ensure_mem(impl, impl->io_areas->fd, t->data.MemFd, impl->io_areas->flags);
 | 
			
		||||
	pw_log_debug("client-node %p: io areas %p", node, impl->io_areas->ptr);
 | 
			
		||||
 | 
			
		||||
	if ((global = pw_node_get_global(node)) != NULL)
 | 
			
		||||
		node_id = pw_global_get_id(global);
 | 
			
		||||
	else
 | 
			
		||||
		node_id = SPA_ID_INVALID;
 | 
			
		||||
 | 
			
		||||
	pw_client_node_resource_transport(this->resource,
 | 
			
		||||
					  pw_global_get_id(pw_node_get_global(node)),
 | 
			
		||||
					  node_id,
 | 
			
		||||
					  impl->other_fds[0],
 | 
			
		||||
					  impl->other_fds[1]);
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1259,7 +1259,7 @@ struct pw_link *pw_link_new(struct pw_core *core,
 | 
			
		|||
	this->info.format = NULL;
 | 
			
		||||
	this->info.props = this->properties ? &this->properties->dict : NULL;
 | 
			
		||||
 | 
			
		||||
	impl->io = SPA_IO_BUFFERS_INIT;
 | 
			
		||||
	impl->io.buffer_id = SPA_ID_INVALID;
 | 
			
		||||
	impl->io.status = SPA_STATUS_NEED_BUFFER;
 | 
			
		||||
 | 
			
		||||
	pw_port_init_mix(output, &this->rt.mix[SPA_DIRECTION_OUTPUT]);
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -165,6 +165,7 @@ static void update_port_map(struct pw_node *node, enum pw_direction direction,
 | 
			
		|||
	uint32_t o, n;
 | 
			
		||||
	size_t os, ns;
 | 
			
		||||
	struct pw_port *port;
 | 
			
		||||
	int res;
 | 
			
		||||
 | 
			
		||||
	o = n = 0;
 | 
			
		||||
	os = pw_map_get_size(portmap);
 | 
			
		||||
| 
						 | 
				
			
			@ -187,8 +188,13 @@ static void update_port_map(struct pw_node *node, enum pw_direction direction,
 | 
			
		|||
					pw_direction_as_string(direction), ids[n]);
 | 
			
		||||
 | 
			
		||||
			if (port == NULL) {
 | 
			
		||||
				if ((port = pw_port_new(direction, ids[n], NULL, 0)))
 | 
			
		||||
					pw_port_add(port, node);
 | 
			
		||||
				if ((port = pw_port_new(direction, ids[n], NULL, 0))) {
 | 
			
		||||
					if ((res = pw_port_add(port, node)) < 0) {
 | 
			
		||||
						pw_log_error("node %p: can't add port %p: %d, %s",
 | 
			
		||||
								node, port, res, spa_strerror(res));
 | 
			
		||||
						pw_port_destroy(port);
 | 
			
		||||
					}
 | 
			
		||||
				}
 | 
			
		||||
				o = ids[n] + 1;
 | 
			
		||||
				os++;
 | 
			
		||||
			}
 | 
			
		||||
| 
						 | 
				
			
			@ -238,7 +244,7 @@ int pw_node_update_ports(struct pw_node *node)
 | 
			
		|||
	if (res < 0)
 | 
			
		||||
		return res;
 | 
			
		||||
 | 
			
		||||
	pw_log_debug("node %p: update_port ids %u/%u, %u/%u", node,
 | 
			
		||||
	pw_log_debug("node %p: update_port ids input %u/%u, outputs %u/%u", node,
 | 
			
		||||
		     n_input_ports, max_input_ports, n_output_ports, max_output_ports);
 | 
			
		||||
 | 
			
		||||
	update_port_map(node, PW_DIRECTION_INPUT, &node->input_port_map, input_port_ids, n_input_ports);
 | 
			
		||||
| 
						 | 
				
			
			@ -798,6 +804,7 @@ struct pw_port *pw_node_get_free_port(struct pw_node *node, enum pw_direction di
 | 
			
		|||
	struct spa_list *ports;
 | 
			
		||||
	struct pw_port *port = NULL, *p, *mixport = NULL;
 | 
			
		||||
	struct pw_map *portmap;
 | 
			
		||||
	int res;
 | 
			
		||||
 | 
			
		||||
	if (direction == PW_DIRECTION_INPUT) {
 | 
			
		||||
		max_ports = node->info.max_input_ports;
 | 
			
		||||
| 
						 | 
				
			
			@ -828,18 +835,19 @@ struct pw_port *pw_node_get_free_port(struct pw_node *node, enum pw_direction di
 | 
			
		|||
	/* no port, can we create one ? */
 | 
			
		||||
	if (n_ports < max_ports) {
 | 
			
		||||
		uint32_t port_id = pw_map_insert_new(portmap, NULL);
 | 
			
		||||
		int res;
 | 
			
		||||
 | 
			
		||||
		pw_log_debug("node %p: creating port direction %d %u", node, direction, port_id);
 | 
			
		||||
 | 
			
		||||
		if ((res = spa_node_add_port(node->node, direction, port_id)) < 0) {
 | 
			
		||||
			pw_log_error("node %p: could not add port %d %s", node, port_id, spa_strerror(res));
 | 
			
		||||
			pw_log_error("node %p: could not add port %d %s", node, port_id,
 | 
			
		||||
					spa_strerror(res));
 | 
			
		||||
			goto no_mem;
 | 
			
		||||
		}
 | 
			
		||||
		port = pw_port_new(direction, port_id, NULL, 0);
 | 
			
		||||
		if (port == NULL)
 | 
			
		||||
			goto no_mem;
 | 
			
		||||
		pw_port_add(port, node);
 | 
			
		||||
		if ((res = pw_port_add(port, node)) < 0)
 | 
			
		||||
			goto add_failed;
 | 
			
		||||
	} else {
 | 
			
		||||
		port = mixport;
 | 
			
		||||
	}
 | 
			
		||||
| 
						 | 
				
			
			@ -850,6 +858,10 @@ struct pw_port *pw_node_get_free_port(struct pw_node *node, enum pw_direction di
 | 
			
		|||
      no_mem:
 | 
			
		||||
	pw_log_error("node %p: can't create new port", node);
 | 
			
		||||
	return NULL;
 | 
			
		||||
      add_failed:
 | 
			
		||||
	pw_log_error("node %p: can't add new port: %s", node, spa_strerror(res));
 | 
			
		||||
	pw_port_destroy(port);
 | 
			
		||||
	return NULL;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void on_state_complete(struct pw_node *node, void *data, int res)
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -36,7 +36,7 @@
 | 
			
		|||
 | 
			
		||||
static char **categories = NULL;
 | 
			
		||||
 | 
			
		||||
static struct support_info {
 | 
			
		||||
static struct plugin_info {
 | 
			
		||||
	void *hnd;
 | 
			
		||||
	spa_handle_factory_enum_func_t enum_func;
 | 
			
		||||
	struct spa_support support[16];
 | 
			
		||||
| 
						 | 
				
			
			@ -44,9 +44,9 @@ static struct support_info {
 | 
			
		|||
} support_info;
 | 
			
		||||
 | 
			
		||||
static bool
 | 
			
		||||
open_support(const char *path,
 | 
			
		||||
open_plugin(const char *path,
 | 
			
		||||
	    const char *lib,
 | 
			
		||||
	     struct support_info *info)
 | 
			
		||||
	    struct plugin_info *info)
 | 
			
		||||
{
 | 
			
		||||
	char *filename;
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -73,7 +73,7 @@ open_support(const char *path,
 | 
			
		|||
	return false;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static const struct spa_handle_factory *get_factory(struct support_info *info, const char *factory_name)
 | 
			
		||||
static const struct spa_handle_factory *get_factory(struct plugin_info *info, const char *factory_name)
 | 
			
		||||
{
 | 
			
		||||
	int res;
 | 
			
		||||
	uint32_t index;
 | 
			
		||||
| 
						 | 
				
			
			@ -92,7 +92,7 @@ static const struct spa_handle_factory *get_factory(struct support_info *info, c
 | 
			
		|||
}
 | 
			
		||||
 | 
			
		||||
static void *
 | 
			
		||||
load_interface(struct support_info *info,
 | 
			
		||||
load_interface(struct plugin_info *info,
 | 
			
		||||
	       const char *factory_name,
 | 
			
		||||
	       const char *type)
 | 
			
		||||
{
 | 
			
		||||
| 
						 | 
				
			
			@ -173,7 +173,7 @@ const struct spa_support *pw_get_support(uint32_t *n_support)
 | 
			
		|||
void *pw_load_spa_interface(const char *lib, const char *factory_name, const char *type,
 | 
			
		||||
			    struct spa_support *support, uint32_t n_support)
 | 
			
		||||
{
 | 
			
		||||
	struct support_info extra_support_info;
 | 
			
		||||
	struct plugin_info extra_support_info;
 | 
			
		||||
	const char *str;
 | 
			
		||||
	int i;
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -190,7 +190,7 @@ void *pw_load_spa_interface(const char *lib, const char *factory_name, const cha
 | 
			
		|||
 | 
			
		||||
	pw_log_debug("load \"%s\", \"%s\"", lib, factory_name);
 | 
			
		||||
 | 
			
		||||
	if (open_support(str, lib, &extra_support_info))
 | 
			
		||||
	if (open_plugin(str, lib, &extra_support_info))
 | 
			
		||||
		return load_interface(&extra_support_info, factory_name, type);
 | 
			
		||||
 | 
			
		||||
	return NULL;
 | 
			
		||||
| 
						 | 
				
			
			@ -220,7 +220,7 @@ void pw_init(int *argc, char **argv[])
 | 
			
		|||
{
 | 
			
		||||
	const char *str;
 | 
			
		||||
	void *iface;
 | 
			
		||||
	struct support_info *info = &support_info;
 | 
			
		||||
	struct plugin_info *info = &support_info;
 | 
			
		||||
 | 
			
		||||
	if ((str = getenv("PIPEWIRE_DEBUG")))
 | 
			
		||||
		configure_debug(str);
 | 
			
		||||
| 
						 | 
				
			
			@ -231,7 +231,7 @@ void pw_init(int *argc, char **argv[])
 | 
			
		|||
	if (support_info.n_support > 0)
 | 
			
		||||
		return;
 | 
			
		||||
 | 
			
		||||
	if (open_support(str, "support/libspa-support", info)) {
 | 
			
		||||
	if (open_plugin(str, "support/libspa-support", info)) {
 | 
			
		||||
		iface = load_interface(info, "mapper", SPA_TYPE__TypeMap);
 | 
			
		||||
		if (iface != NULL)
 | 
			
		||||
			info->support[info->n_support++] = SPA_SUPPORT_INIT(SPA_TYPE__TypeMap, iface);
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -430,15 +430,17 @@ int pw_port_add(struct pw_port *port, struct pw_node *node)
 | 
			
		|||
	struct pw_core *core = node->core;
 | 
			
		||||
	struct pw_type *t = &core->type;
 | 
			
		||||
	const char *str, *dir;
 | 
			
		||||
	int res;
 | 
			
		||||
 | 
			
		||||
	if (port->node != NULL)
 | 
			
		||||
		return -EEXIST;
 | 
			
		||||
 | 
			
		||||
	port->node = node;
 | 
			
		||||
 | 
			
		||||
	spa_node_port_get_info(node->node,
 | 
			
		||||
	if ((res = spa_node_port_get_info(node->node,
 | 
			
		||||
			       port->direction, port_id,
 | 
			
		||||
			       &port->spa_info);
 | 
			
		||||
			       &port->spa_info)) < 0)
 | 
			
		||||
		return res;
 | 
			
		||||
 | 
			
		||||
	port->node = node;
 | 
			
		||||
 | 
			
		||||
	if (port->spa_info->props)
 | 
			
		||||
		pw_port_update_properties(port, port->spa_info->props);
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -41,6 +41,7 @@
 | 
			
		|||
 | 
			
		||||
#define MAX_BUFFERS	64
 | 
			
		||||
#define MASK_BUFFERS	(MAX_BUFFERS-1)
 | 
			
		||||
#define MAX_PORTS	1
 | 
			
		||||
 | 
			
		||||
struct type {
 | 
			
		||||
	uint32_t client_node;
 | 
			
		||||
| 
						 | 
				
			
			@ -179,10 +180,12 @@ static int configure_converter(struct stream *impl)
 | 
			
		|||
		param = impl->init_params[i];
 | 
			
		||||
 | 
			
		||||
		if (spa_pod_is_object_type(param, t->spa_format)) {
 | 
			
		||||
			if (spa_pod_filter(&b, &filtered, impl->format, param) >= 0)
 | 
			
		||||
			if (spa_pod_filter(&b, &filtered, impl->format, param) >= 0) {
 | 
			
		||||
				pw_log_debug("stream %p: format matches filter", impl);
 | 
			
		||||
				return 0;
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if (impl->convert == NULL)
 | 
			
		||||
		return -ENOTSUP;
 | 
			
		||||
| 
						 | 
				
			
			@ -341,12 +344,14 @@ static int impl_get_n_ports(struct spa_node *node,
 | 
			
		|||
{
 | 
			
		||||
	struct stream *d = SPA_CONTAINER_OF(node, struct stream, impl_node);
 | 
			
		||||
	if (d->direction == SPA_DIRECTION_INPUT) {
 | 
			
		||||
		*n_input_ports = *max_input_ports = 1;
 | 
			
		||||
		*n_input_ports = 1;
 | 
			
		||||
		*max_input_ports = MAX_PORTS;
 | 
			
		||||
		*n_output_ports = *max_output_ports = 0;
 | 
			
		||||
	}
 | 
			
		||||
	else {
 | 
			
		||||
		*n_input_ports = *max_input_ports = 0;
 | 
			
		||||
		*n_output_ports = *max_output_ports = 1;
 | 
			
		||||
		*n_output_ports = 1;
 | 
			
		||||
		*max_output_ports = MAX_PORTS;
 | 
			
		||||
	}
 | 
			
		||||
	return 0;
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -484,7 +489,6 @@ static int port_set_format(struct spa_node *node,
 | 
			
		|||
	else
 | 
			
		||||
		impl->format = NULL;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
	if ((res = configure_converter(impl)) < 0) {
 | 
			
		||||
		pw_stream_finish_format(stream, res, NULL, 0);
 | 
			
		||||
		return res;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue