summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--ChangeLog8
-rw-r--r--ext/soup/gstsouphttpsrc.c24
2 files changed, 22 insertions, 10 deletions
diff --git a/ChangeLog b/ChangeLog
index 9fe1e004..293a7e5b 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,11 @@
+2008-01-20 Sebastian Dröge <slomo@circular-chaos.org>
+
+ Patch by: Wouter Cloetens <wouter at mind dot be>
+
+ * ext/soup/gstsouphttpsrc.c: (soup_got_headers):
+ Report the size of the stream as the total size instead of
+ the remaining Content-Length, which is wrong after a seek.
+
2008-01-19 Sebastian Dröge <slomo@circular-chaos.org>
* gst/rawparse/gstrawparse.c: (gst_raw_parse_push_buffer),
diff --git a/ext/soup/gstsouphttpsrc.c b/ext/soup/gstsouphttpsrc.c
index e3127e47..8e850519 100644
--- a/ext/soup/gstsouphttpsrc.c
+++ b/ext/soup/gstsouphttpsrc.c
@@ -559,22 +559,26 @@ soup_got_headers (SoupMessage * msg, GstSouphttpSrc * src)
const char *value;
GstTagList *tag_list;
GstBaseSrc *basesrc;
+ guint64 newsize;
GST_DEBUG_OBJECT (src, "got headers");
/* Parse Content-Length. */
value = soup_message_get_header (msg->response_headers, "Content-Length");
if (value != NULL) {
- src->content_size = g_ascii_strtoull (value, NULL, 10);
- src->have_size = TRUE;
- GST_DEBUG_OBJECT (src, "size = %llu", src->content_size);
-
- basesrc = GST_BASE_SRC_CAST (src);
- gst_segment_set_duration (&basesrc->segment, GST_FORMAT_BYTES,
- src->content_size);
- gst_element_post_message (GST_ELEMENT (src),
- gst_message_new_duration (GST_OBJECT (src), GST_FORMAT_BYTES,
- src->content_size));
+ newsize = src->request_position + g_ascii_strtoull (value, NULL, 10);
+ if (!src->have_size || (src->content_size != newsize)) {
+ src->content_size = newsize;
+ src->have_size = TRUE;
+ GST_DEBUG_OBJECT (src, "size = %llu", src->content_size);
+
+ basesrc = GST_BASE_SRC_CAST (src);
+ gst_segment_set_duration (&basesrc->segment, GST_FORMAT_BYTES,
+ src->content_size);
+ gst_element_post_message (GST_ELEMENT (src),
+ gst_message_new_duration (GST_OBJECT (src), GST_FORMAT_BYTES,
+ src->content_size));
+ }
}
/* Icecast stuff */