diff options
author | alecdavis <alecdavis@f38db490-d61c-443f-a65b-d21fe96a405b> | 2009-12-20 08:58:22 +0000 |
---|---|---|
committer | alecdavis <alecdavis@f38db490-d61c-443f-a65b-d21fe96a405b> | 2009-12-20 08:58:22 +0000 |
commit | 94d5fd7011d846e8716e84505411f1fb048e6973 (patch) | |
tree | 9ed452f9d2f0c677745c11bfd39da78fc1b78a75 /main | |
parent | 6b4538ead29338e3e54eac8d55076d1fca60f7e3 (diff) |
restarts busydetector (if enabled) when DTMF is received after call is bridged.
(closes issue #16389)
Reported by: alecdavis
Tested by: alecdavis
Patch
dtmf_busydetector.diff2.txt uploaded by alecdavis (license 585)
git-svn-id: http://svn.digium.com/svn/asterisk/branches/1.6.2@235775 f38db490-d61c-443f-a65b-d21fe96a405b
Diffstat (limited to 'main')
-rw-r--r-- | main/dsp.c | 18 |
1 files changed, 11 insertions, 7 deletions
diff --git a/main/dsp.c b/main/dsp.c index 9f66495ac..0796fd034 100644 --- a/main/dsp.c +++ b/main/dsp.c @@ -1385,8 +1385,8 @@ struct ast_frame *ast_dsp_process(struct ast_channel *chan, struct ast_dsp *dsp, } } - if ((dsp->features & DSP_FEATURE_DIGIT_DETECT)) { - if ((dsp->digitmode & DSP_DIGITMODE_MF)) + if (dsp->features & (DSP_FEATURE_DIGIT_DETECT | DSP_FEATURE_BUSY_DETECT)) { + if (dsp->digitmode & DSP_DIGITMODE_MF) digit = mf_detect(dsp, &dsp->digit_state, shortdata, len, (dsp->digitmode & DSP_DIGITMODE_NOQUELCH) == 0, (dsp->digitmode & DSP_DIGITMODE_RELAXDTMF)); else digit = dtmf_detect(dsp, &dsp->digit_state, shortdata, len, (dsp->digitmode & DSP_DIGITMODE_NOQUELCH) == 0, (dsp->digitmode & DSP_DIGITMODE_RELAXDTMF)); @@ -1398,15 +1398,18 @@ struct ast_frame *ast_dsp_process(struct ast_channel *chan, struct ast_dsp *dsp, if (!dsp->dtmf_began) { /* We have not reported DTMF_BEGIN for anything yet */ - event = AST_FRAME_DTMF_BEGIN; - event_digit = dsp->digit_state.digits[0]; + if (dsp->features & DSP_FEATURE_DIGIT_DETECT) { + event = AST_FRAME_DTMF_BEGIN; + event_digit = dsp->digit_state.digits[0]; + } dsp->dtmf_began = 1; } else if (dsp->digit_state.current_digits > 1 || digit != dsp->digit_state.digits[0]) { /* Digit changed. This means digit we have reported with DTMF_BEGIN ended */ - - event = AST_FRAME_DTMF_END; - event_digit = dsp->digit_state.digits[0]; + if (dsp->features & DSP_FEATURE_DIGIT_DETECT) { + event = AST_FRAME_DTMF_END; + event_digit = dsp->digit_state.digits[0]; + } memmove(dsp->digit_state.digits, dsp->digit_state.digits + 1, dsp->digit_state.current_digits); dsp->digit_state.current_digits--; dsp->dtmf_began = 0; @@ -1415,6 +1418,7 @@ struct ast_frame *ast_dsp_process(struct ast_channel *chan, struct ast_dsp *dsp, /* Reset Busy Detector as we have some confirmed activity */ memset(dsp->historicsilence, 0, sizeof(dsp->historicsilence)); memset(dsp->historicnoise, 0, sizeof(dsp->historicnoise)); + ast_debug(1, "DTMF Detected - Reset busydetector\n"); } } |