[asterisk-commits] tilghman: branch 1.6.2 r268457 - in /branches/1.6.2: ./ main/dsp.c
SVN commits to the Asterisk project
asterisk-commits at lists.digium.com
Sat Jun 5 12:57:00 CDT 2010
Author: tilghman
Date: Sat Jun 5 12:56:55 2010
New Revision: 268457
URL: http://svnview.digium.com/svn/asterisk?view=rev&rev=268457
Log:
Merged revisions 268456 via svnmerge from
https://origsvn.digium.com/svn/asterisk/trunk
........
r268456 | tilghman | 2010-06-05 12:55:28 -0500 (Sat, 05 Jun 2010) | 14 lines
Fix crash in DTMF detection.
What I did not originally see in my previous commit was that even though the
next digit could be detected before the previous was considered ended, the
detection of the next digit effectively ends the detection of the previous.
Therefore, the length moves in lockstep with the digit, and no separate counter
is needed for the length alone.
(closes issue #17371)
Reported by: alecdavis
(closes issue #17474)
Reported by: kenner
........
Modified:
branches/1.6.2/ (props changed)
branches/1.6.2/main/dsp.c
Propchange: branches/1.6.2/
------------------------------------------------------------------------------
Binary property 'trunk-merged' - no diff available.
Modified: branches/1.6.2/main/dsp.c
URL: http://svnview.digium.com/svn/asterisk/branches/1.6.2/main/dsp.c?view=diff&rev=268457&r1=268456&r2=268457
==============================================================================
--- branches/1.6.2/main/dsp.c (original)
+++ branches/1.6.2/main/dsp.c Sat Jun 5 12:56:55 2010
@@ -273,11 +273,8 @@
typedef struct
{
char digits[MAX_DTMF_DIGITS + 1];
+ int digitlen[MAX_DTMF_DIGITS + 1];
int current_digits;
- /* Store lengths separately, because next digit may begin before last has
- * ended (because hits_to_begin may be less than misses_to_end). */
- int digitlen[MAX_DTMF_DIGITS + 1];
- int current_len;
int detected_digits;
int lost_digits;
@@ -515,7 +512,6 @@
static void ast_digit_detect_init(digit_detect_state_t *s, int mf)
{
s->current_digits = 0;
- s->current_len = 0;
s->detected_digits = 0;
s->lost_digits = 0;
s->digits[0] = '\0';
@@ -739,8 +735,8 @@
}
} else {
s->td.dtmf.misses = 0;
- /* Current hit was same as last, so increment digit duration */
- s->digitlen[s->current_len] += DTMF_GSIZE;
+ /* Current hit was same as last, so increment digit duration (of last digit) */
+ s->digitlen[s->current_digits - 1] += DTMF_GSIZE;
}
}
@@ -1423,9 +1419,8 @@
event_len = dsp->digit_state.digitlen[0] * 1000 / SAMPLE_RATE;
}
memmove(&dsp->digit_state.digits[0], &dsp->digit_state.digits[1], dsp->digit_state.current_digits);
+ memmove(&dsp->digit_state.digitlen[0], &dsp->digit_state.digitlen[1], dsp->digit_state.current_digits * sizeof(dsp->digit_state.digitlen[0]));
dsp->digit_state.current_digits--;
- memmove(&dsp->digit_state.digitlen[0], &dsp->digit_state.digitlen[1], dsp->digit_state.current_len * sizeof(dsp->digit_state.digitlen[0]));
- dsp->digit_state.current_len--;
dsp->dtmf_began = 0;
if (dsp->features & DSP_FEATURE_BUSY_DETECT) {
More information about the asterisk-commits
mailing list