TT#82651 avoid unnecessary transcoding when DTMF PT is present

reported in #1005

Change-Id: I7aefab7fbdca5ddff7012adc2c0a0d8a5b1f6f26
changes/98/40398/3
Richard Fuchs 5 years ago
parent a0d0733291
commit 61acd97619

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

Loading…
Cancel
Save