From 783b4ba2c4b8d8729247277a5ff4ad6b95f13b9b Mon Sep 17 00:00:00 2001 From: Wim Taymans Date: Wed, 16 Apr 2014 18:05:46 +0200 Subject: [PATCH] rtpjitterbuffer: refuse serialied query when buffering When we are buffering, we can't block and wait for the serialized query to complete because the jitterbuffer will not try to forward the query while buffering. Instead, just refuse the query. --- gst/rtpmanager/gstrtpjitterbuffer.c | 21 ++++++++++++++------- 1 file changed, 14 insertions(+), 7 deletions(-) diff --git a/gst/rtpmanager/gstrtpjitterbuffer.c b/gst/rtpmanager/gstrtpjitterbuffer.c index d406a32510..f9ca55f71e 100644 --- a/gst/rtpmanager/gstrtpjitterbuffer.c +++ b/gst/rtpmanager/gstrtpjitterbuffer.c @@ -2518,7 +2518,8 @@ pop_and_push_next (GstRtpJitterBuffer * jitterbuffer, guint seqnum) break; case ITEM_TYPE_LOST: case ITEM_TYPE_EVENT: - GST_DEBUG_OBJECT (jitterbuffer, "Pushing event %d", seqnum); + GST_DEBUG_OBJECT (jitterbuffer, "Pushing event %" GST_PTR_FORMAT + ", seqnum %d", outevent, seqnum); if (do_push) gst_pad_push_event (priv->srcpad, outevent); @@ -3196,12 +3197,18 @@ gst_rtp_jitter_buffer_sink_query (GstPad * pad, GstObject * parent, RTPJitterBufferItem *item; JBUF_LOCK_CHECK (priv, out_flushing); - GST_DEBUG_OBJECT (jitterbuffer, "adding serialized query"); - item = alloc_item (query, ITEM_TYPE_QUERY, -1, -1, -1, 0, -1); - rtp_jitter_buffer_insert (priv->jbuf, item, NULL, NULL); - JBUF_SIGNAL_EVENT (priv); - JBUF_WAIT_QUERY (priv, out_flushing); - res = priv->last_query; + if (rtp_jitter_buffer_get_mode (priv->jbuf) != + RTP_JITTER_BUFFER_MODE_BUFFER) { + GST_DEBUG_OBJECT (jitterbuffer, "adding serialized query"); + item = alloc_item (query, ITEM_TYPE_QUERY, -1, -1, -1, 0, -1); + rtp_jitter_buffer_insert (priv->jbuf, item, NULL, NULL); + JBUF_SIGNAL_EVENT (priv); + JBUF_WAIT_QUERY (priv, out_flushing); + res = priv->last_query; + } else { + GST_DEBUG_OBJECT (jitterbuffer, "refusing query, we are buffering"); + res = FALSE; + } JBUF_UNLOCK (priv); } else { res = gst_pad_query_default (pad, parent, query);