mirror of
				https://gitlab.freedesktop.org/pipewire/pipewire.git
				synced 2025-11-03 09:01:54 -05:00 
			
		
		
		
	media-session: improve plugged time
Use the node plugged time for the session or else use the time when the session was created.
This commit is contained in:
		
							parent
							
								
									18f0194008
								
							
						
					
					
						commit
						dbc3b4c1a4
					
				
					 1 changed files with 16 additions and 3 deletions
				
			
		| 
						 | 
					@ -73,6 +73,8 @@ static inline void init_type(struct type *type, struct spa_type_map *map)
 | 
				
			||||||
struct impl {
 | 
					struct impl {
 | 
				
			||||||
	struct type type;
 | 
						struct type type;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						struct timespec now;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	struct pw_core *core;
 | 
						struct pw_core *core;
 | 
				
			||||||
	struct pw_type *t;
 | 
						struct pw_type *t;
 | 
				
			||||||
	struct pw_module *module;
 | 
						struct pw_module *module;
 | 
				
			||||||
| 
						 | 
					@ -91,6 +93,7 @@ struct session {
 | 
				
			||||||
	struct impl *impl;
 | 
						struct impl *impl;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	enum pw_direction direction;
 | 
						enum pw_direction direction;
 | 
				
			||||||
 | 
						uint64_t plugged;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	struct pw_node *node;
 | 
						struct pw_node *node;
 | 
				
			||||||
	struct spa_hook node_listener;
 | 
						struct spa_hook node_listener;
 | 
				
			||||||
| 
						 | 
					@ -410,13 +413,11 @@ static int find_session(void *data, struct session *sess)
 | 
				
			||||||
		if (strcmp(str, find->media_class) != 0)
 | 
							if (strcmp(str, find->media_class) != 0)
 | 
				
			||||||
			return 0;
 | 
								return 0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		if ((str = pw_properties_get(props, "node.plugged")) != NULL)
 | 
					 | 
				
			||||||
			plugged = pw_properties_parse_uint64(str);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
		if (sess->exclusive) {
 | 
							if (sess->exclusive) {
 | 
				
			||||||
			pw_log_debug("module %p: session in use", impl);
 | 
								pw_log_debug("module %p: session in use", impl);
 | 
				
			||||||
			return 0;
 | 
								return 0;
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 | 
							plugged = sess->plugged;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	pw_log_debug("module %p: found session '%d' %" PRIu64, impl,
 | 
						pw_log_debug("module %p: found session '%d' %" PRIu64, impl,
 | 
				
			||||||
| 
						 | 
					@ -661,6 +662,7 @@ static int on_global(void *data, struct pw_global *global)
 | 
				
			||||||
	struct pw_port *node_port, *dsp_port;
 | 
						struct pw_port *node_port, *dsp_port;
 | 
				
			||||||
	uint32_t id, channels, rate;
 | 
						uint32_t id, channels, rate;
 | 
				
			||||||
	bool need_dsp;
 | 
						bool need_dsp;
 | 
				
			||||||
 | 
						uint64_t plugged;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (pw_global_get_type(global) != impl->t->node)
 | 
						if (pw_global_get_type(global) != impl->t->node)
 | 
				
			||||||
		return 0;
 | 
							return 0;
 | 
				
			||||||
| 
						 | 
					@ -672,6 +674,11 @@ static int on_global(void *data, struct pw_global *global)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	properties = pw_node_get_properties(node);
 | 
						properties = pw_node_get_properties(node);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						if ((str = pw_properties_get(properties, "node.plugged")) != NULL)
 | 
				
			||||||
 | 
							plugged = pw_properties_parse_uint64(str);
 | 
				
			||||||
 | 
						else
 | 
				
			||||||
 | 
							plugged = impl->now.tv_sec * SPA_NSEC_PER_SEC + impl->now.tv_nsec;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (handle_autoconnect(impl, node, properties) == 1) {
 | 
						if (handle_autoconnect(impl, node, properties) == 1) {
 | 
				
			||||||
		return 0;
 | 
							return 0;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
| 
						 | 
					@ -705,8 +712,11 @@ static int on_global(void *data, struct pw_global *global)
 | 
				
			||||||
	sess->id = id;
 | 
						sess->id = id;
 | 
				
			||||||
	sess->node = node;
 | 
						sess->node = node;
 | 
				
			||||||
	sess->node_port = node_port;
 | 
						sess->node_port = node_port;
 | 
				
			||||||
 | 
						sess->plugged = plugged;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	spa_list_init(&sess->node_list);
 | 
						spa_list_init(&sess->node_list);
 | 
				
			||||||
	spa_list_append(&impl->session_list, &sess->l);
 | 
						spa_list_append(&impl->session_list, &sess->l);
 | 
				
			||||||
 | 
						pw_log_debug("new session %p for node %d", sess, id);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	pw_node_add_listener(node, &sess->node_listener, &node_events, sess);
 | 
						pw_node_add_listener(node, &sess->node_listener, &node_events, sess);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -767,6 +777,8 @@ static const struct pw_module_events module_events = {
 | 
				
			||||||
static void
 | 
					static void
 | 
				
			||||||
core_global_added(void *data, struct pw_global *global)
 | 
					core_global_added(void *data, struct pw_global *global)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
 | 
						struct impl *impl = data;
 | 
				
			||||||
 | 
						clock_gettime(CLOCK_MONOTONIC, &impl->now);
 | 
				
			||||||
	on_global(data, global);
 | 
						on_global(data, global);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -795,6 +807,7 @@ static int module_init(struct pw_module *module, struct pw_properties *propertie
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	spa_list_init(&impl->session_list);
 | 
						spa_list_init(&impl->session_list);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						clock_gettime(CLOCK_MONOTONIC, &impl->now);
 | 
				
			||||||
	pw_core_for_each_global(core, on_global, impl);
 | 
						pw_core_for_each_global(core, on_global, impl);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	pw_core_add_listener(core, &impl->core_listener, &core_events, impl);
 | 
						pw_core_add_listener(core, &impl->core_listener, &core_events, impl);
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue