From 7f83927c95b4ad15cba8f7349214e473a130d2ff Mon Sep 17 00:00:00 2001 From: Wim Taymans Date: Fri, 26 Jul 2013 00:29:41 +0200 Subject: [PATCH] session: count internal sources and how many are senders --- gst/rtpmanager/rtpsession.c | 21 ++++++++++++++++----- gst/rtpmanager/rtpstats.h | 2 ++ 2 files changed, 18 insertions(+), 5 deletions(-) diff --git a/gst/rtpmanager/rtpsession.c b/gst/rtpmanager/rtpsession.c index 8318a08..3220715 100644 --- a/gst/rtpmanager/rtpsession.c +++ b/gst/rtpmanager/rtpsession.c @@ -486,9 +486,8 @@ rtp_session_init (RTPSession * sess) sess->source->validated = TRUE; sess->source->internal = TRUE; sess->stats.active_sources++; + sess->stats.internal_sources++; INIT_AVG (sess->stats.avg_rtcp_packet_size, 100); - sess->source->stats.prev_rtcptime = 0; - sess->source->stats.last_rtcptime = 1; rtp_stats_set_min_interval (&sess->stats, (gdouble) DEFAULT_RTCP_MIN_INTERVAL / GST_SECOND); @@ -2016,6 +2015,8 @@ rtp_session_process_bye (RTPSession * sess, GstRTCPPacket * packet, } if (prevsender && !RTP_SOURCE_IS_SENDER (source)) { sess->stats.sender_sources--; + if (source->internal) + sess->stats.internal_sender_sources--; GST_DEBUG ("source: %08x became non sender, %d sender sources", ssrc, sess->stats.sender_sources); } @@ -2434,8 +2435,10 @@ rtp_session_send_rtp (RTPSession * sess, gpointer data, gboolean is_list, /* we use our own source to send */ result = rtp_source_send_rtp (source, data, is_list, running_time); - if (RTP_SOURCE_IS_SENDER (source) && !prevsender) + if (RTP_SOURCE_IS_SENDER (source) && !prevsender) { sess->stats.sender_sources++; + sess->stats.internal_sender_sources++; + } if (oldrate != source->bitrate) sess->recalc_bandwidth = TRUE; RTP_SESSION_UNLOCK (sess); @@ -2483,7 +2486,7 @@ calculate_rtcp_interval (RTPSession * sess, gboolean deterministic, result = rtp_stats_calculate_bye_interval (&sess->stats); } else { result = rtp_stats_calculate_rtcp_interval (&sess->stats, - RTP_SOURCE_IS_SENDER (sess->source), first); + sess->stats.internal_sender_sources > 0, first); } GST_DEBUG ("next deterministic interval: %" GST_TIME_FORMAT ", first %d", @@ -2844,6 +2847,8 @@ session_cleanup (const gchar * key, RTPSource * source, ReportData * data) GST_TIME_FORMAT, source->ssrc, GST_TIME_ARGS (btime)); source->is_sender = FALSE; sess->stats.sender_sources--; + if (source->internal) + sess->stats.internal_sender_sources--; sendertimeout = TRUE; } } @@ -2851,11 +2856,17 @@ session_cleanup (const gchar * key, RTPSource * source, ReportData * data) if (remove) { sess->total_sources--; - if (is_sender) + if (is_sender) { sess->stats.sender_sources--; + if (source->internal) + sess->stats.internal_sender_sources--; + } if (is_active) sess->stats.active_sources--; + if (source->internal) + sess->stats.internal_sources--; + if (byetimeout) on_bye_timeout (sess, source); else diff --git a/gst/rtpmanager/rtpstats.h b/gst/rtpmanager/rtpstats.h index 77cbc71..f27e9e7 100644 --- a/gst/rtpmanager/rtpstats.h +++ b/gst/rtpmanager/rtpstats.h @@ -179,7 +179,9 @@ typedef struct { gdouble receiver_fraction; gdouble min_interval; GstClockTime bye_timeout; + guint internal_sources; guint sender_sources; + guint internal_sender_sources; guint active_sources; guint avg_rtcp_packet_size; guint bye_members; -- 2.7.4