From 64e56d774be5e585f9657a44a3993b9f4a6bb4dc Mon Sep 17 00:00:00 2001 From: Richard Fuchs Date: Tue, 7 Jan 2020 09:58:41 -0500 Subject: [PATCH] TT#73401 handle changes in RTP payload types A client can potentially change the codec used for a RTP payload type number, so we must confirm that an existing handler matches the codec from the SDP. fixes #903 Change-Id: Id9ae379425359f776883d6ace7fdb44ad651b37e --- daemon/codec.c | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/daemon/codec.c b/daemon/codec.c index b0f8d86a2..27c840163 100644 --- a/daemon/codec.c +++ b/daemon/codec.c @@ -606,6 +606,15 @@ void codec_handlers_update(struct call_media *receiver, struct call_media *sink, __ensure_codec_def(pt, receiver); struct codec_handler *handler; handler = g_hash_table_lookup(receiver->codec_handlers, &pt->payload_type); + if (handler) { + // make sure existing handler matches this PT + if (rtp_payload_type_cmp(pt, &handler->source_pt)) { + ilog(LOG_DEBUG, "Resetting codec handler for PT %u", pt->payload_type); + handler = NULL; + g_atomic_pointer_set(&receiver->codec_handler_cache, NULL); + g_hash_table_remove(receiver->codec_handlers, &pt->payload_type); + } + } if (!handler) { ilog(LOG_DEBUG, "Creating codec handler for " STR_FORMAT, STR_FMT(&pt->encoding_with_params));