aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authormarkster <markster@f38db490-d61c-443f-a65b-d21fe96a405b>2004-11-15 00:48:36 +0000
committermarkster <markster@f38db490-d61c-443f-a65b-d21fe96a405b>2004-11-15 00:48:36 +0000
commit0f3dd69c53cbb927c56e2b4852aa4afb80b4f66f (patch)
tree41549fee4a62482e0fb296b83b53f662620e7a12
parent962ab104482c4e7f2000ba7c535ff973a70f527e (diff)
DSP enhancements (bug #2826) courtesy pcadach
git-svn-id: http://svn.digium.com/svn/asterisk/trunk@4248 f38db490-d61c-443f-a65b-d21fe96a405b
-rwxr-xr-xdsp.c13
-rwxr-xr-xinclude/asterisk/dsp.h15
2 files changed, 17 insertions, 11 deletions
diff --git a/dsp.c b/dsp.c
index a906119fe..ad753a366 100755
--- a/dsp.c
+++ b/dsp.c
@@ -1174,15 +1174,15 @@ static int __ast_dsp_call_progress(struct ast_dsp *dsp, short *s, int len)
if (newstate == dsp->tstate) {
dsp->tcount++;
if (dsp->tcount == COUNT_THRESH) {
- if (dsp->tstate == TONE_STATE_BUSY) {
+ if ((dsp->features & DSP_PROGRESS_BUSY) && dsp->tstate == TONE_STATE_BUSY) {
res = AST_CONTROL_BUSY;
dsp->features &= ~DSP_FEATURE_CALL_PROGRESS;
- } else if (dsp->tstate == TONE_STATE_TALKING) {
+ } else if ((dsp->features & DSP_PROGRESS_TALK) && dsp->tstate == TONE_STATE_TALKING) {
res = AST_CONTROL_ANSWER;
dsp->features &= ~DSP_FEATURE_CALL_PROGRESS;
- } else if (dsp->tstate == TONE_STATE_RINGING)
+ } else if ((dsp->features & DSP_PROGRESS_RINGING) && dsp->tstate == TONE_STATE_RINGING)
res = AST_CONTROL_RINGING;
- else if (dsp->tstate == TONE_STATE_SPECIAL3) {
+ else if ((dsp->features & DSP_PROGRESS_CONGESTION) && dsp->tstate == TONE_STATE_SPECIAL3) {
res = AST_CONTROL_CONGESTION;
dsp->features &= ~DSP_FEATURE_CALL_PROGRESS;
}
@@ -1576,15 +1576,16 @@ struct ast_frame *ast_dsp_process(struct ast_channel *chan, struct ast_dsp *dsp,
}
if ((dsp->features & DSP_FEATURE_CALL_PROGRESS)) {
res = __ast_dsp_call_progress(dsp, shortdata, len);
- memset(&dsp->f, 0, sizeof(dsp->f));
- dsp->f.frametype = AST_FRAME_CONTROL;
if (res) {
switch(res) {
case AST_CONTROL_ANSWER:
case AST_CONTROL_BUSY:
case AST_CONTROL_RINGING:
case AST_CONTROL_CONGESTION:
+ memset(&dsp->f, 0, sizeof(dsp->f));
+ dsp->f.frametype = AST_FRAME_CONTROL;
dsp->f.subclass = res;
+ dsp->f.src = "dsp_progress";
if (chan)
ast_queue_frame(chan, &dsp->f);
break;
diff --git a/include/asterisk/dsp.h b/include/asterisk/dsp.h
index 916e24898..e86ca4711 100755
--- a/include/asterisk/dsp.h
+++ b/include/asterisk/dsp.h
@@ -14,11 +14,10 @@
#ifndef _ASTERISK_DSP_H
#define _ASTERISK_DSP_H
-#define DSP_FEATURE_SILENCE_SUPPRESS (1 << 0)
-#define DSP_FEATURE_BUSY_DETECT (1 << 1)
-#define DSP_FEATURE_CALL_PROGRESS (1 << 2)
-#define DSP_FEATURE_DTMF_DETECT (1 << 3)
-#define DSP_FEATURE_FAX_DETECT (1 << 4)
+#define DSP_FEATURE_SILENCE_SUPPRESS (1 << 0)
+#define DSP_FEATURE_BUSY_DETECT (1 << 1)
+#define DSP_FEATURE_DTMF_DETECT (1 << 3)
+#define DSP_FEATURE_FAX_DETECT (1 << 4)
#define DSP_DIGITMODE_DTMF 0 /* Detect DTMF digits */
#define DSP_DIGITMODE_MF 1 /* Detect MF digits */
@@ -28,6 +27,12 @@
#define DSP_DIGITMODE_MUTEMAX (1 << 10) /* Delay audio by a frame to try to extra quelch */
#define DSP_DIGITMODE_RELAXDTMF (1 << 11) /* "Radio" mode (relaxed DTMF) */
+#define DSP_PROGRESS_TALK (1 << 16) /* Enable talk detection */
+#define DSP_PROGRESS_RINGING (1 << 17) /* Enable calling tone detection */
+#define DSP_PROGRESS_BUSY (1 << 18) /* Enable busy tone detection */
+#define DSP_PROGRESS_CONGESTION (1 << 19) /* Enable congestion tone detection */
+#define DSP_FEATURE_CALL_PROGRESS (DSP_PROGRESS_TALK | DSP_PROGRESS_RINGING | DSP_PROGRESS_BUSY | DSP_PROGRESS_CONGESTION)
+
struct ast_dsp;
struct ast_dsp *ast_dsp_new(void);