Mercurial > mplayer.hg
comparison demux_avi.c @ 1421:ea0a0b9e6fbc
nosound avi seeking fixed
author | arpi |
---|---|
date | Sun, 29 Jul 2001 21:07:34 +0000 |
parents | 65058a94df3b |
children | 1728d249c783 |
comparison
equal
deleted
inserted
replaced
1420:d97816161256 | 1421:ea0a0b9e6fbc |
---|---|
124 int ret=0; | 124 int ret=0; |
125 | 125 |
126 do{ | 126 do{ |
127 int flags=0; | 127 int flags=0; |
128 AVIINDEXENTRY *idx=NULL; | 128 AVIINDEXENTRY *idx=NULL; |
129 #if 0 | |
129 demux->filepos=stream_tell(demux->stream); | 130 demux->filepos=stream_tell(demux->stream); |
130 if(demux->filepos>=demux->movi_end){ | 131 if(demux->filepos>=demux->movi_end){ |
131 demux->stream->eof=1; | 132 demux->stream->eof=1; |
132 return 0; | 133 return 0; |
133 } | 134 } |
134 if(stream_eof(demux->stream)) return 0; | 135 if(stream_eof(demux->stream)) return 0; |
136 #endif | |
135 if(demux->idx_size>0 && demux->idx_pos<demux->idx_size){ | 137 if(demux->idx_size>0 && demux->idx_pos<demux->idx_size){ |
136 unsigned int pos; | 138 unsigned int pos; |
137 | 139 |
138 //if(demux->idx_pos<0) printf("Fatal! idx_pos=%d\n",demux->idx_pos); | 140 //if(demux->idx_pos<0) printf("Fatal! idx_pos=%d\n",demux->idx_pos); |
139 | 141 |
153 continue; // skip this chunk | 155 continue; // skip this chunk |
154 } | 156 } |
155 | 157 |
156 pos=idx->dwChunkOffset+demux->idx_offset; | 158 pos=idx->dwChunkOffset+demux->idx_offset; |
157 if(pos<demux->movi_start || pos>=demux->movi_end){ | 159 if(pos<demux->movi_start || pos>=demux->movi_end){ |
158 printf("ChunkOffset out of range! current=0x%X idx=0x%X \n",demux->filepos,pos); | 160 printf("ChunkOffset out of range! idx=0x%X \n",pos); |
159 continue; | 161 continue; |
160 } | 162 } |
161 #if 0 | 163 #if 0 |
162 if(pos!=demux->filepos){ | 164 if(pos!=demux->filepos){ |
163 printf("Warning! pos=0x%X idx.pos=0x%X diff=%d \n",demux->filepos,pos,pos-demux->filepos); | 165 printf("Warning! pos=0x%X idx.pos=0x%X diff=%d \n",demux->filepos,pos,pos-demux->filepos); |
164 } | 166 } |
165 #endif | 167 #endif |
166 stream_seek(demux->stream,pos); | 168 stream_seek(demux->stream,pos); |
169 demux->filepos=stream_tell(demux->stream); | |
167 id=stream_read_dword_le(demux->stream); | 170 id=stream_read_dword_le(demux->stream); |
171 if(stream_eof(demux->stream)) return 0; // EOF! | |
172 | |
168 if(id!=idx->ckid){ | 173 if(id!=idx->ckid){ |
169 printf("ChunkID mismatch! raw=%.4s idx=%.4s \n",(char *)&id,(char *)&idx->ckid); | 174 printf("ChunkID mismatch! raw=%.4s idx=%.4s \n",(char *)&id,(char *)&idx->ckid); |
170 continue; | 175 continue; |
171 } | 176 } |
172 len=stream_read_dword_le(demux->stream); | 177 len=stream_read_dword_le(demux->stream); |
176 printf("ChunkSize mismatch! raw=%d idx=%ld \n",len,idx->dwChunkLength); | 181 printf("ChunkSize mismatch! raw=%d idx=%ld \n",len,idx->dwChunkLength); |
177 continue; | 182 continue; |
178 } | 183 } |
179 if(idx->dwFlags&AVIIF_KEYFRAME) flags=1; | 184 if(idx->dwFlags&AVIIF_KEYFRAME) flags=1; |
180 } else { | 185 } else { |
186 demux->filepos=stream_tell(demux->stream); | |
187 if(demux->filepos>=demux->movi_end){ | |
188 demux->stream->eof=1; | |
189 return 0; | |
190 } | |
181 id=stream_read_dword_le(demux->stream); | 191 id=stream_read_dword_le(demux->stream); |
182 len=stream_read_dword_le(demux->stream); | 192 len=stream_read_dword_le(demux->stream); |
193 if(stream_eof(demux->stream)) return 0; // EOF! | |
194 | |
183 if(id==mmioFOURCC('L','I','S','T')){ | 195 if(id==mmioFOURCC('L','I','S','T')){ |
184 id=stream_read_dword_le(demux->stream); // list type | 196 id=stream_read_dword_le(demux->stream); // list type |
185 continue; | 197 continue; |
186 } | 198 } |
187 } | 199 } |