From 7e7e52caa0c0d8e64735c1939bfc070a1148c942 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Olivier=20Cr=C3=AAte?= Date: Tue, 4 Jul 2017 12:24:41 -0400 Subject: [PATCH] rtpsession: Only send EOS if all sources have been marked bye Now that multiple sender RTPSource can share the same RTPSession, we must not send an EOS unless they're all marked bye. --- gst/rtpmanager/rtpsession.c | 19 +++++++++++++++++-- 1 file changed, 17 insertions(+), 2 deletions(-) diff --git a/gst/rtpmanager/rtpsession.c b/gst/rtpmanager/rtpsession.c index 089aef7cb2..612aa84d8e 100644 --- a/gst/rtpmanager/rtpsession.c +++ b/gst/rtpmanager/rtpsession.c @@ -3950,6 +3950,21 @@ update_generation (const gchar * key, RTPSource * source, ReportData * data) } } +static gboolean +rtp_session_are_all_sources_bye (RTPSession * sess) +{ + GHashTableIter iter; + RTPSource *src; + + g_hash_table_iter_init (&iter, sess->ssrcs[sess->mask_idx]); + while (g_hash_table_iter_next (&iter, NULL, (gpointer *) & src)) { + if (!src->marked_bye) + return FALSE; + } + + return TRUE; +} + /** * rtp_session_on_timeout: * @sess: an #RTPSession @@ -4106,8 +4121,8 @@ done: GST_DEBUG ("%p, sending RTCP packet, avg size %u, %u", &sess->stats, sess->stats.avg_rtcp_packet_size, packet_size); result = - sess->callbacks.send_rtcp (sess, source, buffer, output->is_bye, - sess->send_rtcp_user_data); + sess->callbacks.send_rtcp (sess, source, buffer, + rtp_session_are_all_sources_bye (sess), sess->send_rtcp_user_data); RTP_SESSION_LOCK (sess); sess->stats.nacks_sent += data.nacked_seqnums;