diff options
| -rw-r--r-- | gst/rtpmanager/gstrtpjitterbuffer.c | 15 | 
1 files changed, 14 insertions, 1 deletions
| diff --git a/gst/rtpmanager/gstrtpjitterbuffer.c b/gst/rtpmanager/gstrtpjitterbuffer.c index 02a8af98..2e44425a 100644 --- a/gst/rtpmanager/gstrtpjitterbuffer.c +++ b/gst/rtpmanager/gstrtpjitterbuffer.c @@ -158,6 +158,9 @@ struct _GstRtpJitterBufferPrivate    GstSegment segment;    GstClockID clock_id;    guint32 waiting_seqnum; +  /* the latency of the upstream peer, we have to take this into account when +   * synchronizing the buffers. */ +  GstClockTime peer_latency;    /* some accounting */    guint64 num_late; @@ -581,6 +584,7 @@ gst_rtp_jitter_buffer_change_state (GstElement * element,        /* reset negotiated values */        priv->clock_rate = -1;        priv->clock_base = -1; +      priv->peer_latency = 0;        /* block until we go to PLAYING */        priv->blocked = TRUE;        JBUF_UNLOCK (priv); @@ -1011,6 +1015,7 @@ again:      /* add latency */      running_time += (priv->latency_ms * GST_MSECOND); +    running_time += priv->peer_latency;      GST_DEBUG_OBJECT (jitterbuffer, "sync to running_time %" GST_TIME_FORMAT,          GST_TIME_ARGS (running_time)); @@ -1152,8 +1157,16 @@ gst_rtp_jitter_buffer_query (GstPad * pad, GstQuery * query)                GST_TIME_FORMAT " max %" GST_TIME_FORMAT,                GST_TIME_ARGS (min_latency), GST_TIME_ARGS (max_latency)); +          /* store this so that we can safely sync on the peer buffers. */ +          JBUF_LOCK (priv); +          priv->peer_latency = min_latency; +          JBUF_UNLOCK (priv); +            min_latency += priv->latency_ms * GST_MSECOND; -          max_latency += priv->latency_ms * GST_MSECOND; +          /* max_latency can be -1, meaning there is no upper limit for the +           * latency. */ +          if (max_latency != -1) +            max_latency += priv->latency_ms * GST_MSECOND;            GST_DEBUG_OBJECT (jitterbuffer, "Calculated total latency : min %"                GST_TIME_FORMAT " max %" GST_TIME_FORMAT, | 
