diff demux_avi.c @ 1421:ea0a0b9e6fbc

nosound avi seeking fixed
author arpi
date Sun, 29 Jul 2001 21:07:34 +0000
parents 65058a94df3b
children 1728d249c783
line wrap: on
line diff
--- a/demux_avi.c	Sun Jul 29 17:42:06 2001 +0000
+++ b/demux_avi.c	Sun Jul 29 21:07:34 2001 +0000
@@ -126,12 +126,14 @@
 do{
   int flags=0;
   AVIINDEXENTRY *idx=NULL;
+#if 0
   demux->filepos=stream_tell(demux->stream);
   if(demux->filepos>=demux->movi_end){
           demux->stream->eof=1;
           return 0;
   }
   if(stream_eof(demux->stream)) return 0;
+#endif
   if(demux->idx_size>0 && demux->idx_pos<demux->idx_size){
     unsigned int pos;
     
@@ -155,7 +157,7 @@
 
     pos=idx->dwChunkOffset+demux->idx_offset;
     if(pos<demux->movi_start || pos>=demux->movi_end){
-      printf("ChunkOffset out of range!  current=0x%X  idx=0x%X  \n",demux->filepos,pos);
+      printf("ChunkOffset out of range!   idx=0x%X  \n",pos);
       continue;
     }
 #if 0
@@ -164,7 +166,10 @@
     }
 #endif
     stream_seek(demux->stream,pos);
+    demux->filepos=stream_tell(demux->stream);
     id=stream_read_dword_le(demux->stream);
+    if(stream_eof(demux->stream)) return 0; // EOF!
+    
     if(id!=idx->ckid){
       printf("ChunkID mismatch! raw=%.4s idx=%.4s  \n",(char *)&id,(char *)&idx->ckid);
       continue;
@@ -178,8 +183,15 @@
     }
     if(idx->dwFlags&AVIIF_KEYFRAME) flags=1;
   } else {
+    demux->filepos=stream_tell(demux->stream);
+    if(demux->filepos>=demux->movi_end){
+          demux->stream->eof=1;
+          return 0;
+    }
     id=stream_read_dword_le(demux->stream);
     len=stream_read_dword_le(demux->stream);
+    if(stream_eof(demux->stream)) return 0; // EOF!
+    
     if(id==mmioFOURCC('L','I','S','T')){
       id=stream_read_dword_le(demux->stream);      // list type
       continue;