]> git.ipfire.org Git - thirdparty/asterisk.git/commitdiff
restarts busydetector (if enabled) when DTMF is received after call is bridged.
authorAlec L Davis <sivad.a@paradise.net.nz>
Sun, 20 Dec 2009 09:07:19 +0000 (09:07 +0000)
committerAlec L Davis <sivad.a@paradise.net.nz>
Sun, 20 Dec 2009 09:07:19 +0000 (09:07 +0000)
  (closes issue #16389)
  Reported by: alecdavis
  Tested by: alecdavis
  Patch
    dtmf_busydetector.diff2.txt uploaded by alecdavis (license 585)

git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.6.1@235776 65c4cc65-6c06-0410-ace0-fbb531ad65f3

main/dsp.c

index 437164cc09440b78959c72853d30d0f5019d2ad1..7a509a1f2ee73d151a5052d55e1b67841825766c 100644 (file)
@@ -1342,8 +1342,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));
@@ -1355,15 +1355,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;
@@ -1372,6 +1375,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");
                                }
                        }