[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