summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorWim Taymans <wim.taymans@gmail.com>2007-07-27 11:21:20 +0000
committerWim Taymans <wim.taymans@gmail.com>2007-07-27 11:21:20 +0000
commita8ee445da6ff59bbe89b67b5133f1e3aa574bae2 (patch)
tree8f2585acdacc192c0ea77fa52ef5e4d1cfc5d8f5
parent1364d7b0b1f036e685fc518307fb4d8edd7d172f (diff)
gst/rtsp/: Clean up the interface list.
Original commit message from CVS: * gst/rtsp/gstrtspext.c: (gst_rtsp_ext_list_free), (gst_rtsp_ext_list_connect): * gst/rtsp/gstrtspext.h: * gst/rtsp/gstrtspsrc.c: (gst_rtspsrc_init), (gst_rtspsrc_finalize), (gst_rtspsrc_send_cb): Clean up the interface list. Allow connecting to interface signals for the extensions. Remove old extension code. Free list on cleanup. Allow extensions to send additional RTSP messages.
-rw-r--r--ChangeLog13
-rw-r--r--gst/rtsp/gstrtspext.c27
-rw-r--r--gst/rtsp/gstrtspext.h5
-rw-r--r--gst/rtsp/gstrtspsrc.c44
4 files changed, 60 insertions, 29 deletions
diff --git a/ChangeLog b/ChangeLog
index 344f5277..c96f5e44 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,16 @@
+2007-07-27 Wim Taymans <wim.taymans@gmail.com>
+
+ * gst/rtsp/gstrtspext.c: (gst_rtsp_ext_list_free),
+ (gst_rtsp_ext_list_connect):
+ * gst/rtsp/gstrtspext.h:
+ * gst/rtsp/gstrtspsrc.c: (gst_rtspsrc_init),
+ (gst_rtspsrc_finalize), (gst_rtspsrc_send_cb):
+ Clean up the interface list.
+ Allow connecting to interface signals for the extensions.
+ Remove old extension code.
+ Free list on cleanup.
+ Allow extensions to send additional RTSP messages.
+
2007-07-27 Jan Schmidt <thaytan@mad.scientist.com>
* ext/gconf/gconf.c: (gst_gconf_render_bin_with_default):
diff --git a/gst/rtsp/gstrtspext.c b/gst/rtsp/gstrtspext.c
index b9d71bb1..0ad81b56 100644
--- a/gst/rtsp/gstrtspext.c
+++ b/gst/rtsp/gstrtspext.c
@@ -105,6 +105,20 @@ gst_rtsp_ext_list_get (void)
return result;
}
+void
+gst_rtsp_ext_list_free (GstRTSPExtensionList * ext)
+{
+ GList *walk;
+
+ for (walk = ext->extensions; walk; walk = g_list_next (walk)) {
+ GstRTSPExtension *elem = (GstRTSPExtension *) walk->data;
+
+ gst_object_unref (GST_OBJECT_CAST (elem));
+ }
+ g_list_free (ext->extensions);
+ g_free (ext);
+}
+
gboolean
gst_rtsp_ext_list_detect_server (GstRTSPExtensionList * ext,
GstRTSPMessage * resp)
@@ -220,3 +234,16 @@ gst_rtsp_ext_list_stream_select (GstRTSPExtensionList * ext, GstRTSPUrl * url)
}
return res;
}
+
+void
+gst_rtsp_ext_list_connect (GstRTSPExtensionList * ext,
+ const gchar * detailed_signal, GCallback c_handler, gpointer data)
+{
+ GList *walk;
+
+ for (walk = ext->extensions; walk; walk = g_list_next (walk)) {
+ GstRTSPExtension *elem = (GstRTSPExtension *) walk->data;
+
+ g_signal_connect (elem, detailed_signal, c_handler, data);
+ }
+}
diff --git a/gst/rtsp/gstrtspext.h b/gst/rtsp/gstrtspext.h
index b02b9bb8..fa7f6892 100644
--- a/gst/rtsp/gstrtspext.h
+++ b/gst/rtsp/gstrtspext.h
@@ -58,6 +58,7 @@ struct _GstRTSPExtensionList
void gst_rtsp_ext_list_init (void);
GstRTSPExtensionList * gst_rtsp_ext_list_get (void);
+void gst_rtsp_ext_list_free (GstRTSPExtensionList *ext);
gboolean gst_rtsp_ext_list_detect_server (GstRTSPExtensionList *ext, GstRTSPMessage *resp);
@@ -72,6 +73,10 @@ GstRTSPResult gst_rtsp_ext_list_get_transports (GstRTSPExtensionList *ext, Gs
gchar **transport);
GstRTSPResult gst_rtsp_ext_list_stream_select (GstRTSPExtensionList *ext, GstRTSPUrl *url);
+void gst_rtsp_ext_list_connect (GstRTSPExtensionList *ext,
+ const gchar *detailed_signal, GCallback c_handler,
+ gpointer data);
+
G_END_DECLS
#endif /* __GST_RTSP_EXT_H__ */
diff --git a/gst/rtsp/gstrtspsrc.c b/gst/rtsp/gstrtspsrc.c
index 8a0de7bd..619c1850 100644
--- a/gst/rtsp/gstrtspsrc.c
+++ b/gst/rtsp/gstrtspsrc.c
@@ -97,16 +97,6 @@
#include "gstrtspsrc.h"
-/* define for experimental real support */
-#undef WITH_EXT_REAL
-
-#if 0
-#include "rtspextwms.h"
-#ifdef WITH_EXT_REAL
-#include "rtspextreal.h"
-#endif
-#endif
-
GST_DEBUG_CATEGORY_STATIC (rtspsrc_debug);
#define GST_CAT_DEFAULT (rtspsrc_debug)
@@ -198,6 +188,9 @@ static GstStateChangeReturn gst_rtspsrc_change_state (GstElement * element,
GstStateChange transition);
static void gst_rtspsrc_handle_message (GstBin * bin, GstMessage * message);
+static GstRTSPResult gst_rtspsrc_send_cb (GstRTSPExtension * ext,
+ GstRTSPMessage * request, GstRTSPMessage * response, GstRTSPSrc * src);
+
static gboolean gst_rtspsrc_open (GstRTSPSrc * src);
static gboolean gst_rtspsrc_play (GstRTSPSrc * src);
static gboolean gst_rtspsrc_pause (GstRTSPSrc * src);
@@ -318,15 +311,9 @@ gst_rtspsrc_init (GstRTSPSrc * src, GstRTSPSrcClass * g_class)
/* get a list of all extensions */
src->extensions = gst_rtsp_ext_list_get ();
-#if 0
-#ifdef WITH_EXT_REAL
- src->extension = rtsp_ext_real_get_context ();
-#else
- /* install WMS extension by default */
- src->extension = rtsp_ext_wms_get_context ();
-#endif
- src->extension->src = (gpointer) src;
-#endif
+ /* connect to send signal */
+ gst_rtsp_ext_list_connect (src->extensions, "send",
+ (GCallback) gst_rtspsrc_send_cb, src);
src->state_rec_lock = g_new (GStaticRecMutex, 1);
g_static_rec_mutex_init (src->state_rec_lock);
@@ -340,6 +327,7 @@ gst_rtspsrc_finalize (GObject * object)
rtspsrc = GST_RTSPSRC (object);
+ gst_rtsp_ext_list_free (rtspsrc->extensions);
g_static_rec_mutex_free (rtspsrc->stream_rec_lock);
g_free (rtspsrc->stream_rec_lock);
g_free (rtspsrc->location);
@@ -349,16 +337,6 @@ gst_rtspsrc_finalize (GObject * object)
g_static_rec_mutex_free (rtspsrc->state_rec_lock);
g_free (rtspsrc->state_rec_lock);
-#if 0
- if (rtspsrc->extension) {
-#ifdef WITH_EXT_REAL
- rtsp_ext_real_free_context (rtspsrc->extension);
-#else
- rtsp_ext_wms_free_context (rtspsrc->extension);
-#endif
- }
-#endif
-
G_OBJECT_CLASS (parent_class)->finalize (object);
}
@@ -2917,6 +2895,14 @@ error_response:
}
}
+static GstRTSPResult
+gst_rtspsrc_send_cb (GstRTSPExtension * ext, GstRTSPMessage * request,
+ GstRTSPMessage * response, GstRTSPSrc * src)
+{
+ return gst_rtspsrc_send (src, request, response, NULL);
+}
+
+
/* parse the response and collect all the supported methods. We need this
* information so that we don't try to send an unsupported request to the
* server.