From 172afb6bc091147f91f2877a82074083c305a842 Mon Sep 17 00:00:00 2001 From: Richard Fuchs Date: Thu, 30 Nov 2023 14:01:36 -0500 Subject: [PATCH] MT#58636 add new option 'static codecs' Change-Id: Ife8ef86ff0c6dd8733fd063d8ce19f6baaa30e58 (cherry picked from commit 76203fdce9460dbbf05b80ad0ac20f12eb697e76) --- daemon/call.c | 4 +- daemon/call_interfaces.c | 4 + daemon/codec.c | 1 - docs/ng_control_protocol.md | 6 + include/call_interfaces.h | 1 + t/auto-daemon-tests.pl | 332 ++++++++++++++++++++++++++++++++++++ 6 files changed, 346 insertions(+), 2 deletions(-) diff --git a/daemon/call.c b/daemon/call.c index eaf887a62..c232b618b 100644 --- a/daemon/call.c +++ b/daemon/call.c @@ -2412,7 +2412,9 @@ static void codecs_offer(struct call_media *media, struct call_media *other_medi ilogs(codec, LOG_DEBUG, "Updating codecs for answerer " STR_FORMAT " #%u", STR_FMT(&media->monologue->tag), media->index); - if (flags && flags->reuse_codec) + if (flags->static_codecs && media->codecs.codec_prefs.length) + ilogs(codec, LOG_DEBUG, "Leaving answerer codecs alone"); + else if (flags && flags->reuse_codec) codec_store_populate_reuse(&media->codecs, &sp->codecs); else codec_store_populate(&media->codecs, &sp->codecs, diff --git a/daemon/call_interfaces.c b/daemon/call_interfaces.c index c90c22425..e128d97ec 100644 --- a/daemon/call_interfaces.c +++ b/daemon/call_interfaces.c @@ -1099,6 +1099,10 @@ static void call_ng_flags_flags(struct sdp_ng_flags *out, str *s, void *dummy) { case CSH_LOOKUP("no-codec-renegotiation"): out->reuse_codec = 1; break; + case CSH_LOOKUP("static-codec"): + case CSH_LOOKUP("static-codecs"): + out->static_codecs = 1; + break; case CSH_LOOKUP("single-codec"): out->single_codec = 1; break; diff --git a/daemon/codec.c b/daemon/codec.c index 26ff88c56..74f8665c2 100644 --- a/daemon/codec.c +++ b/daemon/codec.c @@ -4880,7 +4880,6 @@ static struct rtp_payload_type *codec_store_find_compatible(struct codec_store * } void __codec_store_populate_reuse(struct codec_store *dst, struct codec_store *src, struct codec_store_args a) { - // start fresh struct call_media *media = dst->media; struct call *call = media ? media->call : NULL; diff --git a/docs/ng_control_protocol.md b/docs/ng_control_protocol.md index fa7c18d74..f19d6cf20 100644 --- a/docs/ng_control_protocol.md +++ b/docs/ng_control_protocol.md @@ -973,6 +973,12 @@ Spaces in each string may be replaced by hyphens. and will remove all others from the list. Useful for RTP clients which get confused if more than one codec is listed in an answer. +* `static codecs` + + Useful in an `offer` message to suppress any change in codecs towards the + answer side, instead of passing along the list of offered codecs from the + offer side as it normally would. + * `SIP source address` Ignore any IP addresses given in the SDP body and use the source address of the received diff --git a/include/call_interfaces.h b/include/call_interfaces.h index 47216c542..95e003d67 100644 --- a/include/call_interfaces.h +++ b/include/call_interfaces.h @@ -166,6 +166,7 @@ struct sdp_ng_flags { original_sendrecv:1, single_codec:1, reuse_codec:1, + static_codecs:1, allow_transcoding:1, allow_asymmetric_codecs:1, early_media:1, diff --git a/t/auto-daemon-tests.pl b/t/auto-daemon-tests.pl index 1852c1bf6..c7370aeca 100755 --- a/t/auto-daemon-tests.pl +++ b/t/auto-daemon-tests.pl @@ -82,6 +82,338 @@ sub stun_succ { +new_call; + +offer('static codecs control', { codec => { transcode => + ['opus/48000/2///useinbandfec--1;stereo--0;sprop-stereo--0'], + }}, < { transcode => + ['opus/48000/2///useinbandfec--1;stereo--0;sprop-stereo--0'], + }}, < { transcode => + ['opus/48000/2///useinbandfec--1;stereo--0;sprop-stereo--0'], + }, flags => ['no codec renegotiation'] }, < ['no codec renegotiation'] }, < { transcode => + ['opus/48000/2///useinbandfec--1;stereo--0;sprop-stereo--0'], + }, flags => ['no codec renegotiation'] }, < { transcode => + ['opus/48000/2///useinbandfec--1;stereo--0;sprop-stereo--0'], + }, flags => ['static codecs'] }, < ['static codecs'] }, < { transcode => + ['opus/48000/2///useinbandfec--1;stereo--0;sprop-stereo--0'], + }, flags => ['static codecs'] }, <