diff options
author | Wim Taymans <wim.taymans@gmail.com> | 2007-08-27 21:17:21 +0000 |
---|---|---|
committer | Wim Taymans <wim.taymans@gmail.com> | 2007-08-27 21:17:21 +0000 |
commit | e966504766a3b41f89dc85379f4e247cda615389 (patch) | |
tree | c8458f4d7f3187ef0f42c218456c19c6fc8528a4 /gst/rtpmanager/gstrtpjitterbuffer.c | |
parent | 3b7aec9e9e16f1d29349603d07e006d3a7c678fb (diff) | |
download | gst-plugins-bad-e966504766a3b41f89dc85379f4e247cda615389.tar.gz gst-plugins-bad-e966504766a3b41f89dc85379f4e247cda615389.tar.bz2 gst-plugins-bad-e966504766a3b41f89dc85379f4e247cda615389.zip |
gst/rtpmanager/gstrtpjitterbuffer.c: When synchronizing buffers, take peer latency into account.
Original commit message from CVS:
* gst/rtpmanager/gstrtpjitterbuffer.c:
(gst_rtp_jitter_buffer_change_state), (gst_rtp_jitter_buffer_loop),
(gst_rtp_jitter_buffer_query):
When synchronizing buffers, take peer latency into account.
Don't try to add our latency to invalid peer max latency values.
Diffstat (limited to 'gst/rtpmanager/gstrtpjitterbuffer.c')
-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, |