[asterisk-commits] russell: branch group/vldtmf r40482 - /team/group/vldtmf/channel.c

asterisk-commits at lists.digium.com asterisk-commits at lists.digium.com
Fri Aug 18 19:50:32 MST 2006


Author: russell
Date: Fri Aug 18 21:50:32 2006
New Revision: 40482

URL: http://svn.digium.com/view/asterisk?rev=40482&view=rev
Log:
ensure there is one voice frame in between emulated DTMF, so that digits
converted into inband are properly recreated as multiple digits as opposed
to one continuous tone

Modified:
    team/group/vldtmf/channel.c

Modified: team/group/vldtmf/channel.c
URL: http://svn.digium.com/view/asterisk/team/group/vldtmf/channel.c?rev=40482&r1=40481&r2=40482&view=diff
==============================================================================
--- team/group/vldtmf/channel.c (original)
+++ team/group/vldtmf/channel.c Fri Aug 18 21:50:32 2006
@@ -2060,13 +2060,19 @@
 			ast_set_flag(chan, AST_FLAG_IN_DTMF);
 			break;
 		case AST_FRAME_VOICE:
+			/* The EMULATE_DTMF flag must be cleared here as opposed to when the samples
+			 * first get to zero, because we want to make sure we pass at least one
+			 * voice frame through before starting the next digit, to ensure a gap
+			 * between DTMF digits. */
+			if (ast_test_flag(chan, AST_FLAG_EMULATE_DTMF) && !chan->emulate_dtmf_samples)
+				ast_clear_flag(chan, AST_FLAG_EMULATE_DTMF);
+
 			if (dropaudio || ast_test_flag(chan, AST_FLAG_IN_DTMF)) {
 				ast_frfree(f);
 				f = &ast_null_frame;
 			} else if (ast_test_flag(chan, AST_FLAG_EMULATE_DTMF)) {
 				if (f->samples >= chan->emulate_dtmf_samples) {
 					chan->emulate_dtmf_samples = 0;
-					ast_clear_flag(chan, AST_FLAG_EMULATE_DTMF);
 				} else
 					chan->emulate_dtmf_samples -= f->samples;
 				ast_frfree(f);



More information about the asterisk-commits mailing list