JBUF_SIGNAL_EVENT (priv);
JBUF_SIGNAL_QUERY (priv, FALSE);
JBUF_SIGNAL_QUEUE (priv);
+ JBUF_SIGNAL_TIMER (priv);
JBUF_UNLOCK (priv);
}
/* Stopping timers */
unschedule_current_timer (jitterbuffer);
JBUF_WAIT_TIMER (priv);
+ if (G_UNLIKELY (priv->srcresult != GST_FLOW_OK))
+ goto early_out;
}
}
GST_BUFFER_DTS (outbuf) = GST_CLOCK_TIME_NONE;
result = gst_pad_push (priv->srcpad, outbuf);
- JBUF_LOCK_CHECK (priv, out_flushing);
+ JBUF_LOCK_CHECK (priv, early_out);
break;
case ITEM_TYPE_LOST:
case ITEM_TYPE_EVENT:
result = GST_FLOW_OK;
- JBUF_LOCK_CHECK (priv, out_flushing);
+ JBUF_LOCK_CHECK (priv, early_out);
break;
case ITEM_TYPE_QUERY:
{
res = gst_pad_peer_query (priv->srcpad, outquery);
- JBUF_LOCK_CHECK (priv, out_flushing);
+ JBUF_LOCK_CHECK (priv, early_out);
result = GST_FLOW_OK;
GST_LOG_OBJECT (jitterbuffer, "did query %p, return %d", outquery, res);
JBUF_SIGNAL_QUERY (priv, res);
return result;
/* ERRORS */
-out_flushing:
+early_out:
{
return priv->srcresult;
}