From 455f337e3d662a6ab8304301f0017d41be2b7b8d Mon Sep 17 00:00:00 2001 From: =?utf8?q?Tim-Philipp=20M=C3=BCller?= Date: Sun, 13 Nov 2011 18:22:06 +0000 Subject: [PATCH] gio, appsrc, appsink, cdaudiosrc: update for GstURIHandler API changes --- ext/gio/gstgio.c | 14 +++++++++----- ext/gio/gstgiobasesink.c | 3 ++- ext/gio/gstgiobasesrc.c | 3 ++- gst-libs/gst/app/gstappsink.c | 17 ++++++----------- gst-libs/gst/app/gstappsrc.c | 17 ++++++----------- gst-libs/gst/audio/gstaudiocdsrc.c | 19 ++++++++----------- tests/check/libs/audiocdsrc.c | 14 +++++++------- 7 files changed, 40 insertions(+), 47 deletions(-) diff --git a/ext/gio/gstgio.c b/ext/gio/gstgio.c index 35c8b85..1b0ea70 100644 --- a/ext/gio/gstgio.c +++ b/ext/gio/gstgio.c @@ -161,11 +161,11 @@ gst_gio_uri_handler_get_protocols (GType type) return protocols; } -static const gchar * +static gchar * gst_gio_uri_handler_get_uri (GstURIHandler * handler) { GstElement *element = GST_ELEMENT (handler); - const gchar *uri; + gchar *uri; g_return_val_if_fail (GST_IS_ELEMENT (element), NULL); @@ -175,18 +175,22 @@ gst_gio_uri_handler_get_uri (GstURIHandler * handler) } static gboolean -gst_gio_uri_handler_set_uri (GstURIHandler * handler, const gchar * uri) +gst_gio_uri_handler_set_uri (GstURIHandler * handler, const gchar * uri, + GError ** error) { GstElement *element = GST_ELEMENT (handler); g_return_val_if_fail (GST_IS_ELEMENT (element), FALSE); if (GST_STATE (element) == GST_STATE_PLAYING || - GST_STATE (element) == GST_STATE_PAUSED) + GST_STATE (element) == GST_STATE_PAUSED) { + g_set_error (error, GST_URI_ERROR, GST_URI_ERROR_BAD_STATE, + "Changing the 'location' property while the element is running is " + "not supported"); return FALSE; + } g_object_set (G_OBJECT (element), "location", uri, NULL); - return TRUE; } diff --git a/ext/gio/gstgiobasesink.c b/ext/gio/gstgiobasesink.c index 110f84a..6ececec 100644 --- a/ext/gio/gstgiobasesink.c +++ b/ext/gio/gstgiobasesink.c @@ -331,10 +331,11 @@ gst_gio_base_sink_query (GstBaseSink * bsink, GstQuery * query) return TRUE; case GST_QUERY_URI: if (GST_IS_URI_HANDLER (sink)) { - const gchar *uri; + gchar *uri; uri = gst_uri_handler_get_uri (GST_URI_HANDLER (sink)); gst_query_set_uri (query, uri); + g_free (uri); return TRUE; } return FALSE; diff --git a/ext/gio/gstgiobasesrc.c b/ext/gio/gstgiobasesrc.c index d08a5f1..94a079b 100644 --- a/ext/gio/gstgiobasesrc.c +++ b/ext/gio/gstgiobasesrc.c @@ -416,8 +416,9 @@ gst_gio_base_src_query (GstBaseSrc * base_src, GstQuery * query) switch (GST_QUERY_TYPE (query)) { case GST_QUERY_URI: if (GST_IS_URI_HANDLER (src)) { - const gchar *uri = gst_uri_handler_get_uri (GST_URI_HANDLER (src)); + gchar *uri = gst_uri_handler_get_uri (GST_URI_HANDLER (src)); gst_query_set_uri (query, uri); + g_free (uri); ret = TRUE; } break; diff --git a/gst-libs/gst/app/gstappsink.c b/gst-libs/gst/app/gstappsink.c index b9f235b..422ea1c 100644 --- a/gst-libs/gst/app/gstappsink.c +++ b/gst-libs/gst/app/gstappsink.c @@ -1372,23 +1372,18 @@ gst_app_sink_uri_get_protocols (GType type) return protocols; } -static const gchar * +static gchar * gst_app_sink_uri_get_uri (GstURIHandler * handler) { - return "appsink"; + return g_strdup ("appsink"); } static gboolean -gst_app_sink_uri_set_uri (GstURIHandler * handler, const gchar * uri) +gst_app_sink_uri_set_uri (GstURIHandler * handler, const gchar * uri, + GError ** error) { - gchar *protocol; - gboolean ret; - - protocol = gst_uri_get_protocol (uri); - ret = !strcmp (protocol, "appsink"); - g_free (protocol); - - return ret; + /* GstURIHandler checks the protocol for us */ + return TRUE; } static void diff --git a/gst-libs/gst/app/gstappsrc.c b/gst-libs/gst/app/gstappsrc.c index 3a829b7..c0e4e98 100644 --- a/gst-libs/gst/app/gstappsrc.c +++ b/gst-libs/gst/app/gstappsrc.c @@ -1619,23 +1619,18 @@ gst_app_src_uri_get_protocols (GType type) return protocols; } -static const gchar * +static gchar * gst_app_src_uri_get_uri (GstURIHandler * handler) { - return "appsrc"; + return g_strdup ("appsrc"); } static gboolean -gst_app_src_uri_set_uri (GstURIHandler * handler, const gchar * uri) +gst_app_src_uri_set_uri (GstURIHandler * handler, const gchar * uri, + GError ** error) { - gchar *protocol; - gboolean ret; - - protocol = gst_uri_get_protocol (uri); - ret = !strcmp (protocol, "appsrc"); - g_free (protocol); - - return ret; + /* GstURIHandler checks the protocol for us */ + return TRUE; } static void diff --git a/gst-libs/gst/audio/gstaudiocdsrc.c b/gst-libs/gst/audio/gstaudiocdsrc.c index 1928430..742e26b 100644 --- a/gst-libs/gst/audio/gstaudiocdsrc.c +++ b/gst-libs/gst/audio/gstaudiocdsrc.c @@ -905,13 +905,15 @@ gst_audio_cd_src_uri_get_protocols (GType type) return protocols; } -static const gchar * +static gchar * gst_audio_cd_src_uri_get_uri (GstURIHandler * handler) { GstAudioCdSrc *src = GST_AUDIO_CD_SRC (handler); GST_OBJECT_LOCK (src); + /* FIXME: can we get rid of all that here and just return a copy of the + * existing URI perhaps? */ g_free (src->uri); if (GST_OBJECT_FLAG_IS_SET (GST_BASE_SRC (src), GST_BASE_SRC_STARTED)) { @@ -924,7 +926,7 @@ gst_audio_cd_src_uri_get_uri (GstURIHandler * handler) GST_OBJECT_UNLOCK (src); - return src->uri; + return g_strdup (src->uri); } /* Note: gst_element_make_from_uri() might call us with just 'cdda://' as @@ -933,22 +935,15 @@ gst_audio_cd_src_uri_get_uri (GstURIHandler * handler) /* We accept URIs of the format cdda://(device#track)|(track) */ static gboolean -gst_audio_cd_src_uri_set_uri (GstURIHandler * handler, const gchar * uri) +gst_audio_cd_src_uri_set_uri (GstURIHandler * handler, const gchar * uri, + GError ** error) { GstAudioCdSrc *src = GST_AUDIO_CD_SRC (handler); - gchar *protocol; const gchar *location; gchar *track_number; GST_OBJECT_LOCK (src); - protocol = gst_uri_get_protocol (uri); - if (!protocol || g_ascii_strcasecmp (protocol, "cdda") != 0) { - g_free (protocol); - goto failed; - } - g_free (protocol); - location = uri + 7; track_number = g_strrstr (location, "#"); src->uri_track = 0; @@ -998,6 +993,8 @@ failed: { GST_OBJECT_UNLOCK (src); GST_DEBUG_OBJECT (src, "cannot handle URI '%s'", uri); + g_set_error_literal (error, GST_URI_ERROR, GST_URI_ERROR_BAD_URI, + "Could not handle CDDA URI"); return FALSE; } } diff --git a/tests/check/libs/audiocdsrc.c b/tests/check/libs/audiocdsrc.c index 534c427..599745f 100644 --- a/tests/check/libs/audiocdsrc.c +++ b/tests/check/libs/audiocdsrc.c @@ -289,7 +289,7 @@ test_uri_parse (const gchar * uri, const gchar * device, gint track) gint set_track = 0; foosrc = gst_element_factory_make ("cdfoosrc", "cdfoosrc"); - fail_unless (gst_uri_handler_set_uri (GST_URI_HANDLER (foosrc), uri) == TRUE, + fail_unless (gst_uri_handler_set_uri (GST_URI_HANDLER (foosrc), uri, NULL), "couldn't set uri %s", uri); g_object_get (foosrc, "device", &set_device, "track", &set_track, NULL); fail_unless (set_device != NULL); @@ -429,26 +429,26 @@ GST_START_TEST (test_uri_parsing) /* wrong protocol */ foosrc = gst_element_factory_make ("cdfoosrc", "cdfoosrc"); fail_unless (gst_uri_handler_set_uri (GST_URI_HANDLER (foosrc), - "x://") == FALSE); + "x://", NULL) == FALSE); fail_unless (gst_uri_handler_set_uri (GST_URI_HANDLER (foosrc), - "cddaq://") == FALSE); + "cddaq://", NULL) == FALSE); /* cdda://track */ test_uri_parse ("cdda://", "/dev/cdrom", 1); test_uri_parse ("cdda://2", "/dev/cdrom", 2); test_uri_parse ("cdda://47", "/dev/cdrom", 47); fail_unless (gst_uri_handler_set_uri (GST_URI_HANDLER (foosrc), - "cdda://-1") == FALSE); + "cdda://-1", NULL) == FALSE); fail_unless (gst_uri_handler_set_uri (GST_URI_HANDLER (foosrc), - "cdda://what") == FALSE); + "cdda://what", NULL) == FALSE); /* cdda://device#track */ test_uri_parse ("cdda:///dev/hdb#1", "/dev/hdb", 1); test_uri_parse ("cdda://anything#8", "anything", 8); fail_unless (gst_uri_handler_set_uri (GST_URI_HANDLER (foosrc), - "cdda:///dev/hdb#nonsense") == FALSE); + "cdda:///dev/hdb#nonsense", NULL) == FALSE); fail_unless (gst_uri_handler_set_uri (GST_URI_HANDLER (foosrc), - "cdda:///dev/hdb#-2") == FALSE); + "cdda:///dev/hdb#-2", NULL) == FALSE); /* cdda://track#device (device should be ignored - FIXME 0.11) */ test_uri_parse ("cdda://8#/dev/hdb", "/dev/cdrom", 8); -- 2.7.4