diff libmpdemux/demux_ogg.c @ 8795:b4512aa07711

mosu: Fixed OGG/OGM seeking for XCDs in which the OGG/OGM does not start at pos 0 in the stream
author mosu
date Sun, 05 Jan 2003 13:48:13 +0000
parents ee443da1cef3
children 62e1f7e537df
line wrap: on
line diff
--- a/libmpdemux/demux_ogg.c	Sun Jan 05 13:32:57 2003 +0000
+++ b/libmpdemux/demux_ogg.c	Sun Jan 05 13:48:13 2003 +0000
@@ -725,7 +725,7 @@
   if(!s->end_pos)
     demuxer->seekable = 0;
   else {
-    demuxer->movi_start = 0;
+    demuxer->movi_start = s->start_pos; // Needed for XCD (Ogg written in MODE2)
     demuxer->movi_end = s->end_pos;
     demuxer->seekable = 1;
     if(index_mode == 2)
@@ -965,19 +965,18 @@
     pos = ogg_d->syncpoints[sp].page_pos;
 
   } else {
-    pos = flags & 1 ? demuxer->movi_start : ogg_d->pos;
+    pos = flags & 1 ? 0 : ogg_d->pos;
     if(flags & 2)
       pos += (demuxer->movi_end - demuxer->movi_start) * rel_seek_secs;
     else
       pos += rel_seek_secs * ogg_d->pos / (os->lastpos / rate);
-
-    if(pos < demuxer->movi_start)
-      pos = demuxer->movi_start;
-    else if(pos > demuxer->movi_end)
+    if (pos < 0)
+      pos = 0;
+    else if (pos > (demuxer->movi_end - demuxer->movi_start))
       return;
   }
 
-  stream_seek(demuxer->stream,pos);
+  stream_seek(demuxer->stream,pos+demuxer->movi_start);
   ogg_sync_reset(sync);
   for(i = 0 ; i < ogg_d->num_sub ; i++) {
     ogg_stream_reset(&ogg_d->subs[i].stream);