mirror of
https://gitlab.freedesktop.org/pipewire/pipewire.git
synced 2025-11-01 22:58:50 -04: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);
|
||||
}
|
||||
if (update->change_mask & PW_NODE_CHANGE_MASK_PARAMS) {
|
||||
info->n_params = update->n_params;
|
||||
free((void *) info->params);
|
||||
if (update->params) {
|
||||
size_t size = info->n_params * sizeof(struct spa_param_info);
|
||||
info->params = malloc(size);
|
||||
memcpy(info->params, update->params, size);
|
||||
uint32_t i, user, n_params = update->n_params;;
|
||||
|
||||
info->params = realloc(info->params, n_params * sizeof(struct spa_param_info));
|
||||
if (info->params == NULL)
|
||||
n_params = 0;
|
||||
|
||||
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;
|
||||
}
|
||||
|
|
@ -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);
|
||||
}
|
||||
if (update->change_mask & PW_PORT_CHANGE_MASK_PARAMS) {
|
||||
info->n_params = update->n_params;
|
||||
free((void *) info->params);
|
||||
if (update->params) {
|
||||
size_t size = info->n_params * sizeof(struct spa_param_info);
|
||||
info->params = malloc(size);
|
||||
memcpy(info->params, update->params, size);
|
||||
uint32_t i, user, n_params = update->n_params;;
|
||||
|
||||
info->params = realloc(info->params, n_params * sizeof(struct spa_param_info));
|
||||
if (info->params == NULL)
|
||||
n_params = 0;
|
||||
|
||||
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;
|
||||
}
|
||||
|
|
@ -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);
|
||||
}
|
||||
if (update->change_mask & PW_DEVICE_CHANGE_MASK_PARAMS) {
|
||||
info->n_params = update->n_params;
|
||||
free((void *) info->params);
|
||||
if (update->params) {
|
||||
size_t size = info->n_params * sizeof(struct spa_param_info);
|
||||
info->params = malloc(size);
|
||||
memcpy(info->params, update->params, size);
|
||||
uint32_t i, user, n_params = update->n_params;;
|
||||
|
||||
info->params = realloc(info->params, n_params * sizeof(struct spa_param_info));
|
||||
if (info->params == NULL)
|
||||
n_params = 0;
|
||||
|
||||
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;
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue