impl-link: keep on negotiatiating until fixed Format

Send unfixed Format to nodes but don't proceed to the next state.
When EnumFormat is emited, change the link state back to INIT to restart
the negotiation.

Fixes #1732
This commit is contained in:
Wim Taymans 2021-10-20 16:19:04 +02:00
parent 6cea8b201b
commit 0568958856
2 changed files with 6 additions and 2 deletions

View file

@ -916,8 +916,6 @@ static void port_param_changed(struct pw_impl_link *this, uint32_t id,
case SPA_PARAM_EnumFormat:
target = PW_IMPL_PORT_STATE_CONFIGURE;
break;
case SPA_PARAM_Latency:
return;
default:
return;
}
@ -926,6 +924,8 @@ static void port_param_changed(struct pw_impl_link *this, uint32_t id,
if (inport)
pw_impl_port_update_state(inport, target, 0, NULL);
this->preparing = this->prepared = false;
link_update_state(this, PW_LINK_STATE_INIT, 0, NULL);
pw_impl_link_prepare(this);
}

View file

@ -1419,6 +1419,10 @@ int pw_impl_port_set_param(struct pw_impl_port *port, uint32_t id, uint32_t flag
if (param == NULL || res < 0) {
pw_impl_port_update_state(port, PW_IMPL_PORT_STATE_CONFIGURE, 0, NULL);
}
else if (spa_pod_is_fixated(param) <= 0) {
pw_impl_port_update_state(port, PW_IMPL_PORT_STATE_CONFIGURE, 0, NULL);
pw_impl_port_emit_param_changed(port, id);
}
else if (!SPA_RESULT_IS_ASYNC(res)) {
pw_impl_port_update_state(port, PW_IMPL_PORT_STATE_READY, 0, NULL);
}