stream: Change PW_CAPABILITY_DEVICE_ID_NEGOTIATION to a version number

This allows easier evolvement of the negotiation protocol.
This commit is contained in:
Jonas Ådahl 2026-01-22 14:39:46 +01:00 committed by Wim Taymans
parent 04793138b5
commit 8600721de0
3 changed files with 12 additions and 9 deletions

View File

@ -313,12 +313,13 @@ performed.
Device ID negotiation needs explicit support by both end points of a stream, thus, the Device ID negotiation needs explicit support by both end points of a stream, thus, the
first step of negotiation is discovering whether other peer has support for it. This is first step of negotiation is discovering whether other peer has support for it. This is
done by advertising a \ref SPA_PARAM_Capability with the key \ref done by advertising a \ref SPA_PARAM_Capability with the key \ref
PW_CAPABILITY_DEVICE_ID_NEGOTIATION and value `true` PW_CAPABILITY_DEVICE_ID_NEGOTIATION and value `1` which corresponds to the
current negotiation API version.
``` ```
spa_param_dict_build_dict(&b, SPA_PARAM_Capability, spa_param_dict_build_dict(&b, SPA_PARAM_Capability,
&SPA_DICT_ITEMS( &SPA_DICT_ITEMS(
SPA_DICT_ITEM(PW_CAPABILITY_DEVICE_ID_NEGOTIATION, "true"))); SPA_DICT_ITEM(PW_CAPABILITY_DEVICE_ID_NEGOTIATION, "1")));
``` ```
To do this, when connecting to the stream, the \ref PW_STREAM_FLAG_INACTIVE flag must be To do this, when connecting to the stream, the \ref PW_STREAM_FLAG_INACTIVE flag must be
@ -369,7 +370,7 @@ To achieve this, the consumer adds another \ref SPA_PARAM_PeerCapability item wi
``` ```
char *device_ids = ...; /* Base 64 encoding of a dev_t. */. char *device_ids = ...; /* Base 64 encoding of a dev_t. */.
&SPA_DICT_ITEMS( &SPA_DICT_ITEMS(
SPA_DICT_ITEM(PW_CAPABILITY_DEVICE_ID_NEGOTIATION, "true"), SPA_DICT_ITEM(PW_CAPABILITY_DEVICE_ID_NEGOTIATION, "1"),
SPA_DICT_ITEM(PW_CAPABILITY_DEVICE_IDS, device_ids))); SPA_DICT_ITEM(PW_CAPABILITY_DEVICE_IDS, device_ids)));
``` ```

View File

@ -438,8 +438,9 @@ discover_capabilities(struct data *data, const struct spa_pod *param)
return; return;
spa_dict_for_each(it, &dict) { spa_dict_for_each(it, &dict) {
if (spa_streq(it->key, PW_CAPABILITY_DEVICE_ID_NEGOTIATION) && if (spa_streq(it->key, PW_CAPABILITY_DEVICE_ID_NEGOTIATION)) {
spa_streq(it->value, "true")) { int version = atoi(it->value);
if (version >= 1)
data->device_negotiation_supported = true; data->device_negotiation_supported = true;
} else if (spa_streq(it->key, PW_CAPABILITY_DEVICE_IDS)) { } else if (spa_streq(it->key, PW_CAPABILITY_DEVICE_IDS)) {
collect_device_ids(data, it->value); collect_device_ids(data, it->value);
@ -787,7 +788,7 @@ int main(int argc, char *argv[])
params[n_params++] = params[n_params++] =
spa_param_dict_build_dict(&b, SPA_PARAM_Capability, spa_param_dict_build_dict(&b, SPA_PARAM_Capability,
&SPA_DICT_ITEMS( &SPA_DICT_ITEMS(
SPA_DICT_ITEM(PW_CAPABILITY_DEVICE_ID_NEGOTIATION, "true"))); SPA_DICT_ITEM(PW_CAPABILITY_DEVICE_ID_NEGOTIATION, "1")));
#endif #endif
/* now connect the stream, we need a direction (input/output), /* now connect the stream, we need a direction (input/output),

View File

@ -450,8 +450,9 @@ discover_capabilities(struct data *data, const struct spa_pod *param)
return; return;
spa_dict_for_each(it, &dict) { spa_dict_for_each(it, &dict) {
if (spa_streq(it->key, PW_CAPABILITY_DEVICE_ID_NEGOTIATION) && if (spa_streq(it->key, PW_CAPABILITY_DEVICE_ID_NEGOTIATION)) {
spa_streq(it->value, "true")) { int version = atoi(it->value);
if (version >= 1)
data->device_negotiation_supported = true; data->device_negotiation_supported = true;
} }
} }
@ -799,7 +800,7 @@ int main(int argc, char *argv[])
params[n_params++] = params[n_params++] =
spa_param_dict_build_dict(&b, SPA_PARAM_Capability, spa_param_dict_build_dict(&b, SPA_PARAM_Capability,
&SPA_DICT_ITEMS(SPA_DICT_ITEM(PW_CAPABILITY_DEVICE_ID_NEGOTIATION, "true"), &SPA_DICT_ITEMS(SPA_DICT_ITEM(PW_CAPABILITY_DEVICE_ID_NEGOTIATION, "1"),
#ifdef SUPPORT_DEVICE_IDS_LIST #ifdef SUPPORT_DEVICE_IDS_LIST
SPA_DICT_ITEM(PW_CAPABILITY_DEVICE_IDS, device_ids) SPA_DICT_ITEM(PW_CAPABILITY_DEVICE_IDS, device_ids)
#endif /* SUPPORT_DEVICE_IDS_LIST */ #endif /* SUPPORT_DEVICE_IDS_LIST */