From: Olivier Crete Date: Fri, 18 Jun 2010 23:12:40 +0000 (-0400) Subject: rtpssrcdemux: Tag upstream custom events with SSRC X-Git-Tag: RELEASE-0.10.29~659 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=c7b1ce7310d903fe265a8b5e7c773b17790334b4;p=platform%2Fupstream%2Fgst-plugins-good.git rtpssrcdemux: Tag upstream custom events with SSRC --- diff --git a/gst/rtpmanager/gstrtpssrcdemux.c b/gst/rtpmanager/gstrtpssrcdemux.c index c8348da..65d4475 100644 --- a/gst/rtpmanager/gstrtpssrcdemux.c +++ b/gst/rtpmanager/gstrtpssrcdemux.c @@ -208,6 +208,7 @@ create_demux_pad_for_ssrc (GstRtpSsrcDemux * demux, guint32 ssrc, gst_rtp_ssrc_demux_iterate_internal_links); gst_pad_set_active (rtp_pad, TRUE); + gst_pad_set_event_function (rtcp_pad, gst_rtp_ssrc_demux_src_event); gst_pad_set_iterate_internal_links_function (rtcp_pad, gst_rtp_ssrc_demux_iterate_internal_links); gst_pad_set_active (rtcp_pad, TRUE); @@ -621,18 +622,39 @@ static gboolean gst_rtp_ssrc_demux_src_event (GstPad * pad, GstEvent * event) { GstRtpSsrcDemux *demux; - gboolean res = FALSE; + const GstStructure *s; demux = GST_RTP_SSRC_DEMUX (gst_pad_get_parent (pad)); switch (GST_EVENT_TYPE (event)) { - case GST_EVENT_SEEK: + case GST_EVENT_CUSTOM_UPSTREAM: + case GST_EVENT_CUSTOM_BOTH: + case GST_EVENT_CUSTOM_BOTH_OOB: + s = gst_event_get_structure (event); + if (s && !gst_structure_has_field (s, "ssrc")) { + GSList *walk; + + for (walk = demux->srcpads; walk; walk = g_slist_next (walk)) { + GstRtpSsrcDemuxPad *dpad = (GstRtpSsrcDemuxPad *) walk->data; + + if (dpad->rtp_pad == pad || dpad->rtcp_pad == pad) { + event = + GST_EVENT_CAST (gst_mini_object_make_writable + (GST_MINI_OBJECT_CAST (event))); + gst_structure_set (event->structure, "ssrc", G_TYPE_UINT, + dpad->ssrc, NULL); + break; + } + } + } + break; default: - res = gst_pad_event_default (pad, event); break; } + gst_object_unref (demux); - return res; + + return gst_pad_event_default (pad, event); } static GstIterator *