Update of /usr/cvsroot/asterisk
In directory mongoose.digium.com:/tmp/cvs-serv9036

Modified Files:
        jitterbuf.c jitterbuf.h 
Log Message:
Yet another set of jitter buffer changes (this time some scheduling 
improvements) (bug #4319)


Index: jitterbuf.c
===================================================================
RCS file: /usr/cvsroot/asterisk/jitterbuf.c,v
retrieving revision 1.12
retrieving revision 1.13
diff -u -d -r1.12 -r1.13
--- jitterbuf.c 19 May 2005 00:34:28 -0000      1.12
+++ jitterbuf.c 19 May 2005 01:24:09 -0000      1.13
@@ -300,10 +300,12 @@
        jb->info.jitter = jitter;
 }
 
-static void queue_put(jitterbuf *jb, void *data, int type, long ms, long ts) 
+/* returns 1 if frame was inserted into head of queue, 0 otherwise */
+static int queue_put(jitterbuf *jb, void *data, int type, long ms, long ts) 
 {
        jb_frame *frame;
        jb_frame *p;
+       int head = 0;
        long resync_ts = ts - jb->info.resync_offset;
 
        frame = jb->free;
@@ -315,7 +317,7 @@
 
        if (!frame) {
                jb_err("cannot allocate frame\n");
-               return;
+               return 0;
        }
 
        jb->info.frames_cur++;
@@ -334,6 +336,7 @@
                jb->frames = frame;
                frame->next = frame;
                frame->prev = frame;
+               head = 1;
        } else if (resync_ts < jb->frames->ts) {
                frame->next = jb->frames;
                frame->prev = jb->frames->prev;
@@ -345,6 +348,7 @@
                jb->info.frames_ooo++;
 
                jb->frames = frame;
+               head = 1;
        } else { 
                p = jb->frames;
 
@@ -360,6 +364,7 @@
                frame->next->prev = frame;
                frame->prev->next = frame;
        }
+       return head;
 }
 
 static long queue_next(jitterbuf *jb) 
@@ -502,8 +507,10 @@
                        return JB_DROP;
        }
 
-       queue_put(jb,data,type,ms,ts);
-
+       /* if put into head of queue, caller needs to reschedule */
+       if (queue_put(jb,data,type,ms,ts)) {
+               return JB_SCHED;
+       }
        return JB_OK;
 }
 

Index: jitterbuf.h
===================================================================
RCS file: /usr/cvsroot/asterisk/jitterbuf.h,v
retrieving revision 1.5
retrieving revision 1.6
diff -u -d -r1.5 -r1.6
--- jitterbuf.h 19 May 2005 00:34:28 -0000      1.5
+++ jitterbuf.h 19 May 2005 01:24:09 -0000      1.6
@@ -42,6 +42,7 @@
 #define JB_NOFRAME     2
 #define JB_INTERP      3
 #define JB_DROP                4
+#define JB_SCHED       5
 
 /* frame types */
 #define JB_TYPE_CONTROL        0
@@ -112,7 +113,11 @@
 void                   jb_reset(jitterbuf *jb);
 
 /* queue a frame data=frame data, timings (in ms): ms=length of frame (for 
voice), ts=ts (sender's time) 
- * now=now (in receiver's time)*/
+ * now=now (in receiver's time) return value is one of 
+ * JB_OK: Frame added. Last call to jb_next() still valid
+ * JB_DROP: Drop this frame immediately
+ * JB_SCHED: Frame added. Call jb_next() to get a new time for the next frame
+ */
 int                    jb_put(jitterbuf *jb, void *data, int type, long ms, 
long ts, long now);
 
 /* get a frame for time now (receiver's time)  return value is one of

_______________________________________________
Asterisk-Cvs mailing list
[email protected]
http://lists.digium.com/mailman/listinfo/asterisk-cvs

Reply via email to