[asterisk-commits] jdixon: branch 1.4 r52494 - in /branches/1.4:
include/ main/
asterisk-commits at lists.digium.com
asterisk-commits at lists.digium.com
Sun Jan 28 21:18:37 MST 2007
Author: jdixon
Date: Sun Jan 28 22:18:36 2007
New Revision: 52494
URL: http://svn.digium.com/view/asterisk?view=rev&rev=52494
Log:
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.
Modified:
branches/1.4/include/jitterbuf.h
branches/1.4/main/jitterbuf.c
Modified: branches/1.4/include/jitterbuf.h
URL: http://svn.digium.com/view/asterisk/branches/1.4/include/jitterbuf.h?view=diff&rev=52494&r1=52493&r2=52494
==============================================================================
--- branches/1.4/include/jitterbuf.h (original)
+++ branches/1.4/include/jitterbuf.h Sun Jan 28 22:18:36 2007
@@ -103,6 +103,7 @@
long hist_maxbuf[JB_HISTORY_MAXBUF_SZ]; /* a sorted buffer of the max delays (highest first) */
long hist_minbuf[JB_HISTORY_MAXBUF_SZ]; /* a sorted buffer of the min delays (lowest first) */
int hist_maxbuf_valid; /* are the "maxbuf"/minbuf valid? */
+ int dropem; /* flag to indicate dropping frames (overload) */
jb_frame *frames; /* queued frames */
Modified: branches/1.4/main/jitterbuf.c
URL: http://svn.digium.com/view/asterisk/branches/1.4/main/jitterbuf.c?view=diff&rev=52494&r1=52493&r2=52494
==============================================================================
--- branches/1.4/main/jitterbuf.c (original)
+++ branches/1.4/main/jitterbuf.c Sun Jan 28 22:18:36 2007
@@ -512,9 +512,14 @@
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
@@ -522,7 +527,15 @@
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_NOTICE,"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;
More information about the asterisk-commits
mailing list