From 0b1a7edfea6de1f1f3de47e4b355a3f290387e5a Mon Sep 17 00:00:00 2001 From: Wim Taymans Date: Fri, 20 Sep 2013 16:58:38 +0200 Subject: [PATCH] rtpjitterbuffer: send lost event before signaling next buffer First send the lost event, then update the next_seqnum counter and then send the signal to the pushing thread that it can retry to push a buffer. This avoids pushing out buffers before the lost event is pushed. --- gst/rtpmanager/gstrtpjitterbuffer.c | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) diff --git a/gst/rtpmanager/gstrtpjitterbuffer.c b/gst/rtpmanager/gstrtpjitterbuffer.c index c6f3d7d..4448cf5 100644 --- a/gst/rtpmanager/gstrtpjitterbuffer.c +++ b/gst/rtpmanager/gstrtpjitterbuffer.c @@ -1702,12 +1702,6 @@ send_lost_event (GstRtpJitterBuffer * jitterbuffer, guint seqnum, priv->num_late += lost_packets; priv->discont = TRUE; - /* update our expected next packet but make sure the seqnum increases */ - if (seqnum + lost_packets > priv->next_seqnum) { - priv->next_seqnum = (seqnum + lost_packets) & 0xffff; - priv->last_popped_seqnum = seqnum; - priv->last_out_time = timestamp; - } if (priv->do_lost) { GstEvent *event; @@ -1722,6 +1716,12 @@ send_lost_event (GstRtpJitterBuffer * jitterbuffer, guint seqnum, gst_pad_push_event (priv->srcpad, event); JBUF_LOCK (priv); } + /* update our expected next packet but make sure the seqnum increases */ + if (seqnum + lost_packets > priv->next_seqnum) { + priv->next_seqnum = (seqnum + lost_packets) & 0xffff; + priv->last_popped_seqnum = seqnum; + priv->last_out_time = timestamp; + } } static void @@ -2369,10 +2369,13 @@ do_lost_timeout (GstRtpJitterBuffer * jitterbuffer, TimerData * timer, /* remove timer now */ remove_timer (jitterbuffer, timer); - JBUF_SIGNAL_EVENT (priv); + /* this releases the lock */ send_lost_event (jitterbuffer, seqnum, num, timestamp, duration, late); + /* now we can let the pushing thread try again */ + JBUF_SIGNAL_EVENT (priv); + return TRUE; } -- 2.7.4