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
changes/08/36708/1
Richard Fuchs 5 years ago
parent d1e3dc0996
commit 64e56d774b

@ -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));

Loading…
Cancel
Save