diff options
author | Tim-Philipp Müller <tim@centricular.net> | 2005-11-15 19:41:21 +0000 |
---|---|---|
committer | Tim-Philipp Müller <tim@centricular.net> | 2005-11-15 19:41:21 +0000 |
commit | 7f63b50f3fcd6c98672b9d2481d8e56026c90197 (patch) | |
tree | 26d8357c33bbc538a9eb2c9ca27dd50809271ee0 /gst | |
parent | 12aed9b96ef17ce97f4617e8c3db65b98f74d7bd (diff) |
gst/matroska/matroska-demux.c: When seeking, seek to closest index entry at or before the requested seek position, no...
Original commit message from CVS:
Reviewed by: Tim-Philipp Müller <tim at centricular dot net>
* gst/matroska/matroska-demux.c: (gst_matroskademux_do_index_seek):
When seeking, seek to closest index entry at or before the requested
seek position, not just the closest one (#321001).
Diffstat (limited to 'gst')
-rw-r--r-- | gst/matroska/matroska-demux.c | 27 |
1 files changed, 11 insertions, 16 deletions
diff --git a/gst/matroska/matroska-demux.c b/gst/matroska/matroska-demux.c index 3a363ca0..dca6f397 100644 --- a/gst/matroska/matroska-demux.c +++ b/gst/matroska/matroska-demux.c @@ -992,27 +992,22 @@ gst_matroska_demux_handle_src_query (GstPad * pad, GstQuery * query) static GstMatroskaIndex * gst_matroskademux_do_index_seek (GstMatroskaDemux * demux, guint64 seek_pos) { - guint entry = (guint) - 1; - guint n; + guint entry = demux->num_indexes - 1; + guint n = 0; - for (n = 0; n < demux->num_indexes; n++) { - if (entry == (guint) - 1) { - entry = n; - } else { - gfloat diff_old = fabs (1. * (demux->index[entry].time - seek_pos)), - diff_new = fabs (1. * (demux->index[n].time - seek_pos)); + if (!demux->num_indexes) + return NULL; - if (diff_new < diff_old) { - entry = n; - } + while (n < demux->num_indexes - 1) { + if ((demux->index[n].time <= seek_pos) && + (demux->index[n + 1].time > seek_pos)) { + entry = n; + break; } + n++; } - if (entry != (guint) - 1) { - return &demux->index[entry]; - } - - return NULL; + return &demux->index[entry]; } /* takes ownership of the passed event! */ |