summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNanang Izzuddin <nanang@teluu.com>2008-09-23 16:55:21 +0000
committerNanang Izzuddin <nanang@teluu.com>2008-09-23 16:55:21 +0000
commit9fe11086fdee08c6eb7e902ab508c5383c648cdc (patch)
tree99725bf497a7b02478c03d73d5e89c70cce5a11c
parenta32dfa955e9885bff39f2098228a771715e264db (diff)
Ticket #638:
- Jitter buffer shrinking is done based on max_hist_level (recent maximum burst level). - Updated jitter buffer to maintain max_hist_level, instead of resetting it each time current level is updated. - Updated default jitter buffer size in stream.c from 360ms to 500ms to accomodate more burst level. git-svn-id: http://svn.pjsip.org/repos/pjproject/trunk@2310 74dad513-b988-da41-8d7b-12977e46ad98
-rw-r--r--pjmedia/src/pjmedia/jbuf.c18
-rw-r--r--pjmedia/src/pjmedia/stream.c2
2 files changed, 13 insertions, 7 deletions
diff --git a/pjmedia/src/pjmedia/jbuf.c b/pjmedia/src/pjmedia/jbuf.c
index dc2eb605..172aa00e 100644
--- a/pjmedia/src/pjmedia/jbuf.c
+++ b/pjmedia/src/pjmedia/jbuf.c
@@ -401,7 +401,6 @@ static void jbuf_calculate_jitter(pjmedia_jbuf *jb)
{
int diff, cur_size;
- /* Update jb_max_size */
cur_size = jb_framelist_size(&jb->jb_framelist);
/* Only apply burst-level calculation on PUT operation since if VAD is
@@ -422,6 +421,10 @@ static void jbuf_calculate_jitter(pjmedia_jbuf *jb)
* (not just short time impulse)
*/
if (jb->jb_stable_hist > STABLE_HISTORY_LIMIT) {
+
+ /* Update max_hist_level. */
+ jb->jb_max_hist_level = jb->jb_prefetch;
+
diff = (jb->jb_prefetch - jb->jb_max_hist_level) / 3;
if (diff < 1)
@@ -431,11 +434,10 @@ static void jbuf_calculate_jitter(pjmedia_jbuf *jb)
if (jb->jb_prefetch < jb->jb_min_prefetch)
jb->jb_prefetch = jb->jb_min_prefetch;
+ jb->jb_stable_hist = 0;
+
TRACE__((jb->name.ptr,"jb updated(1), prefetch=%d, size=%d",
jb->jb_prefetch, cur_size));
-
- jb->jb_stable_hist = 0;
- jb->jb_max_hist_level = 0;
}
}
@@ -447,8 +449,10 @@ static void jbuf_calculate_jitter(pjmedia_jbuf *jb)
(int)(jb->jb_max_count*4/5));
if (jb->jb_prefetch > jb->jb_max_prefetch)
jb->jb_prefetch = jb->jb_max_prefetch;
+
jb->jb_stable_hist = 0;
- jb->jb_max_hist_level = 0;
+ // Keep max_hist_level.
+ //jb->jb_max_hist_level = 0;
TRACE__((jb->name.ptr,"jb updated(2), prefetch=%d, size=%d",
jb->jb_prefetch, cur_size));
@@ -461,7 +465,9 @@ static void jbuf_calculate_jitter(pjmedia_jbuf *jb)
}
/* These code is used for shortening the delay in the jitter buffer. */
- diff = cur_size - jb->jb_prefetch;
+ // Shrinking based on max_hist_level (recent max level).
+ //diff = cur_size - jb->jb_prefetch;
+ diff = cur_size - jb->jb_max_hist_level;
if (diff > SAFE_SHRINKING_DIFF &&
jb->jb_framelist.flist_origin-jb->jb_last_del_seq > jb->jb_min_shrink_gap)
{
diff --git a/pjmedia/src/pjmedia/stream.c b/pjmedia/src/pjmedia/stream.c
index 6a99bbb5..faa55c4f 100644
--- a/pjmedia/src/pjmedia/stream.c
+++ b/pjmedia/src/pjmedia/stream.c
@@ -1667,7 +1667,7 @@ PJ_DEF(pj_status_t) pjmedia_stream_create( pjmedia_endpt *endpt,
if (info->jb_max > 0)
jb_max = info->jb_max;
else
- jb_max = 360 / stream->codec_param.info.frm_ptime;
+ jb_max = 500 / stream->codec_param.info.frm_ptime;
if (info->jb_min_pre >= 0)
jb_min_pre = info->jb_min_pre;