From 61acd976190560eb58477fd97d4c65f93650a6e0 Mon Sep 17 00:00:00 2001 From: Richard Fuchs Date: Tue, 2 Jun 2020 10:39:31 -0400 Subject: [PATCH] TT#82651 avoid unnecessary transcoding when DTMF PT is present reported in #1005 Change-Id: I7aefab7fbdca5ddff7012adc2c0a0d8a5b1f6f26 --- daemon/codec.c | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/daemon/codec.c b/daemon/codec.c index e42069899..6096ae883 100644 --- a/daemon/codec.c +++ b/daemon/codec.c @@ -925,6 +925,17 @@ void codec_handlers_update(struct call_media *receiver, struct call_media *sink, g_hash_table_destroy(dtmf_sinks); + struct rtp_payload_type *dtmf_pt = NULL; + struct rtp_payload_type *reverse_dtmf_pt = NULL; + + if (dtmf_payload_type != -1) { + // find a matching output DTMF payload type + dtmf_pt = g_hash_table_lookup(sink->codecs_recv, &dtmf_payload_type); + reverse_dtmf_pt = g_hash_table_lookup(receiver->codecs_send, &dtmf_payload_type); + if (reverse_dtmf_pt && dtmf_pt && rtp_payload_type_cmp(reverse_dtmf_pt, dtmf_pt)) + reverse_dtmf_pt = NULL; + } + // stop transcoding if we've determined that we don't need it if (MEDIA_ISSET(sink, TRANSCODE) && !sink_transcoding) { ilog(LOG_DEBUG, "Disabling transcoding engine (not needed)"); @@ -992,7 +1003,7 @@ void codec_handlers_update(struct call_media *receiver, struct call_media *sink, GQueue *dest_codecs = NULL; if (!flags || !flags->always_transcode) { // we ignore output codec matches if we must transcode DTMF - if (dtmf_payload_type != -1) + if (dtmf_pt && !reverse_dtmf_pt) ; else if (flags && flags->inject_dtmf) ;