diff --git a/chan_capi.c b/chan_capi.c index b502582..e271a9b 100644 --- a/chan_capi.c +++ b/chan_capi.c @@ -1969,11 +1969,28 @@ static struct ast_frame *pbx_capi_read(struct ast_channel *c) f = capi_read_pipeframe(i); - if ((f) && (f->frametype == AST_FRAME_VOICE) && (f->datalen > 0)) { - if ((i->doDTMF > 0) && (i->vad != NULL) ) { - f = ast_dsp_process(c, i->vad, f); + if (f != NULL) { + if (f->frametype == AST_FRAME_VOICE) { + if ((f->datalen > 0) && (i->doDTMF > 0) && (i->vad != NULL)) { + f = ast_dsp_process(c, i->vad, f); + } +#if 0 + } else if (f->frametype == AST_FRAME_DTMF) { +/* Work around problem with recognition of fast sequences of events, + * see main/channel.c for details + */ + if (!(ast_test_flag(c, AST_FLAG_END_DTMF_ONLY) || + ast_test_flag(c, AST_FLAG_EMULATE_DTMF) || + ast_test_flag(c, AST_FLAG_IN_DTMF))) { + ast_set_flag(c, AST_FLAG_IN_DTMF); + c->dtmf_tv = ast_tv(0,0); + if (!f->len) + f->len = 100; + } +#endif } } + return f; }