summaryrefslogtreecommitdiff
path: root/main/app.c
diff options
context:
space:
mode:
authorRussell Bryant <russell@russellbryant.com>2009-06-27 10:04:51 +0000
committerRussell Bryant <russell@russellbryant.com>2009-06-27 10:04:51 +0000
commit236c10a070e322b8b39ed7cb5c91199e717cd308 (patch)
treee6e211e8e8a886a57255fe89ca447b2b49ede29e /main/app.c
parentb7feca36856499ca31c1df225a1cd8014e097c36 (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.c10
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) {