From 74fd959cccf57d8b9491466b63419db0ea6c3045 Mon Sep 17 00:00:00 2001 From: Richard Fuchs Date: Thu, 10 Sep 2020 13:00:55 -0400 Subject: [PATCH] TT#92250 use matching output codec with inject-DTMF Change-Id: I220947872303c534368363e8f980b94bd7d406a5 --- daemon/codec.c | 9 ++++-- t/auto-daemon-tests.pl | 68 ++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 75 insertions(+), 2 deletions(-) diff --git a/daemon/codec.c b/daemon/codec.c index 5b2b85ae9..96e744ae4 100644 --- a/daemon/codec.c +++ b/daemon/codec.c @@ -1059,8 +1059,6 @@ void codec_handlers_update(struct call_media *receiver, struct call_media *sink, // we ignore output codec matches if we must transcode DTMF if (dtmf_pt && !reverse_dtmf_pt) ; - else if (flags && flags->inject_dtmf) - ; else dest_codecs = g_hash_table_lookup(sink->codec_names_send, &pt->encoding); } @@ -1098,6 +1096,13 @@ void codec_handlers_update(struct call_media *receiver, struct call_media *sink, goto transcode; } + if (flags && flags->inject_dtmf) { + // we have a matching output codec, but we were told that we might + // want to inject DTMF, so we must still go through our transcoding + // engine, despite input and output codecs being the same. + goto transcode; + } + // XXX check format parameters as well ilog(LOG_DEBUG, "Sink supports codec " STR_FORMAT, STR_FMT(&pt->encoding_with_params)); __make_passthrough_gsl(handler, &passthrough_handlers); diff --git a/t/auto-daemon-tests.pl b/t/auto-daemon-tests.pl index 99d372609..f4e1a0360 100755 --- a/t/auto-daemon-tests.pl +++ b/t/auto-daemon-tests.pl @@ -36,6 +36,74 @@ my ($sock_a, $sock_b, $sock_c, $sock_d, $port_a, $port_b, $ssrc, $resp, +# inject DTMF with mismatched codecs + +new_call; + +($sock_a, $sock_b) = new_call([qw(198.51.100.11 3000)], [qw(198.51.100.11 3002)]); + +($port_a) = offer('inject, U/A offer', + { ICE => 'remove', replace => ['origin'], flags => [qw(inject-DTMF)] }, < 'remove', replace => ['origin'], flags => [qw(inject-DTMF)] }, <