diff options
author | russell <russell@f38db490-d61c-443f-a65b-d21fe96a405b> | 2007-01-29 17:03:31 +0000 |
---|---|---|
committer | russell <russell@f38db490-d61c-443f-a65b-d21fe96a405b> | 2007-01-29 17:03:31 +0000 |
commit | c7c5bf49aef631ac08156859f4c491fabc7cd9da (patch) | |
tree | b891ae4e31617119ae3dec9143e07dd23f2c25a5 /main/jitterbuf.c | |
parent | d80f70486cb6d08258763c4661b2a068fbebbcb5 (diff) |
Merged revisions 52494,52506 via svnmerge from
https://origsvn.digium.com/svn/asterisk/branches/1.4
........
r52494 | jdixon | 2007-01-28 22:18:36 -0600 (Sun, 28 Jan 2007) | 4 lines
Fixed problem with jitterbuf, whereas it would not complain about, and
would allow itself to be overfilled (per the max_jitterbuf parameter). Now
it rejects any data over and above that size, and complains about it.
........
r52506 | russell | 2007-01-29 10:54:27 -0600 (Mon, 29 Jan 2007) | 5 lines
Clean up a few things in the last commit to the adaptive jitterbuffer code.
- Specifically indicate to the compiler that the "dropem" variable only
needs one but.
- Change formatting to conform to coding guidelines.
........
git-svn-id: http://svn.digium.com/svn/asterisk/trunk@52522 f38db490-d61c-443f-a65b-d21fe96a405b
Diffstat (limited to 'main/jitterbuf.c')
-rw-r--r-- | main/jitterbuf.c | 16 |
1 files changed, 15 insertions, 1 deletions
diff --git a/main/jitterbuf.c b/main/jitterbuf.c index 189be3451..f41e0d382 100644 --- a/main/jitterbuf.c +++ b/main/jitterbuf.c @@ -512,17 +512,31 @@ static void jb_dbgqueue(jitterbuf *jb) enum jb_return_code jb_put(jitterbuf *jb, void *data, const enum jb_frame_type type, long ms, long ts, long now) { + long numts; + jb_dbg2("jb_put(%x,%x,%ld,%ld,%ld)\n", jb, data, ms, ts, now); jb->info.frames_in++; + if (jb->frames && jb->dropem) + return JB_DROP; + jb->dropem = 0; + if (type == JB_TYPE_VOICE) { /* presently, I'm only adding VOICE frames to history and drift calculations; mostly because with the * IAX integrations, I'm sending retransmitted control frames with their awkward timestamps through */ if (history_put(jb,ts,now,ms)) return JB_DROP; } - + numts = 0; + if (jb->frames) + numts = jb->frames->prev->ts - jb->frames->ts; + if (numts >= jb->info.conf.max_jitterbuf) { + ast_log(LOG_DEBUG, "Attempting to exceed Jitterbuf max %ld timeslots\n", + jb->info.conf.max_jitterbuf); + jb->dropem = 1; + return JB_DROP; + } /* if put into head of queue, caller needs to reschedule */ if (queue_put(jb,data,type,ms,ts)) { return JB_SCHED; |