Browse Source

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 6 years ago
parent
commit
64e56d774b
1 changed files with 9 additions and 0 deletions
  1. +9
    -0
      daemon/codec.c

+ 9
- 0
daemon/codec.c View File

@ -606,6 +606,15 @@ void codec_handlers_update(struct call_media *receiver, struct call_media *sink,
__ensure_codec_def(pt, receiver); __ensure_codec_def(pt, receiver);
struct codec_handler *handler; struct codec_handler *handler;
handler = g_hash_table_lookup(receiver->codec_handlers, &pt->payload_type); 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) { if (!handler) {
ilog(LOG_DEBUG, "Creating codec handler for " STR_FORMAT, ilog(LOG_DEBUG, "Creating codec handler for " STR_FORMAT,
STR_FMT(&pt->encoding_with_params)); STR_FMT(&pt->encoding_with_params));


Loading…
Cancel
Save