summaryrefslogtreecommitdiffstats
path: root/gst
diff options
context:
space:
mode:
authorTim-Philipp Müller <tim@centricular.net>2006-12-16 15:25:23 +0000
committerTim-Philipp Müller <tim@centricular.net>2006-12-16 15:25:23 +0000
commitc558afb137be65823b7866d443a8fb608cbba2ff (patch)
tree49620136bb759afd09b73a6b8ad20616edd30338 /gst
parent1b3ef14df4e2729bcc4e24881038b7f75b08135c (diff)
downloadgst-plugins-bad-c558afb137be65823b7866d443a8fb608cbba2ff.tar.gz
gst-plugins-bad-c558afb137be65823b7866d443a8fb608cbba2ff.tar.bz2
gst-plugins-bad-c558afb137be65823b7866d443a8fb608cbba2ff.zip
gst/qtdemux/qtdemux.c: We don't support seeking in streaming mode, so don't even try.
Original commit message from CVS: * gst/qtdemux/qtdemux.c: (gst_qtdemux_get_src_query_types), (gst_qtdemux_handle_src_query), (gst_qtdemux_handle_src_event): We don't support seeking in streaming mode, so don't even try. Implement seeking query so apps can query seekability properly (see #365414). Fix duration query.
Diffstat (limited to 'gst')
-rw-r--r--gst/qtdemux/qtdemux.c40
1 files changed, 33 insertions, 7 deletions
diff --git a/gst/qtdemux/qtdemux.c b/gst/qtdemux/qtdemux.c
index 21e7a3f2..7c3864fe 100644
--- a/gst/qtdemux/qtdemux.c
+++ b/gst/qtdemux/qtdemux.c
@@ -551,6 +551,7 @@ gst_qtdemux_get_src_query_types (GstPad * pad)
static const GstQueryType src_types[] = {
GST_QUERY_POSITION,
GST_QUERY_DURATION,
+ GST_QUERY_SEEKING,
0
};
@@ -587,17 +588,37 @@ gst_qtdemux_handle_src_query (GstPad * pad, GstQuery * query)
res = TRUE;
}
break;
- case GST_QUERY_DURATION:
- {
- gint64 duration;
+ case GST_QUERY_DURATION:{
+ GstFormat fmt;
- res = gst_qtdemux_get_duration (qtdemux, &duration);
+ gst_query_parse_duration (query, &fmt, NULL);
+ if (fmt == GST_FORMAT_TIME) {
+ gint64 duration = -1;
- gst_query_set_duration (query, GST_FORMAT_TIME, duration);
+ gst_qtdemux_get_duration (qtdemux, &duration);
+ if (duration > 0) {
+ gst_query_set_duration (query, GST_FORMAT_TIME, duration);
+ res = TRUE;
+ }
+ }
+ break;
}
+ case GST_QUERY_SEEKING:{
+ GstFormat fmt;
+
+ gst_query_parse_seeking (query, &fmt, NULL, NULL, NULL);
+ if (fmt == GST_FORMAT_TIME) {
+ gint64 duration = -1;
+
+ gst_qtdemux_get_duration (qtdemux, &duration);
+ gst_query_set_seeking (query, GST_FORMAT_TIME, qtdemux->pullbased,
+ 0, duration);
+ res = TRUE;
+ }
break;
+ }
default:
- res = FALSE;
+ res = gst_pad_query_default (pad, query);
break;
}
@@ -971,7 +992,12 @@ gst_qtdemux_handle_src_event (GstPad * pad, GstEvent * event)
switch (GST_EVENT_TYPE (event)) {
case GST_EVENT_SEEK:
- res = gst_qtdemux_do_seek (qtdemux, pad, event);
+ if (qtdemux->pullbased) {
+ res = gst_qtdemux_do_seek (qtdemux, pad, event);
+ } else {
+ GST_DEBUG_OBJECT (qtdemux, "cannot seek in streaming mode");
+ res = FALSE;
+ }
break;
default:
res = FALSE;