From a965ebff09d986440c340b3d609e45579fe74903 Mon Sep 17 00:00:00 2001 From: Wim Taymans Date: Wed, 12 Dec 2007 16:59:03 +0000 Subject: gst/rtpmanager/: Clean up the dynamic pads when going to READY. Original commit message from CVS: * gst/rtpmanager/gstrtpptdemux.c: (gst_rtp_pt_demux_finalize), (gst_rtp_pt_demux_setup), (gst_rtp_pt_demux_release), (gst_rtp_pt_demux_change_state): * gst/rtpmanager/gstrtpssrcdemux.c: (gst_rtp_ssrc_demux_reset), (gst_rtp_ssrc_demux_dispose), (gst_rtp_ssrc_demux_src_query), (gst_rtp_ssrc_demux_change_state): Clean up the dynamic pads when going to READY. --- gst/rtpmanager/gstrtpssrcdemux.c | 31 ++++++++++++++++++++++--------- 1 file changed, 22 insertions(+), 9 deletions(-) (limited to 'gst/rtpmanager/gstrtpssrcdemux.c') diff --git a/gst/rtpmanager/gstrtpssrcdemux.c b/gst/rtpmanager/gstrtpssrcdemux.c index d8d03d25..170ede31 100644 --- a/gst/rtpmanager/gstrtpssrcdemux.c +++ b/gst/rtpmanager/gstrtpssrcdemux.c @@ -308,6 +308,25 @@ gst_rtp_ssrc_demux_init (GstRtpSsrcDemux * demux, gst_segment_init (&demux->segment, GST_FORMAT_UNDEFINED); } +static void +gst_rtp_ssrc_demux_reset (GstRtpSsrcDemux * demux) +{ + GSList *walk; + + for (walk = demux->srcpads; walk; walk = g_slist_next (walk)) { + GstRtpSsrcDemuxPad *dpad = (GstRtpSsrcDemuxPad *) walk->data; + + gst_pad_set_active (dpad->rtp_pad, FALSE); + gst_pad_set_active (dpad->rtcp_pad, FALSE); + + gst_element_remove_pad (GST_ELEMENT_CAST (demux), dpad->rtp_pad); + gst_element_remove_pad (GST_ELEMENT_CAST (demux), dpad->rtcp_pad); + g_free (dpad); + } + g_slist_free (demux->srcpads); + demux->srcpads = NULL; +} + static void gst_rtp_ssrc_demux_dispose (GObject * object) { @@ -315,9 +334,7 @@ gst_rtp_ssrc_demux_dispose (GObject * object) demux = GST_RTP_SSRC_DEMUX (object); - g_slist_foreach (demux->srcpads, (GFunc) g_free, NULL); - g_slist_free (demux->srcpads); - demux->srcpads = NULL; + gst_rtp_ssrc_demux_reset (demux); G_OBJECT_CLASS (parent_class)->dispose (object); } @@ -592,12 +609,6 @@ gst_rtp_ssrc_demux_src_query (GstPad * pad, GstQuery * query) "latency for SSRC %08x, latency %" GST_TIME_FORMAT, demuxpad->ssrc, GST_TIME_ARGS (demuxpad->first_ts)); -#if 0 - min_latency += demuxpad->first_ts; - if (max_latency != -1) - max_latency += demuxpad->first_ts; -#endif - gst_query_set_latency (query, live, min_latency, max_latency); } break; @@ -633,6 +644,8 @@ gst_rtp_ssrc_demux_change_state (GstElement * element, switch (transition) { case GST_STATE_CHANGE_PLAYING_TO_PAUSED: case GST_STATE_CHANGE_PAUSED_TO_READY: + gst_rtp_ssrc_demux_reset (demux); + break; case GST_STATE_CHANGE_READY_TO_NULL: default: break; -- cgit