diff --git a/ChangeLog b/ChangeLog index 6a220912de..c184ccb3de 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,14 @@ +2009-01-08 Wim Taymans + + * docs/libs/gst-plugins-base-libs-sections.txt: + * gst-libs/gst/rtsp/gstrtspurl.c: (register_rtsp_url_type), + (gst_rtsp_url_get_type), (gst_rtsp_url_copy): + * gst-libs/gst/rtsp/gstrtspurl.h: + * win32/common/libgstrtsp.def: + Add GType for GstRTSPUrl and expose a copy function because we can. + API: gst_rtsp_url_copy() + Fixes #567027. + 2009-01-07 Sebastian Dröge * configure.ac: diff --git a/docs/libs/gst-plugins-base-libs-sections.txt b/docs/libs/gst-plugins-base-libs-sections.txt index 809a72bcc5..ef117f339b 100644 --- a/docs/libs/gst-plugins-base-libs-sections.txt +++ b/docs/libs/gst-plugins-base-libs-sections.txt @@ -1242,10 +1242,13 @@ gst_rtsp_message_dump GST_RTSP_DEFAULT_PORT GstRTSPUrl gst_rtsp_url_parse +gst_rtsp_url_copy gst_rtsp_url_free gst_rtsp_url_get_request_uri gst_rtsp_url_set_port gst_rtsp_url_get_port + +gst_rtsp_url_get_type
diff --git a/gst-libs/gst/rtsp/gstrtspurl.c b/gst-libs/gst/rtsp/gstrtspurl.c index 1a7a3e1fa7..4885160c70 100644 --- a/gst-libs/gst/rtsp/gstrtspurl.c +++ b/gst-libs/gst/rtsp/gstrtspurl.c @@ -58,6 +58,24 @@ #include "gstrtspurl.h" +static void +register_rtsp_url_type (GType * id) +{ + *id = g_boxed_type_register_static ("GstRTSPUrl", + (GBoxedCopyFunc) gst_rtsp_url_copy, (GBoxedFreeFunc) gst_rtsp_url_free); +} + +GType +gst_rtsp_url_get_type (void) +{ + static GType id; + static GOnce once = G_ONCE_INIT; + + g_once (&once, (GThreadFunc) register_rtsp_url_type, &id); + return id; +} + + #define RTSP_PROTO "rtsp://" #define RTSP_PROTO_LEN 7 #define RTSPU_PROTO "rtspu://" @@ -176,6 +194,37 @@ invalid: } } +/** + * gst_rtsp_url_copy: + * @url: a #GstRTSPUrl + * + * Make a copy of @url. + * + * Returns: a copy of @url. Free with gst_rtsp_url_free () after usage. + * + * Since: 0.10.22 + */ +GstRTSPUrl * +gst_rtsp_url_copy (GstRTSPUrl * url) +{ + GstRTSPUrl *res; + + g_return_val_if_fail (url != NULL, NULL); + + res = g_new0 (GstRTSPUrl, 1); + + res->transports = url->transports; + res->family = url->family; + res->user = g_strdup (url->user); + res->passwd = g_strdup (url->passwd); + res->host = g_strdup (url->host); + res->port = url->port; + res->abspath = g_strdup (url->abspath); + res->query = g_strdup (url->query); + + return res; +} + /** * gst_rtsp_url_free: * @url: a #GstRTSPUrl diff --git a/gst-libs/gst/rtsp/gstrtspurl.h b/gst-libs/gst/rtsp/gstrtspurl.h index 39ad316f70..30764fafd7 100644 --- a/gst-libs/gst/rtsp/gstrtspurl.h +++ b/gst-libs/gst/rtsp/gstrtspurl.h @@ -44,6 +44,7 @@ #define __GST_RTSP_URL_H__ #include +#include #include #include @@ -57,6 +58,8 @@ G_BEGIN_DECLS */ #define GST_RTSP_DEFAULT_PORT 554 +#define GST_TYPE_RTSP_URL (gst_rtsp_url_get_type()) + typedef struct _GstRTSPUrl GstRTSPUrl; /** @@ -83,7 +86,10 @@ struct _GstRTSPUrl { gchar *query; }; +GType gst_rtsp_url_get_type (void); + GstRTSPResult gst_rtsp_url_parse (const gchar *urlstr, GstRTSPUrl **url); +GstRTSPUrl* gst_rtsp_url_copy (GstRTSPUrl *url); void gst_rtsp_url_free (GstRTSPUrl *url); gchar* gst_rtsp_url_get_request_uri (GstRTSPUrl *url); diff --git a/win32/common/libgstrtsp.def b/win32/common/libgstrtsp.def index b227384495..e621040dcb 100644 --- a/win32/common/libgstrtsp.def +++ b/win32/common/libgstrtsp.def @@ -75,9 +75,11 @@ EXPORTS gst_rtsp_transport_init gst_rtsp_transport_new gst_rtsp_transport_parse + gst_rtsp_url_copy gst_rtsp_url_free gst_rtsp_url_get_port gst_rtsp_url_get_request_uri + gst_rtsp_url_get_type gst_rtsp_url_parse gst_rtsp_url_set_port gst_rtsp_version_as_text