From e72ef633a6e8df6af1c766cad8e5d832980ac54b Mon Sep 17 00:00:00 2001 From: Nicolas Dufresne Date: Fri, 22 Feb 2019 16:02:12 -0500 Subject: [PATCH] rtpsession: Fix EOS forwarding So far we assumed that if all sources are bye, this meant we needed to send an EOS on the RTCP sink. The problem is that this case may happens if we only had one internal source and it detected a collision. So now we limit the EOS forwarding to when there is a send_rtp_sink pad and that this pad has received EOS. We don'tcheck the recv_rtp_sink since the code does not wait for the bye to be send before sending EOS to the RTCP src pad. --- gst/rtpmanager/gstrtpsession.c | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/gst/rtpmanager/gstrtpsession.c b/gst/rtpmanager/gstrtpsession.c index f467f20556..52d968ef88 100644 --- a/gst/rtpmanager/gstrtpsession.c +++ b/gst/rtpmanager/gstrtpsession.c @@ -1421,7 +1421,7 @@ do_rtcp_events (GstRtpSession * rtpsession, GstPad * srcpad) * well. */ static GstFlowReturn gst_rtp_session_send_rtcp (RTPSession * sess, RTPSource * src, - GstBuffer * buffer, gboolean eos, gpointer user_data) + GstBuffer * buffer, gboolean all_sources_bye, gpointer user_data) { GstFlowReturn result; GstRtpSession *rtpsession; @@ -1444,8 +1444,11 @@ gst_rtp_session_send_rtcp (RTPSession * sess, RTPSource * src, GST_LOG_OBJECT (rtpsession, "sending RTCP"); result = gst_pad_push (rtcp_src, buffer); - /* we have to send EOS after this packet */ - if (eos) { + /* Forward send an EOS on the RTCP sink if we received an EOS on the + * send_rtp_sink. We don't need to check the recv_rtp_sink since in this + * case the EOS event would already have been sent */ + if (all_sources_bye && rtpsession->send_rtp_sink && + GST_PAD_IS_EOS (rtpsession->send_rtp_sink)) { GstEvent *event; GST_LOG_OBJECT (rtpsession, "sending EOS");