From: Wim Taymans Date: Tue, 10 Dec 2013 10:04:06 +0000 (+0100) Subject: rtpjitterbuffer: detect -1 seqnum X-Git-Tag: 1.3.1~504 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=36e78bc5caed49950d0cc6b320b9992cbc1c62eb;p=platform%2Fupstream%2Fgst-plugins-good.git rtpjitterbuffer: detect -1 seqnum Keep the seqnum as a full guint so that we can check for -1 entries and deal with them correctly. Immediately try to push -1 seqnum. --- diff --git a/gst/rtpmanager/gstrtpjitterbuffer.c b/gst/rtpmanager/gstrtpjitterbuffer.c index b7778bf..1500120 100644 --- a/gst/rtpmanager/gstrtpjitterbuffer.c +++ b/gst/rtpmanager/gstrtpjitterbuffer.c @@ -2268,7 +2268,7 @@ update_estimated_eos (GstRtpJitterBuffer * jitterbuffer, /* take a buffer from the queue and push it */ static GstFlowReturn -pop_and_push_next (GstRtpJitterBuffer * jitterbuffer, guint16 seqnum) +pop_and_push_next (GstRtpJitterBuffer * jitterbuffer, guint seqnum) { GstRtpJitterBufferPrivate *priv = jitterbuffer->priv; GstFlowReturn result; @@ -2324,8 +2324,10 @@ pop_and_push_next (GstRtpJitterBuffer * jitterbuffer, guint16 seqnum) /* now we are ready to push the buffer. Save the seqnum and release the lock * so the other end can push stuff in the queue again. */ - priv->last_popped_seqnum = seqnum; - priv->next_seqnum = (seqnum + item->count) & 0xffff; + if (seqnum != -1) { + priv->last_popped_seqnum = seqnum; + priv->next_seqnum = (seqnum + item->count) & 0xffff; + } JBUF_UNLOCK (priv); item->data = NULL; @@ -2374,7 +2376,7 @@ handle_next_buffer (GstRtpJitterBuffer * jitterbuffer) GstRtpJitterBufferPrivate *priv = jitterbuffer->priv; GstFlowReturn result = GST_FLOW_OK; RTPJitterBufferItem *item; - guint16 seqnum; + guint seqnum; guint32 next_seqnum; gint gap; @@ -2394,6 +2396,8 @@ again: /* get the seqnum and the next expected seqnum */ seqnum = item->seqnum; + if (seqnum == -1) + goto do_push; next_seqnum = priv->next_seqnum; @@ -2410,6 +2414,7 @@ again: gap = gst_rtp_buffer_compare_seqnum (next_seqnum, seqnum); if (G_LIKELY (gap == 0)) { + do_push: /* no missing packet, pop and push */ result = pop_and_push_next (jitterbuffer, seqnum); } else if (G_UNLIKELY (gap < 0)) {