mirror of
https://gitlab.freedesktop.org/pipewire/pipewire.git
synced 2026-06-08 03:01:52 -04:00
milan-avb: msrp: set Listener AskingFailed on RX TalkerFailed
This commit is contained in:
parent
7c4fc7027b
commit
f3071aa549
1 changed files with 17 additions and 3 deletions
|
|
@ -101,12 +101,26 @@ static void notify_talker_failed(struct msrp *msrp, uint64_t now, struct attr *a
|
||||||
handle_evt_tk_registration_failed(msrp->server->acmp, attr->attr, now);
|
handle_evt_tk_registration_failed(msrp->server->acmp, attr->attr, now);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Milan Table 5.10: TF registrar state also flips flags_ex.REGISTERING
|
|
||||||
* on the listener side; emit an unsol when it changes. */
|
|
||||||
sc = SPA_CONTAINER_OF(attr->attr, struct stream_common, tfstream_attr);
|
sc = SPA_CONTAINER_OF(attr->attr, struct stream_common, tfstream_attr);
|
||||||
if (sc->stream.direction == SPA_DIRECTION_INPUT)
|
if (sc->stream.direction == SPA_DIRECTION_INPUT) {
|
||||||
|
/* IEEE 802.1Q-2018 §35.2.2.4.4 + Milan v1.2 §4.3.3.1: when the
|
||||||
|
* Talker has transitioned to TalkerFailed, the Listener must
|
||||||
|
* declare AskingFailed so the Talker has the recovery signal
|
||||||
|
* ("I still want this stream, please re-evaluate"). Without
|
||||||
|
* this, the Listener was stuck at the previous Ready
|
||||||
|
* declaration from before the failure, the Talker read
|
||||||
|
* "listener is satisfied" and never re-attempted the advertise.
|
||||||
|
* Symptom on the wire: Talker oscillates Advertise → Failed →
|
||||||
|
* silence; stream drops after a few seconds and never resumes
|
||||||
|
* for the same bind. */
|
||||||
|
if (notify == AVB_MRP_NOTIFY_NEW || notify == AVB_MRP_NOTIFY_JOIN)
|
||||||
|
sc->lstream_attr.param = AVB_MSRP_LISTENER_PARAM_ASKING_FAILED;
|
||||||
|
/* Milan Table 5.10: TF registrar state also flips
|
||||||
|
* flags_ex.REGISTERING on the listener side; emit an unsol
|
||||||
|
* when it changes. */
|
||||||
avb_aecp_aem_mark_stream_info_dirty(msrp->server,
|
avb_aecp_aem_mark_stream_info_dirty(msrp->server,
|
||||||
AVB_AEM_DESC_STREAM_INPUT, sc->stream.index);
|
AVB_AEM_DESC_STREAM_INPUT, sc->stream.index);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static int process_talker(struct msrp *msrp, uint64_t now, uint8_t attr_type,
|
static int process_talker(struct msrp *msrp, uint64_t now, uint8_t attr_type,
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue