typedef struct
{
char digits[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 current_digits;
int detected_digits;
int lost_digits;
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';
}
} 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;
}
}
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) {