rtpjitterbuffer: detect -1 seqnum
authorWim Taymans <wtaymans@redhat.com>
Tue, 10 Dec 2013 10:04:06 +0000 (11:04 +0100)
committerWim Taymans <wtaymans@redhat.com>
Tue, 10 Dec 2013 10:04:06 +0000 (11:04 +0100)
Keep the seqnum as a full guint so that we can check for -1 entries and
deal with them correctly.
Immediately try to push -1 seqnum.

gst/rtpmanager/gstrtpjitterbuffer.c

index b7778bf..1500120 100644 (file)
@@ -2268,7 +2268,7 @@ update_estimated_eos (GstRtpJitterBuffer * jitterbuffer,
 
 /* take a buffer from the queue and push it */
 static GstFlowReturn
-pop_and_push_next (GstRtpJitterBuffer * jitterbuffer, guint16 seqnum)
+pop_and_push_next (GstRtpJitterBuffer * jitterbuffer, guint seqnum)
 {
   GstRtpJitterBufferPrivate *priv = jitterbuffer->priv;
   GstFlowReturn result;
@@ -2324,8 +2324,10 @@ pop_and_push_next (GstRtpJitterBuffer * jitterbuffer, guint16 seqnum)
 
   /* now we are ready to push the buffer. Save the seqnum and release the lock
    * so the other end can push stuff in the queue again. */
-  priv->last_popped_seqnum = seqnum;
-  priv->next_seqnum = (seqnum + item->count) & 0xffff;
+  if (seqnum != -1) {
+    priv->last_popped_seqnum = seqnum;
+    priv->next_seqnum = (seqnum + item->count) & 0xffff;
+  }
   JBUF_UNLOCK (priv);
 
   item->data = NULL;
@@ -2374,7 +2376,7 @@ handle_next_buffer (GstRtpJitterBuffer * jitterbuffer)
   GstRtpJitterBufferPrivate *priv = jitterbuffer->priv;
   GstFlowReturn result = GST_FLOW_OK;
   RTPJitterBufferItem *item;
-  guint16 seqnum;
+  guint seqnum;
   guint32 next_seqnum;
   gint gap;
 
@@ -2394,6 +2396,8 @@ again:
 
   /* get the seqnum and the next expected seqnum */
   seqnum = item->seqnum;
+  if (seqnum == -1)
+    goto do_push;
 
   next_seqnum = priv->next_seqnum;
 
@@ -2410,6 +2414,7 @@ again:
     gap = gst_rtp_buffer_compare_seqnum (next_seqnum, seqnum);
 
     if (G_LIKELY (gap == 0)) {
+    do_push:
       /* no missing packet, pop and push */
       result = pop_and_push_next (jitterbuffer, seqnum);
     } else if (G_UNLIKELY (gap < 0)) {