mirror of
				https://gitlab.freedesktop.org/pipewire/pipewire.git
				synced 2025-10-29 05:40:27 -04:00 
			
		
		
		
	pipewire: use the internal log topics
This commit is contained in:
		
							parent
							
								
									52bd80aaa4
								
							
						
					
					
						commit
						a6e66d9180
					
				
					 17 changed files with 370 additions and 332 deletions
				
			
		|  | @ -46,7 +46,8 @@ | |||
| 
 | ||||
| #include <pipewire/impl.h> | ||||
| 
 | ||||
| #define NAME "config" | ||||
| PW_LOG_TOPIC_EXTERN(log_conf); | ||||
| #define PW_LOG_TOPIC_DEFAULT log_conf | ||||
| 
 | ||||
| static int make_path(char *path, int size, const char *paths[]) | ||||
| { | ||||
|  | @ -306,7 +307,7 @@ int pw_conf_save_state(const char *prefix, const char *name, struct pw_propertie | |||
| 		goto error; | ||||
| 	} | ||||
| 	res = 0; | ||||
| 	pw_log_info(NAME" %p: saved state '%s%s'", conf, path, name); | ||||
| 	pw_log_info("%p: saved state '%s%s'", conf, path, name); | ||||
| error: | ||||
| 	close(sfd); | ||||
| 	return res; | ||||
|  | @ -319,11 +320,11 @@ static int conf_load(const char *path, struct pw_properties *conf) | |||
| 	int fd; | ||||
| 
 | ||||
| 	if ((fd = open(path,  O_CLOEXEC | O_RDONLY)) < 0)  { | ||||
| 		pw_log_warn(NAME" %p: error loading config '%s': %m", conf, path); | ||||
| 		pw_log_warn("%p: error loading config '%s': %m", conf, path); | ||||
| 		return -errno; | ||||
| 	} | ||||
| 
 | ||||
| 	pw_log_info(NAME" %p: loading config '%s'", conf, path); | ||||
| 	pw_log_info("%p: loading config '%s'", conf, path); | ||||
| 	if (fstat(fd, &sbuf) < 0) | ||||
| 		goto error_close; | ||||
| 	if ((data = mmap(NULL, sbuf.st_size, PROT_READ, MAP_PRIVATE, fd, 0)) == MAP_FAILED) | ||||
|  | @ -346,12 +347,12 @@ int pw_conf_load_conf(const char *prefix, const char *name, struct pw_properties | |||
| 	char path[PATH_MAX]; | ||||
| 
 | ||||
| 	if (name == NULL) { | ||||
| 		pw_log_debug(NAME" %p: config name must not be NULL", conf); | ||||
| 		pw_log_debug("%p: config name must not be NULL", conf); | ||||
| 		return -EINVAL; | ||||
| 	} | ||||
| 
 | ||||
| 	if (get_config_path(path, sizeof(path), prefix, name) == 0) { | ||||
| 		pw_log_debug(NAME" %p: can't load config '%s': %m", conf, path); | ||||
| 		pw_log_debug("%p: can't load config '%s': %m", conf, path); | ||||
| 		return -ENOENT; | ||||
| 	} | ||||
| 
 | ||||
|  | @ -364,12 +365,12 @@ int pw_conf_load_state(const char *prefix, const char *name, struct pw_propertie | |||
| 	char path[PATH_MAX]; | ||||
| 
 | ||||
| 	if (name == NULL) { | ||||
| 		pw_log_debug(NAME" %p: config name must not be NULL", conf); | ||||
| 		pw_log_debug("%p: config name must not be NULL", conf); | ||||
| 		return -EINVAL; | ||||
| 	} | ||||
| 
 | ||||
| 	if (get_state_path(path, sizeof(path), prefix, name) == 0) { | ||||
| 		pw_log_debug(NAME" %p: can't load config '%s': %m", conf, path); | ||||
| 		pw_log_debug("%p: can't load config '%s': %m", conf, path); | ||||
| 		return -ENOENT; | ||||
| 	} | ||||
| 
 | ||||
|  | @ -405,18 +406,18 @@ static int load_module(struct pw_context *context, const char *key, const char * | |||
| { | ||||
| 	if (pw_context_load_module(context, key, args, NULL) == NULL) { | ||||
| 		if (errno == ENOENT && flags && strstr(flags, "ifexists") != NULL) { | ||||
| 			pw_log_info(NAME" %p: skipping unavailable module %s", | ||||
| 			pw_log_info("%p: skipping unavailable module %s", | ||||
| 					context, key); | ||||
| 		} else if (flags == NULL || strstr(flags, "nofail") == NULL) { | ||||
| 			pw_log_error(NAME" %p: could not load mandatory module \"%s\": %m", | ||||
| 			pw_log_error("%p: could not load mandatory module \"%s\": %m", | ||||
| 					context, key); | ||||
| 			return -errno; | ||||
| 		} else { | ||||
| 			pw_log_info(NAME" %p: could not load optional module \"%s\": %m", | ||||
| 			pw_log_info("%p: could not load optional module \"%s\": %m", | ||||
| 					context, key); | ||||
| 		} | ||||
| 	} else { | ||||
| 		pw_log_info(NAME" %p: loaded module %s", context, key); | ||||
| 		pw_log_info("%p: loaded module %s", context, key); | ||||
| 	} | ||||
| 	return 0; | ||||
| } | ||||
|  |  | |||
|  | @ -49,7 +49,8 @@ | |||
| 
 | ||||
| #include <pipewire/extensions/protocol-native.h> | ||||
| 
 | ||||
| #define NAME "context" | ||||
| PW_LOG_TOPIC_EXTERN(log_context); | ||||
| #define PW_LOG_TOPIC_DEFAULT log_context | ||||
| 
 | ||||
| #define DEFAULT_CLOCK_RATE			48000u | ||||
| #define DEFAULT_CLOCK_QUANTUM			1024u | ||||
|  | @ -220,7 +221,7 @@ static int try_load_conf(struct pw_context *this, const char *conf_prefix, | |||
| 		return 0; | ||||
| 	if ((res = pw_conf_load_conf(conf_prefix, conf_name, conf)) < 0) { | ||||
| 		bool skip_prefix = conf_prefix == NULL || conf_name[0] == '/'; | ||||
| 		pw_log_warn(NAME" %p: can't load config %s%s%s: %s", | ||||
| 		pw_log_warn("%p: can't load config %s%s%s: %s", | ||||
| 				this, | ||||
| 				skip_prefix ? "" : conf_prefix, | ||||
| 				skip_prefix ? "" : "/", | ||||
|  | @ -238,14 +239,14 @@ static int context_set_freewheel(struct pw_context *context, bool freewheel) | |||
| 		return -EIO; | ||||
| 
 | ||||
| 	if (freewheel) { | ||||
| 		pw_log_info(NAME" %p: enter freewheel", context); | ||||
| 		pw_log_info("%p: enter freewheel", context); | ||||
| 		res = pw_thread_utils_drop_rt(thr); | ||||
| 	} else { | ||||
| 		pw_log_info(NAME" %p: exit freewheel", context); | ||||
| 		pw_log_info("%p: exit freewheel", context); | ||||
| 		res = pw_thread_utils_acquire_rt(thr, 88); | ||||
| 	} | ||||
| 	if (res < 0) | ||||
| 		pw_log_info(NAME" %p: freewheel error:%s", context, spa_strerror(res)); | ||||
| 		pw_log_info("%p: freewheel error:%s", context, spa_strerror(res)); | ||||
| 
 | ||||
| 	context->freewheeling = freewheel; | ||||
| 
 | ||||
|  | @ -314,7 +315,7 @@ struct pw_context *pw_context_new(struct pw_loop *main_loop, | |||
| 
 | ||||
| 	this = &impl->this; | ||||
| 
 | ||||
| 	pw_log_debug(NAME" %p: new", this); | ||||
| 	pw_log_debug("%p: new", this); | ||||
| 
 | ||||
| 	if (user_data_size > 0) | ||||
| 		this->user_data = SPA_PTROFF(impl, sizeof(struct impl), void); | ||||
|  | @ -369,7 +370,7 @@ struct pw_context *pw_context_new(struct pw_loop *main_loop, | |||
| 		if (try_load_conf(this, conf_prefix, conf_name, conf) < 0) { | ||||
| 			conf_name = "client.conf"; | ||||
| 			if ((res = try_load_conf(this, conf_prefix, conf_name, conf)) < 0) { | ||||
| 				pw_log_error(NAME" %p: can't load config %s: %s", | ||||
| 				pw_log_error("%p: can't load config %s: %s", | ||||
| 					this, conf_name, spa_strerror(res)); | ||||
| 				goto error_free; | ||||
| 			} | ||||
|  | @ -381,7 +382,7 @@ struct pw_context *pw_context_new(struct pw_loop *main_loop, | |||
| 
 | ||||
| 	if ((str = pw_properties_get(conf, "context.properties")) != NULL) { | ||||
| 		pw_properties_update_string(properties, str, strlen(str)); | ||||
| 		pw_log_info(NAME" %p: parsed context.properties section", this); | ||||
| 		pw_log_info("%p: parsed context.properties section", this); | ||||
| 	} | ||||
| 
 | ||||
| 	if ((str = getenv("PIPEWIRE_CORE"))) { | ||||
|  | @ -405,9 +406,9 @@ struct pw_context *pw_context_new(struct pw_loop *main_loop, | |||
| 	if ((str = pw_properties_get(properties, "mem.mlock-all")) != NULL && | ||||
| 	    pw_properties_parse_bool(str)) { | ||||
| 		if (mlockall(MCL_CURRENT | MCL_FUTURE) < 0) | ||||
| 			pw_log_warn(NAME" %p: could not mlockall; %m", impl); | ||||
| 			pw_log_warn("%p: could not mlockall; %m", impl); | ||||
| 		else | ||||
| 			pw_log_info(NAME" %p: mlockall succeeded", impl); | ||||
| 			pw_log_info("%p: mlockall succeeded", impl); | ||||
| 	} | ||||
| 
 | ||||
| 	fill_defaults(this); | ||||
|  | @ -456,7 +457,7 @@ struct pw_context *pw_context_new(struct pw_loop *main_loop, | |||
| 		if (impl->dbus_handle == NULL || | ||||
| 		    (res = spa_handle_get_interface(impl->dbus_handle, | ||||
| 							SPA_TYPE_INTERFACE_DBus, &dbus_iface)) < 0) { | ||||
| 				pw_log_warn(NAME" %p: can't load dbus interface: %s", this, spa_strerror(res)); | ||||
| 				pw_log_warn("%p: can't load dbus interface: %s", this, spa_strerror(res)); | ||||
| 		} else { | ||||
| 			this->support[n_support++] = SPA_SUPPORT_INIT(SPA_TYPE_INTERFACE_DBus, dbus_iface); | ||||
| 		} | ||||
|  | @ -475,19 +476,19 @@ struct pw_context *pw_context_new(struct pw_loop *main_loop, | |||
| 
 | ||||
| 	if ((res = pw_context_parse_conf_section(this, conf, "context.spa-libs")) < 0) | ||||
| 		goto error_free; | ||||
| 	pw_log_info(NAME" %p: parsed %d context.spa-libs items", this, res); | ||||
| 	pw_log_info("%p: parsed %d context.spa-libs items", this, res); | ||||
| 	if ((res = pw_context_parse_conf_section(this, conf, "context.modules")) < 0) | ||||
| 		goto error_free; | ||||
| 	if (res > 0) | ||||
| 		pw_log_info(NAME" %p: parsed %d context.modules items", this, res); | ||||
| 		pw_log_info("%p: parsed %d context.modules items", this, res); | ||||
| 	else | ||||
| 		pw_log_warn(NAME "%p: no modules loaded from context.modules", this); | ||||
| 		pw_log_warn("%p: no modules loaded from context.modules", this); | ||||
| 	if ((res = pw_context_parse_conf_section(this, conf, "context.objects")) < 0) | ||||
| 		goto error_free; | ||||
| 	pw_log_info(NAME" %p: parsed %d context.objects items", this, res); | ||||
| 	pw_log_info("%p: parsed %d context.objects items", this, res); | ||||
| 	if ((res = pw_context_parse_conf_section(this, conf, "context.exec")) < 0) | ||||
| 		goto error_free; | ||||
| 	pw_log_info(NAME" %p: parsed %d context.exec items", this, res); | ||||
| 	pw_log_info("%p: parsed %d context.exec items", this, res); | ||||
| 
 | ||||
| 	if ((res = pw_data_loop_start(this->data_loop_impl)) < 0) | ||||
| 		goto error_free; | ||||
|  | @ -496,7 +497,7 @@ struct pw_context *pw_context_new(struct pw_loop *main_loop, | |||
| 
 | ||||
| 	pw_settings_init(this); | ||||
| 
 | ||||
| 	pw_log_debug(NAME" %p: created", this); | ||||
| 	pw_log_debug("%p: created", this); | ||||
| 
 | ||||
| 	return this; | ||||
| 
 | ||||
|  | @ -526,7 +527,7 @@ void pw_context_destroy(struct pw_context *context) | |||
| 	struct pw_impl_metadata *metadata; | ||||
| 	struct pw_impl_core *core_impl; | ||||
| 
 | ||||
| 	pw_log_debug(NAME" %p: destroy", context); | ||||
| 	pw_log_debug("%p: destroy", context); | ||||
| 	pw_context_emit_destroy(context); | ||||
| 
 | ||||
| 	spa_list_consume(core, &context->core_list, link) | ||||
|  | @ -559,7 +560,7 @@ void pw_context_destroy(struct pw_context *context) | |||
| 	spa_list_consume(core_impl, &context->core_impl_list, link) | ||||
| 		pw_impl_core_destroy(core_impl); | ||||
| 
 | ||||
| 	pw_log_debug(NAME" %p: free", context); | ||||
| 	pw_log_debug("%p: free", context); | ||||
| 	pw_context_emit_free(context); | ||||
| 
 | ||||
| 	if (context->pool) | ||||
|  | @ -653,7 +654,7 @@ int pw_context_update_properties(struct pw_context *context, const struct spa_di | |||
| 	int changed; | ||||
| 
 | ||||
| 	changed = pw_properties_update(context->properties, dict); | ||||
| 	pw_log_debug(NAME" %p: updated %d properties", context, changed); | ||||
| 	pw_log_debug("%p: updated %d properties", context, changed); | ||||
| 
 | ||||
| 	return changed; | ||||
| } | ||||
|  | @ -726,7 +727,7 @@ struct pw_impl_port *pw_context_find_port(struct pw_context *context, | |||
| 
 | ||||
| 	have_id = id != PW_ID_ANY; | ||||
| 
 | ||||
| 	pw_log_debug(NAME" %p: id:%u", context, id); | ||||
| 	pw_log_debug("%p: id:%u", context, id); | ||||
| 
 | ||||
| 	spa_list_for_each(n, &context->node_list, link) { | ||||
| 		if (n->global == NULL) | ||||
|  | @ -738,11 +739,11 @@ struct pw_impl_port *pw_context_find_port(struct pw_context *context, | |||
| 		if (!global_can_read(context, n->global)) | ||||
| 			continue; | ||||
| 
 | ||||
| 		pw_log_debug(NAME" %p: node id:%d", context, n->global->id); | ||||
| 		pw_log_debug("%p: node id:%d", context, n->global->id); | ||||
| 
 | ||||
| 		if (have_id) { | ||||
| 			if (n->global->id == id) { | ||||
| 				pw_log_debug(NAME" %p: id:%u matches node %p", context, id, n); | ||||
| 				pw_log_debug("%p: id:%u matches node %p", context, id, n); | ||||
| 
 | ||||
| 				best = | ||||
| 				    pw_impl_node_find_port(n, | ||||
|  | @ -868,7 +869,7 @@ int pw_context_find_format(struct pw_context *context, | |||
| 	out_state = output->state; | ||||
| 	in_state = input->state; | ||||
| 
 | ||||
| 	pw_log_debug(NAME" %p: finding best format %d %d", context, out_state, in_state); | ||||
| 	pw_log_debug("%p: finding best format %d %d", context, out_state, in_state); | ||||
| 
 | ||||
| 	/* when a port is configured but the node is idle, we can reconfigure with a different format */ | ||||
| 	if (out_state > PW_IMPL_PORT_STATE_CONFIGURE && output->node->info.state == PW_NODE_STATE_IDLE) | ||||
|  | @ -876,7 +877,7 @@ int pw_context_find_format(struct pw_context *context, | |||
| 	if (in_state > PW_IMPL_PORT_STATE_CONFIGURE && input->node->info.state == PW_NODE_STATE_IDLE) | ||||
| 		in_state = PW_IMPL_PORT_STATE_CONFIGURE; | ||||
| 
 | ||||
| 	pw_log_debug(NAME" %p: states %d %d", context, out_state, in_state); | ||||
| 	pw_log_debug("%p: states %d %d", context, out_state, in_state); | ||||
| 
 | ||||
| 	if (in_state == PW_IMPL_PORT_STATE_CONFIGURE && out_state > PW_IMPL_PORT_STATE_CONFIGURE) { | ||||
| 		/* only input needs format */ | ||||
|  | @ -891,7 +892,7 @@ int pw_context_find_format(struct pw_context *context, | |||
| 				*error = spa_aprintf("no output formats"); | ||||
| 			goto error; | ||||
| 		} | ||||
| 		pw_log_debug(NAME" %p: Got output format:", context); | ||||
| 		pw_log_debug("%p: Got output format:", context); | ||||
| 		pw_log_format(SPA_LOG_LEVEL_DEBUG, filter); | ||||
| 
 | ||||
| 		if ((res = spa_node_port_enum_params_sync(input->node->node, | ||||
|  | @ -899,7 +900,7 @@ int pw_context_find_format(struct pw_context *context, | |||
| 						     SPA_PARAM_EnumFormat, &iidx, | ||||
| 						     filter, format, builder)) <= 0) { | ||||
| 			if (res == -ENOENT || res == 0) { | ||||
| 				pw_log_debug(NAME" %p: no input format filter, using output format: %s", | ||||
| 				pw_log_debug("%p: no input format filter, using output format: %s", | ||||
| 						context, spa_strerror(res)); | ||||
| 				*format = filter; | ||||
| 			} else { | ||||
|  | @ -920,7 +921,7 @@ int pw_context_find_format(struct pw_context *context, | |||
| 				*error = spa_aprintf("no input format"); | ||||
| 			goto error; | ||||
| 		} | ||||
| 		pw_log_debug(NAME" %p: Got input format:", context); | ||||
| 		pw_log_debug("%p: Got input format:", context); | ||||
| 		pw_log_format(SPA_LOG_LEVEL_DEBUG, filter); | ||||
| 
 | ||||
| 		if ((res = spa_node_port_enum_params_sync(output->node->node, | ||||
|  | @ -928,7 +929,7 @@ int pw_context_find_format(struct pw_context *context, | |||
| 						     SPA_PARAM_EnumFormat, &oidx, | ||||
| 						     filter, format, builder)) <= 0) { | ||||
| 			if (res == -ENOENT || res == 0) { | ||||
| 				pw_log_debug(NAME" %p: no output format filter, using input format: %s", | ||||
| 				pw_log_debug("%p: no output format filter, using input format: %s", | ||||
| 						context, spa_strerror(res)); | ||||
| 				*format = filter; | ||||
| 			} else { | ||||
|  | @ -939,14 +940,14 @@ int pw_context_find_format(struct pw_context *context, | |||
| 	} else if (in_state == PW_IMPL_PORT_STATE_CONFIGURE && out_state == PW_IMPL_PORT_STATE_CONFIGURE) { | ||||
| 	      again: | ||||
| 		/* both ports need a format */ | ||||
| 		pw_log_debug(NAME" %p: do enum input %d", context, iidx); | ||||
| 		pw_log_debug("%p: do enum input %d", context, iidx); | ||||
| 		spa_pod_builder_init(&fb, fbuf, sizeof(fbuf)); | ||||
| 		if ((res = spa_node_port_enum_params_sync(input->node->node, | ||||
| 						     input->direction, input->port_id, | ||||
| 						     SPA_PARAM_EnumFormat, &iidx, | ||||
| 						     NULL, &filter, &fb)) != 1) { | ||||
| 			if (res == -ENOENT) { | ||||
| 				pw_log_debug(NAME" %p: no input filter", context); | ||||
| 				pw_log_debug("%p: no input filter", context); | ||||
| 				filter = NULL; | ||||
| 			} else { | ||||
| 				if (res < 0) | ||||
|  | @ -956,7 +957,7 @@ int pw_context_find_format(struct pw_context *context, | |||
| 				goto error; | ||||
| 			} | ||||
| 		} | ||||
| 		pw_log_debug(NAME" %p: enum output %d with filter: %p", context, oidx, filter); | ||||
| 		pw_log_debug("%p: enum output %d with filter: %p", context, oidx, filter); | ||||
| 		pw_log_format(SPA_LOG_LEVEL_DEBUG, filter); | ||||
| 
 | ||||
| 		if ((res = spa_node_port_enum_params_sync(output->node->node, | ||||
|  | @ -971,7 +972,7 @@ int pw_context_find_format(struct pw_context *context, | |||
| 			goto error; | ||||
| 		} | ||||
| 
 | ||||
| 		pw_log_debug(NAME" %p: Got filtered:", context); | ||||
| 		pw_log_debug("%p: Got filtered:", context); | ||||
| 		pw_log_format(SPA_LOG_LEVEL_DEBUG, *format); | ||||
| 	} else { | ||||
| 		res = -EBADF; | ||||
|  | @ -1114,11 +1115,11 @@ static void suspend_driver(struct pw_context *context, struct pw_impl_node *n) | |||
| 	spa_list_for_each(s, &n->follower_list, follower_link) { | ||||
| 		if (s == n) | ||||
| 			continue; | ||||
| 		pw_log_debug(NAME" %p: follower %p: '%s' suspend", | ||||
| 		pw_log_debug("%p: follower %p: '%s' suspend", | ||||
| 				context, s, s->name); | ||||
| 		pw_impl_node_set_state(s, PW_NODE_STATE_SUSPENDED); | ||||
| 	} | ||||
| 	pw_log_debug(NAME" %p: driver %p: '%s' suspend", | ||||
| 	pw_log_debug("%p: driver %p: '%s' suspend", | ||||
| 			context, n, n->name); | ||||
| 	pw_impl_node_set_state(n, PW_NODE_STATE_SUSPENDED); | ||||
| } | ||||
|  | @ -1150,7 +1151,7 @@ int pw_context_recalc_graph(struct pw_context *context, const char *reason) | |||
| 	uint32_t *rates, n_rates, def_rate; | ||||
| 	bool freewheel = false, force_rate; | ||||
| 
 | ||||
| 	pw_log_info(NAME" %p: busy:%d reason:%s", context, impl->recalc, reason); | ||||
| 	pw_log_info("%p: busy:%d reason:%s", context, impl->recalc, reason); | ||||
| 
 | ||||
| 	if (impl->recalc) { | ||||
| 		impl->recalc_pending = true; | ||||
|  | @ -1189,7 +1190,7 @@ again: | |||
| 			continue; | ||||
| 
 | ||||
| 		spa_list_for_each(s, &n->follower_list, follower_link) { | ||||
| 			pw_log_debug(NAME" %p: driver %p: follower %p %s: active:%d", | ||||
| 			pw_log_debug("%p: driver %p: follower %p %s: active:%d", | ||||
| 					context, n, s, s->name, s->active); | ||||
| 			if (s != n && s->active) { | ||||
| 				/* if the driving node has active followers, it
 | ||||
|  | @ -1220,7 +1221,7 @@ again: | |||
| 		if (!n->visited) { | ||||
| 			struct pw_impl_node *t; | ||||
| 
 | ||||
| 			pw_log_debug(NAME" %p: unassigned node %p: '%s' active:%d want_driver:%d target:%p", | ||||
| 			pw_log_debug("%p: unassigned node %p: '%s' active:%d want_driver:%d target:%p", | ||||
| 					context, n, n->name, n->active, n->want_driver, target); | ||||
| 
 | ||||
| 			t = n->want_driver ? target : NULL; | ||||
|  | @ -1338,13 +1339,13 @@ again: | |||
| 			n->rt.position->clock.duration = quantum; | ||||
| 		} | ||||
| 
 | ||||
| 		pw_log_debug(NAME" %p: driving %p running:%d passive:%d quantum:%u '%s'", | ||||
| 		pw_log_debug("%p: driving %p running:%d passive:%d quantum:%u '%s'", | ||||
| 				context, n, running, n->passive, quantum, n->name); | ||||
| 
 | ||||
| 		spa_list_for_each(s, &n->follower_list, follower_link) { | ||||
| 			if (s == n) | ||||
| 				continue; | ||||
| 			pw_log_debug(NAME" %p: follower %p: active:%d '%s'", | ||||
| 			pw_log_debug("%p: follower %p: active:%d '%s'", | ||||
| 					context, s, s->active, s->name); | ||||
| 			ensure_state(s, running); | ||||
| 		} | ||||
|  | @ -1373,13 +1374,13 @@ int pw_context_add_spa_lib(struct pw_context *context, | |||
| 	if ((err = regcomp(&entry->regex, factory_regexp, REG_EXTENDED | REG_NOSUB)) != 0) { | ||||
| 		char errbuf[1024]; | ||||
| 		regerror(err, &entry->regex, errbuf, sizeof(errbuf)); | ||||
| 		pw_log_error(NAME" %p: can compile regex: %s", context, errbuf); | ||||
| 		pw_log_error("%p: can compile regex: %s", context, errbuf); | ||||
| 		pw_array_remove(&context->factory_lib, entry); | ||||
| 		return -EINVAL; | ||||
| 	} | ||||
| 
 | ||||
| 	entry->lib = strdup(lib); | ||||
| 	pw_log_debug(NAME" %p: map factory regex '%s' to '%s", context, | ||||
| 	pw_log_debug("%p: map factory regex '%s' to '%s", context, | ||||
| 			factory_regexp, lib); | ||||
| 	return 0; | ||||
| } | ||||
|  | @ -1406,14 +1407,14 @@ struct spa_handle *pw_context_load_spa_handle(struct pw_context *context, | |||
| 	uint32_t n_support; | ||||
| 	struct spa_handle *handle; | ||||
| 
 | ||||
| 	pw_log_debug(NAME" %p: load factory %s", context, factory_name); | ||||
| 	pw_log_debug("%p: load factory %s", context, factory_name); | ||||
| 
 | ||||
| 	lib = pw_context_find_spa_lib(context, factory_name); | ||||
| 	if (lib == NULL && info != NULL) | ||||
| 		lib = spa_dict_lookup(info, SPA_KEY_LIBRARY_NAME); | ||||
| 	if (lib == NULL) { | ||||
| 		errno = ENOENT; | ||||
| 		pw_log_warn(NAME" %p: no library for %s: %m", | ||||
| 		pw_log_warn("%p: no library for %s: %m", | ||||
| 				context, factory_name); | ||||
| 		return NULL; | ||||
| 	} | ||||
|  |  | |||
|  | @ -37,12 +37,13 @@ | |||
| 
 | ||||
| #include "pipewire/extensions/protocol-native.h" | ||||
| 
 | ||||
| #define NAME "core" | ||||
| PW_LOG_TOPIC_EXTERN(log_core); | ||||
| #define PW_LOG_TOPIC_DEFAULT log_core | ||||
| 
 | ||||
| static void core_event_ping(void *data, uint32_t id, int seq) | ||||
| { | ||||
| 	struct pw_core *this = data; | ||||
| 	pw_log_debug(NAME" %p: object %u ping %u", this, id, seq); | ||||
| 	pw_log_debug("%p: object %u ping %u", this, id, seq); | ||||
| 	pw_core_pong(this->core, id, seq); | ||||
| } | ||||
| 
 | ||||
|  | @ -51,7 +52,7 @@ static void core_event_done(void *data, uint32_t id, int seq) | |||
| 	struct pw_core *this = data; | ||||
| 	struct pw_proxy *proxy; | ||||
| 
 | ||||
| 	pw_log_trace(NAME" %p: object %u done %d", this, id, seq); | ||||
| 	pw_log_trace("%p: object %u done %d", this, id, seq); | ||||
| 
 | ||||
| 	proxy = pw_map_lookup(&this->objects, id); | ||||
| 	if (proxy) | ||||
|  | @ -65,7 +66,7 @@ static void core_event_error(void *data, uint32_t id, int seq, int res, const ch | |||
| 
 | ||||
| 	proxy = pw_map_lookup(&this->objects, id); | ||||
| 
 | ||||
| 	pw_log_debug(NAME" %p: proxy %p id:%u: bound:%d seq:%d res:%d (%s) msg:\"%s\"", | ||||
| 	pw_log_debug("%p: proxy %p id:%u: bound:%d seq:%d res:%d (%s) msg:\"%s\"", | ||||
| 			this, proxy, id, proxy ? proxy->bound_id : SPA_ID_INVALID, | ||||
| 			seq, res, spa_strerror(res), message); | ||||
| 	if (proxy) | ||||
|  | @ -77,7 +78,7 @@ static void core_event_remove_id(void *data, uint32_t id) | |||
| 	struct pw_core *this = data; | ||||
| 	struct pw_proxy *proxy; | ||||
| 
 | ||||
| 	pw_log_debug(NAME" %p: object remove %u", this, id); | ||||
| 	pw_log_debug("%p: object remove %u", this, id); | ||||
| 	if ((proxy = pw_map_lookup(&this->objects, id)) != NULL) | ||||
| 		pw_proxy_remove(proxy); | ||||
| } | ||||
|  | @ -87,7 +88,7 @@ static void core_event_bound_id(void *data, uint32_t id, uint32_t global_id) | |||
| 	struct pw_core *this = data; | ||||
| 	struct pw_proxy *proxy; | ||||
| 
 | ||||
| 	pw_log_debug(NAME" %p: proxy id %u bound %u", this, id, global_id); | ||||
| 	pw_log_debug("%p: proxy id %u bound %u", this, id, global_id); | ||||
| 	if ((proxy = pw_map_lookup(&this->objects, id)) != NULL) { | ||||
| 		pw_proxy_set_bound_id(proxy, global_id); | ||||
| 	} | ||||
|  | @ -98,11 +99,11 @@ static void core_event_add_mem(void *data, uint32_t id, uint32_t type, int fd, u | |||
| 	struct pw_core *this = data; | ||||
| 	struct pw_memblock *m; | ||||
| 
 | ||||
| 	pw_log_debug(NAME" %p: add mem %u type:%u fd:%d flags:%u", this, id, type, fd, flags); | ||||
| 	pw_log_debug("%p: add mem %u type:%u fd:%d flags:%u", this, id, type, fd, flags); | ||||
| 
 | ||||
| 	m = pw_mempool_import(this->pool, flags, type, fd); | ||||
| 	if (m->id != id) { | ||||
| 		pw_log_error(NAME" %p: invalid mem id %u, fd:%d expected %u", | ||||
| 		pw_log_error("%p: invalid mem id %u, fd:%d expected %u", | ||||
| 				this, id, fd, m->id); | ||||
| 		pw_proxy_errorf(&this->proxy, -EINVAL, "invalid mem id %u, expected %u", id, m->id); | ||||
| 		pw_memblock_unref(m); | ||||
|  | @ -112,7 +113,7 @@ static void core_event_add_mem(void *data, uint32_t id, uint32_t type, int fd, u | |||
| static void core_event_remove_mem(void *data, uint32_t id) | ||||
| { | ||||
| 	struct pw_core *this = data; | ||||
| 	pw_log_debug(NAME" %p: remove mem %u", this, id); | ||||
| 	pw_log_debug("%p: remove mem %u", this, id); | ||||
| 	pw_mempool_remove_id(this->pool, id); | ||||
| } | ||||
| 
 | ||||
|  | @ -146,7 +147,7 @@ int pw_core_update_properties(struct pw_core *core, const struct spa_dict *dict) | |||
| 
 | ||||
| 	changed = pw_properties_update(core->properties, dict); | ||||
| 
 | ||||
| 	pw_log_debug(NAME" %p: updated %d properties", core, changed); | ||||
| 	pw_log_debug("%p: updated %d properties", core, changed); | ||||
| 
 | ||||
| 	if (!changed) | ||||
| 		return 0; | ||||
|  | @ -186,7 +187,7 @@ static int destroy_proxy(void *object, void *data) | |||
| 		return 0; | ||||
| 
 | ||||
| 	if (object != core) { | ||||
| 		pw_log_warn(NAME" %p: leaked proxy %p id:%d", core, p, p->id); | ||||
| 		pw_log_warn("%p: leaked proxy %p id:%d", core, p, p->id); | ||||
| 		p->core = NULL; | ||||
| 	} | ||||
| 	return 0; | ||||
|  | @ -203,7 +204,7 @@ static void proxy_core_removed(void *data) | |||
| 
 | ||||
| 	core->removed = true; | ||||
| 
 | ||||
| 	pw_log_debug(NAME" %p: core proxy removed", core); | ||||
| 	pw_log_debug("%p: core proxy removed", core); | ||||
| 	spa_list_remove(&core->link); | ||||
| 
 | ||||
| 	spa_list_for_each_safe(stream, s2, &core->stream_list, link) | ||||
|  | @ -225,7 +226,7 @@ static void proxy_core_destroy(void *data) | |||
| 
 | ||||
| 	core->destroyed = true; | ||||
| 
 | ||||
| 	pw_log_debug(NAME" %p: core proxy destroy", core); | ||||
| 	pw_log_debug("%p: core proxy destroy", core); | ||||
| 
 | ||||
| 	spa_list_consume(stream, &core->stream_list, link) | ||||
| 		pw_stream_destroy(stream); | ||||
|  | @ -245,7 +246,7 @@ static void proxy_core_destroy(void *data) | |||
| 
 | ||||
| 	pw_map_clear(&core->objects); | ||||
| 
 | ||||
| 	pw_log_debug(NAME" %p: free", core); | ||||
| 	pw_log_debug("%p: free", core); | ||||
| 	pw_properties_free(core->properties); | ||||
| 
 | ||||
| 	spa_hook_remove(&core->core_listener); | ||||
|  | @ -290,14 +291,14 @@ struct pw_proxy *pw_core_export(struct pw_core *core, | |||
| 		res = -errno; | ||||
| 		goto error_proxy_failed; | ||||
| 	} | ||||
| 	pw_log_debug(NAME" %p: export:%s proxy:%p", core, type, proxy); | ||||
| 	pw_log_debug("%p: export:%s proxy:%p", core, type, proxy); | ||||
| 	return proxy; | ||||
| 
 | ||||
| error_export_type: | ||||
| 	pw_log_error(NAME" %p: can't export type %s: %s", core, type, spa_strerror(res)); | ||||
| 	pw_log_error("%p: can't export type %s: %s", core, type, spa_strerror(res)); | ||||
| 	goto exit; | ||||
| error_proxy_failed: | ||||
| 	pw_log_error(NAME" %p: failed to create proxy: %s", core, spa_strerror(res)); | ||||
| 	pw_log_error("%p: failed to create proxy: %s", core, spa_strerror(res)); | ||||
| 	goto exit; | ||||
| exit: | ||||
| 	errno = -res; | ||||
|  | @ -317,7 +318,7 @@ static struct pw_core *core_new(struct pw_context *context, | |||
| 		res = -errno; | ||||
| 		goto exit_cleanup; | ||||
| 	} | ||||
| 	pw_log_debug(NAME" %p: new", p); | ||||
| 	pw_log_debug("%p: new", p); | ||||
| 
 | ||||
| 	if (properties == NULL) | ||||
| 		properties = pw_properties_new(NULL, NULL); | ||||
|  | @ -375,17 +376,17 @@ static struct pw_core *core_new(struct pw_context *context, | |||
| 
 | ||||
| error_properties: | ||||
| 	res = -errno; | ||||
| 	pw_log_error(NAME" %p: can't create properties: %m", p); | ||||
| 	pw_log_error("%p: can't create properties: %m", p); | ||||
| 	goto exit_free; | ||||
| error_protocol: | ||||
| 	pw_log_error(NAME" %p: can't find protocol '%s': %s", p, protocol_name, spa_strerror(res)); | ||||
| 	pw_log_error("%p: can't find protocol '%s': %s", p, protocol_name, spa_strerror(res)); | ||||
| 	goto exit_free; | ||||
| error_connection: | ||||
| 	res = -errno; | ||||
| 	pw_log_error(NAME" %p: can't create new native protocol connection: %m", p); | ||||
| 	pw_log_error("%p: can't create new native protocol connection: %m", p); | ||||
| 	goto exit_free; | ||||
| error_proxy: | ||||
| 	pw_log_error(NAME" %p: can't initialize proxy: %s", p, spa_strerror(res)); | ||||
| 	pw_log_error("%p: can't initialize proxy: %s", p, spa_strerror(res)); | ||||
| 	goto exit_free; | ||||
| 
 | ||||
| exit_free: | ||||
|  | @ -408,7 +409,7 @@ pw_context_connect(struct pw_context *context, struct pw_properties *properties, | |||
| 	if (core == NULL) | ||||
| 		return NULL; | ||||
| 
 | ||||
| 	pw_log_debug(NAME" %p: connect", core); | ||||
| 	pw_log_debug("%p: connect", core); | ||||
| 
 | ||||
| 	if ((res = pw_protocol_client_connect(core->conn, | ||||
| 					&core->properties->dict, | ||||
|  | @ -435,7 +436,7 @@ pw_context_connect_fd(struct pw_context *context, int fd, struct pw_properties * | |||
| 	if (core == NULL) | ||||
| 		return NULL; | ||||
| 
 | ||||
| 	pw_log_debug(NAME" %p: connect fd:%d", core, fd); | ||||
| 	pw_log_debug("%p: connect fd:%d", core, fd); | ||||
| 
 | ||||
| 	if ((res = pw_protocol_client_connect_fd(core->conn, fd, true)) < 0) | ||||
| 		goto error_free; | ||||
|  | @ -467,14 +468,14 @@ SPA_EXPORT | |||
| int pw_core_steal_fd(struct pw_core *core) | ||||
| { | ||||
| 	int fd = pw_protocol_client_steal_fd(core->conn); | ||||
| 	pw_log_debug(NAME" %p: fd:%d", core, fd); | ||||
| 	pw_log_debug("%p: fd:%d", core, fd); | ||||
| 	return fd; | ||||
| } | ||||
| 
 | ||||
| SPA_EXPORT | ||||
| int pw_core_set_paused(struct pw_core *core, bool paused) | ||||
| { | ||||
| 	pw_log_debug(NAME" %p: state:%s", core, paused ? "pause" : "resume"); | ||||
| 	pw_log_debug("%p: state:%s", core, paused ? "pause" : "resume"); | ||||
| 	return pw_protocol_client_set_paused(core->conn, paused); | ||||
| } | ||||
| 
 | ||||
|  | @ -487,7 +488,7 @@ struct pw_mempool * pw_core_get_mempool(struct pw_core *core) | |||
| SPA_EXPORT | ||||
| int pw_core_disconnect(struct pw_core *core) | ||||
| { | ||||
| 	pw_log_debug(NAME" %p: disconnect", core); | ||||
| 	pw_log_debug("%p: disconnect", core); | ||||
| 	pw_proxy_remove(&core->proxy); | ||||
| 	pw_proxy_destroy(&core->proxy); | ||||
| 	return 0; | ||||
|  |  | |||
|  | @ -33,7 +33,8 @@ | |||
| #include <spa/debug/types.h> | ||||
| #include <spa/utils/string.h> | ||||
| 
 | ||||
| #define NAME "global" | ||||
| PW_LOG_TOPIC_EXTERN(log_global); | ||||
| #define PW_LOG_TOPIC_DEFAULT log_global | ||||
| 
 | ||||
| /** \cond */ | ||||
| struct impl { | ||||
|  | @ -96,14 +97,14 @@ pw_global_new(struct pw_context *context, | |||
| 	this->id = pw_map_insert_new(&context->globals, this); | ||||
| 	if (this->id == SPA_ID_INVALID) { | ||||
| 		res = -errno; | ||||
| 		pw_log_error(NAME" %p: can't allocate new id: %m", this); | ||||
| 		pw_log_error("%p: can't allocate new id: %m", this); | ||||
| 		goto error_free; | ||||
| 	} | ||||
| 
 | ||||
| 	spa_list_init(&this->resource_list); | ||||
| 	spa_hook_list_init(&this->listener_list); | ||||
| 
 | ||||
| 	pw_log_debug(NAME" %p: new %s %d", this, this->type, this->id); | ||||
| 	pw_log_debug("%p: new %s %d", this, this->type, this->id); | ||||
| 
 | ||||
| 	return this; | ||||
| 
 | ||||
|  | @ -145,7 +146,7 @@ int pw_global_register(struct pw_global *global) | |||
| 						    &global->properties->dict); | ||||
| 	} | ||||
| 
 | ||||
| 	pw_log_debug(NAME" %p: registered %u", global, global->id); | ||||
| 	pw_log_debug("%p: registered %u", global, global->id); | ||||
| 	pw_context_emit_global_added(context, global); | ||||
| 
 | ||||
| 	return 0; | ||||
|  | @ -169,7 +170,7 @@ static int global_unregister(struct pw_global *global) | |||
| 	spa_list_remove(&global->link); | ||||
| 	global->registered = false; | ||||
| 
 | ||||
| 	pw_log_debug(NAME" %p: unregistered %u", global, global->id); | ||||
| 	pw_log_debug("%p: unregistered %u", global, global->id); | ||||
| 	pw_context_emit_global_removed(context, global); | ||||
| 
 | ||||
| 	return 0; | ||||
|  | @ -230,7 +231,7 @@ SPA_EXPORT | |||
| int pw_global_add_resource(struct pw_global *global, struct pw_resource *resource) | ||||
| { | ||||
| 	resource->global = global; | ||||
| 	pw_log_debug(NAME" %p: resource %p id:%d global:%d", global, resource, | ||||
| 	pw_log_debug("%p: resource %p id:%d global:%d", global, resource, | ||||
| 			resource->id, global->id); | ||||
| 	spa_list_append(&global->resource_list, &resource->link); | ||||
| 	pw_resource_set_bound_id(resource, global->id); | ||||
|  | @ -302,7 +303,7 @@ error_bind: | |||
| 	goto error_exit; | ||||
| 
 | ||||
| error_exit: | ||||
| 	pw_log_error(NAME" %p: can't bind global %u/%u: %d (%s)", global, id, | ||||
| 	pw_log_error("%p: can't bind global %u/%u: %d (%s)", global, id, | ||||
| 			version, res, spa_strerror(res)); | ||||
| 	pw_map_insert_at(&client->objects, id, NULL); | ||||
| 	if (client->core_resource) | ||||
|  | @ -321,7 +322,7 @@ int pw_global_update_permissions(struct pw_global *global, struct pw_impl_client | |||
| 	do_hide = PW_PERM_IS_R(old_permissions) && !PW_PERM_IS_R(new_permissions); | ||||
| 	do_show = !PW_PERM_IS_R(old_permissions) && PW_PERM_IS_R(new_permissions); | ||||
| 
 | ||||
| 	pw_log_debug(NAME" %p: client %p permissions changed %d %08x -> %08x", | ||||
| 	pw_log_debug("%p: client %p permissions changed %d %08x -> %08x", | ||||
| 			global, client, global->id, old_permissions, new_permissions); | ||||
| 
 | ||||
| 	pw_global_emit_permissions_changed(global, client, old_permissions, new_permissions); | ||||
|  | @ -373,7 +374,7 @@ void pw_global_destroy(struct pw_global *global) | |||
| 
 | ||||
| 	global->destroyed = true; | ||||
| 
 | ||||
| 	pw_log_debug(NAME" %p: destroy %u", global, global->id); | ||||
| 	pw_log_debug("%p: destroy %u", global, global->id); | ||||
| 	pw_global_emit_destroy(global); | ||||
| 
 | ||||
| 	spa_list_consume(resource, &global->resource_list, link) | ||||
|  | @ -381,7 +382,7 @@ void pw_global_destroy(struct pw_global *global) | |||
| 
 | ||||
| 	global_unregister(global); | ||||
| 
 | ||||
| 	pw_log_debug(NAME" %p: free", global); | ||||
| 	pw_log_debug("%p: free", global); | ||||
| 	pw_global_emit_free(global); | ||||
| 
 | ||||
| 	pw_map_remove(&context->globals, global->id); | ||||
|  |  | |||
|  | @ -30,7 +30,8 @@ | |||
| #include "pipewire/impl.h" | ||||
| #include "pipewire/private.h" | ||||
| 
 | ||||
| #define NAME "client" | ||||
| PW_LOG_TOPIC_EXTERN(log_client); | ||||
| #define PW_LOG_TOPIC_DEFAULT log_client | ||||
| 
 | ||||
| /** \cond */ | ||||
| struct impl { | ||||
|  | @ -130,7 +131,7 @@ static int client_error(void *object, uint32_t id, int res, const char *error) | |||
| 	struct pw_impl_client *client = data->client; | ||||
| 	struct error_data d = { id, res, error }; | ||||
| 
 | ||||
| 	pw_log_debug(NAME" %p: error for global %d", client, id); | ||||
| 	pw_log_debug("%p: error for global %d", client, id); | ||||
| 	pw_map_for_each(&client->objects, error_resource, &d); | ||||
| 	return 0; | ||||
| } | ||||
|  | @ -162,7 +163,7 @@ static int update_properties(struct pw_impl_client *client, const struct spa_dic | |||
| 			if (spa_strstartswith(dict->items[i].key, "pipewire.") && | ||||
| 			    (old = pw_properties_get(client->properties, dict->items[i].key)) != NULL && | ||||
| 			    (dict->items[i].value == NULL || !spa_streq(old, dict->items[i].value))) { | ||||
| 				pw_log_warn(NAME" %p: refuse property update '%s' from '%s' to '%s'", | ||||
| 				pw_log_warn("%p: refuse property update '%s' from '%s' to '%s'", | ||||
| 						client, dict->items[i].key, old, | ||||
| 						dict->items[i].value); | ||||
| 				continue; | ||||
|  | @ -175,7 +176,7 @@ static int update_properties(struct pw_impl_client *client, const struct spa_dic | |||
| 	} | ||||
| 	client->info.props = &client->properties->dict; | ||||
| 
 | ||||
| 	pw_log_debug(NAME" %p: updated %d properties", client, changed); | ||||
| 	pw_log_debug("%p: updated %d properties", client, changed); | ||||
| 
 | ||||
| 	if (!changed) | ||||
| 		return 0; | ||||
|  | @ -312,7 +313,7 @@ global_bind(void *_data, struct pw_impl_client *client, uint32_t permissions, | |||
| 			&data->object_listener, | ||||
| 			&client_methods, data); | ||||
| 
 | ||||
| 	pw_log_debug(NAME" %p: bound to %d", this, resource->id); | ||||
| 	pw_log_debug("%p: bound to %d", this, resource->id); | ||||
| 	pw_global_add_resource(global, resource); | ||||
| 
 | ||||
| 	if (resource->id == 1) | ||||
|  | @ -325,7 +326,7 @@ global_bind(void *_data, struct pw_impl_client *client, uint32_t permissions, | |||
| 	return 0; | ||||
| 
 | ||||
| error_resource: | ||||
| 	pw_log_error(NAME" %p: can't create client resource: %m", this); | ||||
| 	pw_log_error("%p: can't create client resource: %m", this); | ||||
| 	return -errno; | ||||
| } | ||||
| 
 | ||||
|  | @ -334,7 +335,7 @@ static void pool_added(void *data, struct pw_memblock *block) | |||
| 	struct impl *impl = data; | ||||
| 	struct pw_impl_client *client = &impl->this; | ||||
| 
 | ||||
| 	pw_log_debug(NAME" %p: added block %d", client, block->id); | ||||
| 	pw_log_debug("%p: added block %d", client, block->id); | ||||
| 	if (client->core_resource) { | ||||
| 		pw_core_resource_add_mem(client->core_resource, | ||||
| 				block->id, block->type, block->fd, | ||||
|  | @ -346,7 +347,7 @@ static void pool_removed(void *data, struct pw_memblock *block) | |||
| { | ||||
| 	struct impl *impl = data; | ||||
| 	struct pw_impl_client *client = &impl->this; | ||||
| 	pw_log_debug(NAME" %p: removed block %d", client, block->id); | ||||
| 	pw_log_debug("%p: removed block %d", client, block->id); | ||||
| 	if (client->core_resource) | ||||
| 		pw_core_resource_remove_mem(client->core_resource, block->id); | ||||
| } | ||||
|  | @ -365,7 +366,7 @@ context_global_removed(void *data, struct pw_global *global) | |||
| 	struct pw_permission *p; | ||||
| 
 | ||||
| 	p = find_permission(client, global->id); | ||||
| 	pw_log_debug(NAME" %p: global %d removed, %p", client, global->id, p); | ||||
| 	pw_log_debug("%p: global %d removed, %p", client, global->id, p); | ||||
| 	if (p->id != PW_ID_ANY) | ||||
| 		p->permissions = PW_PERM_INVALID; | ||||
| } | ||||
|  | @ -400,7 +401,7 @@ struct pw_impl_client *pw_context_create_client(struct pw_impl_core *core, | |||
| 	} | ||||
| 
 | ||||
| 	this = &impl->this; | ||||
| 	pw_log_debug(NAME" %p: new", this); | ||||
| 	pw_log_debug("%p: new", this); | ||||
| 
 | ||||
| 	this->context = core->context; | ||||
| 	this->core = core; | ||||
|  | @ -488,7 +489,7 @@ int pw_impl_client_register(struct pw_impl_client *client, | |||
| 	if (client->registered) | ||||
| 		goto error_existed; | ||||
| 
 | ||||
| 	pw_log_debug(NAME" %p: register", client); | ||||
| 	pw_log_debug("%p: register", client); | ||||
| 
 | ||||
| 	client->global = pw_global_new(context, | ||||
| 				       PW_TYPE_INTERFACE_Client, | ||||
|  | @ -578,7 +579,7 @@ void pw_impl_client_destroy(struct pw_impl_client *client) | |||
| { | ||||
| 	struct impl *impl = SPA_CONTAINER_OF(client, struct impl, this); | ||||
| 
 | ||||
| 	pw_log_debug(NAME" %p: destroy", client); | ||||
| 	pw_log_debug("%p: destroy", client); | ||||
| 	pw_impl_client_emit_destroy(client); | ||||
| 
 | ||||
| 	spa_hook_remove(&impl->context_listener); | ||||
|  | @ -593,7 +594,7 @@ void pw_impl_client_destroy(struct pw_impl_client *client) | |||
| 		pw_global_destroy(client->global); | ||||
| 	} | ||||
| 
 | ||||
| 	pw_log_debug(NAME" %p: free", impl); | ||||
| 	pw_log_debug("%p: free", impl); | ||||
| 	pw_impl_client_emit_free(client); | ||||
| 
 | ||||
| 	spa_hook_list_clean(&client->listener_list); | ||||
|  | @ -666,7 +667,7 @@ int pw_impl_client_update_permissions(struct pw_impl_client *client, | |||
| 			if (context->current_client == client) | ||||
| 				new_perm &= old_perm; | ||||
| 
 | ||||
| 			pw_log_debug(NAME" %p: set default permissions %08x -> %08x", | ||||
| 			pw_log_debug("%p: set default permissions %08x -> %08x", | ||||
| 					client, old_perm, new_perm); | ||||
| 
 | ||||
| 			def->permissions = new_perm; | ||||
|  | @ -685,12 +686,12 @@ int pw_impl_client_update_permissions(struct pw_impl_client *client, | |||
| 
 | ||||
| 			global = pw_context_find_global(context, permissions[i].id); | ||||
| 			if (global == NULL || global->id != permissions[i].id) { | ||||
| 				pw_log_warn(NAME" %p: invalid global %d", client, permissions[i].id); | ||||
| 				pw_log_warn("%p: invalid global %d", client, permissions[i].id); | ||||
| 				continue; | ||||
| 			} | ||||
| 			p = ensure_permissions(client, permissions[i].id); | ||||
| 			if (p == NULL) { | ||||
| 				pw_log_warn(NAME" %p: can't ensure permission: %m", client); | ||||
| 				pw_log_warn("%p: can't ensure permission: %m", client); | ||||
| 				return -errno; | ||||
| 			} | ||||
| 			if ((def = find_permission(client, PW_ID_ANY)) == NULL) | ||||
|  | @ -701,7 +702,7 @@ int pw_impl_client_update_permissions(struct pw_impl_client *client, | |||
| 			if (context->current_client == client) | ||||
| 				new_perm &= old_perm; | ||||
| 
 | ||||
| 			pw_log_debug(NAME" %p: set global %d permissions %08x -> %08x", | ||||
| 			pw_log_debug("%p: set global %d permissions %08x -> %08x", | ||||
| 					client, global->id, old_perm, new_perm); | ||||
| 
 | ||||
| 			p->permissions = new_perm; | ||||
|  | @ -716,7 +717,7 @@ SPA_EXPORT | |||
| void pw_impl_client_set_busy(struct pw_impl_client *client, bool busy) | ||||
| { | ||||
| 	if (client->busy != busy) { | ||||
| 		pw_log_debug(NAME" %p: busy %d", client, busy); | ||||
| 		pw_log_debug("%p: busy %d", client, busy); | ||||
| 		client->busy = busy; | ||||
| 		pw_impl_client_emit_busy_changed(client, busy); | ||||
| 	} | ||||
|  |  | |||
|  | @ -69,7 +69,8 @@ ssize_t getrandom(void *buf, size_t buflen, unsigned int flags) { | |||
| 
 | ||||
| #include "pipewire/extensions/protocol-native.h" | ||||
| 
 | ||||
| #define NAME "impl-core" | ||||
| PW_LOG_TOPIC_EXTERN(log_core); | ||||
| #define PW_LOG_TOPIC_DEFAULT log_core | ||||
| 
 | ||||
| struct resource_data { | ||||
| 	struct pw_resource *resource; | ||||
|  | @ -202,7 +203,7 @@ static int core_hello(void *object, uint32_t version) | |||
| 	struct pw_impl_core *this = client->core; | ||||
| 	int res; | ||||
| 
 | ||||
| 	pw_log_debug(NAME" %p: hello %d from resource %p", context, version, resource); | ||||
| 	pw_log_debug("%p: hello %d from resource %p", context, version, resource); | ||||
| 	pw_map_for_each(&client->objects, destroy_resource, client); | ||||
| 
 | ||||
| 	pw_mempool_clear(client->pool); | ||||
|  | @ -221,7 +222,7 @@ static int core_hello(void *object, uint32_t version) | |||
| static int core_sync(void *object, uint32_t id, int seq) | ||||
| { | ||||
| 	struct pw_resource *resource = object; | ||||
| 	pw_log_trace(NAME" %p: sync %d for resource %d", resource->context, seq, id); | ||||
| 	pw_log_trace("%p: sync %d for resource %d", resource->context, seq, id); | ||||
| 	pw_core_resource_done(resource, id, seq); | ||||
| 	return 0; | ||||
| } | ||||
|  | @ -232,7 +233,7 @@ static int core_pong(void *object, uint32_t id, int seq) | |||
| 	struct pw_impl_client *client = resource->client; | ||||
| 	struct pw_resource *r; | ||||
| 
 | ||||
| 	pw_log_debug(NAME" %p: pong %d for resource %d", resource->context, seq, id); | ||||
| 	pw_log_debug("%p: pong %d for resource %d", resource->context, seq, id); | ||||
| 
 | ||||
| 	if ((r = pw_impl_client_find_resource(client, id)) == NULL) | ||||
| 		return -EINVAL; | ||||
|  | @ -247,7 +248,7 @@ static int core_error(void *object, uint32_t id, int seq, int res, const char *m | |||
| 	struct pw_impl_client *client = resource->client; | ||||
| 	struct pw_resource *r; | ||||
| 
 | ||||
| 	pw_log_error(NAME" %p: error %d for resource %d: %s", resource->context, res, id, message); | ||||
| 	pw_log_error("%p: error %d for resource %d: %s", resource->context, res, id, message); | ||||
| 
 | ||||
| 	if ((r = pw_impl_client_find_resource(client, id)) == NULL) | ||||
| 		return -EINVAL; | ||||
|  | @ -362,18 +363,18 @@ core_create_object(void *object, | |||
| 
 | ||||
| error_no_factory: | ||||
| 	res = -ENOENT; | ||||
| 	pw_log_debug(NAME" %p: can't find factory '%s'", context, factory_name); | ||||
| 	pw_log_debug("%p: can't find factory '%s'", context, factory_name); | ||||
| 	pw_resource_errorf_id(resource, new_id, res, "unknown factory name %s", factory_name); | ||||
| 	goto error_exit; | ||||
| error_version: | ||||
| error_type: | ||||
| 	res = -EPROTO; | ||||
| 	pw_log_debug(NAME" %p: invalid resource type/version", context); | ||||
| 	pw_log_debug("%p: invalid resource type/version", context); | ||||
| 	pw_resource_errorf_id(resource, new_id, res, "wrong resource type/version"); | ||||
| 	goto error_exit; | ||||
| error_properties: | ||||
| 	res = -errno; | ||||
| 	pw_log_debug(NAME" %p: can't create properties: %m", context); | ||||
| 	pw_log_debug("%p: can't create properties: %m", context); | ||||
| 	pw_resource_errorf_id(resource, new_id, res, "can't create properties: %s", spa_strerror(res)); | ||||
| 	goto error_exit; | ||||
| error_create_failed: | ||||
|  | @ -392,7 +393,7 @@ static int core_destroy(void *object, void *proxy) | |||
| 	struct pw_impl_client *client = resource->client; | ||||
| 	struct pw_impl_core *this = client->core; | ||||
| 	struct pw_resource *r = proxy; | ||||
| 	pw_log_debug(NAME" %p: destroy resource %p from client %p", this, r, client); | ||||
| 	pw_log_debug("%p: destroy resource %p from client %p", this, r, client); | ||||
| 	pw_resource_destroy(r); | ||||
| 	return 0; | ||||
| } | ||||
|  | @ -458,7 +459,7 @@ struct pw_impl_core *pw_context_create_core(struct pw_context *context, | |||
| 	if (user_data_size > 0) | ||||
| 		this->user_data = SPA_PTROFF(this, sizeof(*this), void); | ||||
| 
 | ||||
| 	pw_log_debug(NAME" %p: new %s", this, name); | ||||
| 	pw_log_debug("%p: new %s", this, name); | ||||
| 
 | ||||
| 	return this; | ||||
| 
 | ||||
|  | @ -478,7 +479,7 @@ struct pw_impl_core *pw_context_get_default_core(struct pw_context *context) | |||
| SPA_EXPORT | ||||
| void pw_impl_core_destroy(struct pw_impl_core *core) | ||||
| { | ||||
| 	pw_log_debug(NAME" %p: destroy", core); | ||||
| 	pw_log_debug("%p: destroy", core); | ||||
| 	pw_impl_core_emit_destroy(core); | ||||
| 
 | ||||
| 	if (core->registered) | ||||
|  | @ -490,7 +491,7 @@ void pw_impl_core_destroy(struct pw_impl_core *core) | |||
| 	} | ||||
| 
 | ||||
| 	pw_impl_core_emit_free(core); | ||||
| 	pw_log_debug(NAME" %p: free", core); | ||||
| 	pw_log_debug("%p: free", core); | ||||
| 
 | ||||
| 	spa_hook_list_clean(&core->listener_list); | ||||
| 
 | ||||
|  | @ -554,12 +555,12 @@ global_bind(void *_data, | |||
| 		this->info.change_mask = 0; | ||||
| 	} | ||||
| 
 | ||||
| 	pw_log_debug(NAME" %p: bound to %d", this, resource->id); | ||||
| 	pw_log_debug("%p: bound to %d", this, resource->id); | ||||
| 
 | ||||
| 	return 0; | ||||
| 
 | ||||
| error: | ||||
| 	pw_log_error(NAME" %p: can't create resource: %m", this); | ||||
| 	pw_log_error("%p: can't create resource: %m", this); | ||||
| 	return res; | ||||
| } | ||||
| 
 | ||||
|  | @ -591,7 +592,7 @@ int pw_impl_core_update_properties(struct pw_impl_core *core, const struct spa_d | |||
| 	changed = pw_properties_update(core->properties, dict); | ||||
| 	core->info.props = &core->properties->dict; | ||||
| 
 | ||||
| 	pw_log_debug(NAME" %p: updated %d properties", core, changed); | ||||
| 	pw_log_debug("%p: updated %d properties", core, changed); | ||||
| 
 | ||||
| 	if (!changed) | ||||
| 		return 0; | ||||
|  |  | |||
|  | @ -32,7 +32,8 @@ | |||
| #include "pipewire/impl.h" | ||||
| #include "pipewire/private.h" | ||||
| 
 | ||||
| #define NAME "device" | ||||
| PW_LOG_TOPIC_EXTERN(log_device); | ||||
| #define PW_LOG_TOPIC_DEFAULT log_device | ||||
| 
 | ||||
| struct impl { | ||||
| 	struct pw_impl_device this; | ||||
|  | @ -133,7 +134,7 @@ static void check_properties(struct pw_impl_device *device) | |||
| 	    (device->name == NULL || !spa_streq(str, device->name))) { | ||||
| 		free(device->name); | ||||
| 		device->name = strdup(str); | ||||
| 		pw_log_debug(NAME" %p: name '%s'", device, device->name); | ||||
| 		pw_log_debug("%p: name '%s'", device, device->name); | ||||
| 	} | ||||
| } | ||||
| 
 | ||||
|  | @ -157,7 +158,7 @@ struct pw_impl_device *pw_context_create_device(struct pw_context *context, | |||
| 
 | ||||
| 	this = &impl->this; | ||||
| 	this->name = strdup("device"); | ||||
| 	pw_log_debug(NAME" %p: new", this); | ||||
| 	pw_log_debug("%p: new", this); | ||||
| 
 | ||||
| 	if (properties == NULL) | ||||
| 		properties = pw_properties_new(NULL, NULL); | ||||
|  | @ -196,7 +197,7 @@ void pw_impl_device_destroy(struct pw_impl_device *device) | |||
| 	struct impl *impl = SPA_CONTAINER_OF(device, struct impl, this); | ||||
| 	struct object_data *od; | ||||
| 
 | ||||
| 	pw_log_debug(NAME" %p: destroy", device); | ||||
| 	pw_log_debug("%p: destroy", device); | ||||
| 	pw_impl_device_emit_destroy(device); | ||||
| 
 | ||||
| 	spa_list_consume(od, &device->object_list, link) | ||||
|  | @ -212,7 +213,7 @@ void pw_impl_device_destroy(struct pw_impl_device *device) | |||
| 		spa_hook_remove(&device->global_listener); | ||||
| 		pw_global_destroy(device->global); | ||||
| 	} | ||||
| 	pw_log_debug(NAME" %p: free", device); | ||||
| 	pw_log_debug("%p: free", device); | ||||
| 	pw_impl_device_emit_free(device); | ||||
| 
 | ||||
| 	pw_param_clear(&impl->param_list, SPA_ID_INVALID); | ||||
|  | @ -255,7 +256,7 @@ static void resource_pong(void *data, int seq) | |||
| { | ||||
| 	struct resource_data *d = data; | ||||
| 	struct pw_resource *resource = d->resource; | ||||
| 	pw_log_debug(NAME" %p: resource %p: got pong %d", d->device, | ||||
| 	pw_log_debug("%p: resource %p: got pong %d", d->device, | ||||
| 			resource, seq); | ||||
| } | ||||
| 
 | ||||
|  | @ -269,7 +270,7 @@ static void result_device_params(void *data, int seq, int res, uint32_t type, co | |||
| { | ||||
| 	struct result_device_params_data *d = data; | ||||
| 	struct impl *impl = d->impl; | ||||
| 	pw_log_debug(NAME" %p: type %d", impl, type); | ||||
| 	pw_log_debug("%p: type %d", impl, type); | ||||
| 
 | ||||
| 	switch (type) { | ||||
| 	case SPA_RESULT_TYPE_DEVICE_PARAMS: | ||||
|  | @ -277,7 +278,7 @@ static void result_device_params(void *data, int seq, int res, uint32_t type, co | |||
| 		const struct spa_result_device_params *r = result; | ||||
| 		d->callback(d->data, seq, r->id, r->index, r->next, r->param); | ||||
| 		if (d->cache) { | ||||
| 			pw_log_debug(NAME" %p: add param %d", impl, r->id); | ||||
| 			pw_log_debug("%p: add param %d", impl, r->id); | ||||
| 			if (d->count++ == 0) | ||||
| 				pw_param_add(&impl->pending_list, r->id, NULL); | ||||
| 			pw_param_add(&impl->pending_list, r->id, r->param); | ||||
|  | @ -316,7 +317,7 @@ int pw_impl_device_for_each_param(struct pw_impl_device *device, | |||
| 	if (max == 0) | ||||
| 		max = UINT32_MAX; | ||||
| 
 | ||||
| 	pw_log_debug(NAME" %p: params id:%d (%s) index:%u max:%u cached:%d", device, param_id, | ||||
| 	pw_log_debug("%p: params id:%d (%s) index:%u max:%u cached:%d", device, param_id, | ||||
| 			spa_debug_type_find_name(spa_type_param, param_id), | ||||
| 			index, max, pi->user); | ||||
| 
 | ||||
|  | @ -342,7 +343,7 @@ int pw_impl_device_for_each_param(struct pw_impl_device *device, | |||
| 			if (spa_pod_filter(&b, &result.param, p->param, filter) != 0) | ||||
| 				continue; | ||||
| 
 | ||||
| 			pw_log_debug(NAME " %p: %d param %u", device, seq, result.index); | ||||
| 			pw_log_debug("%p: %d param %u", device, seq, result.index); | ||||
| 			result_device_params(&user_data, seq, 0, SPA_RESULT_TYPE_DEVICE_PARAMS, &result); | ||||
| 
 | ||||
| 			if (++count == max) | ||||
|  | @ -381,7 +382,7 @@ static void result_device_params_async(void *data, int seq, int res, uint32_t ty | |||
| { | ||||
| 	struct resource_data *d = data; | ||||
| 
 | ||||
| 	pw_log_debug(NAME" %p: async result %d %d (%d/%d)", d->device, | ||||
| 	pw_log_debug("%p: async result %d %d (%d/%d)", d->device, | ||||
| 			res, seq, d->seq, d->end); | ||||
| 
 | ||||
| 	if (seq == d->seq) | ||||
|  | @ -443,7 +444,7 @@ static int device_subscribe_params(void *object, uint32_t *ids, uint32_t n_ids) | |||
| 
 | ||||
| 	for (i = 0; i < n_ids; i++) { | ||||
| 		data->subscribe_ids[i] = ids[i]; | ||||
| 		pw_log_debug(NAME" %p: resource %p subscribe param id:%d (%s)", | ||||
| 		pw_log_debug("%p: resource %p subscribe param id:%d (%s)", | ||||
| 				data->device, resource, ids[i], | ||||
| 				spa_debug_type_find_name(spa_type_param, ids[i])); | ||||
| 		device_enum_params(data, 1, ids[i], 0, UINT32_MAX, NULL); | ||||
|  | @ -455,7 +456,7 @@ static void result_device_done(void *data, int seq, int res, uint32_t type, cons | |||
| { | ||||
| 	struct resource_data *d = data; | ||||
| 
 | ||||
| 	pw_log_debug(NAME" %p: async result %d %d (%d/%d)", d->device, | ||||
| 	pw_log_debug("%p: async result %d %d (%d/%d)", d->device, | ||||
| 			res, seq, d->seq, d->end); | ||||
| 
 | ||||
| 	if (seq == d->end) | ||||
|  | @ -523,7 +524,7 @@ global_bind(void *_data, struct pw_impl_client *client, uint32_t permissions, | |||
| 			&data->object_listener, | ||||
| 			&device_methods, data); | ||||
| 
 | ||||
| 	pw_log_debug(NAME" %p: bound to %d", this, resource->id); | ||||
| 	pw_log_debug("%p: bound to %d", this, resource->id); | ||||
| 	pw_global_add_resource(global, resource); | ||||
| 
 | ||||
| 	this->info.change_mask = PW_DEVICE_CHANGE_MASK_ALL; | ||||
|  | @ -533,7 +534,7 @@ global_bind(void *_data, struct pw_impl_client *client, uint32_t permissions, | |||
| 	return 0; | ||||
| 
 | ||||
| error_resource: | ||||
| 	pw_log_error(NAME" %p: can't create device resource: %m", this); | ||||
| 	pw_log_error("%p: can't create device resource: %m", this); | ||||
| 	return -errno; | ||||
| } | ||||
| 
 | ||||
|  | @ -658,7 +659,7 @@ static int update_properties(struct pw_impl_device *device, const struct spa_dic | |||
| 	changed = pw_properties_update_ignore(device->properties, dict, filter ? ignored : NULL); | ||||
| 	device->info.props = &device->properties->dict; | ||||
| 
 | ||||
| 	pw_log_debug(NAME" %p: updated %d properties", device, changed); | ||||
| 	pw_log_debug("%p: updated %d properties", device, changed); | ||||
| 
 | ||||
| 	if (!changed) | ||||
| 		return 0; | ||||
|  | @ -690,7 +691,7 @@ static int notify_param(void *data, int seq, uint32_t id, | |||
| 		if (!resource_is_subscribed(resource, id)) | ||||
| 			continue; | ||||
| 
 | ||||
| 		pw_log_debug(NAME" %p: resource %p notify param %d", device, resource, id); | ||||
| 		pw_log_debug("%p: resource %p notify param %d", device, resource, id); | ||||
| 		pw_device_resource_param(resource, seq, id, index, next, param); | ||||
| 	} | ||||
| 	return 0; | ||||
|  | @ -704,7 +705,7 @@ static void emit_params(struct pw_impl_device *device, uint32_t *changed_ids, ui | |||
| 	if (device->global == NULL) | ||||
| 		return; | ||||
| 
 | ||||
| 	pw_log_debug(NAME" %p: emit %d params", device, n_changed_ids); | ||||
| 	pw_log_debug("%p: emit %d params", device, n_changed_ids); | ||||
| 
 | ||||
| 	for (i = 0; i < n_changed_ids; i++) { | ||||
| 		struct pw_resource *resource; | ||||
|  | @ -720,7 +721,7 @@ static void emit_params(struct pw_impl_device *device, uint32_t *changed_ids, ui | |||
| 
 | ||||
| 		if ((res = pw_impl_device_for_each_param(device, 1, changed_ids[i], 0, UINT32_MAX, | ||||
| 					NULL, notify_param, device)) < 0) { | ||||
| 			pw_log_error(NAME" %p: error %d (%s)", device, res, spa_strerror(res)); | ||||
| 			pw_log_error("%p: error %d (%s)", device, res, spa_strerror(res)); | ||||
| 		} | ||||
| 	} | ||||
| } | ||||
|  | @ -730,7 +731,7 @@ static void device_info(void *data, const struct spa_device_info *info) | |||
| 	struct pw_impl_device *device = data; | ||||
| 	uint32_t changed_ids[MAX_PARAMS], n_changed_ids = 0; | ||||
| 
 | ||||
| 	pw_log_debug(NAME" %p: flags:%08"PRIx64" change_mask:%08"PRIx64, | ||||
| 	pw_log_debug("%p: flags:%08"PRIx64" change_mask:%08"PRIx64, | ||||
| 			device, info->flags, info->change_mask); | ||||
| 
 | ||||
| 	if (info->change_mask & SPA_DEVICE_CHANGE_MASK_PROPS) { | ||||
|  | @ -745,7 +746,7 @@ static void device_info(void *data, const struct spa_device_info *info) | |||
| 		for (i = 0; i < device->info.n_params; i++) { | ||||
| 			uint32_t id = info->params[i].id; | ||||
| 
 | ||||
| 			pw_log_debug(NAME" %p: param %d id:%d (%s) %08x:%08x", device, i, | ||||
| 			pw_log_debug("%p: param %d id:%d (%s) %08x:%08x", device, i, | ||||
| 					id, spa_debug_type_find_name(spa_type_param, id), | ||||
| 					device->info.params[i].flags, info->params[i].flags); | ||||
| 
 | ||||
|  | @ -753,7 +754,7 @@ static void device_info(void *data, const struct spa_device_info *info) | |||
| 			if (device->info.params[i].flags == info->params[i].flags) | ||||
| 				continue; | ||||
| 
 | ||||
| 			pw_log_debug(NAME" %p: update param %d", device, id); | ||||
| 			pw_log_debug("%p: update param %d", device, id); | ||||
| 			device->info.params[i] = info->params[i]; | ||||
| 			device->info.params[i].user = 0; | ||||
| 
 | ||||
|  | @ -778,19 +779,19 @@ static void device_add_object(struct pw_impl_device *device, uint32_t id, | |||
| 	struct object_data *od = NULL; | ||||
| 
 | ||||
| 	if (info->factory_name == NULL) { | ||||
| 		pw_log_debug(NAME" %p: missing factory name", device); | ||||
| 		pw_log_debug("%p: missing factory name", device); | ||||
| 		return; | ||||
| 	} | ||||
| 
 | ||||
| 	handle = pw_context_load_spa_handle(context, info->factory_name, info->props); | ||||
| 	if (handle == NULL) { | ||||
| 		pw_log_warn(NAME" %p: can't load handle %s: %m", | ||||
| 		pw_log_warn("%p: can't load handle %s: %m", | ||||
| 				device, info->factory_name); | ||||
| 		return; | ||||
| 	} | ||||
| 
 | ||||
| 	if ((res = spa_handle_get_interface(handle, info->type, &iface)) < 0) { | ||||
| 		pw_log_error(NAME" %p: can't get %s interface: %s", device, info->type, | ||||
| 		pw_log_error("%p: can't get %s interface: %s", device, info->type, | ||||
| 				spa_strerror(res)); | ||||
| 		return; | ||||
| 	} | ||||
|  | @ -818,7 +819,7 @@ static void device_add_object(struct pw_impl_device *device, uint32_t id, | |||
| 		pw_impl_device_add_listener(dev, &od->listener, &device_object_events, od); | ||||
| 		pw_impl_device_set_implementation(dev, iface); | ||||
| 	} else { | ||||
| 		pw_log_warn(NAME" %p: unknown type %s", device, info->type); | ||||
| 		pw_log_warn("%p: unknown type %s", device, info->type); | ||||
| 		pw_properties_free(props); | ||||
| 	} | ||||
| 
 | ||||
|  | @ -851,7 +852,7 @@ static void device_object_info(void *data, uint32_t id, | |||
| 	od = find_object(device, id); | ||||
| 
 | ||||
| 	if (info == NULL) { | ||||
| 		pw_log_debug(NAME" %p: remove node %d (%p)", device, id, od); | ||||
| 		pw_log_debug("%p: remove node %d (%p)", device, id, od); | ||||
| 		if (od) | ||||
| 			object_destroy(od); | ||||
| 	} | ||||
|  | @ -873,10 +874,10 @@ static const struct spa_device_events device_events = { | |||
| SPA_EXPORT | ||||
| int pw_impl_device_set_implementation(struct pw_impl_device *device, struct spa_device *spa_device) | ||||
| { | ||||
| 	pw_log_debug(NAME" %p: implementation %p", device, spa_device); | ||||
| 	pw_log_debug("%p: implementation %p", device, spa_device); | ||||
| 
 | ||||
| 	if (device->device) { | ||||
| 		pw_log_error(NAME" %p: implementation existed %p", | ||||
| 		pw_log_error("%p: implementation existed %p", | ||||
| 				device, device->device); | ||||
| 		return -EEXIST; | ||||
| 	} | ||||
|  |  | |||
|  | @ -30,7 +30,8 @@ | |||
| #include "pipewire/impl.h" | ||||
| #include "pipewire/private.h" | ||||
| 
 | ||||
| #define NAME "factory" | ||||
| PW_LOG_TOPIC_EXTERN(log_factory); | ||||
| #define PW_LOG_TOPIC_DEFAULT log_factory | ||||
| 
 | ||||
| #define pw_factory_resource_info(r,...) pw_resource_call(r,struct pw_factory_events,info,0,__VA_ARGS__) | ||||
| 
 | ||||
|  | @ -68,7 +69,7 @@ struct pw_impl_factory *pw_context_create_factory(struct pw_context *context, | |||
| 	if (user_data_size > 0) | ||||
| 		this->user_data = SPA_PTROFF(this, sizeof(*this), void); | ||||
| 
 | ||||
| 	pw_log_debug(NAME" %p: new %s", this, name); | ||||
| 	pw_log_debug("%p: new %s", this, name); | ||||
| 
 | ||||
| 	return this; | ||||
| 
 | ||||
|  | @ -81,7 +82,7 @@ error_exit: | |||
| SPA_EXPORT | ||||
| void pw_impl_factory_destroy(struct pw_impl_factory *factory) | ||||
| { | ||||
| 	pw_log_debug(NAME" %p: destroy", factory); | ||||
| 	pw_log_debug("%p: destroy", factory); | ||||
| 	pw_impl_factory_emit_destroy(factory); | ||||
| 
 | ||||
| 	if (factory->registered) | ||||
|  | @ -93,7 +94,7 @@ void pw_impl_factory_destroy(struct pw_impl_factory *factory) | |||
| 	} | ||||
| 
 | ||||
| 	pw_impl_factory_emit_free(factory); | ||||
| 	pw_log_debug(NAME" %p: free", factory); | ||||
| 	pw_log_debug("%p: free", factory); | ||||
| 
 | ||||
| 	spa_hook_list_clean(&factory->listener_list); | ||||
| 
 | ||||
|  | @ -116,7 +117,7 @@ global_bind(void *_data, struct pw_impl_client *client, uint32_t permissions, | |||
| 	if (resource == NULL) | ||||
| 		goto error_resource; | ||||
| 
 | ||||
| 	pw_log_debug(NAME" %p: bound to %d", this, resource->id); | ||||
| 	pw_log_debug("%p: bound to %d", this, resource->id); | ||||
| 	pw_global_add_resource(global, resource); | ||||
| 
 | ||||
| 	this->info.change_mask = PW_FACTORY_CHANGE_MASK_ALL; | ||||
|  | @ -126,7 +127,7 @@ global_bind(void *_data, struct pw_impl_client *client, uint32_t permissions, | |||
| 	return 0; | ||||
| 
 | ||||
| error_resource: | ||||
| 	pw_log_error(NAME" %p: can't create factory resource: %m", this); | ||||
| 	pw_log_error("%p: can't create factory resource: %m", this); | ||||
| 	return -errno; | ||||
| } | ||||
| 
 | ||||
|  | @ -158,7 +159,7 @@ int pw_impl_factory_update_properties(struct pw_impl_factory *factory, const str | |||
| 	changed = pw_properties_update(factory->properties, dict); | ||||
| 	factory->info.props = &factory->properties->dict; | ||||
| 
 | ||||
| 	pw_log_debug(NAME" %p: updated %d properties", factory, changed); | ||||
| 	pw_log_debug("%p: updated %d properties", factory, changed); | ||||
| 
 | ||||
| 	if (!changed) | ||||
| 		return 0; | ||||
|  |  | |||
|  | @ -32,7 +32,8 @@ | |||
| 
 | ||||
| #include "pipewire/extensions/metadata.h" | ||||
| 
 | ||||
| #define NAME "metadata" | ||||
| PW_LOG_TOPIC_EXTERN(log_metadata); | ||||
| #define PW_LOG_TOPIC_DEFAULT log_metadata | ||||
| 
 | ||||
| #define pw_metadata_emit(hooks,method,version,...)			\ | ||||
| 	spa_hook_list_call_simple(hooks, struct pw_metadata_events,	\ | ||||
|  | @ -142,7 +143,7 @@ static int clear_subjects(struct metadata *this, struct pw_array *storage, uint3 | |||
| 		if (item == NULL) | ||||
| 			break; | ||||
| 
 | ||||
| 		pw_log_debug(NAME" %p: remove id:%d key:%s", this, subject, item->key); | ||||
| 		pw_log_debug("%p: remove id:%d key:%s", this, subject, item->key); | ||||
| 
 | ||||
| 		clear_item(item); | ||||
| 		pw_array_remove(storage, item); | ||||
|  | @ -180,7 +181,7 @@ static int impl_set_property(void *object, | |||
| 	struct item *item = NULL; | ||||
| 	int changed = 0; | ||||
| 
 | ||||
| 	pw_log_debug(NAME" %p: id:%d key:%s type:%s value:%s", this, subject, key, type, value); | ||||
| 	pw_log_debug("%p: id:%d key:%s type:%s value:%s", this, subject, key, type, value); | ||||
| 
 | ||||
| 	if (key == NULL) | ||||
| 		return clear_subjects(this, &this->storage, subject); | ||||
|  | @ -192,7 +193,7 @@ static int impl_set_property(void *object, | |||
| 			pw_array_remove(&this->storage, item); | ||||
| 			type = NULL; | ||||
| 			changed++; | ||||
| 			pw_log_info(NAME" %p: remove id:%d key:%s", this, | ||||
| 			pw_log_info("%p: remove id:%d key:%s", this, | ||||
| 					subject, key); | ||||
| 		} | ||||
| 	} else if (item == NULL) { | ||||
|  | @ -201,14 +202,14 @@ static int impl_set_property(void *object, | |||
| 			return -errno; | ||||
| 		set_item(item, subject, key, type, value); | ||||
| 		changed++; | ||||
| 		pw_log_info(NAME" %p: add id:%d key:%s type:%s value:%s", this, | ||||
| 		pw_log_info("%p: add id:%d key:%s type:%s value:%s", this, | ||||
| 				subject, key, type, value); | ||||
| 	} else { | ||||
| 		if (type == NULL) | ||||
| 			type = item->type; | ||||
| 		changed = change_item(item, type, value); | ||||
| 		if (changed) | ||||
| 			pw_log_info(NAME" %p: change id:%d key:%s type:%s value:%s", this, | ||||
| 			pw_log_info("%p: change id:%d key:%s type:%s value:%s", this, | ||||
| 				subject, key, type, value); | ||||
| 	} | ||||
| 
 | ||||
|  | @ -314,7 +315,7 @@ struct pw_impl_metadata *pw_context_create_metadata(struct pw_context *context, | |||
| 	if (user_data_size > 0) | ||||
| 		this->user_data = SPA_PTROFF(this, sizeof(*this), void); | ||||
| 
 | ||||
| 	pw_log_debug(NAME" %p: new", this); | ||||
| 	pw_log_debug("%p: new", this); | ||||
| 
 | ||||
| 	return this; | ||||
| 
 | ||||
|  | @ -355,7 +356,7 @@ void pw_impl_metadata_destroy(struct pw_impl_metadata *metadata) | |||
| { | ||||
| 	struct impl *impl = SPA_CONTAINER_OF(metadata, struct impl, this); | ||||
| 
 | ||||
| 	pw_log_debug(NAME" %p: destroy", metadata); | ||||
| 	pw_log_debug("%p: destroy", metadata); | ||||
| 	pw_impl_metadata_emit_destroy(metadata); | ||||
| 
 | ||||
| 	if (metadata->registered) | ||||
|  | @ -367,7 +368,7 @@ void pw_impl_metadata_destroy(struct pw_impl_metadata *metadata) | |||
| 	} | ||||
| 
 | ||||
| 	pw_impl_metadata_emit_free(metadata); | ||||
| 	pw_log_debug(NAME" %p: free", metadata); | ||||
| 	pw_log_debug("%p: free", metadata); | ||||
| 
 | ||||
| 	metadata_reset(&impl->def); | ||||
| 
 | ||||
|  | @ -474,7 +475,7 @@ global_bind(void *_data, struct pw_impl_client *client, uint32_t permissions, | |||
|         data->impl = this; | ||||
|         data->resource = resource; | ||||
| 
 | ||||
| 	pw_log_debug(NAME" %p: bound to %d", this, resource->id); | ||||
| 	pw_log_debug("%p: bound to %d", this, resource->id); | ||||
| 	pw_global_add_resource(global, resource); | ||||
| 
 | ||||
| 	/* listen for when the resource goes away */ | ||||
|  | @ -495,7 +496,7 @@ global_bind(void *_data, struct pw_impl_client *client, uint32_t permissions, | |||
| 	return 0; | ||||
| 
 | ||||
| error_resource: | ||||
| 	pw_log_error(NAME" %p: can't create metadata resource: %m", this); | ||||
| 	pw_log_error("%p: can't create metadata resource: %m", this); | ||||
| 	return -errno; | ||||
| } | ||||
| 
 | ||||
|  |  | |||
|  | @ -37,7 +37,8 @@ | |||
| #include "pipewire/impl.h" | ||||
| #include "pipewire/private.h" | ||||
| 
 | ||||
| #define NAME "module" | ||||
| PW_LOG_TOPIC_EXTERN(log_module); | ||||
| #define PW_LOG_TOPIC_DEFAULT log_module | ||||
| 
 | ||||
| /** \cond */ | ||||
| struct impl { | ||||
|  | @ -118,7 +119,7 @@ global_bind(void *_data, struct pw_impl_client *client, uint32_t permissions, | |||
| 	if (resource == NULL) | ||||
| 		goto error_resource; | ||||
| 
 | ||||
| 	pw_log_debug(NAME" %p: bound to %d", this, resource->id); | ||||
| 	pw_log_debug("%p: bound to %d", this, resource->id); | ||||
| 	pw_global_add_resource(global, resource); | ||||
| 
 | ||||
| 	this->info.change_mask = PW_MODULE_CHANGE_MASK_ALL; | ||||
|  | @ -128,7 +129,7 @@ global_bind(void *_data, struct pw_impl_client *client, uint32_t permissions, | |||
| 	return 0; | ||||
| 
 | ||||
| error_resource: | ||||
| 	pw_log_error(NAME" %p: can't create module resource: %m", this); | ||||
| 	pw_log_error("%p: can't create module resource: %m", this); | ||||
| 	return -errno; | ||||
| } | ||||
| 
 | ||||
|  | @ -256,7 +257,7 @@ pw_context_load_module(struct pw_context *context, | |||
| 
 | ||||
| 	pw_impl_module_emit_registered(this); | ||||
| 
 | ||||
| 	pw_log_debug(NAME" %p: loaded module: %s", this, this->info.name); | ||||
| 	pw_log_debug("%p: loaded module: %s", this, this->info.name); | ||||
| 
 | ||||
| 	return this; | ||||
| 
 | ||||
|  | @ -306,7 +307,7 @@ void pw_impl_module_destroy(struct pw_impl_module *module) | |||
| { | ||||
| 	struct impl *impl = SPA_CONTAINER_OF(module, struct impl, this); | ||||
| 
 | ||||
| 	pw_log_debug(NAME" %p: destroy", module); | ||||
| 	pw_log_debug("%p: destroy", module); | ||||
| 	pw_impl_module_emit_destroy(module); | ||||
| 
 | ||||
| 	if (module->global) { | ||||
|  | @ -315,7 +316,7 @@ void pw_impl_module_destroy(struct pw_impl_module *module) | |||
| 		pw_global_destroy(module->global); | ||||
| 	} | ||||
| 
 | ||||
| 	pw_log_debug(NAME" %p: free", module); | ||||
| 	pw_log_debug("%p: free", module); | ||||
| 	pw_impl_module_emit_free(module); | ||||
| 	free((char *) module->info.name); | ||||
| 	free((char *) module->info.filename); | ||||
|  | @ -326,7 +327,7 @@ void pw_impl_module_destroy(struct pw_impl_module *module) | |||
| 	spa_hook_list_clean(&module->listener_list); | ||||
| 
 | ||||
| 	if (!pw_in_valgrind() && dlclose(impl->hnd) != 0) | ||||
| 		pw_log_warn(NAME" %p: dlclose failed: %s", module, dlerror()); | ||||
| 		pw_log_warn("%p: dlclose failed: %s", module, dlerror()); | ||||
| 	free(impl); | ||||
| } | ||||
| 
 | ||||
|  | @ -358,7 +359,7 @@ int pw_impl_module_update_properties(struct pw_impl_module *module, const struct | |||
| 	changed = pw_properties_update(module->properties, dict); | ||||
| 	module->info.props = &module->properties->dict; | ||||
| 
 | ||||
| 	pw_log_debug(NAME" %p: updated %d properties", module, changed); | ||||
| 	pw_log_debug("%p: updated %d properties", module, changed); | ||||
| 
 | ||||
| 	if (!changed) | ||||
| 		return 0; | ||||
|  |  | |||
|  | @ -39,7 +39,8 @@ | |||
| #include "pipewire/impl-node.h" | ||||
| #include "pipewire/private.h" | ||||
| 
 | ||||
| #define NAME "node" | ||||
| PW_LOG_TOPIC_EXTERN(log_node); | ||||
| #define PW_LOG_TOPIC_DEFAULT log_node | ||||
| 
 | ||||
| #define DEFAULT_SYNC_TIMEOUT  ((uint64_t)(5 * SPA_NSEC_PER_SEC)) | ||||
| 
 | ||||
|  | @ -89,7 +90,7 @@ static void node_deactivate(struct pw_impl_node *this) | |||
| 	struct pw_impl_port *port; | ||||
| 	struct pw_impl_link *link; | ||||
| 
 | ||||
| 	pw_log_debug(NAME" %p: deactivate", this); | ||||
| 	pw_log_debug("%p: deactivate", this); | ||||
| 	spa_list_for_each(port, &this->input_ports, link) { | ||||
| 		spa_list_for_each(link, &port->links, input_link) | ||||
| 			pw_impl_link_deactivate(link); | ||||
|  | @ -108,7 +109,7 @@ static void add_node(struct pw_impl_node *this, struct pw_impl_node *driver) | |||
| 	if (this->exported) | ||||
| 		return; | ||||
| 
 | ||||
| 	pw_log_trace(NAME" %p: add to driver %p %p %p", this, driver, | ||||
| 	pw_log_trace("%p: add to driver %p %p %p", this, driver, | ||||
| 			driver->rt.activation, this->rt.activation); | ||||
| 
 | ||||
| 	/* signal the driver */ | ||||
|  | @ -130,7 +131,7 @@ static void add_node(struct pw_impl_node *this, struct pw_impl_node *driver) | |||
| 			dstate->required++; | ||||
| 			t->active = true; | ||||
| 		} | ||||
| 		pw_log_trace(NAME" %p: driver state:%p pending:%d/%d, node state:%p pending:%d/%d", | ||||
| 		pw_log_trace("%p: driver state:%p pending:%d/%d, node state:%p pending:%d/%d", | ||||
| 				this, dstate, dstate->pending, dstate->required, | ||||
| 				nstate, nstate->pending, nstate->required); | ||||
| 	} | ||||
|  | @ -144,7 +145,7 @@ static void remove_node(struct pw_impl_node *this) | |||
| 	if (this->exported) | ||||
| 		return; | ||||
| 
 | ||||
| 	pw_log_trace(NAME" %p: remove from driver %p %p %p", | ||||
| 	pw_log_trace("%p: remove from driver %p %p %p", | ||||
| 			this, this->rt.driver_target.data, | ||||
| 			this->rt.driver_target.activation, this->rt.activation); | ||||
| 
 | ||||
|  | @ -162,7 +163,7 @@ static void remove_node(struct pw_impl_node *this) | |||
| 			dstate->required--; | ||||
| 			t->active = false; | ||||
| 		} | ||||
| 		pw_log_trace(NAME" %p: driver state:%p pending:%d/%d, node state:%p pending:%d/%d", | ||||
| 		pw_log_trace("%p: driver state:%p pending:%d/%d, node state:%p pending:%d/%d", | ||||
| 				this, dstate, dstate->pending, dstate->required, | ||||
| 				nstate, nstate->pending, nstate->required); | ||||
| 	} | ||||
|  | @ -188,7 +189,7 @@ static int pause_node(struct pw_impl_node *this) | |||
| 	struct impl *impl = SPA_CONTAINER_OF(this, struct impl, this); | ||||
| 	int res = 0; | ||||
| 
 | ||||
| 	pw_log_debug(NAME" %p: pause node state:%s pending:%s pause-on-idle:%d", this, | ||||
| 	pw_log_debug("%p: pause node state:%s pending:%s pause-on-idle:%d", this, | ||||
| 			pw_node_state_as_string(this->info.state), | ||||
| 			pw_node_state_as_string(impl->pending), | ||||
| 			impl->pause_on_idle); | ||||
|  | @ -203,7 +204,7 @@ static int pause_node(struct pw_impl_node *this) | |||
| 	res = spa_node_send_command(this->node, | ||||
| 				    &SPA_NODE_COMMAND_INIT(SPA_NODE_COMMAND_Pause)); | ||||
| 	if (res < 0) | ||||
| 		pw_log_debug(NAME" %p: pause node error %s", this, spa_strerror(res)); | ||||
| 		pw_log_debug("%p: pause node error %s", this, spa_strerror(res)); | ||||
| 
 | ||||
| 	return res; | ||||
| } | ||||
|  | @ -216,7 +217,7 @@ static int start_node(struct pw_impl_node *this) | |||
| 	if (impl->pending >= PW_NODE_STATE_RUNNING) | ||||
| 		return 0; | ||||
| 
 | ||||
| 	pw_log_debug(NAME" %p: start node", this); | ||||
| 	pw_log_debug("%p: start node", this); | ||||
| 
 | ||||
| 	if (!(this->driving && this->driver)) { | ||||
| 		impl->pending_play = true; | ||||
|  | @ -269,7 +270,7 @@ static int notify_param(void *data, int seq, uint32_t id, | |||
| 		if (!resource_is_subscribed(resource, id)) | ||||
| 			continue; | ||||
| 
 | ||||
| 		pw_log_debug(NAME" %p: resource %p notify param %d", node, resource, id); | ||||
| 		pw_log_debug("%p: resource %p notify param %d", node, resource, id); | ||||
| 		pw_node_resource_param(resource, seq, id, index, next, param); | ||||
| 	} | ||||
| 	return 0; | ||||
|  | @ -283,7 +284,7 @@ static void emit_params(struct pw_impl_node *node, uint32_t *changed_ids, uint32 | |||
| 	if (node->global == NULL) | ||||
| 		return; | ||||
| 
 | ||||
| 	pw_log_debug(NAME" %p: emit %d params", node, n_changed_ids); | ||||
| 	pw_log_debug("%p: emit %d params", node, n_changed_ids); | ||||
| 
 | ||||
| 	for (i = 0; i < n_changed_ids; i++) { | ||||
| 		struct pw_resource *resource; | ||||
|  | @ -299,7 +300,7 @@ static void emit_params(struct pw_impl_node *node, uint32_t *changed_ids, uint32 | |||
| 
 | ||||
| 		if ((res = pw_impl_node_for_each_param(node, 1, changed_ids[i], 0, UINT32_MAX, | ||||
| 					NULL, notify_param, node)) < 0) { | ||||
| 			pw_log_error(NAME" %p: error %d (%s)", node, res, spa_strerror(res)); | ||||
| 			pw_log_error("%p: error %d (%s)", node, res, spa_strerror(res)); | ||||
| 		} | ||||
| 	} | ||||
| } | ||||
|  | @ -345,7 +346,7 @@ static void node_update_state(struct pw_impl_node *node, enum pw_node_state stat | |||
| 	node->info.state = state; | ||||
| 	impl->pending = state; | ||||
| 
 | ||||
| 	pw_log_debug(NAME" %p: (%s) %s -> %s (%s)", node, node->name, | ||||
| 	pw_log_debug("%p: (%s) %s -> %s (%s)", node, node->name, | ||||
| 		     pw_node_state_as_string(old), pw_node_state_as_string(state), error); | ||||
| 
 | ||||
| 	if (old == state) | ||||
|  | @ -375,7 +376,7 @@ static int suspend_node(struct pw_impl_node *this) | |||
| 	int res = 0; | ||||
| 	struct pw_impl_port *p; | ||||
| 
 | ||||
| 	pw_log_debug(NAME" %p: suspend node state:%s", this, | ||||
| 	pw_log_debug("%p: suspend node state:%s", this, | ||||
| 			pw_node_state_as_string(this->info.state)); | ||||
| 
 | ||||
| 	if (this->info.state > 0 && this->info.state <= PW_NODE_STATE_SUSPENDED) | ||||
|  | @ -385,7 +386,7 @@ static int suspend_node(struct pw_impl_node *this) | |||
| 
 | ||||
| 	spa_list_for_each(p, &this->input_ports, link) { | ||||
| 		if ((res = pw_impl_port_set_param(p, SPA_PARAM_Format, 0, NULL)) < 0) | ||||
| 			pw_log_warn(NAME" %p: error unset format input: %s", | ||||
| 			pw_log_warn("%p: error unset format input: %s", | ||||
| 					this, spa_strerror(res)); | ||||
| 		/* force CONFIGURE in case of async */ | ||||
| 		p->state = PW_IMPL_PORT_STATE_CONFIGURE; | ||||
|  | @ -393,7 +394,7 @@ static int suspend_node(struct pw_impl_node *this) | |||
| 
 | ||||
| 	spa_list_for_each(p, &this->output_ports, link) { | ||||
| 		if ((res = pw_impl_port_set_param(p, SPA_PARAM_Format, 0, NULL)) < 0) | ||||
| 			pw_log_warn(NAME" %p: error unset format output: %s", | ||||
| 			pw_log_warn("%p: error unset format output: %s", | ||||
| 					this, spa_strerror(res)); | ||||
| 		/* force CONFIGURE in case of async */ | ||||
| 		p->state = PW_IMPL_PORT_STATE_CONFIGURE; | ||||
|  | @ -405,7 +406,7 @@ static int suspend_node(struct pw_impl_node *this) | |||
| 		res = spa_node_send_command(this->node, | ||||
| 				    &SPA_NODE_COMMAND_INIT(SPA_NODE_COMMAND_Pause)); | ||||
| 	if (res < 0 && res != -EIO) | ||||
| 		pw_log_warn(NAME" %p: suspend node error %s", this, spa_strerror(res)); | ||||
| 		pw_log_warn("%p: suspend node error %s", this, spa_strerror(res)); | ||||
| 
 | ||||
| 	node_update_state(this, PW_NODE_STATE_SUSPENDED, 0, NULL); | ||||
| 
 | ||||
|  | @ -423,7 +424,7 @@ static int reply_param(void *data, int seq, uint32_t id, | |||
| 		uint32_t index, uint32_t next, struct spa_pod *param) | ||||
| { | ||||
| 	struct resource_data *d = data; | ||||
| 	pw_log_debug(NAME" %p: resource %p reply param %d", d->node, d->resource, seq); | ||||
| 	pw_log_debug("%p: resource %p reply param %d", d->node, d->resource, seq); | ||||
| 	pw_node_resource_param(d->resource, seq, id, index, next, param); | ||||
| 	return 0; | ||||
| } | ||||
|  | @ -436,7 +437,7 @@ static int node_enum_params(void *object, int seq, uint32_t id, | |||
| 	struct pw_impl_node *node = data->node; | ||||
| 	int res; | ||||
| 
 | ||||
| 	pw_log_debug(NAME" %p: resource %p enum params seq:%d id:%d (%s) index:%u num:%u", | ||||
| 	pw_log_debug("%p: resource %p enum params seq:%d id:%d (%s) index:%u num:%u", | ||||
| 			node, resource, seq, id, | ||||
| 			spa_debug_type_find_name(spa_type_param, id), index, num); | ||||
| 
 | ||||
|  | @ -460,7 +461,7 @@ static int node_subscribe_params(void *object, uint32_t *ids, uint32_t n_ids) | |||
| 
 | ||||
| 	for (i = 0; i < n_ids; i++) { | ||||
| 		data->subscribe_ids[i] = ids[i]; | ||||
| 		pw_log_debug(NAME" %p: resource %p subscribe param id:%d (%s)", | ||||
| 		pw_log_debug("%p: resource %p subscribe param id:%d (%s)", | ||||
| 				data->node, resource, ids[i], | ||||
| 				spa_debug_type_find_name(spa_type_param, ids[i])); | ||||
| 		node_enum_params(data, 1, ids[i], 0, UINT32_MAX, NULL); | ||||
|  | @ -481,7 +482,7 @@ static void result_node_sync(void *data, int seq, int res, uint32_t type, const | |||
| { | ||||
| 	struct resource_data *d = data; | ||||
| 
 | ||||
| 	pw_log_debug(NAME" %p: sync result %d %d (%d/%d)", d->node, res, seq, d->seq, d->end); | ||||
| 	pw_log_debug("%p: sync result %d %d (%d/%d)", d->node, res, seq, d->seq, d->end); | ||||
| 	if (seq == d->end) | ||||
| 		remove_busy_resource(d); | ||||
| } | ||||
|  | @ -499,7 +500,7 @@ static int node_set_param(void *object, uint32_t id, uint32_t flags, | |||
| 		.result = result_node_sync, | ||||
| 	}; | ||||
| 
 | ||||
| 	pw_log_debug(NAME" %p: resource %p set param id:%d (%s) %08x", node, resource, | ||||
| 	pw_log_debug("%p: resource %p set param id:%d (%s) %08x", node, resource, | ||||
| 			id, spa_debug_type_find_name(spa_type_param, id), flags); | ||||
| 
 | ||||
| 	res = spa_node_set_param(node->node, id, flags, param); | ||||
|  | @ -556,7 +557,7 @@ static void resource_pong(void *data, int seq) | |||
| { | ||||
| 	struct resource_data *d = data; | ||||
| 	struct pw_resource *resource = d->resource; | ||||
| 	pw_log_debug(NAME" %p: resource %p: got pong %d", d->node, | ||||
| 	pw_log_debug("%p: resource %p: got pong %d", d->node, | ||||
| 			resource, seq); | ||||
| } | ||||
| 
 | ||||
|  | @ -591,7 +592,7 @@ global_bind(void *_data, struct pw_impl_client *client, uint32_t permissions, | |||
| 			&data->object_listener, | ||||
| 			&node_methods, data); | ||||
| 
 | ||||
| 	pw_log_debug(NAME" %p: bound to %d", this, resource->id); | ||||
| 	pw_log_debug("%p: bound to %d", this, resource->id); | ||||
| 	pw_global_add_resource(global, resource); | ||||
| 
 | ||||
| 	this->info.change_mask = PW_NODE_CHANGE_MASK_ALL; | ||||
|  | @ -601,7 +602,7 @@ global_bind(void *_data, struct pw_impl_client *client, uint32_t permissions, | |||
| 	return 0; | ||||
| 
 | ||||
| error_resource: | ||||
| 	pw_log_error(NAME" %p: can't create node resource: %m", this); | ||||
| 	pw_log_error("%p: can't create node resource: %m", this); | ||||
| 	return -errno; | ||||
| } | ||||
| 
 | ||||
|  | @ -631,22 +632,22 @@ static inline void insert_driver(struct pw_context *context, struct pw_impl_node | |||
| 
 | ||||
| static void update_io(struct pw_impl_node *node) | ||||
| { | ||||
| 	pw_log_debug(NAME" %p: id:%d", node, node->info.id); | ||||
| 	pw_log_debug("%p: id:%d", node, node->info.id); | ||||
| 
 | ||||
| 	if (spa_node_set_io(node->node, | ||||
| 			    SPA_IO_Position, | ||||
| 			    &node->rt.activation->position, | ||||
| 			    sizeof(struct spa_io_position)) >= 0) { | ||||
| 		pw_log_debug(NAME" %p: set position %p", node, &node->rt.activation->position); | ||||
| 		pw_log_debug("%p: set position %p", node, &node->rt.activation->position); | ||||
| 		node->rt.position = &node->rt.activation->position; | ||||
| 	} else if (node->driver) { | ||||
| 		pw_log_warn(NAME" %p: can't set position on driver", node); | ||||
| 		pw_log_warn("%p: can't set position on driver", node); | ||||
| 	} | ||||
| 	if (spa_node_set_io(node->node, | ||||
| 			    SPA_IO_Clock, | ||||
| 			    &node->rt.activation->position.clock, | ||||
| 			    sizeof(struct spa_io_clock)) >= 0) { | ||||
| 		pw_log_debug(NAME" %p: set clock %p", node, &node->rt.activation->position.clock); | ||||
| 		pw_log_debug("%p: set clock %p", node, &node->rt.activation->position.clock); | ||||
| 		node->rt.clock = &node->rt.activation->position.clock; | ||||
| 	} | ||||
| } | ||||
|  | @ -678,7 +679,7 @@ int pw_impl_node_register(struct pw_impl_node *this, | |||
| 	struct pw_context *context = this->context; | ||||
| 	struct pw_impl_port *port; | ||||
| 
 | ||||
| 	pw_log_debug(NAME" %p: register", this); | ||||
| 	pw_log_debug("%p: register", this); | ||||
| 
 | ||||
| 	if (this->registered) | ||||
| 		goto error_existed; | ||||
|  | @ -731,7 +732,7 @@ error_existed: | |||
| SPA_EXPORT | ||||
| int pw_impl_node_initialized(struct pw_impl_node *this) | ||||
| { | ||||
| 	pw_log_debug(NAME" %p initialized", this); | ||||
| 	pw_log_debug("%p initialized", this); | ||||
| 	pw_impl_node_emit_initialized(this); | ||||
| 	node_update_state(this, PW_NODE_STATE_SUSPENDED, 0, NULL); | ||||
| 	return 0; | ||||
|  | @ -746,16 +747,16 @@ do_move_nodes(struct spa_loop *loop, | |||
| 	struct pw_impl_node *node = &impl->this; | ||||
| 	int res; | ||||
| 
 | ||||
| 	pw_log_trace(NAME" %p: driver:%p->%p", node, node->driver_node, driver); | ||||
| 	pw_log_trace("%p: driver:%p->%p", node, node->driver_node, driver); | ||||
| 
 | ||||
| 	if ((res = spa_node_set_io(node->node, | ||||
| 		    SPA_IO_Position, | ||||
| 		    &driver->rt.activation->position, | ||||
| 		    sizeof(struct spa_io_position))) < 0) { | ||||
| 		pw_log_debug(NAME" %p: set position: %s", node, spa_strerror(res)); | ||||
| 		pw_log_debug("%p: set position: %s", node, spa_strerror(res)); | ||||
| 	} | ||||
| 
 | ||||
| 	pw_log_trace(NAME" %p: set position %p", node, &driver->rt.activation->position); | ||||
| 	pw_log_trace("%p: set position %p", node, &driver->rt.activation->position); | ||||
| 	node->rt.position = &driver->rt.activation->position; | ||||
| 
 | ||||
| 	if (node->source.loop != NULL) { | ||||
|  | @ -800,7 +801,7 @@ int pw_impl_node_set_driver(struct pw_impl_node *node, struct pw_impl_node *driv | |||
| 	} | ||||
| 	node->driving = node->driver && driver == node; | ||||
| 
 | ||||
| 	pw_log_debug(NAME" %p: driver %p driving:%u", node, | ||||
| 	pw_log_debug("%p: driver %p driving:%u", node, | ||||
| 		driver, node->driving); | ||||
| 	pw_log_info("(%s-%u) -> change driver (%s-%d -> %s-%d)", | ||||
| 			node->name, node->info.id, | ||||
|  | @ -827,14 +828,14 @@ static void check_properties(struct pw_impl_node *node) | |||
| 
 | ||||
| 	if ((str = pw_properties_get(node->properties, PW_KEY_PRIORITY_DRIVER))) { | ||||
| 		node->priority_driver = pw_properties_parse_int(str); | ||||
| 		pw_log_debug(NAME" %p: priority driver %d", node, node->priority_driver); | ||||
| 		pw_log_debug("%p: priority driver %d", node, node->priority_driver); | ||||
| 	} | ||||
| 
 | ||||
| 	if ((str = pw_properties_get(node->properties, PW_KEY_NODE_NAME)) && | ||||
| 	    (node->name == NULL || !spa_streq(node->name, str))) { | ||||
| 		free(node->name); | ||||
| 		node->name = strdup(str); | ||||
| 		pw_log_debug(NAME" %p: name '%s'", node, node->name); | ||||
| 		pw_log_debug("%p: name '%s'", node, node->name); | ||||
| 	} | ||||
| 
 | ||||
| 	str = pw_properties_get(node->properties, PW_KEY_NODE_PAUSE_ON_IDLE); | ||||
|  | @ -850,7 +851,7 @@ static void check_properties(struct pw_impl_node *node) | |||
| 	driver = str ? pw_properties_parse_bool(str) : false; | ||||
| 
 | ||||
| 	if (node->driver != driver) { | ||||
| 		pw_log_debug(NAME" %p: driver %d -> %d", node, node->driver, driver); | ||||
| 		pw_log_debug("%p: driver %d -> %d", node, node->driver, driver); | ||||
| 		node->driver = driver; | ||||
| 		if (node->registered) { | ||||
| 			if (driver) | ||||
|  | @ -866,7 +867,7 @@ static void check_properties(struct pw_impl_node *node) | |||
| 		str = ""; | ||||
| 
 | ||||
| 	if (!spa_streq(str, node->group)) { | ||||
| 		pw_log_info(NAME" %p: group '%s'->'%s'", node, node->group, str); | ||||
| 		pw_log_info("%p: group '%s'->'%s'", node, node->group, str); | ||||
| 		snprintf(node->group, sizeof(node->group), "%s", str); | ||||
| 		node->freewheel = spa_streq(node->group, "pipewire.freewheel"); | ||||
| 		recalc_reason = "group changed"; | ||||
|  | @ -920,7 +921,7 @@ static void check_properties(struct pw_impl_node *node) | |||
| 	str = pw_properties_get(node->properties, PW_KEY_NODE_LOCK_RATE); | ||||
| 	node->lock_rate = str ? pw_properties_parse_bool(str) : false; | ||||
| 
 | ||||
| 	pw_log_debug(NAME" %p: driver:%d recalc:%s active:%d", node, node->driver, | ||||
| 	pw_log_debug("%p: driver:%d recalc:%s active:%d", node, node->driver, | ||||
| 			recalc_reason, node->active); | ||||
| 
 | ||||
| 	if (recalc_reason != NULL && node->active) | ||||
|  | @ -986,13 +987,13 @@ static inline int resume_node(struct pw_impl_node *this, int status) | |||
| 	activation->status = PW_NODE_ACTIVATION_FINISHED; | ||||
| 	activation->finish_time = nsec; | ||||
| 
 | ||||
| 	pw_log_trace_fp(NAME" %p: trigger peers %"PRIu64, this, nsec); | ||||
| 	pw_log_trace_fp("%p: trigger peers %"PRIu64, this, nsec); | ||||
| 
 | ||||
| 	spa_list_for_each(t, &this->rt.target_list, link) { | ||||
| 		struct pw_node_activation *a = t->activation; | ||||
| 		struct pw_node_activation_state *state = &a->state[0]; | ||||
| 
 | ||||
| 		pw_log_trace_fp(NAME" %p: state:%p pending:%d/%d", t->node, state, | ||||
| 		pw_log_trace_fp("%p: state:%p pending:%d/%d", t->node, state, | ||||
|                                 state->pending, state->required); | ||||
| 
 | ||||
| 		if (pw_node_activation_state_dec(state, 1)) { | ||||
|  | @ -1029,7 +1030,7 @@ static inline int process_node(void *data) | |||
| 	a->status = PW_NODE_ACTIVATION_AWAKE; | ||||
| 	a->awake_time = SPA_TIMESPEC_TO_NSEC(&ts); | ||||
| 
 | ||||
| 	pw_log_trace_fp(NAME" %p: process %"PRIu64, this, a->awake_time); | ||||
| 	pw_log_trace_fp("%p: process %"PRIu64, this, a->awake_time); | ||||
| 
 | ||||
| 	/* when transport sync is not supported, just clear the flag */ | ||||
| 	if (!this->transport_sync) | ||||
|  | @ -1055,7 +1056,7 @@ static inline int process_node(void *data) | |||
| 		/* calculate CPU time */ | ||||
| 		calculate_stats(this, a); | ||||
| 
 | ||||
| 		pw_log_trace_fp(NAME" %p: graph completed wait:%"PRIu64" run:%"PRIu64 | ||||
| 		pw_log_trace_fp("%p: graph completed wait:%"PRIu64" run:%"PRIu64 | ||||
| 				" busy:%"PRIu64" period:%"PRIu64" cpu:%f:%f:%f", this, | ||||
| 				a->awake_time - a->signal_time, | ||||
| 				a->finish_time - a->awake_time, | ||||
|  | @ -1066,7 +1067,7 @@ static inline int process_node(void *data) | |||
| 		pw_context_driver_emit_complete(this->context, this); | ||||
| 
 | ||||
| 	} else if (status == SPA_STATUS_OK) { | ||||
| 		pw_log_trace_fp(NAME" %p: async continue", this); | ||||
| 		pw_log_trace_fp("%p: async continue", this); | ||||
| 	} else { | ||||
| 		resume_node(this, status); | ||||
| 	} | ||||
|  | @ -1082,7 +1083,7 @@ static void node_on_fd_events(struct spa_source *source) | |||
| 	struct spa_system *data_system = this->context->data_system; | ||||
| 
 | ||||
| 	if (SPA_UNLIKELY(source->rmask & (SPA_IO_ERR | SPA_IO_HUP))) { | ||||
| 		pw_log_warn(NAME" %p: got socket error %08x", this, source->rmask); | ||||
| 		pw_log_warn("%p: got socket error %08x", this, source->rmask); | ||||
| 		return; | ||||
| 	} | ||||
| 
 | ||||
|  | @ -1090,12 +1091,12 @@ static void node_on_fd_events(struct spa_source *source) | |||
| 		uint64_t cmd; | ||||
| 
 | ||||
| 		if (SPA_UNLIKELY(spa_system_eventfd_read(data_system, this->source.fd, &cmd) < 0)) | ||||
| 			pw_log_warn(NAME" %p: read failed %m", this); | ||||
| 			pw_log_warn("%p: read failed %m", this); | ||||
| 		else if (SPA_UNLIKELY(cmd > 1)) | ||||
| 			pw_log_info("(%s-%u) client missed %"PRIu64" wakeups", | ||||
| 				this->name, this->info.id, cmd - 1); | ||||
| 
 | ||||
| 		pw_log_trace_fp(NAME" %p: got process", this); | ||||
| 		pw_log_trace_fp("%p: got process", this); | ||||
| 		this->rt.target.signal(this->rt.target.data); | ||||
| 	} | ||||
| } | ||||
|  | @ -1165,7 +1166,7 @@ struct pw_impl_node *pw_context_create_node(struct pw_context *context, | |||
| 	if ((res = spa_system_eventfd_create(data_system, SPA_FD_CLOEXEC | SPA_FD_NONBLOCK)) < 0) | ||||
| 		goto error_clean; | ||||
| 
 | ||||
| 	pw_log_debug(NAME" %p: new fd:%d", this, res); | ||||
| 	pw_log_debug("%p: new fd:%d", this, res); | ||||
| 
 | ||||
| 	this->source.fd = res; | ||||
| 	this->source.func = node_on_fd_events; | ||||
|  | @ -1291,7 +1292,7 @@ static int update_properties(struct pw_impl_node *node, const struct spa_dict *d | |||
| 	changed = pw_properties_update_ignore(node->properties, dict, filter ? ignored : NULL); | ||||
| 	node->info.props = &node->properties->dict; | ||||
| 
 | ||||
| 	pw_log_debug(NAME" %p: updated %d properties", node, changed); | ||||
| 	pw_log_debug("%p: updated %d properties", node, changed); | ||||
| 
 | ||||
| 	if (changed) { | ||||
| 		check_properties(node); | ||||
|  | @ -1317,14 +1318,14 @@ static void node_info(void *data, const struct spa_node_info *info) | |||
| 	node->info.max_input_ports = info->max_input_ports; | ||||
| 	node->info.max_output_ports = info->max_output_ports; | ||||
| 
 | ||||
| 	pw_log_debug(NAME" %p: flags:%08"PRIx64" change_mask:%08"PRIx64" max_in:%u max_out:%u", | ||||
| 	pw_log_debug("%p: flags:%08"PRIx64" change_mask:%08"PRIx64" max_in:%u max_out:%u", | ||||
| 			node, info->flags, info->change_mask, info->max_input_ports, | ||||
| 			info->max_output_ports); | ||||
| 
 | ||||
| 	if (info->change_mask & SPA_NODE_CHANGE_MASK_FLAGS) { | ||||
| 		if (node->spa_flags != info->flags) { | ||||
| 			flags_changed = node->spa_flags != 0; | ||||
| 			pw_log_debug(NAME" %p: flags %"PRIu64"->%"PRIu64, node, node->spa_flags, info->flags); | ||||
| 			pw_log_debug("%p: flags %"PRIu64"->%"PRIu64, node, node->spa_flags, info->flags); | ||||
| 			node->spa_flags = info->flags; | ||||
| 		} | ||||
| 	} | ||||
|  | @ -1340,7 +1341,7 @@ static void node_info(void *data, const struct spa_node_info *info) | |||
| 		for (i = 0; i < node->info.n_params; i++) { | ||||
| 			uint32_t id = info->params[i].id; | ||||
| 
 | ||||
| 			pw_log_debug(NAME" %p: param %d id:%d (%s) %08x:%08x", node, i, | ||||
| 			pw_log_debug("%p: param %d id:%d (%s) %08x:%08x", node, i, | ||||
| 					id, spa_debug_type_find_name(spa_type_param, id), | ||||
| 					node->info.params[i].flags, info->params[i].flags); | ||||
| 
 | ||||
|  | @ -1348,7 +1349,7 @@ static void node_info(void *data, const struct spa_node_info *info) | |||
| 			if (node->info.params[i].flags == info->params[i].flags) | ||||
| 				continue; | ||||
| 
 | ||||
| 			pw_log_debug(NAME" %p: update param %d", node, id); | ||||
| 			pw_log_debug("%p: update param %d", node, id); | ||||
| 			node->info.params[i] = info->params[i]; | ||||
| 			node->info.params[i].user = 0; | ||||
| 
 | ||||
|  | @ -1373,27 +1374,27 @@ static void node_port_info(void *data, enum spa_direction direction, uint32_t po | |||
| 
 | ||||
| 	if (info == NULL) { | ||||
| 		if (port) { | ||||
| 			pw_log_debug(NAME" %p: %s port %d removed", node, | ||||
| 			pw_log_debug("%p: %s port %d removed", node, | ||||
| 					pw_direction_as_string(direction), port_id); | ||||
| 			pw_impl_port_destroy(port); | ||||
| 		} else { | ||||
| 			pw_log_warn(NAME" %p: %s port %d unknown", node, | ||||
| 			pw_log_warn("%p: %s port %d unknown", node, | ||||
| 					pw_direction_as_string(direction), port_id); | ||||
| 		} | ||||
| 	} else if (port) { | ||||
| 		pw_log_debug(NAME" %p: %s port %d changed", node, | ||||
| 		pw_log_debug("%p: %s port %d changed", node, | ||||
| 				pw_direction_as_string(direction), port_id); | ||||
| 		pw_impl_port_update_info(port, info); | ||||
| 	} else { | ||||
| 		int res; | ||||
| 
 | ||||
| 		pw_log_debug(NAME" %p: %s port %d added", node, | ||||
| 		pw_log_debug("%p: %s port %d added", node, | ||||
| 				pw_direction_as_string(direction), port_id); | ||||
| 
 | ||||
| 		if ((port = pw_context_create_port(node->context, direction, port_id, info, | ||||
| 					node->port_user_data_size))) { | ||||
| 			if ((res = pw_impl_port_add(port, node)) < 0) { | ||||
| 				pw_log_error(NAME" %p: can't add port %p: %d, %s", | ||||
| 				pw_log_error("%p: can't add port %p: %d, %s", | ||||
| 						node, port, res, spa_strerror(res)); | ||||
| 				pw_impl_port_destroy(port); | ||||
| 			} | ||||
|  | @ -1406,7 +1407,7 @@ static void node_result(void *data, int seq, int res, uint32_t type, const void | |||
| 	struct pw_impl_node *node = data; | ||||
| 	struct impl *impl = SPA_CONTAINER_OF(node, struct impl, this); | ||||
| 
 | ||||
| 	pw_log_trace(NAME" %p: result seq:%d res:%d type:%u", node, seq, res, type); | ||||
| 	pw_log_trace("%p: result seq:%d res:%d type:%u", node, seq, res, type); | ||||
| 	if (res < 0) | ||||
| 		impl->last_error = res; | ||||
| 
 | ||||
|  | @ -1421,7 +1422,7 @@ static void node_event(void *data, const struct spa_event *event) | |||
| 	struct pw_impl_node *node = data; | ||||
| 	struct impl *impl = SPA_CONTAINER_OF(node, struct impl, this); | ||||
| 
 | ||||
| 	pw_log_trace(NAME" %p: event %d", node, SPA_EVENT_TYPE(event)); | ||||
| 	pw_log_trace("%p: event %d", node, SPA_EVENT_TYPE(event)); | ||||
| 
 | ||||
| 	switch (SPA_NODE_EVENT_ID(event)) { | ||||
| 	case SPA_NODE_EVENT_Error: | ||||
|  | @ -1461,7 +1462,7 @@ static int check_updates(struct pw_impl_node *node, uint32_t *reposition_owner) | |||
| 	*reposition_owner = ATOMIC_XCHG(a->reposition_owner, 0); | ||||
| 
 | ||||
| 	if (SPA_UNLIKELY(command != PW_NODE_ACTIVATION_COMMAND_NONE)) { | ||||
| 		pw_log_debug(NAME" %p: update command:%u", node, command); | ||||
| 		pw_log_debug("%p: update command:%u", node, command); | ||||
| 		switch (command) { | ||||
| 		case PW_NODE_ACTIVATION_COMMAND_STOP: | ||||
| 			a->position.state = SPA_IO_POSITION_STATE_STOPPED; | ||||
|  | @ -1487,7 +1488,7 @@ static void do_reposition(struct pw_impl_node *driver, struct pw_impl_node *node | |||
| 	src = &node->rt.activation->reposition; | ||||
| 	dst = &a->position.segments[0]; | ||||
| 
 | ||||
| 	pw_log_info(NAME" %p: update position:%"PRIu64, node, src->position); | ||||
| 	pw_log_info("%p: update position:%"PRIu64, node, src->position); | ||||
| 
 | ||||
| 	dst->version = src->version; | ||||
| 	dst->flags = src->flags; | ||||
|  | @ -1539,7 +1540,7 @@ static int node_ready(void *data, int status) | |||
| 	struct pw_node_target *t; | ||||
| 	struct pw_impl_port *p; | ||||
| 
 | ||||
| 	pw_log_trace_fp(NAME" %p: ready driver:%d exported:%d %p status:%d", node, | ||||
| 	pw_log_trace_fp("%p: ready driver:%d exported:%d %p status:%d", node, | ||||
| 			node->driver, node->exported, driver, status); | ||||
| 
 | ||||
| 	if (SPA_UNLIKELY(node == driver)) { | ||||
|  | @ -1683,10 +1684,10 @@ int pw_impl_node_set_implementation(struct pw_impl_node *node, | |||
| { | ||||
| 	int res; | ||||
| 
 | ||||
| 	pw_log_debug(NAME" %p: implementation %p", node, spa_node); | ||||
| 	pw_log_debug("%p: implementation %p", node, spa_node); | ||||
| 
 | ||||
| 	if (node->node) { | ||||
| 		pw_log_error(NAME" %p: implementation existed %p", node, node->node); | ||||
| 		pw_log_error("%p: implementation existed %p", node, node->node); | ||||
| 		return -EEXIST; | ||||
| 	} | ||||
| 
 | ||||
|  | @ -1732,14 +1733,14 @@ void pw_impl_node_destroy(struct pw_impl_node *node) | |||
| 	active = node->active; | ||||
| 	node->active = false; | ||||
| 
 | ||||
| 	pw_log_debug(NAME" %p: destroy", impl); | ||||
| 	pw_log_debug("%p: destroy", impl); | ||||
| 	pw_log_info("(%s-%u) destroy", node->name, node->info.id); | ||||
| 
 | ||||
| 	suspend_node(node); | ||||
| 
 | ||||
| 	pw_impl_node_emit_destroy(node); | ||||
| 
 | ||||
| 	pw_log_debug(NAME" %p: driver node %p", impl, node->driver_node); | ||||
| 	pw_log_debug("%p: driver node %p", impl, node->driver_node); | ||||
| 	had_driver = node != node->driver_node; | ||||
| 
 | ||||
| 	/* remove ourself as a follower from the driver node */ | ||||
|  | @ -1747,7 +1748,7 @@ void pw_impl_node_destroy(struct pw_impl_node *node) | |||
| 	remove_segment_owner(node->driver_node, node->info.id); | ||||
| 
 | ||||
| 	spa_list_consume(follower, &node->follower_list, follower_link) { | ||||
| 		pw_log_debug(NAME" %p: reassign follower %p", impl, follower); | ||||
| 		pw_log_debug("%p: reassign follower %p", impl, follower); | ||||
| 		pw_impl_node_set_driver(follower, NULL); | ||||
| 	} | ||||
| 
 | ||||
|  | @ -1762,7 +1763,7 @@ void pw_impl_node_destroy(struct pw_impl_node *node) | |||
| 		spa_node_set_callbacks(node->node, NULL, NULL); | ||||
| 	} | ||||
| 
 | ||||
| 	pw_log_debug(NAME" %p: destroy ports", node); | ||||
| 	pw_log_debug("%p: destroy ports", node); | ||||
| 	spa_list_consume(port, &node->input_ports, link) | ||||
| 		pw_impl_port_destroy(port); | ||||
| 	spa_list_consume(port, &node->output_ports, link) | ||||
|  | @ -1777,7 +1778,7 @@ void pw_impl_node_destroy(struct pw_impl_node *node) | |||
| 		pw_context_recalc_graph(node->context, | ||||
| 				"active node destroy"); | ||||
| 
 | ||||
| 	pw_log_debug(NAME" %p: free", node); | ||||
| 	pw_log_debug("%p: free", node); | ||||
| 	pw_impl_node_emit_free(node); | ||||
| 
 | ||||
| 	spa_hook_list_clean(&node->listener_list); | ||||
|  | @ -1882,7 +1883,7 @@ int pw_impl_node_for_each_param(struct pw_impl_node *node, | |||
| 	if (max == 0) | ||||
| 		max = UINT32_MAX; | ||||
| 
 | ||||
| 	pw_log_debug(NAME" %p: params id:%d (%s) index:%u max:%u cached:%d", node, param_id, | ||||
| 	pw_log_debug("%p: params id:%d (%s) index:%u max:%u cached:%d", node, param_id, | ||||
| 			spa_debug_type_find_name(spa_type_param, param_id), | ||||
| 			index, max, pi->user); | ||||
| 
 | ||||
|  | @ -1908,7 +1909,7 @@ int pw_impl_node_for_each_param(struct pw_impl_node *node, | |||
| 			if (spa_pod_filter(&b, &result.param, p->param, filter) != 0) | ||||
| 				continue; | ||||
| 
 | ||||
| 			pw_log_debug(NAME " %p: %d param %u", node, seq, result.index); | ||||
| 			pw_log_debug("%p: %d param %u", node, seq, result.index); | ||||
| 			result_node_params(&user_data, seq, 0, SPA_RESULT_TYPE_NODE_PARAMS, &result); | ||||
| 
 | ||||
| 			if (++count == max) | ||||
|  | @ -1938,7 +1939,7 @@ SPA_EXPORT | |||
| int pw_impl_node_set_param(struct pw_impl_node *node, | ||||
| 		uint32_t id, uint32_t flags, const struct spa_pod *param) | ||||
| { | ||||
| 	pw_log_debug(NAME" %p: set_param id:%d (%s) flags:%08x param:%p", node, id, | ||||
| 	pw_log_debug("%p: set_param id:%d (%s) flags:%08x param:%p", node, id, | ||||
| 			spa_debug_type_find_name(spa_type_param, id), flags, param); | ||||
| 	return spa_node_set_param(node->node, id, flags, param); | ||||
| } | ||||
|  | @ -1974,7 +1975,7 @@ pw_impl_node_find_port(struct pw_impl_node *node, enum pw_direction direction, u | |||
| 				port = p; | ||||
| 		} | ||||
| 	} | ||||
| 	pw_log_debug(NAME" %p: return %s port %d: %p", node, | ||||
| 	pw_log_debug("%p: return %s port %d: %p", node, | ||||
| 			pw_direction_as_string(direction), port_id, port); | ||||
| 	return port; | ||||
| } | ||||
|  | @ -1999,7 +2000,7 @@ uint32_t pw_impl_node_get_free_port_id(struct pw_impl_node *node, enum pw_direct | |||
| 		portmap = &node->output_port_map; | ||||
| 		dynamic = SPA_FLAG_IS_SET(node->spa_flags, SPA_NODE_FLAG_OUT_DYNAMIC_PORTS); | ||||
| 	} | ||||
| 	pw_log_debug(NAME" %p: direction %s n_ports:%u max_ports:%u", | ||||
| 	pw_log_debug("%p: direction %s n_ports:%u max_ports:%u", | ||||
| 			node, pw_direction_as_string(direction), n_ports, max_ports); | ||||
| 
 | ||||
| 	if (!dynamic || n_ports >= max_ports) { | ||||
|  | @ -2013,12 +2014,12 @@ uint32_t pw_impl_node_get_free_port_id(struct pw_impl_node *node, enum pw_direct | |||
| 		goto error; | ||||
| 	} | ||||
| 
 | ||||
| 	pw_log_debug(NAME" %p: free port %d", node, port_id); | ||||
| 	pw_log_debug("%p: free port %d", node, port_id); | ||||
| 
 | ||||
| 	return port_id; | ||||
| 
 | ||||
| error: | ||||
| 	pw_log_warn(NAME" %p: no more port available: %s", node, spa_strerror(res)); | ||||
| 	pw_log_warn("%p: no more port available: %s", node, spa_strerror(res)); | ||||
| 	errno = -res; | ||||
| 	return SPA_ID_INVALID; | ||||
| } | ||||
|  | @ -2033,7 +2034,7 @@ static void on_state_complete(void *obj, void *data, int res, uint32_t seq) | |||
| 	impl->pending_id = SPA_ID_INVALID; | ||||
| 	impl->pending_play = false; | ||||
| 
 | ||||
| 	pw_log_debug(NAME" %p: state complete res:%d seq:%d", node, res, seq); | ||||
| 	pw_log_debug("%p: state complete res:%d seq:%d", node, res, seq); | ||||
| 	if (impl->last_error < 0) { | ||||
| 		res = impl->last_error; | ||||
| 		impl->last_error = 0; | ||||
|  | @ -2054,7 +2055,7 @@ static void node_activate(struct pw_impl_node *this) | |||
| { | ||||
| 	struct pw_impl_port *port; | ||||
| 
 | ||||
| 	pw_log_debug(NAME" %p: activate", this); | ||||
| 	pw_log_debug("%p: activate", this); | ||||
| 	spa_list_for_each(port, &this->input_ports, link) { | ||||
| 		struct pw_impl_link *link; | ||||
| 		spa_list_for_each(link, &port->links, input_link) | ||||
|  | @ -2081,7 +2082,7 @@ int pw_impl_node_set_state(struct pw_impl_node *node, enum pw_node_state state) | |||
| 	struct impl *impl = SPA_CONTAINER_OF(node, struct impl, this); | ||||
| 	enum pw_node_state old = impl->pending; | ||||
| 
 | ||||
| 	pw_log_debug(NAME" %p: set state (%s) %s -> %s, active %d pause_on_idle:%d", node, | ||||
| 	pw_log_debug("%p: set state (%s) %s -> %s, active %d pause_on_idle:%d", node, | ||||
| 			pw_node_state_as_string(node->info.state), | ||||
| 			pw_node_state_as_string(old), | ||||
| 			pw_node_state_as_string(state), | ||||
|  | @ -2151,7 +2152,7 @@ int pw_impl_node_set_active(struct pw_impl_node *node, bool active) | |||
| 	bool old = node->active; | ||||
| 
 | ||||
| 	if (old != active) { | ||||
| 		pw_log_debug(NAME" %p: %s", node, active ? "activate" : "deactivate"); | ||||
| 		pw_log_debug("%p: %s", node, active ? "activate" : "deactivate"); | ||||
| 
 | ||||
| 		node->active = active; | ||||
| 		pw_impl_node_emit_active_changed(node, active); | ||||
|  |  | |||
|  | @ -40,6 +40,9 @@ | |||
| 
 | ||||
| #define NAME "port" | ||||
| 
 | ||||
| PW_LOG_TOPIC_EXTERN(log_port); | ||||
| #define PW_LOG_TOPIC_DEFAULT log_port | ||||
| 
 | ||||
| /** \cond */ | ||||
| struct impl { | ||||
| 	struct pw_impl_port this; | ||||
|  | @ -135,9 +138,9 @@ static int tee_process(void *object) | |||
| 	struct pw_impl_port_mix *mix; | ||||
| 	struct spa_io_buffers *io = &this->rt.io; | ||||
| 
 | ||||
| 	pw_log_trace_fp(NAME" %p: tee input %d %d", this, io->status, io->buffer_id); | ||||
| 	pw_log_trace_fp("%p: tee input %d %d", this, io->status, io->buffer_id); | ||||
| 	spa_list_for_each(mix, &this->rt.mix_list, rt_link) { | ||||
| 		pw_log_trace_fp(NAME" %p: port %d %p->%p %d", this, | ||||
| 		pw_log_trace_fp("%p: port %d %p->%p %d", this, | ||||
| 				mix->port.port_id, io, mix->io, mix->io->buffer_id); | ||||
| 		*mix->io = *io; | ||||
| 	} | ||||
|  | @ -151,7 +154,7 @@ static int tee_reuse_buffer(void *object, uint32_t port_id, uint32_t buffer_id) | |||
| 	struct impl *impl = object; | ||||
| 	struct pw_impl_port *this = &impl->this; | ||||
| 
 | ||||
| 	pw_log_trace_fp(NAME" %p: tee reuse buffer %d %d", this, port_id, buffer_id); | ||||
| 	pw_log_trace_fp("%p: tee reuse buffer %d %d", this, port_id, buffer_id); | ||||
| 	spa_node_port_reuse_buffer(this->node->node, this->port_id, buffer_id); | ||||
| 
 | ||||
| 	return 0; | ||||
|  | @ -174,7 +177,7 @@ static int schedule_mix_input(void *object) | |||
| 		return SPA_STATUS_HAVE_DATA | SPA_STATUS_NEED_DATA; | ||||
| 
 | ||||
| 	spa_list_for_each(mix, &this->rt.mix_list, rt_link) { | ||||
| 		pw_log_trace_fp(NAME" %p: mix input %d %p->%p %d %d", this, | ||||
| 		pw_log_trace_fp("%p: mix input %d %p->%p %d %d", this, | ||||
| 				mix->port.port_id, mix->io, io, mix->io->status, mix->io->buffer_id); | ||||
| 		*io = *mix->io; | ||||
| 		mix->io->status = SPA_STATUS_NEED_DATA; | ||||
|  | @ -190,7 +193,7 @@ static int schedule_mix_reuse_buffer(void *object, uint32_t port_id, uint32_t bu | |||
| 	struct pw_impl_port_mix *mix; | ||||
| 
 | ||||
| 	spa_list_for_each(mix, &this->rt.mix_list, rt_link) { | ||||
| 		pw_log_trace_fp(NAME" %p: reuse buffer %d %d", this, port_id, buffer_id); | ||||
| 		pw_log_trace_fp("%p: reuse buffer %d %d", this, port_id, buffer_id); | ||||
| 		/* FIXME send reuse buffer to peer */ | ||||
| 		break; | ||||
| 	} | ||||
|  | @ -241,7 +244,7 @@ int pw_impl_port_init_mix(struct pw_impl_port *port, struct pw_impl_port_mix *mi | |||
| 		} | ||||
| 	} | ||||
| 
 | ||||
| 	pw_log_debug(NAME" %p: init mix n_mix:%d %d.%d io:%p: (%s)", port, | ||||
| 	pw_log_debug("%p: init mix n_mix:%d %d.%d io:%p: (%s)", port, | ||||
| 			port->n_mix, port->port_id, mix->port.port_id, | ||||
| 			mix->io, spa_strerror(res)); | ||||
| 
 | ||||
|  | @ -262,7 +265,7 @@ int pw_impl_port_release_mix(struct pw_impl_port *port, struct pw_impl_port_mix | |||
| 
 | ||||
| 	spa_node_remove_port(port->mix, port->direction, port_id); | ||||
| 
 | ||||
| 	pw_log_debug(NAME" %p: release mix %d %d.%d", port, | ||||
| 	pw_log_debug("%p: release mix %d %d.%d", port, | ||||
| 			port->n_mix, port->port_id, mix->port.port_id); | ||||
| 
 | ||||
| 	return res; | ||||
|  | @ -285,7 +288,7 @@ static int update_properties(struct pw_impl_port *port, const struct spa_dict *d | |||
| 	port->info.props = &port->properties->dict; | ||||
| 
 | ||||
| 	if (changed) { | ||||
| 		pw_log_debug(NAME" %p: updated %d properties", port, changed); | ||||
| 		pw_log_debug("%p: updated %d properties", port, changed); | ||||
| 		port->info.change_mask |= PW_PORT_CHANGE_MASK_PROPS; | ||||
| 	} | ||||
| 	return changed; | ||||
|  | @ -313,7 +316,7 @@ static int notify_param(void *data, int seq, uint32_t id, | |||
| 		if (!resource_is_subscribed(resource, id)) | ||||
| 			continue; | ||||
| 
 | ||||
| 		pw_log_debug(NAME" %p: resource %p notify param %d", port, resource, id); | ||||
| 		pw_log_debug("%p: resource %p notify param %d", port, resource, id); | ||||
| 		pw_port_resource_param(resource, seq, id, index, next, param); | ||||
| 	} | ||||
| 	return 0; | ||||
|  | @ -327,13 +330,13 @@ static void emit_params(struct pw_impl_port *port, uint32_t *changed_ids, uint32 | |||
| 	if (port->global == NULL) | ||||
| 		return; | ||||
| 
 | ||||
| 	pw_log_debug(NAME" %p: emit %d params", port, n_changed_ids); | ||||
| 	pw_log_debug("%p: emit %d params", port, n_changed_ids); | ||||
| 
 | ||||
| 	for (i = 0; i < n_changed_ids; i++) { | ||||
| 		struct pw_resource *resource; | ||||
| 		int subscribed = 0; | ||||
| 
 | ||||
| 		pw_log_debug(NAME" %p: emit param %d/%d: %d", port, i, n_changed_ids, | ||||
| 		pw_log_debug("%p: emit param %d/%d: %d", port, i, n_changed_ids, | ||||
| 				changed_ids[i]); | ||||
| 
 | ||||
| 		pw_impl_port_emit_param_changed(port, changed_ids[i]); | ||||
|  | @ -348,7 +351,7 @@ static void emit_params(struct pw_impl_port *port, uint32_t *changed_ids, uint32 | |||
| 
 | ||||
| 		if ((res = pw_impl_port_for_each_param(port, 1, changed_ids[i], 0, UINT32_MAX, | ||||
| 					NULL, notify_param, port)) < 0) { | ||||
| 			pw_log_error(NAME" %p: error %d (%s)", port, res, spa_strerror(res)); | ||||
| 			pw_log_error("%p: error %d (%s)", port, res, spa_strerror(res)); | ||||
| 		} | ||||
| 	} | ||||
| } | ||||
|  | @ -384,7 +387,7 @@ static void update_info(struct pw_impl_port *port, const struct spa_port_info *i | |||
| { | ||||
| 	uint32_t changed_ids[MAX_PARAMS], n_changed_ids = 0; | ||||
| 
 | ||||
| 	pw_log_debug(NAME" %p: %p flags:%08"PRIx64" change_mask:%08"PRIx64, | ||||
| 	pw_log_debug("%p: %p flags:%08"PRIx64" change_mask:%08"PRIx64, | ||||
| 			port, info, info->flags, info->change_mask); | ||||
| 
 | ||||
| 	if (info->change_mask & SPA_PORT_CHANGE_MASK_FLAGS) { | ||||
|  | @ -394,7 +397,7 @@ static void update_info(struct pw_impl_port *port, const struct spa_port_info *i | |||
| 		if (info->props) { | ||||
| 			update_properties(port, info->props, true); | ||||
| 		} else { | ||||
| 			pw_log_warn(NAME" %p: port PROPS update but no properties", port); | ||||
| 			pw_log_warn("%p: port PROPS update but no properties", port); | ||||
| 		} | ||||
| 	} | ||||
| 	if (info->change_mask & SPA_PORT_CHANGE_MASK_PARAMS) { | ||||
|  | @ -406,7 +409,7 @@ static void update_info(struct pw_impl_port *port, const struct spa_port_info *i | |||
| 		for (i = 0; i < port->info.n_params; i++) { | ||||
| 			uint32_t id = info->params[i].id; | ||||
| 
 | ||||
| 			pw_log_debug(NAME" %p: param %d id:%d (%s) %08x:%08x", port, i, | ||||
| 			pw_log_debug("%p: param %d id:%d (%s) %08x:%08x", port, i, | ||||
| 					id, spa_debug_type_find_name(spa_type_param, id), | ||||
| 					port->info.params[i].flags, info->params[i].flags); | ||||
| 
 | ||||
|  | @ -414,7 +417,7 @@ static void update_info(struct pw_impl_port *port, const struct spa_port_info *i | |||
| 			if (port->info.params[i].flags == info->params[i].flags) | ||||
| 				continue; | ||||
| 
 | ||||
| 			pw_log_debug(NAME" %p: update param %d", port, id); | ||||
| 			pw_log_debug("%p: update param %d", port, id); | ||||
| 			port->info.params[i] = info->params[i]; | ||||
| 			port->info.params[i].user = 0; | ||||
| 
 | ||||
|  | @ -462,7 +465,7 @@ struct pw_impl_port *pw_context_create_port( | |||
| 	impl->cache_params = true; | ||||
| 
 | ||||
| 	this = &impl->this; | ||||
| 	pw_log_debug(NAME" %p: new %s %d", this, | ||||
| 	pw_log_debug("%p: new %s %d", this, | ||||
| 			pw_direction_as_string(direction), port_id); | ||||
| 
 | ||||
| 	if (info && info->change_mask & SPA_PORT_CHANGE_MASK_PROPS && info->props) | ||||
|  | @ -529,7 +532,7 @@ struct pw_impl_port *pw_context_create_port( | |||
| 	return this; | ||||
| 
 | ||||
| error_no_mem: | ||||
| 	pw_log_warn(NAME" %p: new failed", impl); | ||||
| 	pw_log_warn("%p: new failed", impl); | ||||
| 	free(impl); | ||||
| 	errno = -res; | ||||
| 	return NULL; | ||||
|  | @ -546,7 +549,7 @@ int pw_impl_port_set_mix(struct pw_impl_port *port, struct spa_node *node, uint3 | |||
| 		flags = 0; | ||||
| 	} | ||||
| 
 | ||||
| 	pw_log_debug(NAME" %p: mix node %p->%p", port, port->mix, node); | ||||
| 	pw_log_debug("%p: mix node %p->%p", port, port->mix, node); | ||||
| 
 | ||||
| 	if (port->mix != NULL && port->mix != node) { | ||||
| 		spa_list_for_each(mix, &port->mix_list, link) | ||||
|  | @ -588,7 +591,7 @@ static int setup_mixer(struct pw_impl_port *port, const struct spa_pod *param) | |||
| 	if ((res = spa_format_parse(param, &media_type, &media_subtype)) < 0) | ||||
| 		return res; | ||||
| 
 | ||||
| 	pw_log_debug(NAME" %p: %s/%s", port, | ||||
| 	pw_log_debug("%p: %s/%s", port, | ||||
| 			spa_debug_type_find_name(spa_type_media_type, media_type), | ||||
| 			spa_debug_type_find_name(spa_type_media_subtype, media_subtype)); | ||||
| 
 | ||||
|  | @ -717,7 +720,7 @@ static int do_add_port(struct spa_loop *loop, | |||
| { | ||||
|         struct pw_impl_port *this = user_data; | ||||
| 
 | ||||
| 	pw_log_trace(NAME" %p: add port", this); | ||||
| 	pw_log_trace("%p: add port", this); | ||||
| 	if (this->direction == PW_DIRECTION_INPUT) | ||||
| 		spa_list_append(&this->node->rt.input_mix, &this->rt.node_link); | ||||
| 	else | ||||
|  | @ -739,7 +742,7 @@ static int check_param_io(void *data, int seq, uint32_t id, | |||
| 			SPA_PARAM_IO_size, SPA_POD_Int(&psize)) < 0) | ||||
| 		return 0; | ||||
| 
 | ||||
| 	pw_log_debug(NAME" %p: got io id:%d (%s)", port, pid, | ||||
| 	pw_log_debug("%p: got io id:%d (%s)", port, pid, | ||||
| 			spa_debug_type_find_name(spa_type_io, pid)); | ||||
| 
 | ||||
| 	switch (pid) { | ||||
|  | @ -762,7 +765,7 @@ static int reply_param(void *data, int seq, uint32_t id, | |||
| { | ||||
| 	struct resource_data *d = data; | ||||
| 	struct pw_resource *resource = d->resource; | ||||
| 	pw_log_debug(NAME" %p: resource %p reply param %u %u %u", d->port, | ||||
| 	pw_log_debug("%p: resource %p reply param %u %u %u", d->port, | ||||
| 			resource, id, index, next); | ||||
| 	pw_port_resource_param(resource, seq, id, index, next, param); | ||||
| 	return 0; | ||||
|  | @ -776,7 +779,7 @@ static int port_enum_params(void *object, int seq, uint32_t id, uint32_t index, | |||
| 	struct pw_impl_port *port = data->port; | ||||
| 	int res; | ||||
| 
 | ||||
| 	pw_log_debug(NAME" %p: resource %p enum params seq:%d id:%d (%s) index:%u num:%u", port, | ||||
| 	pw_log_debug("%p: resource %p enum params seq:%d id:%d (%s) index:%u num:%u", port, | ||||
| 			resource, seq, id, spa_debug_type_find_name(spa_type_param, id), | ||||
| 			index, num); | ||||
| 
 | ||||
|  | @ -799,7 +802,7 @@ static int port_subscribe_params(void *object, uint32_t *ids, uint32_t n_ids) | |||
| 
 | ||||
| 	for (i = 0; i < n_ids; i++) { | ||||
| 		data->subscribe_ids[i] = ids[i]; | ||||
| 		pw_log_debug(NAME" %p: resource %p subscribe param id:%d (%s)", data->port, | ||||
| 		pw_log_debug("%p: resource %p subscribe param id:%d (%s)", data->port, | ||||
| 				resource, ids[i], | ||||
| 				spa_debug_type_find_name(spa_type_param, ids[i])); | ||||
| 		port_enum_params(data, 1, ids[i], 0, UINT32_MAX, NULL); | ||||
|  | @ -852,7 +855,7 @@ global_bind(void *_data, struct pw_impl_client *client, uint32_t permissions, | |||
| 			&data->object_listener, | ||||
| 			&port_methods, data); | ||||
| 
 | ||||
| 	pw_log_debug(NAME" %p: bound to %d", this, resource->id); | ||||
| 	pw_log_debug("%p: bound to %d", this, resource->id); | ||||
| 	pw_global_add_resource(global, resource); | ||||
| 
 | ||||
| 	this->info.change_mask = PW_PORT_CHANGE_MASK_ALL; | ||||
|  | @ -861,7 +864,7 @@ global_bind(void *_data, struct pw_impl_client *client, uint32_t permissions, | |||
| 	return 0; | ||||
| 
 | ||||
| error_resource: | ||||
| 	pw_log_error(NAME" %p: can't create port resource: %m", this); | ||||
| 	pw_log_error("%p: can't create port resource: %m", this); | ||||
| 	return res; | ||||
| } | ||||
| 
 | ||||
|  | @ -984,9 +987,9 @@ int pw_impl_port_add(struct pw_impl_port *port, struct pw_impl_node *node) | |||
| 	port->info.props = &port->properties->dict; | ||||
| 
 | ||||
| 	if (control) { | ||||
| 		pw_log_debug(NAME" %p: setting node control", port); | ||||
| 		pw_log_debug("%p: setting node control", port); | ||||
| 	} else { | ||||
| 		pw_log_debug(NAME" %p: setting node io", port); | ||||
| 		pw_log_debug("%p: setting node io", port); | ||||
| 		spa_node_port_set_io(node->node, | ||||
| 				     port->direction, port->port_id, | ||||
| 				     SPA_IO_Buffers, | ||||
|  | @ -998,7 +1001,7 @@ int pw_impl_port_add(struct pw_impl_port *port, struct pw_impl_node *node) | |||
| 			     &port->rt.io, sizeof(port->rt.io)); | ||||
| 	} | ||||
| 
 | ||||
| 	pw_log_debug(NAME" %p: %d add to node %p", port, port_id, node); | ||||
| 	pw_log_debug("%p: %d add to node %p", port, port_id, node); | ||||
| 
 | ||||
| 	spa_list_append(ports, &port->link); | ||||
| 
 | ||||
|  | @ -1038,7 +1041,7 @@ static int do_remove_port(struct spa_loop *loop, | |||
| { | ||||
| 	struct pw_impl_port *this = user_data; | ||||
| 
 | ||||
| 	pw_log_trace(NAME" %p: remove port", this); | ||||
| 	pw_log_trace("%p: remove port", this); | ||||
| 	spa_list_remove(&this->rt.node_link); | ||||
| 
 | ||||
| 	return 0; | ||||
|  | @ -1052,7 +1055,7 @@ static void pw_impl_port_remove(struct pw_impl_port *port) | |||
| 	if (node == NULL) | ||||
| 		return; | ||||
| 
 | ||||
| 	pw_log_debug(NAME" %p: remove added:%d", port, port->added); | ||||
| 	pw_log_debug("%p: remove added:%d", port, port->added); | ||||
| 
 | ||||
| 	if (port->added) { | ||||
| 		pw_loop_invoke(node->data_loop, do_remove_port, | ||||
|  | @ -1062,7 +1065,7 @@ static void pw_impl_port_remove(struct pw_impl_port *port) | |||
| 
 | ||||
| 	if (SPA_FLAG_IS_SET(port->flags, PW_IMPL_PORT_FLAG_TO_REMOVE)) { | ||||
| 		if ((res = spa_node_remove_port(node->node, port->direction, port->port_id)) < 0) | ||||
| 			pw_log_warn(NAME" %p: can't remove: %s", port, spa_strerror(res)); | ||||
| 			pw_log_warn("%p: can't remove: %s", port, spa_strerror(res)); | ||||
| 	} | ||||
| 
 | ||||
| 	if (port->direction == PW_DIRECTION_INPUT) { | ||||
|  | @ -1085,14 +1088,14 @@ void pw_impl_port_destroy(struct pw_impl_port *port) | |||
| 	struct impl *impl = SPA_CONTAINER_OF(port, struct impl, this); | ||||
| 	struct pw_control *control; | ||||
| 
 | ||||
| 	pw_log_debug(NAME" %p: destroy", port); | ||||
| 	pw_log_debug("%p: destroy", port); | ||||
| 
 | ||||
| 	port->destroying = true; | ||||
| 	pw_impl_port_emit_destroy(port); | ||||
| 
 | ||||
| 	pw_impl_port_unlink(port); | ||||
| 
 | ||||
| 	pw_log_debug(NAME" %p: control destroy", port); | ||||
| 	pw_log_debug("%p: control destroy", port); | ||||
| 	spa_list_consume(control, &port->control_list[0], port_link) | ||||
| 		pw_control_destroy(control); | ||||
| 	spa_list_consume(control, &port->control_list[1], port_link) | ||||
|  | @ -1105,7 +1108,7 @@ void pw_impl_port_destroy(struct pw_impl_port *port) | |||
| 		pw_global_destroy(port->global); | ||||
| 	} | ||||
| 
 | ||||
| 	pw_log_debug(NAME" %p: free", port); | ||||
| 	pw_log_debug("%p: free", port); | ||||
| 	pw_impl_port_emit_free(port); | ||||
| 
 | ||||
| 	spa_hook_list_clean(&port->listener_list); | ||||
|  | @ -1186,7 +1189,7 @@ int pw_impl_port_for_each_param(struct pw_impl_port *port, | |||
| 	if (max == 0) | ||||
| 		max = UINT32_MAX; | ||||
| 
 | ||||
| 	pw_log_debug(NAME" %p: params id:%d (%s) index:%u max:%u cached:%d", port, param_id, | ||||
| 	pw_log_debug("%p: params id:%d (%s) index:%u max:%u cached:%d", port, param_id, | ||||
| 			spa_debug_type_find_name(spa_type_param, param_id), | ||||
| 			index, max, pi->user); | ||||
| 
 | ||||
|  | @ -1237,7 +1240,7 @@ int pw_impl_port_for_each_param(struct pw_impl_port *port, | |||
| 		} | ||||
| 	} | ||||
| 
 | ||||
| 	pw_log_debug(NAME" %p: res %d: (%s)", port, res, spa_strerror(res)); | ||||
| 	pw_log_debug("%p: res %d: (%s)", port, res, spa_strerror(res)); | ||||
| 	return res; | ||||
| } | ||||
| 
 | ||||
|  | @ -1372,14 +1375,14 @@ int pw_impl_port_set_param(struct pw_impl_port *port, uint32_t id, uint32_t flag | |||
| 	int res; | ||||
| 	struct pw_impl_node *node = port->node; | ||||
| 
 | ||||
| 	pw_log_debug(NAME" %p: %d set param %d %p", port, port->state, id, param); | ||||
| 	pw_log_debug("%p: %d set param %d %p", port, port->state, id, param); | ||||
| 
 | ||||
| 	/* set parameter on node */ | ||||
| 	res = spa_node_port_set_param(node->node, | ||||
| 			port->direction, port->port_id, | ||||
| 			id, flags, param); | ||||
| 
 | ||||
| 	pw_log_debug(NAME" %p: %d set param on node %d:%d id:%d (%s): %d (%s)", port, port->state, | ||||
| 	pw_log_debug("%p: %d set param on node %d:%d id:%d (%s): %d (%s)", port, port->state, | ||||
| 			port->direction, port->port_id, id, | ||||
| 			spa_debug_type_find_name(spa_type_param, id), | ||||
| 			res, spa_strerror(res)); | ||||
|  | @ -1405,7 +1408,7 @@ int pw_impl_port_set_param(struct pw_impl_port *port, uint32_t id, uint32_t flag | |||
| 	} | ||||
| 
 | ||||
| 	if (id == SPA_PARAM_Format) { | ||||
| 		pw_log_debug(NAME" %p: %d %p %d", port, port->state, param, res); | ||||
| 		pw_log_debug("%p: %d %p %d", port, port->state, param, res); | ||||
| 
 | ||||
| 		if (port->added) { | ||||
| 			pw_loop_invoke(node->data_loop, do_remove_port, SPA_ID_INVALID, NULL, 0, true, port); | ||||
|  | @ -1440,7 +1443,7 @@ static int negotiate_mixer_buffers(struct pw_impl_port *port, uint32_t flags, | |||
| 		/* try dynamic data */ | ||||
| 		alloc_flags = PW_BUFFERS_FLAG_DYNAMIC; | ||||
| 
 | ||||
| 		pw_log_debug(NAME" %p: %d.%d negotiate %d buffers on node: %p", | ||||
| 		pw_log_debug("%p: %d.%d negotiate %d buffers on node: %p", | ||||
| 				port, port->direction, port->port_id, n_buffers, node->node); | ||||
| 
 | ||||
| 		if (port->added) { | ||||
|  | @ -1455,7 +1458,7 @@ static int negotiate_mixer_buffers(struct pw_impl_port *port, uint32_t flags, | |||
| 					port->mix, 0, | ||||
| 					node->node, port->port_id, | ||||
| 					&port->mix_buffers)) < 0) { | ||||
| 				pw_log_warn(NAME" %p: can't negotiate buffers: %s", | ||||
| 				pw_log_warn("%p: can't negotiate buffers: %s", | ||||
| 						port, spa_strerror(res)); | ||||
| 				return res; | ||||
| 			} | ||||
|  | @ -1465,7 +1468,7 @@ static int negotiate_mixer_buffers(struct pw_impl_port *port, uint32_t flags, | |||
| 		} | ||||
| 	} | ||||
| 
 | ||||
| 	pw_log_debug(NAME" %p: %d.%d use %d buffers on node: %p", | ||||
| 	pw_log_debug("%p: %d.%d use %d buffers on node: %p", | ||||
| 			port, port->direction, port->port_id, n_buffers, node->node); | ||||
| 
 | ||||
| 	res = spa_node_port_use_buffers(node->node, | ||||
|  | @ -1491,7 +1494,7 @@ int pw_impl_port_use_buffers(struct pw_impl_port *port, struct pw_impl_port_mix | |||
| { | ||||
| 	int res = 0, res2; | ||||
| 
 | ||||
| 	pw_log_debug(NAME" %p: %d:%d.%d: %d buffers flags:%d state:%d n_mix:%d", port, | ||||
| 	pw_log_debug("%p: %d:%d.%d: %d buffers flags:%d state:%d n_mix:%d", port, | ||||
| 			port->direction, port->port_id, mix->id, | ||||
| 			n_buffers, flags, port->state, port->n_mix); | ||||
| 
 | ||||
|  | @ -1512,7 +1515,7 @@ int pw_impl_port_use_buffers(struct pw_impl_port *port, struct pw_impl_port_mix | |||
| 		res = negotiate_mixer_buffers(port, flags, buffers, n_buffers); | ||||
| 
 | ||||
| 		if (res < 0) { | ||||
| 			pw_log_error(NAME" %p: negotiate buffers on node: %d (%s)", | ||||
| 			pw_log_error("%p: negotiate buffers on node: %d (%s)", | ||||
| 				port, res, spa_strerror(res)); | ||||
| 			pw_impl_port_update_state(port, PW_IMPL_PORT_STATE_ERROR, res, | ||||
| 					strdup("can't negotiate buffers on port")); | ||||
|  | @ -1530,7 +1533,7 @@ int pw_impl_port_use_buffers(struct pw_impl_port *port, struct pw_impl_port_mix | |||
| 			buffers, n_buffers); | ||||
| 	if (res2 < 0) { | ||||
| 		if (res2 != -ENOTSUP && n_buffers > 0) { | ||||
| 			pw_log_warn(NAME" %p: mix use buffers failed: %d (%s)", | ||||
| 			pw_log_warn("%p: mix use buffers failed: %d (%s)", | ||||
| 					port, res2, spa_strerror(res2)); | ||||
| 			return res2; | ||||
| 		} | ||||
|  |  | |||
|  | @ -53,6 +53,15 @@ PW_LOG_TOPIC(log_context, "pw.context"); | |||
| PW_LOG_TOPIC(log_metadata, "pw.metadata"); | ||||
| PW_LOG_TOPIC(log_node, "pw.node"); | ||||
| PW_LOG_TOPIC(log_port, "pw.port"); | ||||
| PW_LOG_TOPIC(log_core, "pw.core"); | ||||
| PW_LOG_TOPIC(log_proxy, "pw.proxy"); | ||||
| PW_LOG_TOPIC(log_global, "pw.global"); | ||||
| PW_LOG_TOPIC(log_protocol, "pw.protocol"); | ||||
| PW_LOG_TOPIC(log_client, "pw.client"); | ||||
| PW_LOG_TOPIC(log_factory, "pw.factory"); | ||||
| PW_LOG_TOPIC(log_module, "pw.module"); | ||||
| PW_LOG_TOPIC(log_device, "pw.device"); | ||||
| PW_LOG_TOPIC(log_resource, "pw.resource"); | ||||
| 
 | ||||
| PW_LOG_TOPIC(PW_LOG_TOPIC_DEFAULT, "default"); | ||||
| 
 | ||||
|  | @ -413,4 +422,13 @@ pw_log_init(void) | |||
| 	PW_LOG_TOPIC_INIT(log_metadata); | ||||
| 	PW_LOG_TOPIC_INIT(log_node); | ||||
| 	PW_LOG_TOPIC_INIT(log_port); | ||||
| 	PW_LOG_TOPIC_INIT(log_core); | ||||
| 	PW_LOG_TOPIC_INIT(log_proxy); | ||||
| 	PW_LOG_TOPIC_INIT(log_global); | ||||
| 	PW_LOG_TOPIC_INIT(log_protocol); | ||||
| 	PW_LOG_TOPIC_INIT(log_client); | ||||
| 	PW_LOG_TOPIC_INIT(log_factory); | ||||
| 	PW_LOG_TOPIC_INIT(log_module); | ||||
| 	PW_LOG_TOPIC_INIT(log_device); | ||||
| 	PW_LOG_TOPIC_INIT(log_resource); | ||||
| } | ||||
|  |  | |||
|  | @ -52,6 +52,9 @@ | |||
| 
 | ||||
| #define SUPPORTLIB	"support/libspa-support" | ||||
| 
 | ||||
| PW_LOG_TOPIC_EXTERN(log_context); | ||||
| #define PW_LOG_TOPIC_DEFAULT log_context | ||||
| 
 | ||||
| static char *prgname; | ||||
| 
 | ||||
| static struct spa_i18n *_pipewire_i18n = NULL; | ||||
|  |  | |||
|  | @ -31,7 +31,8 @@ | |||
| #include <pipewire/private.h> | ||||
| #include <pipewire/type.h> | ||||
| 
 | ||||
| #define NAME "protocol" | ||||
| PW_LOG_TOPIC_EXTERN(log_protocol); | ||||
| #define PW_LOG_TOPIC_DEFAULT log_protocol | ||||
| 
 | ||||
| /** \cond */ | ||||
| struct impl { | ||||
|  | @ -68,7 +69,7 @@ struct pw_protocol *pw_protocol_new(struct pw_context *context, | |||
| 
 | ||||
| 	spa_list_append(&context->protocol_list, &protocol->link); | ||||
| 
 | ||||
| 	pw_log_debug(NAME" %p: Created protocol %s", protocol, name); | ||||
| 	pw_log_debug("%p: Created protocol %s", protocol, name); | ||||
| 
 | ||||
| 	return protocol; | ||||
| } | ||||
|  | @ -107,7 +108,7 @@ void pw_protocol_destroy(struct pw_protocol *protocol) | |||
| 	struct pw_protocol_server *server; | ||||
| 	struct pw_protocol_client *client; | ||||
| 
 | ||||
| 	pw_log_debug(NAME" %p: destroy", protocol); | ||||
| 	pw_log_debug("%p: destroy", protocol); | ||||
| 	pw_protocol_emit_destroy(protocol); | ||||
| 
 | ||||
| 	spa_hook_list_clean(&protocol->listener_list); | ||||
|  | @ -152,7 +153,7 @@ pw_protocol_add_marshal(struct pw_protocol *protocol, | |||
| 
 | ||||
| 	spa_list_append(&protocol->marshal_list, &impl->link); | ||||
| 
 | ||||
| 	pw_log_debug(NAME" %p: Add marshal %s/%d to protocol %s", protocol, | ||||
| 	pw_log_debug("%p: Add marshal %s/%d to protocol %s", protocol, | ||||
| 			marshal->type, marshal->version, protocol->name); | ||||
| 
 | ||||
| 	return 0; | ||||
|  | @ -170,7 +171,7 @@ pw_protocol_get_marshal(struct pw_protocol *protocol, const char *type, uint32_t | |||
| 		    (impl->marshal->flags & flags) == flags) | ||||
|                         return impl->marshal; | ||||
|         } | ||||
| 	pw_log_debug(NAME" %p: No marshal %s/%d for protocol %s", protocol, | ||||
| 	pw_log_debug("%p: No marshal %s/%d for protocol %s", protocol, | ||||
| 			type, version, protocol->name); | ||||
| 	return NULL; | ||||
| } | ||||
|  |  | |||
|  | @ -32,7 +32,8 @@ | |||
| 
 | ||||
| #include <spa/debug/types.h> | ||||
| 
 | ||||
| #define NAME "proxy" | ||||
| PW_LOG_TOPIC_EXTERN(log_proxy); | ||||
| #define PW_LOG_TOPIC_DEFAULT log_proxy | ||||
| 
 | ||||
| /** \cond */ | ||||
| struct proxy { | ||||
|  | @ -52,7 +53,7 @@ int pw_proxy_init(struct pw_proxy *proxy, const char *type, uint32_t version) | |||
| 	proxy->id = pw_map_insert_new(&proxy->core->objects, proxy); | ||||
| 	if (proxy->id == SPA_ID_INVALID) { | ||||
| 		res = -errno; | ||||
| 		pw_log_error(NAME" %p: can't allocate new id: %m", proxy); | ||||
| 		pw_log_error("%p: can't allocate new id: %m", proxy); | ||||
| 		goto error; | ||||
| 	} | ||||
| 
 | ||||
|  | @ -60,7 +61,7 @@ int pw_proxy_init(struct pw_proxy *proxy, const char *type, uint32_t version) | |||
| 	spa_hook_list_init(&proxy->object_listener_list); | ||||
| 
 | ||||
| 	if ((res = pw_proxy_install_marshal(proxy, false)) < 0) { | ||||
| 		pw_log_error(NAME" %p: no marshal for type %s/%d: %s", proxy, | ||||
| 		pw_log_error("%p: no marshal for type %s/%d: %s", proxy, | ||||
| 				type, version, spa_strerror(res)); | ||||
| 		goto error_clean; | ||||
| 	} | ||||
|  | @ -108,7 +109,7 @@ struct pw_proxy *pw_proxy_new(struct pw_proxy *factory, | |||
| 	if (user_data_size > 0) | ||||
| 		this->user_data = SPA_PTROFF(impl, sizeof(struct proxy), void); | ||||
| 
 | ||||
| 	pw_log_debug(NAME" %p: new %u type %s/%d core-proxy:%p, marshal:%p", | ||||
| 	pw_log_debug("%p: new %u type %s/%d core-proxy:%p, marshal:%p", | ||||
| 			this, this->id, type, version, this->core, this->marshal); | ||||
| 	return this; | ||||
| 
 | ||||
|  | @ -159,7 +160,7 @@ SPA_EXPORT | |||
| int pw_proxy_set_bound_id(struct pw_proxy *proxy, uint32_t global_id) | ||||
| { | ||||
| 	proxy->bound_id = global_id; | ||||
| 	pw_log_debug(NAME" %p: id:%d bound:%d", proxy, proxy->id, global_id); | ||||
| 	pw_log_debug("%p: id:%d bound:%d", proxy, proxy->id, global_id); | ||||
| 	pw_proxy_emit_bound(proxy, global_id); | ||||
| 	return 0; | ||||
| } | ||||
|  | @ -229,7 +230,7 @@ static inline void remove_from_map(struct pw_proxy *proxy) | |||
| SPA_EXPORT | ||||
| void pw_proxy_destroy(struct pw_proxy *proxy) | ||||
| { | ||||
| 	pw_log_debug(NAME" %p: destroy id:%u removed:%u zombie:%u ref:%d", proxy, | ||||
| 	pw_log_debug("%p: destroy id:%u removed:%u zombie:%u ref:%d", proxy, | ||||
| 			proxy->id, proxy->removed, proxy->zombie, proxy->refcount); | ||||
| 
 | ||||
| 	assert(!proxy->destroyed); | ||||
|  | @ -267,7 +268,7 @@ void pw_proxy_remove(struct pw_proxy *proxy) | |||
| { | ||||
| 	assert(proxy->refcount > 0); | ||||
| 
 | ||||
| 	pw_log_debug(NAME" %p: remove id:%u removed:%u destroyed:%u zombie:%u ref:%d", proxy, | ||||
| 	pw_log_debug("%p: remove id:%u removed:%u destroyed:%u zombie:%u ref:%d", proxy, | ||||
| 			proxy->id, proxy->removed, proxy->destroyed, proxy->zombie, | ||||
| 			proxy->refcount); | ||||
| 
 | ||||
|  | @ -294,7 +295,7 @@ void pw_proxy_unref(struct pw_proxy *proxy) | |||
| 	if (--proxy->refcount > 0) | ||||
| 		return; | ||||
| 
 | ||||
| 	pw_log_debug(NAME" %p: free %u", proxy, proxy->id); | ||||
| 	pw_log_debug("%p: free %u", proxy, proxy->id); | ||||
| 	/** client must explicitly destroy all proxies */ | ||||
| 	assert(proxy->destroyed); | ||||
| 	free(proxy); | ||||
|  | @ -315,7 +316,7 @@ int pw_proxy_sync(struct pw_proxy *proxy, int seq) | |||
| 
 | ||||
| 	if (core && !core->removed) { | ||||
| 		res = pw_core_sync(core, proxy->id, seq); | ||||
| 		pw_log_debug(NAME" %p: %u seq:%d sync %u", proxy, proxy->id, seq, res); | ||||
| 		pw_log_debug("%p: %u seq:%d sync %u", proxy, proxy->id, seq, res); | ||||
| 	} | ||||
| 	return res; | ||||
| } | ||||
|  |  | |||
|  | @ -31,7 +31,8 @@ | |||
| 
 | ||||
| #include <spa/debug/types.h> | ||||
| 
 | ||||
| #define NAME "resource" | ||||
| PW_LOG_TOPIC_EXTERN(log_device); | ||||
| #define PW_LOG_TOPIC_DEFAULT log_device | ||||
| 
 | ||||
| /** \cond */ | ||||
| struct impl { | ||||
|  | @ -72,14 +73,14 @@ struct pw_resource *pw_resource_new(struct pw_impl_client *client, | |||
| 	} | ||||
| 
 | ||||
| 	if ((res = pw_map_insert_at(&client->objects, id, this)) < 0) { | ||||
| 		pw_log_error(NAME" %p: can't add id %u for client %p: %s", | ||||
| 		pw_log_error("%p: can't add id %u for client %p: %s", | ||||
| 			this, id, client, spa_strerror(res)); | ||||
| 		goto error_clean; | ||||
| 	} | ||||
| 	this->id = id; | ||||
| 
 | ||||
| 	if ((res = pw_resource_install_marshal(this, false)) < 0) { | ||||
| 		pw_log_error(NAME" %p: no marshal for type %s/%d: %s", this, | ||||
| 		pw_log_error("%p: no marshal for type %s/%d: %s", this, | ||||
| 				type, version, spa_strerror(res)); | ||||
| 		goto error_clean; | ||||
| 	} | ||||
|  | @ -88,7 +89,7 @@ struct pw_resource *pw_resource_new(struct pw_impl_client *client, | |||
| 	if (user_data_size > 0) | ||||
| 		this->user_data = SPA_PTROFF(impl, sizeof(struct impl), void); | ||||
| 
 | ||||
| 	pw_log_debug(NAME" %p: new %u type %s/%d client:%p marshal:%p", | ||||
| 	pw_log_debug("%p: new %u type %s/%d client:%p marshal:%p", | ||||
| 			this, id, type, version, client, this->marshal); | ||||
| 
 | ||||
| 	pw_impl_client_emit_resource_added(client, this); | ||||
|  | @ -200,7 +201,7 @@ int pw_resource_ping(struct pw_resource *resource, int seq) | |||
| 	if (client->core_resource != NULL) { | ||||
| 		pw_core_resource_ping(client->core_resource, resource->id, seq); | ||||
| 		res = client->send_seq; | ||||
| 		pw_log_debug(NAME" %p: %u seq:%d ping %d", resource, resource->id, seq, res); | ||||
| 		pw_log_debug("%p: %u seq:%d ping %d", resource, resource->id, seq, res); | ||||
| 	} | ||||
| 	return res; | ||||
| } | ||||
|  | @ -212,7 +213,7 @@ int pw_resource_set_bound_id(struct pw_resource *resource, uint32_t global_id) | |||
| 
 | ||||
| 	resource->bound_id = global_id; | ||||
| 	if (client->core_resource != NULL) { | ||||
| 		pw_log_debug(NAME" %p: %u global_id:%u", resource, resource->id, global_id); | ||||
| 		pw_log_debug("%p: %u global_id:%u", resource, resource->id, global_id); | ||||
| 		pw_core_resource_bound_id(client->core_resource, resource->id, global_id); | ||||
| 	} | ||||
| 	return 0; | ||||
|  | @ -270,7 +271,7 @@ void pw_resource_destroy(struct pw_resource *resource) | |||
| 		resource->global = NULL; | ||||
| 	} | ||||
| 
 | ||||
| 	pw_log_debug(NAME" %p: destroy %u", resource, resource->id); | ||||
| 	pw_log_debug("%p: destroy %u", resource, resource->id); | ||||
| 	pw_resource_emit_destroy(resource); | ||||
| 
 | ||||
| 	pw_map_insert_at(&client->objects, resource->id, NULL); | ||||
|  | @ -279,7 +280,7 @@ void pw_resource_destroy(struct pw_resource *resource) | |||
| 	if (client->core_resource && !resource->removed) | ||||
| 		pw_core_resource_remove_id(client->core_resource, resource->id); | ||||
| 
 | ||||
| 	pw_log_debug(NAME" %p: free %u", resource, resource->id); | ||||
| 	pw_log_debug("%p: free %u", resource, resource->id); | ||||
| 
 | ||||
| 	spa_hook_list_clean(&resource->listener_list); | ||||
| 	spa_hook_list_clean(&resource->object_listener_list); | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 Peter Hutterer
						Peter Hutterer