MT#55283 stricter asymmetric codecs

Don't blindly take over a source DTMF PT if one is present. Check if the
destination has _some_ DTMF PT, and only then take over the source. This
makes the behaviour more closely match the documentation.

One test is affected and seems to improve its outcome.

Closes #2091

Change-Id: Ibb9c1f79099fa30ac69ec71b4a4c71af0b88b327
pull/2097/head
Richard Fuchs 3 weeks ago
parent 3d735cd3c0
commit 40a98c57a8

@ -1655,10 +1655,16 @@ sink_pt_fixed:;
rtp_payload_type *sink_cn_pt = __supp_payload_type(supplemental_sinks,
sink_pt->clock_rate, "CN");
if (a.allow_asymmetric) {
if (!sink_dtmf_pt || (src_dtmf_pt && !rtp_payload_type_fmt_cmp(sink_dtmf_pt, src_dtmf_pt)))
sink_dtmf_pt = src_dtmf_pt;
if (!sink_cn_pt || (src_cn_pt && !rtp_payload_type_fmt_cmp(sink_cn_pt, src_cn_pt)))
sink_cn_pt = src_cn_pt;
if (src_dtmf_pt && (!sink_dtmf_pt || !rtp_payload_type_fmt_cmp(sink_dtmf_pt, src_dtmf_pt))) {
rtp_payload_type *compat = codec_store_find_compatible(&sink->codecs, src_dtmf_pt);
if (compat)
sink_dtmf_pt = src_dtmf_pt;
}
if (src_cn_pt && (!sink_cn_pt || !rtp_payload_type_fmt_cmp(sink_cn_pt, src_cn_pt))) {
rtp_payload_type *compat = codec_store_find_compatible(&sink->codecs, src_cn_pt);
if (compat)
sink_cn_pt = src_cn_pt;
}
}
rtp_payload_type *real_sink_dtmf_pt = NULL; // for DTMF delay

@ -7390,10 +7390,9 @@ v=0
o=- 1545997027 1 IN IP4 198.51.100.11
s=tester
t=0 0
m=audio PORT RTP/AVP 8 97
m=audio PORT RTP/AVP 8
c=IN IP4 203.0.113.1
a=rtpmap:8 PCMA/8000
a=rtpmap:97 telephone-event/8000
a=sendrecv
a=rtcp:PORT
SDP

Loading…
Cancel
Save