GstRtpNtpTimeSource ntp_time_source;
gboolean rtcp_sync_send_time;
- guint rtx_count;
+ guint recv_rtx_req_count;
+ guint sent_rtx_req_count;
};
/* callbacks to handle actions from the session manager */
static void gst_rtp_session_reconfigure (RTPSession * sess, gpointer user_data);
static void gst_rtp_session_notify_early_rtcp (RTPSession * sess,
gpointer user_data);
+static GstFlowReturn gst_rtp_session_chain_recv_rtp (GstPad * pad,
+ GstObject * parent, GstBuffer * buffer);
+static GstFlowReturn gst_rtp_session_chain_recv_rtcp (GstPad * pad,
+ GstObject * parent, GstBuffer * buffer);
+static GstFlowReturn gst_rtp_session_chain_send_rtp (GstPad * pad,
+ GstObject * parent, GstBuffer * buffer);
+static GstFlowReturn gst_rtp_session_chain_send_rtp_list (GstPad * pad,
+ GstObject * parent, GstBufferList * list);
static RTPSessionCallbacks callbacks = {
gst_rtp_session_process_rtp,
* Various session statistics. This property returns a GstStructure
* with name application/x-rtp-session-stats with the following fields:
*
- * "rtx-count" G_TYPE_UINT The number of retransmission events
- * received from downstream (in receiver mode)
- * "rtx-drop-count" G_TYPE_UINT The number of retransmission events
+ * "recv-rtx-req-count G_TYPE_UINT The number of retransmission event
+ * received from downstream (in receiver mode) (Since 1.16)
+ * "sent-rtx-req-count" G_TYPE_UINT The number of retransmission event
+ * sent downstream (in sender mode) (Since 1.16)
+ * "rtx-count" G_TYPE_UINT DEPRECATED Since 1.16, same as
+ * "recv-rtx-req-count".
+ * "rtx-drop-count" G_TYPE_UINT The number of retransmission events
* dropped (due to bandwidth constraints)
- * "sent-nack-count" G_TYPE_UINT Number of NACKs sent
- * "recv-nack-count" G_TYPE_UINT Number of NACKs received
- * "source-stats" G_TYPE_BOXED GValueArray of #RTPSource::stats for all
+ * "sent-nack-count" G_TYPE_UINT Number of NACKs sent
+ * "recv-nack-count" G_TYPE_UINT Number of NACKs received
+ * "source-stats" G_TYPE_BOXED GValueArray of #RTPSource::stats for all
* RTP sources (Since 1.8)
*
* Since: 1.4
GST_DEBUG_CATEGORY_INIT (gst_rtp_session_debug,
"rtpsession", 0, "RTP Session");
+
+ GST_DEBUG_REGISTER_FUNCPTR (gst_rtp_session_chain_recv_rtp);
+ GST_DEBUG_REGISTER_FUNCPTR (gst_rtp_session_chain_recv_rtcp);
+ GST_DEBUG_REGISTER_FUNCPTR (gst_rtp_session_chain_send_rtp);
+ GST_DEBUG_REGISTER_FUNCPTR (gst_rtp_session_chain_send_rtp_list);
+
}
static void
rtpsession->priv->thread_stopped = TRUE;
- rtpsession->priv->rtx_count = 0;
+ rtpsession->priv->recv_rtx_req_count = 0;
+ rtpsession->priv->sent_rtx_req_count = 0;
rtpsession->priv->ntp_time_source = DEFAULT_NTP_TIME_SOURCE;
}
GstStructure *s;
g_object_get (rtpsession->priv->session, "stats", &s, NULL);
- gst_structure_set (s, "rtx-count", G_TYPE_UINT, rtpsession->priv->rtx_count,
- NULL);
+ gst_structure_set (s, "rtx-count", G_TYPE_UINT,
+ rtpsession->priv->recv_rtx_req_count, "recv-rtx-req-count", G_TYPE_UINT,
+ rtpsession->priv->recv_rtx_req_count, "sent-rtx-req-count", G_TYPE_UINT,
+ rtpsession->priv->sent_rtx_req_count, NULL);
return s;
}
static void
gst_rtp_session_clear_pt_map (GstRtpSession * rtpsession)
{
+ GST_RTP_SESSION_LOCK (rtpsession);
g_hash_table_foreach_remove (rtpsession->priv->ptmap, return_true, NULL);
+ GST_RTP_SESSION_UNLOCK (rtpsession);
}
/* called when the session manager has an RTP packet or a list of packets
all_headers, count))
forward = FALSE;
} else if (gst_structure_has_name (s, "GstRTPRetransmissionRequest")) {
- GstClockTime running_time;
guint seqnum, delay, deadline, max_delay, avg_rtt;
GST_RTP_SESSION_LOCK (rtpsession);
- rtpsession->priv->rtx_count++;
+ rtpsession->priv->recv_rtx_req_count++;
GST_RTP_SESSION_UNLOCK (rtpsession);
- if (!gst_structure_get_clock_time (s, "running-time", &running_time))
- running_time = -1;
if (!gst_structure_get_uint (s, "ssrc", &ssrc))
ssrc = -1;
if (!gst_structure_get_uint (s, "seqnum", &seqnum))
return TRUE;
}
-/* Recieve an RTP packet or a list of packets to be send to the receivers,
+/* Receive an RTP packet or a list of packets to be sent to the receivers,
* send to RTP session manager and forward to send_rtp_src.
*/
static GstFlowReturn
if (is_list) {
GstBuffer *buffer = NULL;
- /* All groups in an list have the same timestamp.
- * So, just take it from the first group. */
+ /* All buffers in a list have the same timestamp.
+ * So, just take it from the first buffer. */
buffer = gst_buffer_list_get (GST_BUFFER_LIST_CAST (data), 0);
if (buffer)
timestamp = GST_BUFFER_PTS (buffer);
"ssrc", G_TYPE_UINT, (guint) ssrc, NULL));
gst_pad_push_event (send_rtp_sink, event);
+ GST_RTP_SESSION_LOCK (rtpsession);
+ rtpsession->priv->sent_rtx_req_count++;
+ GST_RTP_SESSION_UNLOCK (rtpsession);
+
if (blp == 0)
break;