From 63f0ecbbe75d5bdb17d2c415dbad34249d430f10 Mon Sep 17 00:00:00 2001 From: Wim Taymans Date: Tue, 28 May 2013 12:23:37 +0200 Subject: [PATCH] rtpsession: send stream-start and segment events Also send stream-start and segment event on the RTCP pad. We don't need to send anything on the sync_src pad because we already forwarded all incomming events. --- gst/rtpmanager/gstrtpsession.c | 43 +++++++++++++++++++++------------- 1 file changed, 27 insertions(+), 16 deletions(-) diff --git a/gst/rtpmanager/gstrtpsession.c b/gst/rtpmanager/gstrtpsession.c index 5d641adc52..1bc2b52885 100644 --- a/gst/rtpmanager/gstrtpsession.c +++ b/gst/rtpmanager/gstrtpsession.c @@ -1101,6 +1101,31 @@ gst_rtp_session_send_rtp (RTPSession * sess, RTPSource * src, return result; } +static void +do_rtcp_events (GstRtpSession * rtpsession, GstPad * srcpad) +{ + GstCaps *caps; + GstSegment seg; + GstEvent *event; + gchar *stream_id; + + stream_id = + g_strdup_printf ("%08x%08x%08x%08x", g_random_int (), g_random_int (), + g_random_int (), g_random_int ()); + + event = gst_event_new_stream_start (stream_id); + gst_pad_push_event (srcpad, event); + g_free (stream_id); + + caps = gst_caps_new_empty_simple ("application/x-rtcp"); + gst_pad_set_caps (srcpad, caps); + gst_caps_unref (caps); + + gst_segment_init (&seg, GST_FORMAT_TIME); + event = gst_event_new_segment (&seg); + gst_pad_push_event (srcpad, event); +} + /* called when the session manager has an RTCP packet ready for further * sending. The eos flag is set when an EOS event should be sent downstream as * well. */ @@ -1119,17 +1144,12 @@ gst_rtp_session_send_rtcp (RTPSession * sess, RTPSource * src, goto stopping; if ((rtcp_src = rtpsession->send_rtcp_src)) { - GstCaps *caps; - gst_object_ref (rtcp_src); GST_RTP_SESSION_UNLOCK (rtpsession); /* set rtcp caps on output pad */ - if (!(caps = gst_pad_get_current_caps (rtcp_src))) { - caps = gst_caps_new_empty_simple ("application/x-rtcp"); - gst_pad_set_caps (rtcp_src, caps); - } - gst_caps_unref (caps); + if (!gst_pad_has_current_caps (rtcp_src)) + do_rtcp_events (rtpsession, rtcp_src); GST_LOG_OBJECT (rtpsession, "sending RTCP"); result = gst_pad_push (rtcp_src, buffer); @@ -1176,18 +1196,9 @@ gst_rtp_session_sync_rtcp (RTPSession * sess, RTPSource * src, goto stopping; if ((sync_src = rtpsession->sync_src)) { - GstCaps *caps; - gst_object_ref (sync_src); GST_RTP_SESSION_UNLOCK (rtpsession); - /* set rtcp caps on output pad */ - if (!(caps = gst_pad_get_current_caps (sync_src))) { - caps = gst_caps_new_empty_simple ("application/x-rtcp"); - gst_pad_set_caps (sync_src, caps); - } - gst_caps_unref (caps); - GST_LOG_OBJECT (rtpsession, "sending Sync RTCP"); result = gst_pad_push (sync_src, buffer); gst_object_unref (sync_src);