MT#57719 Use media subscriptions approach in `stream_packet()`

Start using the media subscriptions model
(based on newly introduced `media_subscription` objects)
in scope of `stream_packet()`.

Change-Id: Ia8d9442810c4afc12b00cad8b1a354d66bb5051c
pull/1722/head
Donat Zenichev 2 years ago
parent 2152a90f08
commit 4f8cd655a8

@ -3061,19 +3061,25 @@ out:
unconfirm_sinks(&phc->mp.stream->rtcp_sinks, "peer address unconfirmed"); unconfirm_sinks(&phc->mp.stream->rtcp_sinks, "peer address unconfirmed");
} }
if (phc->unkernelize_subscriptions) { if (phc->unkernelize_subscriptions) {
// XXX optimise this triple loop? AUTO_CLEANUP(GQueue mls, g_queue_clear) = G_QUEUE_INIT; /* to avoid duplications */
for (GList *l = phc->mp.media->monologue->subscriptions.head; l; l = l->next) { for (GList * sub = phc->mp.media->media_subscriptions.head; sub; sub = sub->next)
struct call_subscription *cs = l->data; {
struct call_monologue *sub = cs->monologue; struct media_subscription * ms = sub->data;
for (unsigned int k = 0; k < sub->medias->len; k++) {
struct call_media *sub_media = sub->medias->pdata[k]; if (!g_queue_find(&mls, ms->monologue)) {
for (unsigned int k = 0; k < ms->monologue->medias->len; k++)
{
struct call_media *sub_media = ms->monologue->medias->pdata[k];
if (!sub_media) if (!sub_media)
continue; continue;
for (GList *m = sub_media->streams.head; m; m = m->next) { for (GList *m = sub_media->streams.head; m; m = m->next) {
struct packet_stream *sub_ps = m->data; struct packet_stream *sub_ps = m->data;
__unkernelize(sub_ps, "subscriptions modified"); __unkernelize(sub_ps, "subscriptions modified");
} }
} }
g_queue_push_tail(&mls, ms->monologue);
}
} }
} }

Loading…
Cancel
Save