mirror of
				https://gitlab.freedesktop.org/pipewire/pipewire.git
				synced 2025-11-03 09:01:54 -05:00 
			
		
		
		
	introspect: update the info more carefully
Only change the fields we care about and leave the other ones untouched in the created info.
This commit is contained in:
		
							parent
							
								
									d2aa240767
								
							
						
					
					
						commit
						a989230cb5
					
				
					 1 changed files with 30 additions and 21 deletions
				
			
		| 
						 | 
				
			
			@ -210,7 +210,7 @@ struct pw_node_info *pw_node_info_merge(struct pw_node_info *info,
 | 
			
		|||
		info->props = pw_spa_dict_copy(update->props);
 | 
			
		||||
	}
 | 
			
		||||
	if (update->change_mask & PW_NODE_CHANGE_MASK_PARAMS) {
 | 
			
		||||
		uint32_t i, user, n_params = update->n_params;
 | 
			
		||||
		uint32_t i, n_params = update->n_params;
 | 
			
		||||
		void *np;
 | 
			
		||||
 | 
			
		||||
		np = pw_reallocarray(info->params, n_params, sizeof(struct spa_param_info));
 | 
			
		||||
| 
						 | 
				
			
			@ -222,15 +222,18 @@ struct pw_node_info *pw_node_info_merge(struct pw_node_info *info,
 | 
			
		|||
		info->params = np;
 | 
			
		||||
 | 
			
		||||
		for (i = 0; i < SPA_MIN(info->n_params, n_params); i++) {
 | 
			
		||||
			user = reset ? 0 : info->params[i].user;
 | 
			
		||||
			if (info->params[i].flags != update->params[i].flags)
 | 
			
		||||
				user++;
 | 
			
		||||
			info->params[i] = update->params[i];
 | 
			
		||||
			info->params[i].user = user;
 | 
			
		||||
			info->params[i].id = update->params[i].id;
 | 
			
		||||
			if (reset)
 | 
			
		||||
				info->params[i].user = 0;
 | 
			
		||||
			if (info->params[i].flags != update->params[i].flags) {
 | 
			
		||||
				info->params[i].flags = update->params[i].flags;
 | 
			
		||||
				info->params[i].user++;
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
		info->n_params = n_params;
 | 
			
		||||
		for (; i < info->n_params; i++) {
 | 
			
		||||
			info->params[i] = update->params[i];
 | 
			
		||||
			info->params[i].id = update->params[i].id;
 | 
			
		||||
			info->params[i].flags = update->params[i].flags;
 | 
			
		||||
			info->params[i].user = 1;
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
| 
						 | 
				
			
			@ -280,7 +283,7 @@ struct pw_port_info *pw_port_info_merge(struct pw_port_info *info,
 | 
			
		|||
		info->props = pw_spa_dict_copy(update->props);
 | 
			
		||||
	}
 | 
			
		||||
	if (update->change_mask & PW_PORT_CHANGE_MASK_PARAMS) {
 | 
			
		||||
		uint32_t i, user, n_params = update->n_params;
 | 
			
		||||
		uint32_t i, n_params = update->n_params;
 | 
			
		||||
		void *np;
 | 
			
		||||
 | 
			
		||||
		np = pw_reallocarray(info->params, n_params, sizeof(struct spa_param_info));
 | 
			
		||||
| 
						 | 
				
			
			@ -292,15 +295,18 @@ struct pw_port_info *pw_port_info_merge(struct pw_port_info *info,
 | 
			
		|||
		info->params = np;
 | 
			
		||||
 | 
			
		||||
		for (i = 0; i < SPA_MIN(info->n_params, n_params); i++) {
 | 
			
		||||
			user = reset ? 0 : info->params[i].user;
 | 
			
		||||
			if (info->params[i].flags != update->params[i].flags)
 | 
			
		||||
				user++;
 | 
			
		||||
			info->params[i] = update->params[i];
 | 
			
		||||
			info->params[i].user = user;
 | 
			
		||||
			info->params[i].id = update->params[i].id;
 | 
			
		||||
			if (reset)
 | 
			
		||||
				info->params[i].user = 0;
 | 
			
		||||
			if (info->params[i].flags != update->params[i].flags) {
 | 
			
		||||
				info->params[i].flags = update->params[i].flags;
 | 
			
		||||
				info->params[i].user++;
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
		info->n_params = n_params;
 | 
			
		||||
		for (; i < info->n_params; i++) {
 | 
			
		||||
			info->params[i] = update->params[i];
 | 
			
		||||
			info->params[i].id = update->params[i].id;
 | 
			
		||||
			info->params[i].flags = update->params[i].flags;
 | 
			
		||||
			info->params[i].user = 1;
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
| 
						 | 
				
			
			@ -440,7 +446,7 @@ struct pw_device_info *pw_device_info_merge(struct pw_device_info *info,
 | 
			
		|||
		info->props = pw_spa_dict_copy(update->props);
 | 
			
		||||
	}
 | 
			
		||||
	if (update->change_mask & PW_DEVICE_CHANGE_MASK_PARAMS) {
 | 
			
		||||
		uint32_t i, user, n_params = update->n_params;
 | 
			
		||||
		uint32_t i, n_params = update->n_params;
 | 
			
		||||
		void *np;
 | 
			
		||||
 | 
			
		||||
		np = pw_reallocarray(info->params, n_params, sizeof(struct spa_param_info));
 | 
			
		||||
| 
						 | 
				
			
			@ -452,15 +458,18 @@ struct pw_device_info *pw_device_info_merge(struct pw_device_info *info,
 | 
			
		|||
		info->params = np;
 | 
			
		||||
 | 
			
		||||
		for (i = 0; i < SPA_MIN(info->n_params, n_params); i++) {
 | 
			
		||||
			user = reset ? 0 : info->params[i].user;
 | 
			
		||||
			if (info->params[i].flags != update->params[i].flags)
 | 
			
		||||
				user++;
 | 
			
		||||
			info->params[i] = update->params[i];
 | 
			
		||||
			info->params[i].user = user;
 | 
			
		||||
			info->params[i].id = update->params[i].id;
 | 
			
		||||
			if (reset)
 | 
			
		||||
				info->params[i].user = 0;
 | 
			
		||||
			if (info->params[i].flags != update->params[i].flags) {
 | 
			
		||||
				info->params[i].flags = update->params[i].flags;
 | 
			
		||||
				info->params[i].user++;
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
		info->n_params = n_params;
 | 
			
		||||
		for (; i < info->n_params; i++) {
 | 
			
		||||
			info->params[i] = update->params[i];
 | 
			
		||||
			info->params[i].id = update->params[i].id;
 | 
			
		||||
			info->params[i].flags = update->params[i].flags;
 | 
			
		||||
			info->params[i].user = 1;
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue