Only update total silence counter after a counter reset.
authorRussell Bryant <russell@russellbryant.com>
Sat, 27 Jun 2009 10:04:51 +0000 (10:04 +0000)
committerRussell Bryant <russell@russellbryant.com>
Sat, 27 Jun 2009 10:04:51 +0000 (10:04 +0000)
(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

main/app.c

index e394962..f1357de 100644 (file)
@@ -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) {