summaryrefslogtreecommitdiffstats
path: root/gst/rtpmanager/gstrtpptdemux.c
diff options
context:
space:
mode:
authorWim Taymans <wim.taymans@gmail.com>2007-12-12 16:59:03 +0000
committerWim Taymans <wim.taymans@gmail.com>2007-12-12 16:59:03 +0000
commit8dcd3dd27e3fb88d0aa6803163d68a5157171a2f (patch)
tree61edfaedd4d76995de5fa4951f854cb77d58a7bf /gst/rtpmanager/gstrtpptdemux.c
parent4e481affe2d802842444d735cdd1fb7c2e351d37 (diff)
downloadgst-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.
Diffstat (limited to 'gst/rtpmanager/gstrtpptdemux.c')
-rw-r--r--gst/rtpmanager/gstrtpptdemux.c40
1 files changed, 19 insertions, 21 deletions
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;