rtpjitterbuffer: do not drop serialized events when latency is set
authorAleix Conchillo Flaqué <aleix@oblong.com>
Fri, 17 Jan 2014 01:36:12 +0000 (17:36 -0800)
committerSebastian Dröge <sebastian@centricular.com>
Sat, 18 Jan 2014 09:38:46 +0000 (10:38 +0100)
Serialized events are now queued in the jitter buffer, so we don't
want to drop them even latency is set.

https://bugzilla.gnome.org/show_bug.cgi?id=722372

gst/rtpmanager/gstrtpjitterbuffer.c

index e1a7360..4b61bb3 100644 (file)
@@ -2210,11 +2210,16 @@ gst_rtp_jitter_buffer_chain (GstPad * pad, GstObject * parent,
     if (G_UNLIKELY (rtp_jitter_buffer_get_ts_diff (priv->jbuf) >= latency_ts)) {
       RTPJitterBufferItem *old_item;
 
-      old_item = rtp_jitter_buffer_pop (priv->jbuf, &percent);
-      GST_DEBUG_OBJECT (jitterbuffer, "Queue full, dropping old packet %p",
-          old_item);
-      priv->next_seqnum = (old_item->seqnum + 1) & 0xffff;
-      free_item (old_item);
+      old_item = rtp_jitter_buffer_peek (priv->jbuf);
+
+      /* only drop non-event buffers */
+      if (old_item->type != ITEM_TYPE_EVENT) {
+        old_item = rtp_jitter_buffer_pop (priv->jbuf, &percent);
+        GST_DEBUG_OBJECT (jitterbuffer, "Queue full, dropping old packet %p",
+            old_item);
+        priv->next_seqnum = (old_item->seqnum + 1) & 0xffff;
+        free_item (old_item);
+      }
     }
   }