diff options
author | Wim Taymans <wim.taymans@gmail.com> | 2007-12-12 16:59:03 +0000 |
---|---|---|
committer | Wim Taymans <wim.taymans@gmail.com> | 2007-12-12 16:59:03 +0000 |
commit | 8dcd3dd27e3fb88d0aa6803163d68a5157171a2f (patch) | |
tree | 61edfaedd4d76995de5fa4951f854cb77d58a7bf | |
parent | 4e481affe2d802842444d735cdd1fb7c2e351d37 (diff) | |
download | gst-plugins-bad-8dcd3dd27e3fb88d0aa6803163d68a5157171a2f.tar.gz gst-plugins-bad-8dcd3dd27e3fb88d0aa6803163d68a5157171a2f.tar.bz2 gst-plugins-bad-8dcd3dd27e3fb88d0aa6803163d68a5157171a2f.zip |
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.
-rw-r--r-- | ChangeLog | 10 | ||||
-rw-r--r-- | gst/rtpmanager/gstrtpptdemux.c | 40 | ||||
-rw-r--r-- | gst/rtpmanager/gstrtpssrcdemux.c | 31 |
3 files changed, 51 insertions, 30 deletions
@@ -1,5 +1,15 @@ 2007-12-12 Wim Taymans <wim.taymans@collabora.co.uk> + * 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. + +2007-12-12 Wim Taymans <wim.taymans@collabora.co.uk> + * gst/rtpmanager/gstrtpbin.c: (gst_rtp_bin_finalize), (gst_rtp_bin_set_sdes_string), (gst_rtp_bin_get_sdes_string), (gst_rtp_bin_handle_message): diff --git a/gst/rtpmanager/gstrtpptdemux.c b/gst/rtpmanager/gstrtpptdemux.c index 58ce53d9..b11ff11a 100644 --- a/gst/rtpmanager/gstrtpptdemux.c +++ b/gst/rtpmanager/gstrtpptdemux.c @@ -126,8 +126,8 @@ GST_BOILERPLATE (GstRtpPtDemux, gst_rtp_pt_demux, GstElement, GST_TYPE_ELEMENT); static void gst_rtp_pt_demux_finalize (GObject * object); -static void gst_rtp_pt_demux_release (GstElement * element); -static gboolean gst_rtp_pt_demux_setup (GstElement * element); +static void gst_rtp_pt_demux_release (GstRtpPtDemux * ptdemux); +static gboolean gst_rtp_pt_demux_setup (GstRtpPtDemux * ptdemux); static GstFlowReturn gst_rtp_pt_demux_chain (GstPad * pad, GstBuffer * buf); static GstStateChangeReturn gst_rtp_pt_demux_change_state (GstElement * element, @@ -249,7 +249,7 @@ gst_rtp_pt_demux_init (GstRtpPtDemux * ptdemux, GstRtpPtDemuxClass * g_class) static void gst_rtp_pt_demux_finalize (GObject * object) { - gst_rtp_pt_demux_release (GST_ELEMENT (object)); + gst_rtp_pt_demux_release (GST_RTP_PT_DEMUX (object)); G_OBJECT_CLASS (parent_class)->finalize (object); } @@ -426,33 +426,31 @@ find_pad_for_pt (GstRtpPtDemux * rtpdemux, guint8 pt) * Reserves resources for the object. */ static gboolean -gst_rtp_pt_demux_setup (GstElement * element) +gst_rtp_pt_demux_setup (GstRtpPtDemux * ptdemux) { - GstRtpPtDemux *ptdemux = GST_RTP_PT_DEMUX (element); - gboolean res = TRUE; + ptdemux->srcpads = NULL; + ptdemux->last_pt = 0xFFFF; - if (ptdemux) { - ptdemux->srcpads = NULL; - ptdemux->last_pt = 0xFFFF; - } - - return res; + return TRUE; } /** * Free resources for the object. */ static void -gst_rtp_pt_demux_release (GstElement * element) +gst_rtp_pt_demux_release (GstRtpPtDemux * ptdemux) { - GstRtpPtDemux *ptdemux = GST_RTP_PT_DEMUX (element); + GSList *walk; + + for (walk = ptdemux->srcpads; walk; walk = g_slist_next (walk)) { + GstRtpPtDemuxPad *pad = walk->data; - if (ptdemux) { - /* note: GstElement's dispose() will handle the pads */ - g_slist_foreach (ptdemux->srcpads, (GFunc) g_free, NULL); - g_slist_free (ptdemux->srcpads); - ptdemux->srcpads = NULL; + gst_pad_set_active (pad->pad, FALSE); + gst_element_remove_pad (GST_ELEMENT_CAST (ptdemux), pad->pad); + g_free (pad); } + g_slist_free (ptdemux->srcpads); + ptdemux->srcpads = NULL; } static GstStateChangeReturn @@ -465,7 +463,7 @@ gst_rtp_pt_demux_change_state (GstElement * element, GstStateChange transition) switch (transition) { case GST_STATE_CHANGE_NULL_TO_READY: - if (gst_rtp_pt_demux_setup (element) != TRUE) + if (gst_rtp_pt_demux_setup (ptdemux) != TRUE) ret = GST_STATE_CHANGE_FAILURE; break; case GST_STATE_CHANGE_READY_TO_PAUSED: @@ -481,7 +479,7 @@ gst_rtp_pt_demux_change_state (GstElement * element, GstStateChange transition) case GST_STATE_CHANGE_PAUSED_TO_READY: break; case GST_STATE_CHANGE_READY_TO_NULL: - gst_rtp_pt_demux_release (element); + gst_rtp_pt_demux_release (ptdemux); break; default: break; 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 @@ -309,15 +309,32 @@ gst_rtp_ssrc_demux_init (GstRtpSsrcDemux * demux, } 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) { GstRtpSsrcDemux *demux; 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; |