mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2024-11-27 20:21:24 +00:00
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.
This commit is contained in:
parent
4a2e0f4ff4
commit
36e78bc5ca
1 changed files with 9 additions and 4 deletions
|
@ -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)) {
|
||||
|
|
Loading…
Reference in a new issue