mirror of
https://github.com/asterisk/asterisk.git
synced 2025-09-06 12:36:58 +00:00
Jitter buffer improvements (bug #4167)
git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@5610 65c4cc65-6c06-0410-ace0-fbb531ad65f3
This commit is contained in:
11
jitterbuf.c
11
jitterbuf.c
@@ -489,7 +489,7 @@ static int _jb_get(jitterbuf *jb, jb_frame *frameout, long now)
|
||||
|
||||
|
||||
/* target */
|
||||
jb->info.target = jb->info.jitter + jb->info.min + 2 * jb->info.last_voice_ms;
|
||||
jb->info.target = jb->info.jitter + jb->info.min + JB_TARGET_EXTRA;
|
||||
|
||||
/* if a hard clamp was requested, use it */
|
||||
if ((jb->info.max_jitterbuf) && ((jb->info.target - jb->info.min) > jb->info.max_jitterbuf)) {
|
||||
@@ -509,8 +509,8 @@ static int _jb_get(jitterbuf *jb, jb_frame *frameout, long now)
|
||||
if (!jb->info.silence) {
|
||||
/* we want to grow */
|
||||
if ((diff > 0) &&
|
||||
/* we haven't grown in 2 frames' length */
|
||||
(((jb->info.last_adjustment + 2 * jb->info.last_voice_ms ) < now) ||
|
||||
/* we haven't grown in the delay length */
|
||||
(((jb->info.last_adjustment + JB_ADJUST_DELAY) < now) ||
|
||||
/* we need to grow more than the "length" we have left */
|
||||
(diff > queue_last(jb) - queue_next(jb)) ) ) {
|
||||
|
||||
@@ -558,7 +558,10 @@ static int _jb_get(jitterbuf *jb, jb_frame *frameout, long now)
|
||||
}
|
||||
|
||||
/* we want to shrink; shrink at 1 frame / 500ms */
|
||||
if (diff < -2 * jb->info.last_voice_ms &&
|
||||
/* unless we don't have a frame, then shrink 1 frame */
|
||||
/* every 80ms (though perhaps we can shrink even faster */
|
||||
/* in this case) */
|
||||
if (diff < -JB_TARGET_EXTRA &&
|
||||
((!frame && jb->info.last_adjustment + 80 < now) ||
|
||||
(jb->info.last_adjustment + 500 < now))) {
|
||||
|
||||
|
@@ -30,6 +30,10 @@ extern "C" {
|
||||
#define JB_HISTORY_DROPPCT_MAX 4
|
||||
/* the size of the buffer we use to keep the top and botton timestamps for dropping */
|
||||
#define JB_HISTORY_MAXBUF_SZ JB_HISTORY_SZ * JB_HISTORY_DROPPCT_MAX / 100
|
||||
/* amount of additional jitterbuffer adjustment */
|
||||
#define JB_TARGET_EXTRA 40
|
||||
/* ms between growing and shrinking; may not be honored if jitterbuffer runs out of space */
|
||||
#define JB_ADJUST_DELAY 40
|
||||
|
||||
|
||||
/* return codes */
|
||||
|
Reference in New Issue
Block a user