|
|
|
@ -2174,14 +2174,16 @@ void codecs_offer_answer(struct call_media *media, struct call_media *other_medi
|
|
|
|
|
ilogs(codec, LOG_DEBUG, "Updating receiver side codecs for offerer " STR_FORMAT " #%u",
|
|
|
|
|
STR_FMT(&other_media->monologue->tag),
|
|
|
|
|
other_media->index);
|
|
|
|
|
codec_store_populate(&other_media->codecs, &sp->codecs, flags->codec_set);
|
|
|
|
|
codec_store_strip(&other_media->codecs, &flags->codec_strip, flags->codec_except);
|
|
|
|
|
codec_store_offer(&other_media->codecs, &flags->codec_offer, &sp->codecs);
|
|
|
|
|
if (!other_media->codecs.strip_full)
|
|
|
|
|
codec_store_offer(&other_media->codecs, &flags->codec_transcode, &sp->codecs);
|
|
|
|
|
codec_store_accept(&other_media->codecs, &flags->codec_accept, NULL);
|
|
|
|
|
codec_store_accept(&other_media->codecs, &flags->codec_consume, &sp->codecs);
|
|
|
|
|
codec_store_track(&other_media->codecs, &flags->codec_mask);
|
|
|
|
|
codec_store_populate(&other_media->codecs, &sp->codecs, flags ? flags->codec_set : NULL);
|
|
|
|
|
if (flags) {
|
|
|
|
|
codec_store_strip(&other_media->codecs, &flags->codec_strip, flags->codec_except);
|
|
|
|
|
codec_store_offer(&other_media->codecs, &flags->codec_offer, &sp->codecs);
|
|
|
|
|
if (!other_media->codecs.strip_full)
|
|
|
|
|
codec_store_offer(&other_media->codecs, &flags->codec_transcode, &sp->codecs);
|
|
|
|
|
codec_store_accept(&other_media->codecs, &flags->codec_accept, NULL);
|
|
|
|
|
codec_store_accept(&other_media->codecs, &flags->codec_consume, &sp->codecs);
|
|
|
|
|
codec_store_track(&other_media->codecs, &flags->codec_mask);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// we don't update the answerer side if the offer is not RTP but is going
|
|
|
|
|
// to RTP (i.e. T.38 transcoding) - instead we leave the existing codec list
|
|
|
|
@ -2197,11 +2199,13 @@ void codecs_offer_answer(struct call_media *media, struct call_media *other_medi
|
|
|
|
|
media->index);
|
|
|
|
|
codec_store_populate(&media->codecs, &sp->codecs, NULL);
|
|
|
|
|
}
|
|
|
|
|
codec_store_strip(&media->codecs, &flags->codec_strip, flags->codec_except);
|
|
|
|
|
codec_store_strip(&media->codecs, &flags->codec_consume, flags->codec_except);
|
|
|
|
|
codec_store_strip(&media->codecs, &flags->codec_mask, flags->codec_except);
|
|
|
|
|
codec_store_offer(&media->codecs, &flags->codec_offer, &sp->codecs);
|
|
|
|
|
codec_store_transcode(&media->codecs, &flags->codec_transcode, &sp->codecs);
|
|
|
|
|
if (flags) {
|
|
|
|
|
codec_store_strip(&media->codecs, &flags->codec_strip, flags->codec_except);
|
|
|
|
|
codec_store_strip(&media->codecs, &flags->codec_consume, flags->codec_except);
|
|
|
|
|
codec_store_strip(&media->codecs, &flags->codec_mask, flags->codec_except);
|
|
|
|
|
codec_store_offer(&media->codecs, &flags->codec_offer, &sp->codecs);
|
|
|
|
|
codec_store_transcode(&media->codecs, &flags->codec_transcode, &sp->codecs);
|
|
|
|
|
}
|
|
|
|
|
codec_store_synthesise(&media->codecs, &other_media->codecs);
|
|
|
|
|
|
|
|
|
|
// update supp codecs based on actions so far
|
|
|
|
@ -3445,6 +3449,8 @@ new_branch:
|
|
|
|
|
ok_check_tag:
|
|
|
|
|
for (GList *sub = ret->subscriptions.head; sub; sub = sub->next) {
|
|
|
|
|
struct call_subscription *cs = sub->data;
|
|
|
|
|
if (!cs->offer_answer)
|
|
|
|
|
continue;
|
|
|
|
|
struct call_monologue *csm = cs->monologue;
|
|
|
|
|
if (!os)
|
|
|
|
|
os = csm;
|
|
|
|
|