From 3bd2d36b1b1786595d37eb536aa14a9a5e5f4e7d Mon Sep 17 00:00:00 2001 From: Sebastian Date: Sat, 13 Jun 2009 14:38:20 +0200 Subject: [PATCH] Added gst_rtsp_media_remove_elements function --- gst/rtsp-server/rtsp-media.c | 54 ++++++++++++++++++++++++++++++++++++++++++-- gst/rtsp-server/rtsp-media.h | 2 ++ 2 files changed, 54 insertions(+), 2 deletions(-) diff --git a/gst/rtsp-server/rtsp-media.c b/gst/rtsp-server/rtsp-media.c index 3ee45b3..3d0ef33 100644 --- a/gst/rtsp-server/rtsp-media.c +++ b/gst/rtsp-server/rtsp-media.c @@ -142,13 +142,13 @@ gst_rtsp_media_finalize (GObject * obj) media = GST_RTSP_MEDIA (obj); g_message ("finalize media %p", media); - +/* if (media->pipeline) { unlock_streams (media); gst_element_set_state (media->pipeline, GST_STATE_NULL); gst_object_unref (media->pipeline); } - +*/ for (i = 0; i < media->streams->len; i++) { GstRTSPMediaStream *stream; @@ -1545,3 +1545,53 @@ gst_rtsp_media_set_state (GstRTSPMedia *media, GstState state, GArray *transport return TRUE; } +void +gst_rtsp_media_remove_elements (GstRTSPMedia *media) +{ + gint i; + + unlock_streams (media); + + for (i = 0; i < media->streams->len; i++) { + GstRTSPMediaStream *stream; + + g_message ("Removing elements of stream %d from pipeline", i); + + stream = g_array_index (media->streams, GstRTSPMediaStream *, i); + + gst_pad_unlink (stream->srcpad, stream->send_rtp_sink); + + gst_element_set_state (stream->udpsrc[0], GST_STATE_NULL); + gst_element_set_state (stream->udpsrc[1], GST_STATE_NULL); + gst_element_set_state (stream->udpsink[0], GST_STATE_NULL); + gst_element_set_state (stream->udpsink[1], GST_STATE_NULL); + gst_element_set_state (stream->appsrc[0], GST_STATE_NULL); + gst_element_set_state (stream->appsrc[1], GST_STATE_NULL); + gst_element_set_state (stream->appsink[0], GST_STATE_NULL); + gst_element_set_state (stream->appsink[1], GST_STATE_NULL); + gst_element_set_state (stream->tee[0], GST_STATE_NULL); + gst_element_set_state (stream->tee[1], GST_STATE_NULL); + gst_element_set_state (stream->selector[0], GST_STATE_NULL); + gst_element_set_state (stream->selector[1], GST_STATE_NULL); + + gst_bin_remove (GST_BIN (media->pipeline), stream->udpsrc[0]); + gst_bin_remove (GST_BIN (media->pipeline), stream->udpsrc[1]); + gst_bin_remove (GST_BIN (media->pipeline), stream->udpsink[0]); + gst_bin_remove (GST_BIN (media->pipeline), stream->udpsink[1]); + gst_bin_remove (GST_BIN (media->pipeline), stream->appsrc[0]); + gst_bin_remove (GST_BIN (media->pipeline), stream->appsrc[1]); + gst_bin_remove (GST_BIN (media->pipeline), stream->appsink[0]); + gst_bin_remove (GST_BIN (media->pipeline), stream->appsink[1]); + gst_bin_remove (GST_BIN (media->pipeline), stream->tee[0]); + gst_bin_remove (GST_BIN (media->pipeline), stream->tee[1]); + gst_bin_remove (GST_BIN (media->pipeline), stream->selector[0]); + gst_bin_remove (GST_BIN (media->pipeline), stream->selector[1]); + + gst_rtsp_media_stream_free (stream); + } + g_array_remove_range (media->streams, 0, media->streams->len); + + gst_element_set_state (media->rtpbin, GST_STATE_NULL); + gst_bin_remove (GST_BIN (media->pipeline), media->rtpbin); +} + diff --git a/gst/rtsp-server/rtsp-media.h b/gst/rtsp-server/rtsp-media.h index b8b7b19..aa58aef 100644 --- a/gst/rtsp-server/rtsp-media.h +++ b/gst/rtsp-server/rtsp-media.h @@ -244,6 +244,8 @@ GstFlowReturn gst_rtsp_media_stream_rtcp (GstRTSPMediaStream *strea gboolean gst_rtsp_media_set_state (GstRTSPMedia *media, GstState state, GArray *trans); +void gst_rtsp_media_remove_elements (GstRTSPMedia *media); + G_END_DECLS #endif /* __GST_RTSP_MEDIA_H__ */ -- 2.7.4