diff options
author | Stefan Kost <ensonic@users.sourceforge.net> | 2007-09-03 07:44:34 +0000 |
---|---|---|
committer | Stefan Kost <ensonic@users.sourceforge.net> | 2007-09-03 07:44:34 +0000 |
commit | c1b2242e7777af3e5b43b0ff11e864a34f6094a9 (patch) | |
tree | 9b74c8ab4137086eea37375eb8e35e90fc5b1654 | |
parent | 14e218c083d72f65d0dcabf39fad4040e28a16d1 (diff) |
gst/avi/gstavidemux.c: Implement seek-query.
Original commit message from CVS:
* gst/avi/gstavidemux.c:
Implement seek-query.
-rw-r--r-- | ChangeLog | 5 | ||||
-rw-r--r-- | gst/avi/gstavidemux.c | 26 |
2 files changed, 31 insertions, 0 deletions
@@ -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; |