mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2025-02-02 20:42:30 +00:00
souphttpsrc: do not do http requests in READY
HEAD requests to discover if the server is seekable shouldn't be done in READY as it might lock the main thread that is doing the state change. https://bugzilla.gnome.org/show_bug.cgi?id=705371
This commit is contained in:
parent
6bb2626498
commit
c84282b9a6
1 changed files with 17 additions and 5 deletions
|
@ -1384,17 +1384,16 @@ gst_soup_http_src_get_size (GstBaseSrc * bsrc, guint64 * size)
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
static gboolean
|
static void
|
||||||
gst_soup_http_src_is_seekable (GstBaseSrc * bsrc)
|
gst_soup_http_src_check_seekable (GstSoupHTTPSrc * src)
|
||||||
{
|
{
|
||||||
GstSoupHTTPSrc *src = GST_SOUP_HTTP_SRC (bsrc);
|
|
||||||
GstFlowReturn ret = GST_FLOW_OK;
|
GstFlowReturn ret = GST_FLOW_OK;
|
||||||
|
|
||||||
/* Special case to check if the server allows range requests
|
/* Special case to check if the server allows range requests
|
||||||
* before really starting to get data in the buffer creation
|
* before really starting to get data in the buffer creation
|
||||||
* loops.
|
* loops.
|
||||||
*/
|
*/
|
||||||
if (!src->got_headers && GST_STATE (src) != GST_STATE_NULL) {
|
if (!src->got_headers && GST_STATE (src) >= GST_STATE_PAUSED) {
|
||||||
g_mutex_lock (&src->mutex);
|
g_mutex_lock (&src->mutex);
|
||||||
while (!src->got_headers && !src->interrupted && ret == GST_FLOW_OK) {
|
while (!src->got_headers && !src->interrupted && ret == GST_FLOW_OK) {
|
||||||
if ((src->msg && src->msg->method != SOUP_METHOD_HEAD) &&
|
if ((src->msg && src->msg->method != SOUP_METHOD_HEAD) &&
|
||||||
|
@ -1416,6 +1415,15 @@ gst_soup_http_src_is_seekable (GstBaseSrc * bsrc)
|
||||||
g_mutex_unlock (&src->mutex);
|
g_mutex_unlock (&src->mutex);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
static gboolean
|
||||||
|
gst_soup_http_src_is_seekable (GstBaseSrc * bsrc)
|
||||||
|
{
|
||||||
|
GstSoupHTTPSrc *src = GST_SOUP_HTTP_SRC (bsrc);
|
||||||
|
|
||||||
|
gst_soup_http_src_check_seekable (src);
|
||||||
|
|
||||||
return src->seekable;
|
return src->seekable;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1434,7 +1442,11 @@ gst_soup_http_src_do_seek (GstBaseSrc * bsrc, GstSegment * segment)
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!src->seekable) {
|
gst_soup_http_src_check_seekable (src);
|
||||||
|
|
||||||
|
/* If we have no headers we don't know yet if it is seekable or not.
|
||||||
|
* Store the start position and error out later if it isn't */
|
||||||
|
if (src->got_headers && !src->seekable) {
|
||||||
GST_WARNING_OBJECT (src, "Not seekable");
|
GST_WARNING_OBJECT (src, "Not seekable");
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue