+2008-04-09 Wim Taymans <wim.taymans@collabora.co.uk>
+
+ * docs/design/part-buffering.txt:
+ Fix some typos and set the estimated total for push mode to -1.
+
+ * gst/gstquery.c: (gst_query_new_buffering):
+ Set buffering-left to 0 as we're not buffering by default.
+
+ * libs/gst/base/gstbasesrc.c: (gst_base_src_default_query):
+ Implement BUFFERING query.
+
2008-04-09 Tim-Philipp Müller <tim at centricular dot net>
Based on patch by: Milosz Derezynski <internalerror gmail com>
"format" = GST_FORMAT_BYTES
"start" = 0
"stop" = the total filesize
- "estimated-time" = 0
+ "estimated-total" = 0
A GstBaseSrc in push mode replies to the BUFFERING query with:
"format" = a valid GST_TYPE_FORMAT
"start" = current position
"stop" = current position
- "estimated-time" = 0
+ "estimated-total" = -1
GST_QUARK (BUFFERING_MODE), GST_TYPE_BUFFERING_MODE, GST_BUFFERING_STREAM,
GST_QUARK (AVG_IN_RATE), G_TYPE_INT, -1,
GST_QUARK (AVG_OUT_RATE), G_TYPE_INT, -1,
- GST_QUARK (BUFFERING_LEFT), G_TYPE_INT64, -1,
+ GST_QUARK (BUFFERING_LEFT), G_TYPE_INT64, 0,
GST_QUARK (ESTIMATED_TOTAL), G_TYPE_INT64, -1,
GST_QUARK (FORMAT), GST_TYPE_FORMAT, format,
GST_QUARK (START_VALUE), G_TYPE_INT64, (gint64) - 1,
GST_DEBUG_OBJECT (src, "duration query in format %s",
gst_format_get_name (format));
+
switch (format) {
case GST_FORMAT_PERCENT:
gst_query_set_duration (query, GST_FORMAT_PERCENT,
}
case GST_QUERY_JITTER:
case GST_QUERY_RATE:
+ res = FALSE;
+ break;
+ case GST_QUERY_BUFFERING:
+ {
+ res = FALSE;
+ GstFormat format;
+ gint64 start, stop, estimated;
+
+ gst_query_parse_buffering_range (query, &format, NULL, NULL, NULL);
+
+ GST_DEBUG_OBJECT (src, "buffering query in format %s",
+ gst_format_get_name (format));
+
+ if (src->random_access) {
+ estimated = 0;
+ start = 0;
+ if (format == GST_FORMAT_PERCENT)
+ stop = GST_FORMAT_PERCENT_MAX;
+ else
+ stop = src->segment.duration;
+ } else {
+ estimated = -1;
+ start = -1;
+ stop = -1;
+ }
+ /* convert to required format. When the conversion fails, we can't answer
+ * the query. When the value is unknown, we can don't perform conversion
+ * but report TRUE. */
+ if (format != GST_FORMAT_PERCENT && stop != -1) {
+ res = gst_pad_query_convert (src->srcpad, src->segment.format,
+ stop, &format, &stop);
+ } else {
+ res = TRUE;
+ }
+ if (res && format != GST_FORMAT_PERCENT && start != -1)
+ res = gst_pad_query_convert (src->srcpad, src->segment.format,
+ start, &format, &start);
+
+ gst_query_set_buffering_range (query, format, start, stop, estimated);
+ break;
+ }
default:
res = FALSE;
break;