aboutsummaryrefslogtreecommitdiffstats
path: root/main/dsp.c
diff options
context:
space:
mode:
authoralecdavis <alecdavis@f38db490-d61c-443f-a65b-d21fe96a405b>2009-12-20 08:22:35 +0000
committeralecdavis <alecdavis@f38db490-d61c-443f-a65b-d21fe96a405b>2009-12-20 08:22:35 +0000
commit89832485ff5366af19a4e74ed01917e2430787d9 (patch)
tree1afefd3eb0c9259f6691b01523598a4a92da640a /main/dsp.c
parent66093136f6bcce5b38b5b9d1525731e9f1f541a7 (diff)
restarts busydetector (if enabled) when DTMF is received after call is bridged.
(closes issue 0016389) 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/trunk@235774 f38db490-d61c-443f-a65b-d21fe96a405b
Diffstat (limited to 'main/dsp.c')
-rw-r--r--main/dsp.c18
1 files changed, 11 insertions, 7 deletions
diff --git a/main/dsp.c b/main/dsp.c
index 2f0e086df..ffd891139 100644
--- a/main/dsp.c
+++ b/main/dsp.c
@@ -1376,8 +1376,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));
@@ -1389,15 +1389,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;
@@ -1406,6 +1409,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");
}
}