GstBufferList **buffer_list,
gboolean *is_rtp);
+gboolean gst_rtsp_stream_transport_backlog_peek_is_rtp (GstRTSPStreamTransport * trans);
+
gboolean gst_rtsp_stream_transport_backlog_is_empty (GstRTSPStreamTransport *trans);
void gst_rtsp_stream_transport_clear_backlog (GstRTSPStreamTransport * trans);
/* Not MT-safe, caller should ensure consistent locking.
* See gst_rtsp_stream_transport_lock_backlog() */
gboolean
+gst_rtsp_stream_transport_backlog_peek_is_rtp (GstRTSPStreamTransport * trans)
+{
+ BackLogItem *item;
+ GstRTSPStreamTransportPrivate *priv;
+
+ g_return_val_if_fail (!gst_rtsp_stream_transport_backlog_is_empty (trans),
+ FALSE);
+
+ priv = trans->priv;
+
+ item = (BackLogItem *) gst_queue_array_peek_head_struct (priv->items);
+
+ return item->is_rtp;
+}
+
+
+/* Not MT-safe, caller should ensure consistent locking.
+ * See gst_rtsp_stream_transport_lock_backlog() */
+gboolean
gst_rtsp_stream_transport_backlog_is_empty (GstRTSPStreamTransport * trans)
{
return gst_queue_array_is_empty (trans->priv->items);
gboolean is_rtp;
gboolean popped;
- popped =
- gst_rtsp_stream_transport_backlog_pop (trans, &buffer, &buffer_list,
- &is_rtp);
+ is_rtp = gst_rtsp_stream_transport_backlog_peek_is_rtp (trans);
- g_assert (popped == TRUE);
+ if (!gst_rtsp_stream_transport_check_back_pressure (trans, is_rtp)) {
+ popped =
+ gst_rtsp_stream_transport_backlog_pop (trans, &buffer, &buffer_list,
+ &is_rtp);
- send_ret = push_data (stream, trans, buffer, buffer_list, is_rtp);
+ g_assert (popped == TRUE);
- gst_clear_buffer (&buffer);
- gst_clear_buffer_list (&buffer_list);
+ send_ret = push_data (stream, trans, buffer, buffer_list, is_rtp);
+
+ gst_clear_buffer (&buffer);
+ gst_clear_buffer_list (&buffer_list);
+ }
}
gst_rtsp_stream_transport_unlock_backlog (trans);