summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorStefan Kost <ensonic@users.sourceforge.net>2007-09-03 07:44:34 +0000
committerStefan Kost <ensonic@users.sourceforge.net>2007-09-03 07:44:34 +0000
commitc1b2242e7777af3e5b43b0ff11e864a34f6094a9 (patch)
tree9b74c8ab4137086eea37375eb8e35e90fc5b1654
parent14e218c083d72f65d0dcabf39fad4040e28a16d1 (diff)
gst/avi/gstavidemux.c: Implement seek-query.
Original commit message from CVS: * gst/avi/gstavidemux.c: Implement seek-query.
-rw-r--r--ChangeLog5
-rw-r--r--gst/avi/gstavidemux.c26
2 files changed, 31 insertions, 0 deletions
diff --git a/ChangeLog b/ChangeLog
index a68fe156..7f1ae7c5 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,8 @@
+2007-09-03 Stefan Kost <ensonic@users.sf.net>
+
+ * gst/avi/gstavidemux.c:
+ Implement seek-query.
+
2007-08-29 Wim Taymans <wim.taymans@gmail.com>
* gst/rtsp/gstrtspsrc.c: (gst_rtspsrc_stream_configure_udp_sink),
diff --git a/gst/avi/gstavidemux.c b/gst/avi/gstavidemux.c
index a40c5a22..aa679bfc 100644
--- a/gst/avi/gstavidemux.c
+++ b/gst/avi/gstavidemux.c
@@ -453,6 +453,7 @@ gst_avi_demux_get_src_query_types (GstPad * pad)
static const GstQueryType src_types[] = {
GST_QUERY_POSITION,
GST_QUERY_DURATION,
+ GST_QUERY_SEEKING,
0
};
@@ -537,6 +538,31 @@ gst_avi_demux_handle_src_query (GstPad * pad, GstQuery * query)
gst_query_set_duration (query, GST_FORMAT_TIME, stream->duration);
break;
}
+ case GST_QUERY_SEEKING:{
+ GstFormat fmt;
+
+ gst_query_parse_seeking (query, &fmt, NULL, NULL, NULL);
+ if (fmt == GST_FORMAT_TIME) {
+ gboolean seekable = TRUE;
+
+ if (avi->streaming) {
+ seekable = FALSE;
+ } else {
+ if (avi->index_entries == NULL) {
+ seekable = FALSE;
+ /* FIXME: when building index_entried, count keyframes
+ if (!(avi->key_frame_ct > 1))
+ seekable = FALSE;
+ */
+ }
+ }
+
+ gst_query_set_seeking (query, GST_FORMAT_TIME, seekable,
+ 0, stream->duration);
+ res = TRUE;
+ }
+ break;
+ }
default:
res = gst_pad_query_default (pad, query);
break;