diff options
author | mnicholson <mnicholson@f38db490-d61c-443f-a65b-d21fe96a405b> | 2010-07-16 17:31:30 +0000 |
---|---|---|
committer | mnicholson <mnicholson@f38db490-d61c-443f-a65b-d21fe96a405b> | 2010-07-16 17:31:30 +0000 |
commit | 1c72131c43b6a05b88d7e1e1569670dac8af2396 (patch) | |
tree | 8f7a82d2621e396e103f911aa20aaeb25cd8b474 /main/channel.c | |
parent | 2b29e0a8575dfdc2fbd68d37e1f9d02f08af950c (diff) |
Merged revisions 277250 via svnmerge from
https://origsvn.digium.com/svn/asterisk/trunk
................
r277250 | mnicholson | 2010-07-16 12:30:39 -0500 (Fri, 16 Jul 2010) | 11 lines
Merged revisions 277247 via svnmerge from
https://origsvn.digium.com/svn/asterisk/branches/1.4
........
r277247 | mnicholson | 2010-07-16 12:29:57 -0500 (Fri, 16 Jul 2010) | 4 lines
For pass through DTMF tones, measure the actual duration between the begin and end packets on the wire. If it is detected to be less than AST_MIN_DTMF_DURATION, trigger dtmf emulation.
AST-362
........
................
git-svn-id: http://svn.digium.com/svn/asterisk/branches/1.6.2@277256 f38db490-d61c-443f-a65b-d21fe96a405b
Diffstat (limited to 'main/channel.c')
-rw-r--r-- | main/channel.c | 13 |
1 files changed, 13 insertions, 0 deletions
diff --git a/main/channel.c b/main/channel.c index 17811d5af..2e69827f0 100644 --- a/main/channel.c +++ b/main/channel.c @@ -2949,6 +2949,19 @@ static struct ast_frame *__ast_read(struct ast_channel *chan, int dropaudio) ast_clear_flag(chan, AST_FLAG_IN_DTMF); if (!f->len) f->len = ast_tvdiff_ms(now, chan->dtmf_tv); + + /* detect tones that were received on + * the wire with durations shorter than + * AST_MIN_DTMF_DURATION and set f->len + * to the actual duration of the DTMF + * frames on the wire. This will cause + * dtmf emulation to be triggered later + * on. + */ + if (ast_tvdiff_ms(now, chan->dtmf_tv) < AST_MIN_DTMF_DURATION) { + f->len = ast_tvdiff_ms(now, chan->dtmf_tv); + ast_log(LOG_DTMF, "DTMF end '%c' detected to have actual duration %ld on the wire, emulation will be triggered on %s\n", f->subclass, f->len, chan->name); + } } else if (!f->len) { ast_log(LOG_DTMF, "DTMF end accepted without begin '%c' on %s\n", f->subclass, chan->name); f->len = AST_MIN_DTMF_DURATION; |