diff options
author | Russell Bryant <russell@russellbryant.com> | 2009-06-27 10:04:51 +0000 |
---|---|---|
committer | Russell Bryant <russell@russellbryant.com> | 2009-06-27 10:04:51 +0000 |
commit | 236c10a070e322b8b39ed7cb5c91199e717cd308 (patch) | |
tree | e6e211e8e8a886a57255fe89ca447b2b49ede29e /main/app.c | |
parent | b7feca36856499ca31c1df225a1cd8014e097c36 (diff) |
Only update total silence counter after a counter reset.
(closes issue #2264)
Reported by: pfn
Patches:
silent-vm-1.6.2-fix2.txt uploaded by pfn (license 810)
Tested by: pfn
git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@203962 65c4cc65-6c06-0410-ace0-fbb531ad65f3
Diffstat (limited to 'main/app.c')
-rw-r--r-- | main/app.c | 10 |
1 files changed, 9 insertions, 1 deletions
diff --git a/main/app.c b/main/app.c index e39496225..f1357de7f 100644 --- a/main/app.c +++ b/main/app.c @@ -700,6 +700,7 @@ static int __ast_play_and_record(struct ast_channel *chan, const char *playfile, struct ast_dsp *sildet = NULL; /* silence detector dsp */ int totalsilence = 0; int dspsilence = 0; + int olddspsilence = 0; int rfmt = 0; struct ast_silence_generator *silgen = NULL; char prependfile[80]; @@ -826,7 +827,10 @@ static int __ast_play_and_record(struct ast_channel *chan, const char *playfile, if (maxsilence > 0) { dspsilence = 0; ast_dsp_silence(sildet, f, &dspsilence); - totalsilence += dspsilence; + if (olddspsilence > dspsilence) { + totalsilence += olddspsilence; + } + olddspsilence = dspsilence; if (dspsilence > maxsilence) { /* Ended happily with silence */ @@ -906,6 +910,10 @@ static int __ast_play_and_record(struct ast_channel *chan, const char *playfile, if (!prepend) { /* Reduce duration by a total silence amount */ + if (olddspsilence <= dspsilence) { + totalsilence += dspsilence; + } + if (totalsilence > 0) *duration -= (totalsilence - 200) / 1000; if (*duration < 0) { |