gst_type_find_get_extension (GstTypeFindElement * typefind, GstPad * pad)
{
GstQuery *query;
- gchar *uri, *result;
- size_t len;
- gint find;
+ gchar *uri, *result, *path, *base_path, *find;
+ GstUri *gst_uri;
query = gst_query_new_uri ();
GST_DEBUG_OBJECT (typefind, "finding extension of %s", uri);
- /* find the extension on the uri, this is everything after a '.' */
- len = strlen (uri);
- find = len - 1;
+ gst_uri = gst_uri_from_string (uri);
+ if (gst_uri == NULL)
+ goto invalid_uri;
- while (find >= 0) {
- if (uri[find] == '.')
- break;
- find--;
- }
- if (find < 0)
+ path = gst_uri_get_path (gst_uri);
+ gst_uri_unref (gst_uri);
+
+ if (path == NULL)
+ goto invalid_uri;
+
+ base_path = g_path_get_basename (path);
+ g_free (path);
+
+ /* find the extension on the path, this is everything after a '.' */
+ find = strrchr (base_path, '.');
+
+ if (find == NULL)
goto no_extension;
- result = g_strdup (&uri[find + 1]);
+ result = g_strdup (find + 1);
GST_DEBUG_OBJECT (typefind, "found extension %s", result);
gst_query_unref (query);
+ g_free (base_path);
g_free (uri);
return result;
gst_query_unref (query);
return NULL;
}
+invalid_uri:
+ {
+ GST_INFO_OBJECT (typefind, "failed to extract path from uri %s", uri);
+ g_free (uri);
+ gst_query_unref (query);
+ return NULL;
+ }
no_extension:
{
GST_INFO_OBJECT (typefind, "could not find uri extension in %s", uri);
- gst_query_unref (query);
+ g_free (base_path);
g_free (uri);
+ gst_query_unref (query);
return NULL;
}
}