diff options
author | Sebastian Dröge <sebastian@centricular.com> | 2014-02-11 14:13:30 +0100 |
---|---|---|
committer | Sebastian Dröge <sebastian@centricular.com> | 2014-02-11 14:13:30 +0100 |
commit | d445374067996b5c5fefdf03582930bd97c86762 (patch) | |
tree | f88e81fedff5dea2b967ab4e3ee5efa9ada94871 /gst-libs/gst/uridownloader | |
parent | eef356c80f2eef7bbdc78a9930083cb940a632b3 (diff) | |
download | gstreamer-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.c | 26 | ||||
-rw-r--r-- | gst-libs/gst/uridownloader/gsturidownloader.h | 4 |
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); |