diff --git a/apps/app_waitforsilence.c b/apps/app_waitforsilence.c index c0fc47acfa..eedbf15ac4 100644 --- a/apps/app_waitforsilence.c +++ b/apps/app_waitforsilence.c @@ -81,7 +81,7 @@ static char *descrip_noise = "Wait for Noise: The same as Wait for Silance but waits for noise that is above the threshold specified\n"; static int do_waiting(struct ast_channel *chan, int timereqd, time_t waitstart, int timeout, int wait_for_silence) { - struct ast_frame *f; + struct ast_frame *f = NULL; int dsptime = 0; int rfmt = 0; int res = 0; @@ -93,57 +93,50 @@ static int do_waiting(struct ast_channel *chan, int timereqd, time_t waitstart, wait_for_silence ? ast_dsp_silence : ast_dsp_noise; rfmt = chan->readformat; /* Set to linear mode */ - res = ast_set_read_format(chan, AST_FORMAT_SLINEAR); - if (res < 0) { + if ((res = ast_set_read_format(chan, AST_FORMAT_SLINEAR)) < 0) { ast_log(LOG_WARNING, "Unable to set channel to linear mode, giving up\n"); return -1; } - sildet = ast_dsp_new(); /* Create the silence detector */ - if (!sildet) { + /* Create the silence detector */ + if (!(sildet = ast_dsp_new())) { ast_log(LOG_WARNING, "Unable to create silence detector :(\n"); return -1; } ast_dsp_set_threshold(sildet, ast_dsp_get_threshold_from_settings(THRESHOLD_SILENCE)); /* Await silence... */ - f = NULL; - for(;;) { + for (;;) { /* Start with no silence received */ dsptime = 0; res = ast_waitfor(chan, timereqd); /* Must have gotten a hangup; let's exit */ - if (res <= 0) { - f = NULL; + if (res < 0) { + pbx_builtin_setvar_helper(chan, "WAITSTATUS", "HANGUP"); break; } /* We waited and got no frame; sounds like digital silence or a muted digital channel */ - if (!res) { + if (res == 0) { dsptime = timereqd; } else { /* Looks like we did get a frame, so let's check it out */ - f = ast_read(chan); - if (!f) + if (!(f = ast_read(chan))) { + pbx_builtin_setvar_helper(chan, "WAITSTATUS", "HANGUP"); break; - if (f && f->frametype == AST_FRAME_VOICE) { + } + if (f->frametype == AST_FRAME_VOICE) { ast_dsp_func(sildet, f, &dsptime); - ast_frfree(f); } + ast_frfree(f); } - if (wait_for_silence) - ast_verb(6, "Got %dms silence < %dms required\n", dsptime, timereqd); - else - ast_verb(6, "Got %dms noise < %dms required\n", dsptime, timereqd); + ast_verb(6, "Got %dms %s < %dms required\n", dsptime, wait_for_silence ? "silence" : "noise", timereqd); if (dsptime >= timereqd) { - if (wait_for_silence) - ast_verb(3, "Exiting with %dms silence >= %dms required\n", dsptime, timereqd); - else - ast_verb(3, "Exiting with %dms noise >= %dms required\n", dsptime, timereqd); + ast_verb(3, "Exiting with %dms %s >= %dms required\n", dsptime, wait_for_silence ? "silence" : "noise", timereqd); /* Ended happily with silence */ res = 1; pbx_builtin_setvar_helper(chan, "WAITSTATUS", wait_for_silence ? "SILENCE" : "NOISE");