summaryrefslogtreecommitdiff
path: root/gst-libs/gst/uridownloader
diff options
context:
space:
mode:
authorSebastian Dröge <sebastian@centricular.com>2014-02-11 14:13:30 +0100
committerSebastian Dröge <sebastian@centricular.com>2014-02-11 14:13:30 +0100
commitd445374067996b5c5fefdf03582930bd97c86762 (patch)
treef88e81fedff5dea2b967ab4e3ee5efa9ada94871 /gst-libs/gst/uridownloader
parenteef356c80f2eef7bbdc78a9930083cb940a632b3 (diff)
downloadgstreamer-plugins-bad-d445374067996b5c5fefdf03582930bd97c86762.tar.gz
uridownloader: Provide some more details about errors if downloading fails
Diffstat (limited to 'gst-libs/gst/uridownloader')
-rw-r--r--gst-libs/gst/uridownloader/gsturidownloader.c26
-rw-r--r--gst-libs/gst/uridownloader/gsturidownloader.h4
2 files changed, 24 insertions, 6 deletions
diff --git a/gst-libs/gst/uridownloader/gsturidownloader.c b/gst-libs/gst/uridownloader/gsturidownloader.c
index afd4c3e3a..0df8a7571 100644
--- a/gst-libs/gst/uridownloader/gsturidownloader.c
+++ b/gst-libs/gst/uridownloader/gsturidownloader.c
@@ -41,6 +41,8 @@ struct _GstUriDownloaderPrivate
GstFragment *download;
GMutex download_lock; /* used to restrict to one download only */
+ GError *err;
+
GCond cond;
gboolean cancelled;
};
@@ -198,7 +200,12 @@ gst_uri_downloader_bus_handler (GstBus * bus,
"Received error: %s from %s, the download will be cancelled",
GST_OBJECT_NAME (message->src), err->message);
GST_DEBUG ("Debugging info: %s\n", (dbg_info) ? dbg_info : "none");
- g_error_free (err);
+
+ if (!downloader->priv->err)
+ downloader->priv->err = err;
+ else
+ g_error_free (err);
+
g_free (dbg_info);
/* remove the sync handler to avoid duplicated messages */
@@ -332,9 +339,10 @@ gst_uri_downloader_set_uri (GstUriDownloader * downloader, const gchar * uri)
}
GstFragment *
-gst_uri_downloader_fetch_uri (GstUriDownloader * downloader, const gchar * uri)
+gst_uri_downloader_fetch_uri (GstUriDownloader * downloader, const gchar * uri,
+ GError ** err)
{
- return gst_uri_downloader_fetch_uri_with_range (downloader, uri, 0, -1);
+ return gst_uri_downloader_fetch_uri_with_range (downloader, uri, 0, -1, err);
}
/**
@@ -348,7 +356,7 @@ gst_uri_downloader_fetch_uri (GstUriDownloader * downloader, const gchar * uri)
*/
GstFragment *
gst_uri_downloader_fetch_uri_with_range (GstUriDownloader * downloader,
- const gchar * uri, gint64 range_start, gint64 range_end)
+ const gchar * uri, gint64 range_start, gint64 range_end, GError ** err)
{
GstStateChangeReturn ret;
GstFragment *download = NULL;
@@ -356,6 +364,7 @@ gst_uri_downloader_fetch_uri_with_range (GstUriDownloader * downloader,
GST_DEBUG_OBJECT (downloader, "Fetching URI %s", uri);
g_mutex_lock (&downloader->priv->download_lock);
+ downloader->priv->err = NULL;
GST_OBJECT_LOCK (downloader);
if (downloader->priv->cancelled) {
@@ -463,6 +472,15 @@ quit:
GST_OBJECT_UNLOCK (downloader);
}
+ if (download == NULL) {
+ if (!downloader->priv->err) {
+ g_set_error (err, GST_RESOURCE_ERROR, GST_RESOURCE_ERROR_OPEN_READ,
+ "Failed to download '%s'", uri);
+ } else {
+ g_propagate_error (err, downloader->priv->err);
+ }
+ }
+
g_mutex_unlock (&downloader->priv->download_lock);
return download;
}
diff --git a/gst-libs/gst/uridownloader/gsturidownloader.h b/gst-libs/gst/uridownloader/gsturidownloader.h
index c5837c342..9303f0c32 100644
--- a/gst-libs/gst/uridownloader/gsturidownloader.h
+++ b/gst-libs/gst/uridownloader/gsturidownloader.h
@@ -56,8 +56,8 @@ struct _GstUriDownloaderClass
GType gst_uri_downloader_get_type (void);
GstUriDownloader * gst_uri_downloader_new (void);
-GstFragment * gst_uri_downloader_fetch_uri (GstUriDownloader * downloader, const gchar * uri);
-GstFragment * gst_uri_downloader_fetch_uri_with_range (GstUriDownloader * downloader, const gchar * uri, gint64 range_start, gint64 range_end);
+GstFragment * gst_uri_downloader_fetch_uri (GstUriDownloader * downloader, const gchar * uri, GError ** err);
+GstFragment * gst_uri_downloader_fetch_uri_with_range (GstUriDownloader * downloader, const gchar * uri, gint64 range_start, gint64 range_end, GError ** err);
void gst_uri_downloader_reset (GstUriDownloader *downloader);
void gst_uri_downloader_cancel (GstUriDownloader *downloader);
void gst_uri_downloader_free (GstUriDownloader *downloader);