From 7ce50c8bd0344886e1ae86d0b991ad97ac0b702b Mon Sep 17 00:00:00 2001 From: Anthony Minessale Date: Wed, 27 Nov 2019 21:10:50 +0000 Subject: [PATCH 1/2] [Core] Fix hard coded dtmf durations based on 8k --- src/switch_core_io.c | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/src/switch_core_io.c b/src/switch_core_io.c index 8b12efaffb..fd11a3da47 100644 --- a/src/switch_core_io.c +++ b/src/switch_core_io.c @@ -1127,6 +1127,9 @@ SWITCH_DECLARE(switch_status_t) switch_core_session_send_dtmf_string(switch_core int i, argc; char *argv[256]; int dur_total = 0; + int rate_mult = 8; + + switch_codec_implementation_t write_impl = { 0 }; switch_assert(session != NULL); @@ -1156,13 +1159,16 @@ SWITCH_DECLARE(switch_status_t) switch_core_session_send_dtmf_string(switch_core switch_channel_pre_answer(session->channel); } + switch_core_session_get_write_impl(session, &write_impl); + rate_mult = (write_impl.actual_samples_per_second / 1000); + for (i = 0; i < argc; i++) { dtmf.duration = switch_core_default_dtmf_duration(0); - dur = switch_core_default_dtmf_duration(0) / 8; + dur = switch_core_default_dtmf_duration(0) / rate_mult; if ((p = strchr(argv[i], '@'))) { *p++ = '\0'; - if ((dur = atoi(p)) > (int)switch_core_min_dtmf_duration(0) / 8) { - dtmf.duration = dur * 8; + if ((dur = atoi(p)) > (int)switch_core_min_dtmf_duration(0) / rate_mult) { + dtmf.duration = dur * rate_mult; } } @@ -1192,14 +1198,14 @@ SWITCH_DECLARE(switch_status_t) switch_core_session_send_dtmf_string(switch_core switch_log_printf(SWITCH_CHANNEL_SESSION_LOG(session), SWITCH_LOG_DEBUG, "%s send dtmf\ndigit=%c ms=%u samples=%u\n", switch_channel_get_name(session->channel), dtmf.digit, dur, dtmf.duration); sent++; - dur_total += dtmf.duration + 2000; /* account for 250ms pause */ + dur_total += dtmf.duration + (250 * rate_mult); /* account for 250ms pause */ } } } if (dur_total) { char tmp[32] = ""; - switch_snprintf(tmp, sizeof(tmp), "%d", dur_total / 8); + switch_snprintf(tmp, sizeof(tmp), "%d", dur_total / rate_mult); switch_channel_set_variable(session->channel, "last_dtmf_duration", tmp); } From 47c5c8f3e8957c37fad5feeeb791375d05992b93 Mon Sep 17 00:00:00 2001 From: Anthony Minessale Date: Wed, 27 Nov 2019 21:10:15 +0000 Subject: [PATCH 2/2] [Core] Fix short-circuit in write timestamp calc --- src/switch_rtp.c | 1 - 1 file changed, 1 deletion(-) diff --git a/src/switch_rtp.c b/src/switch_rtp.c index 4d60b7c41e..5da1b4fbe3 100644 --- a/src/switch_rtp.c +++ b/src/switch_rtp.c @@ -9039,7 +9039,6 @@ SWITCH_DECLARE(int) switch_rtp_write_frame(switch_rtp_t *rtp_session, switch_fra data = frame->data; len = frame->datalen; ts = rtp_session->flags[SWITCH_RTP_FLAG_RAW_WRITE] ? (uint32_t) frame->timestamp : 0; - if (!ts) ts = rtp_session->last_write_ts + rtp_session->samples_per_interval; } /*