mirror of
				https://gitlab.freedesktop.org/pipewire/pipewire.git
				synced 2025-11-03 09:01:54 -05:00 
			
		
		
		
	introspect: use the user flag to count changes
Whenever a param change was found, increment the user counter of the spa_param_info. We can use this to detect changes in individial param_info items without having to track them ourselves.
This commit is contained in:
		
							parent
							
								
									8b53ff55d0
								
							
						
					
					
						commit
						43601ad722
					
				
					 1 changed files with 51 additions and 24 deletions
				
			
		| 
						 | 
					@ -200,15 +200,24 @@ struct pw_node_info *pw_node_info_update(struct pw_node_info *info,
 | 
				
			||||||
		info->props = pw_spa_dict_copy(update->props);
 | 
							info->props = pw_spa_dict_copy(update->props);
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	if (update->change_mask & PW_NODE_CHANGE_MASK_PARAMS) {
 | 
						if (update->change_mask & PW_NODE_CHANGE_MASK_PARAMS) {
 | 
				
			||||||
		info->n_params = update->n_params;
 | 
							uint32_t i, user, n_params = update->n_params;;
 | 
				
			||||||
		free((void *) info->params);
 | 
					
 | 
				
			||||||
		if (update->params) {
 | 
							info->params = realloc(info->params, n_params * sizeof(struct spa_param_info));
 | 
				
			||||||
			size_t size = info->n_params * sizeof(struct spa_param_info);
 | 
							if (info->params == NULL)
 | 
				
			||||||
			info->params = malloc(size);
 | 
								n_params = 0;
 | 
				
			||||||
			memcpy(info->params, update->params, size);
 | 
					
 | 
				
			||||||
 | 
							for (i = 0; i < SPA_MIN(info->n_params, n_params); i++) {
 | 
				
			||||||
 | 
								user = 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->n_params = n_params;
 | 
				
			||||||
 | 
							for (; i < info->n_params; i++) {
 | 
				
			||||||
 | 
								info->params[i] = update->params[i];
 | 
				
			||||||
 | 
								info->params[i].user = 1;
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		else
 | 
					 | 
				
			||||||
			info->params = NULL;
 | 
					 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	return info;
 | 
						return info;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					@ -248,15 +257,24 @@ struct pw_port_info *pw_port_info_update(struct pw_port_info *info,
 | 
				
			||||||
		info->props = pw_spa_dict_copy(update->props);
 | 
							info->props = pw_spa_dict_copy(update->props);
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	if (update->change_mask & PW_PORT_CHANGE_MASK_PARAMS) {
 | 
						if (update->change_mask & PW_PORT_CHANGE_MASK_PARAMS) {
 | 
				
			||||||
		info->n_params = update->n_params;
 | 
							uint32_t i, user, n_params = update->n_params;;
 | 
				
			||||||
		free((void *) info->params);
 | 
					
 | 
				
			||||||
		if (update->params) {
 | 
							info->params = realloc(info->params, n_params * sizeof(struct spa_param_info));
 | 
				
			||||||
			size_t size = info->n_params * sizeof(struct spa_param_info);
 | 
							if (info->params == NULL)
 | 
				
			||||||
			info->params = malloc(size);
 | 
								n_params = 0;
 | 
				
			||||||
			memcpy(info->params, update->params, size);
 | 
					
 | 
				
			||||||
 | 
							for (i = 0; i < SPA_MIN(info->n_params, n_params); i++) {
 | 
				
			||||||
 | 
								user = 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->n_params = n_params;
 | 
				
			||||||
 | 
							for (; i < info->n_params; i++) {
 | 
				
			||||||
 | 
								info->params[i] = update->params[i];
 | 
				
			||||||
 | 
								info->params[i].user = 1;
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		else
 | 
					 | 
				
			||||||
			info->params = NULL;
 | 
					 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	return info;
 | 
						return info;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					@ -368,15 +386,24 @@ struct pw_device_info *pw_device_info_update(struct pw_device_info *info,
 | 
				
			||||||
		info->props = pw_spa_dict_copy(update->props);
 | 
							info->props = pw_spa_dict_copy(update->props);
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	if (update->change_mask & PW_DEVICE_CHANGE_MASK_PARAMS) {
 | 
						if (update->change_mask & PW_DEVICE_CHANGE_MASK_PARAMS) {
 | 
				
			||||||
		info->n_params = update->n_params;
 | 
							uint32_t i, user, n_params = update->n_params;;
 | 
				
			||||||
		free((void *) info->params);
 | 
					
 | 
				
			||||||
		if (update->params) {
 | 
							info->params = realloc(info->params, n_params * sizeof(struct spa_param_info));
 | 
				
			||||||
			size_t size = info->n_params * sizeof(struct spa_param_info);
 | 
							if (info->params == NULL)
 | 
				
			||||||
			info->params = malloc(size);
 | 
								n_params = 0;
 | 
				
			||||||
			memcpy(info->params, update->params, size);
 | 
					
 | 
				
			||||||
 | 
							for (i = 0; i < SPA_MIN(info->n_params, n_params); i++) {
 | 
				
			||||||
 | 
								user = 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->n_params = n_params;
 | 
				
			||||||
 | 
							for (; i < info->n_params; i++) {
 | 
				
			||||||
 | 
								info->params[i] = update->params[i];
 | 
				
			||||||
 | 
								info->params[i].user = 1;
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		else
 | 
					 | 
				
			||||||
			info->params = NULL;
 | 
					 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	return info;
 | 
						return info;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue