summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTim-Philipp Müller <tim@centricular.net>2005-11-15 19:41:21 +0000
committerTim-Philipp Müller <tim@centricular.net>2005-11-15 19:41:21 +0000
commit7f63b50f3fcd6c98672b9d2481d8e56026c90197 (patch)
tree26d8357c33bbc538a9eb2c9ca27dd50809271ee0
parent12aed9b96ef17ce97f4617e8c3db65b98f74d7bd (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).
-rw-r--r--ChangeLog8
-rw-r--r--gst/matroska/matroska-demux.c27
2 files changed, 19 insertions, 16 deletions
diff --git a/ChangeLog b/ChangeLog
index b0fb89d0..a495970d 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,11 @@
+2005-11-15 Vincent Torri <torri at iecn dot u-nancy dot fr>
+
+ 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).
+
2005-11-15 Tim-Philipp Müller <tim at centricular dot net>
* gst/avi/gstavidemux.c: (swap_line), (gst_avi_demux_invert),
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! */