jitterbuffer: small cleanups
authorWim Taymans <wim.taymans@collabora.co.uk>
Mon, 19 Aug 2013 19:29:49 +0000 (21:29 +0200)
committerWim Taymans <wim.taymans@collabora.co.uk>
Mon, 19 Aug 2013 20:04:50 +0000 (22:04 +0200)
gst/rtpmanager/gstrtpjitterbuffer.c

index 4f8106c..083c0d1 100644 (file)
@@ -165,7 +165,7 @@ struct _GstRtpJitterBufferPrivate
   GstClockTime last_out_pts;
   /* last valid input timestamp and rtptime pair */
   GstClockTime ips_dts;
-  GstClockTime ips_rtptime;
+  guint64 ips_rtptime;
   GstClockTime packet_spacing;
   /* the next expected seqnum we receive */
   guint32 next_in_seqnum;
@@ -1642,7 +1642,7 @@ gst_rtp_jitter_buffer_chain (GstPad * pad, GstObject * parent,
   GstRtpJitterBuffer *jitterbuffer;
   GstRtpJitterBufferPrivate *priv;
   guint16 seqnum;
-  guint32 rtptime;
+  guint32 expected, rtptime;
   GstFlowReturn ret = GST_FLOW_OK;
   GstClockTime dts, pts;
   guint64 latency_ts;
@@ -1674,7 +1674,7 @@ gst_rtp_jitter_buffer_chain (GstPad * pad, GstObject * parent,
 
   /* take the DTS of the buffer. This is the time when the packet was
    * received and is used to calculate jitter and clock skew. We will adjust
-   * this PTS with the smoothed value after processing it in the
+   * this DTS with the smoothed value after processing it in the
    * jitterbuffer and assign it as the PTS. */
   /* bring to running time */
   dts = gst_segment_to_running_time (&priv->segment, GST_FORMAT_TIME, dts);
@@ -1717,23 +1717,25 @@ gst_rtp_jitter_buffer_chain (GstPad * pad, GstObject * parent,
   if (G_UNLIKELY (priv->eos))
     goto have_eos;
 
+  expected = priv->next_in_seqnum;
+
   /* now check against our expected seqnum */
-  if (G_LIKELY (priv->next_in_seqnum != -1)) {
+  if (G_LIKELY (expected != -1)) {
     gint gap;
 
-    gap = gst_rtp_buffer_compare_seqnum (priv->next_in_seqnum, seqnum);
+    gap = gst_rtp_buffer_compare_seqnum (expected, seqnum);
     if (G_UNLIKELY (gap != 0)) {
       gboolean reset = FALSE;
 
       GST_DEBUG_OBJECT (jitterbuffer, "expected #%d, got #%d, gap of %d",
-          priv->next_in_seqnum, seqnum, gap);
-      /* priv->next_in_seqnum >= seqnum, this packet is too late or the
+          expected, seqnum, gap);
+      /* expected >= seqnum, this packet is too late or the
        * sender might have been restarted with different seqnum. */
       if (gap < -RTP_MAX_MISORDER) {
         GST_DEBUG_OBJECT (jitterbuffer, "reset: buffer too old %d", gap);
         reset = TRUE;
       }
-      /* priv->next_in_seqnum < seqnum, this is a new packet */
+      /* expected < seqnum, this is a new packet */
       else if (G_UNLIKELY (gap > RTP_MAX_DROPOUT)) {
         GST_DEBUG_OBJECT (jitterbuffer, "reset: too many dropped packets %d",
             gap);
@@ -1754,7 +1756,7 @@ gst_rtp_jitter_buffer_chain (GstPad * pad, GstObject * parent,
       }
       /* reset spacing estimation when gap */
       priv->ips_rtptime = -1;
-      priv->ips_dts = -1;
+      priv->ips_dts = GST_CLOCK_TIME_NONE;
     } else {
       /* packet is expected, we need consecutive seqnums with a different
        * rtptime to estimate the packet spacing. */
@@ -2379,9 +2381,11 @@ wait_next_timeout (GstRtpJitterBuffer * jitterbuffer)
     /* at this point, the clock could have been unlocked by a timeout, a new
      * tail element was added to the queue or because we are shutting down. Check
      * for shutdown first. */
-    if G_UNLIKELY
-      ((priv->srcresult != GST_FLOW_OK))
-          goto flushing;
+    if (G_UNLIKELY (priv->srcresult != GST_FLOW_OK))
+      goto flushing;
+
+    if (priv->timers->len <= timer_idx)
+      goto done;
 
     /* we released the lock, the array might have changed */
     timer = &g_array_index (priv->timers, TimerData, timer_idx);