aboutsummaryrefslogtreecommitdiff
path: root/gst/rtpmanager/gstrtpjitterbuffer.c
diff options
context:
space:
mode:
Diffstat (limited to 'gst/rtpmanager/gstrtpjitterbuffer.c')
-rw-r--r--gst/rtpmanager/gstrtpjitterbuffer.c15
1 files changed, 10 insertions, 5 deletions
diff --git a/gst/rtpmanager/gstrtpjitterbuffer.c b/gst/rtpmanager/gstrtpjitterbuffer.c
index 9e454928..c8c512e1 100644
--- a/gst/rtpmanager/gstrtpjitterbuffer.c
+++ b/gst/rtpmanager/gstrtpjitterbuffer.c
@@ -3063,7 +3063,7 @@ do_handle_sync (GstRtpJitterBuffer * jitterbuffer)
guint64 last_rtptime;
guint64 clock_base;
guint64 ext_rtptime, diff;
- gboolean drop = FALSE;
+ gboolean valid = TRUE, keep = FALSE;
priv = jitterbuffer->priv;
@@ -3080,13 +3080,15 @@ do_handle_sync (GstRtpJitterBuffer * jitterbuffer)
ext_rtptime, base_rtptime, clock_rate, clock_base, last_rtptime);
if (base_rtptime == -1 || clock_rate == -1 || base_time == -1) {
- GST_DEBUG_OBJECT (jitterbuffer, "dropping, no RTP values");
- drop = TRUE;
+ /* we keep this SR packet for later. When we get a valid RTP packet the
+ * above values will be set and we can try to use the SR packet */
+ GST_DEBUG_OBJECT (jitterbuffer, "keeping for later, no RTP values");
+ keep = TRUE;
} else {
/* we can't accept anything that happened before we did the last resync */
if (base_rtptime > ext_rtptime) {
GST_DEBUG_OBJECT (jitterbuffer, "dropping, older than base time");
- drop = TRUE;
+ valid = FALSE;
} else {
/* the SR RTP timestamp must be something close to what we last observed
* in the jitterbuffer */
@@ -3108,7 +3110,9 @@ do_handle_sync (GstRtpJitterBuffer * jitterbuffer)
}
}
- if (!drop) {
+ if (keep) {
+ GST_DEBUG_OBJECT (jitterbuffer, "keeping RTCP packet for later");
+ } else if (valid) {
GstStructure *s;
s = gst_structure_new ("application/x-rtp-sync",
@@ -3128,6 +3132,7 @@ do_handle_sync (GstRtpJitterBuffer * jitterbuffer)
gst_structure_free (s);
} else {
GST_DEBUG_OBJECT (jitterbuffer, "dropping RTCP packet");
+ gst_buffer_replace (&priv->last_sr, NULL);
}
}