Mercurial > mplayer.hg
diff demux_avi.c @ 979:3bcc435cd5a2
keyframe flag added
author | arpi_esp |
---|---|
date | Sun, 03 Jun 2001 23:37:20 +0000 |
parents | ef932c18cb14 |
children | faee296c7c9a |
line wrap: on
line diff
--- a/demux_avi.c Sun Jun 03 23:36:47 2001 +0000 +++ b/demux_avi.c Sun Jun 03 23:37:20 2001 +0000 @@ -57,7 +57,7 @@ return NULL; } -static int demux_avi_read_packet(demuxer_t *demux,unsigned int id,unsigned int len,int idxpos){ +static int demux_avi_read_packet(demuxer_t *demux,unsigned int id,unsigned int len,int idxpos,int flags){ int skip; float pts=0; demux_stream_t *ds=demux_avi_select_stream(demux,id); @@ -92,7 +92,7 @@ if(ds){ if(verbose>=2) printf("DEMUX_AVI: Read %d data bytes from packet %04X\n",len,id); - ds_read_packet(ds,demux->stream,len,pts,idxpos); + ds_read_packet(ds,demux->stream,len,pts,idxpos,flags); skip-=len; } if(skip){ @@ -115,6 +115,7 @@ int ret=0; do{ + int flags=0; AVIINDEXENTRY *idx=NULL; demux->filepos=stream_tell(demux->stream); if(demux->filepos>=demux->movi_end){ @@ -166,6 +167,7 @@ printf("ChunkSize mismatch! raw=%d idx=%ld \n",len,idx->dwChunkLength); continue; } + if(idx->dwFlags&AVIIF_KEYFRAME) flags=1; } else { id=stream_read_dword_le(demux->stream); len=stream_read_dword_le(demux->stream); @@ -174,7 +176,7 @@ continue; } } - ret=demux_avi_read_packet(demux,id,len,demux->idx_pos-1); + ret=demux_avi_read_packet(demux,id,len,demux->idx_pos-1,flags); if(!ret && skip_video_frames<=0) if(--max_packs==0){ demux->stream->eof=1; @@ -196,6 +198,7 @@ int ret=0; do{ + int flags=0; AVIINDEXENTRY *idx=NULL; int idx_pos=0; demux->filepos=stream_tell(demux->stream); @@ -245,8 +248,9 @@ printf("ChunkSize mismatch! raw=%d idx=%ld \n",len,idx->dwChunkLength); continue; } + if(idx->dwFlags&AVIIF_KEYFRAME) flags=1; } else return 0; - ret=demux_avi_read_packet(demux,id,len,idx_pos); + ret=demux_avi_read_packet(demux,id,len,idx_pos,flags); if(!ret && skip_video_frames<=0) if(--max_packs==0){ demux->stream->eof=1; @@ -291,7 +295,7 @@ if(ds==demux_avi_select_stream(demux,id)){ // read it! - ret=demux_avi_read_packet(demux,id,len,demux->idx_pos-1); + ret=demux_avi_read_packet(demux,id,len,demux->idx_pos-1,0); } else { // skip it! int skip=(len+1)&(~1); // total bytes in this chunk