Mercurial > mplayer.hg
comparison libmpdemux/demux_avi.c @ 12036:846ed866f86c
OpenDML read/write support
author | ranma |
---|---|
date | Wed, 17 Mar 2004 14:50:37 +0000 |
parents | 2c2fb4457982 |
children | 8769fa370f83 |
comparison
equal
deleted
inserted
replaced
12035:b3512c7b26ce | 12036:846ed866f86c |
---|---|
211 if(!demux_avi_select_stream(demux,idx->ckid)){ | 211 if(!demux_avi_select_stream(demux,idx->ckid)){ |
212 mp_dbg(MSGT_DEMUX,MSGL_DBG3,"Skip chunk %.4s (0x%X) \n",(char *)&idx->ckid,(unsigned int)idx->ckid); | 212 mp_dbg(MSGT_DEMUX,MSGL_DBG3,"Skip chunk %.4s (0x%X) \n",(char *)&idx->ckid,(unsigned int)idx->ckid); |
213 continue; // skip this chunk | 213 continue; // skip this chunk |
214 } | 214 } |
215 | 215 |
216 pos = priv->idx_offset + (unsigned long)idx->dwChunkOffset; | 216 pos = (off_t)priv->idx_offset+AVI_IDX_OFFSET(idx); |
217 if((pos<demux->movi_start || pos>=demux->movi_end) && (demux->movi_end>demux->movi_start) && (demux->stream->flags & STREAM_SEEK)){ | 217 if((pos<demux->movi_start || pos>=demux->movi_end) && (demux->movi_end>demux->movi_start) && (demux->stream->flags & STREAM_SEEK)){ |
218 mp_msg(MSGT_DEMUX,MSGL_V,"ChunkOffset out of range! idx=0x%X \n",pos); | 218 mp_msg(MSGT_DEMUX,MSGL_V,"ChunkOffset out of range! idx=0x%X \n",pos); |
219 continue; | 219 continue; |
220 } | 220 } |
221 #if 0 | 221 #if 0 |
323 if(ds && demux_avi_select_stream(demux,idx->ckid)!=ds){ | 323 if(ds && demux_avi_select_stream(demux,idx->ckid)!=ds){ |
324 mp_dbg(MSGT_DEMUX,MSGL_DBG3,"Skip chunk %.4s (0x%X) \n",(char *)&idx->ckid,(unsigned int)idx->ckid); | 324 mp_dbg(MSGT_DEMUX,MSGL_DBG3,"Skip chunk %.4s (0x%X) \n",(char *)&idx->ckid,(unsigned int)idx->ckid); |
325 continue; // skip this chunk | 325 continue; // skip this chunk |
326 } | 326 } |
327 | 327 |
328 pos = priv->idx_offset+(unsigned long)idx->dwChunkOffset; | 328 pos = priv->idx_offset+AVI_IDX_OFFSET(idx); |
329 if((pos<demux->movi_start || pos>=demux->movi_end) && (demux->movi_end>demux->movi_start)){ | 329 if((pos<demux->movi_start || pos>=demux->movi_end) && (demux->movi_end>demux->movi_start)){ |
330 mp_msg(MSGT_DEMUX,MSGL_V,"ChunkOffset out of range! current=0x%X idx=0x%X \n",demux->filepos,pos); | 330 mp_msg(MSGT_DEMUX,MSGL_V,"ChunkOffset out of range! current=0x%X idx=0x%X \n",demux->filepos,pos); |
331 continue; | 331 continue; |
332 } | 332 } |
333 #if 0 | 333 #if 0 |
444 priv->pts_corr_bytes=0; | 444 priv->pts_corr_bytes=0; |
445 priv->pts_has_video=priv->pts_corrected=0; | 445 priv->pts_has_video=priv->pts_corrected=0; |
446 priv->video_pack_no=0; | 446 priv->video_pack_no=0; |
447 priv->audio_block_no=0; | 447 priv->audio_block_no=0; |
448 priv->audio_block_size=0; | 448 priv->audio_block_size=0; |
449 priv->isodml = 0; | |
450 priv->suidx_size = 0; | |
451 priv->suidx = NULL; | |
452 | |
449 demuxer->priv=(void*)priv; | 453 demuxer->priv=(void*)priv; |
450 | 454 |
451 //---- AVI header: | 455 //---- AVI header: |
452 read_avi_header(demuxer,(demuxer->stream->flags & STREAM_SEEK_BW)?index_mode:-2); | 456 read_avi_header(demuxer,(demuxer->stream->flags & STREAM_SEEK_BW)?index_mode:-2); |
453 | 457 |
466 priv->idx_pos_a=0; | 470 priv->idx_pos_a=0; |
467 priv->idx_pos_v=0; | 471 priv->idx_pos_v=0; |
468 if(priv->idx_size>1){ | 472 if(priv->idx_size>1){ |
469 // decide index format: | 473 // decide index format: |
470 #if 1 | 474 #if 1 |
471 if((unsigned long)((AVIINDEXENTRY *)priv->idx)[0].dwChunkOffset<demuxer->movi_start || | 475 if((AVI_IDX_OFFSET(&((AVIINDEXENTRY *)priv->idx)[0])<demuxer->movi_start || |
472 (unsigned long)((AVIINDEXENTRY *)priv->idx)[1].dwChunkOffset<demuxer->movi_start) | 476 AVI_IDX_OFFSET(&((AVIINDEXENTRY *)priv->idx)[1])<demuxer->movi_start )&& !priv->isodml) |
473 priv->idx_offset=demuxer->movi_start-4; | 477 priv->idx_offset=demuxer->movi_start-4; |
474 else | 478 else |
475 priv->idx_offset=0; | 479 priv->idx_offset=0; |
476 #else | 480 #else |
477 if((unsigned long)((AVIINDEXENTRY *)priv->idx)[0].dwChunkOffset<demuxer->movi_start) | 481 if(AVI_IDX_OFFSET(&((AVIINDEXENTRY *)priv->idx)[0])<demuxer->movi_start) |
478 priv->idx_offset=demuxer->movi_start-4; | 482 priv->idx_offset=demuxer->movi_start-4; |
479 else | 483 else |
480 priv->idx_offset=0; | 484 priv->idx_offset=0; |
481 #endif | 485 #endif |
482 mp_msg(MSGT_DEMUX,MSGL_V,"AVI index offset: 0x%X (movi=0x%X idx0=0x%X idx1=0x%X)\n", | 486 mp_msg(MSGT_DEMUX,MSGL_V,"AVI index offset: 0x%X (movi=0x%X idx0=0x%X idx1=0x%X)\n", |
492 off_t a_pos=-1; | 496 off_t a_pos=-1; |
493 off_t v_pos=-1; | 497 off_t v_pos=-1; |
494 for(i=0;i<priv->idx_size;i++){ | 498 for(i=0;i<priv->idx_size;i++){ |
495 AVIINDEXENTRY* idx=&((AVIINDEXENTRY *)priv->idx)[i]; | 499 AVIINDEXENTRY* idx=&((AVIINDEXENTRY *)priv->idx)[i]; |
496 demux_stream_t* ds=demux_avi_select_stream(demuxer,idx->ckid); | 500 demux_stream_t* ds=demux_avi_select_stream(demuxer,idx->ckid); |
497 off_t pos = priv->idx_offset + (unsigned long)idx->dwChunkOffset; | 501 off_t pos = priv->idx_offset + AVI_IDX_OFFSET(idx); |
498 if(a_pos==-1 && ds==demuxer->audio){ | 502 if(a_pos==-1 && ds==demuxer->audio){ |
499 a_pos=pos; | 503 a_pos=pos; |
500 if(v_pos!=-1) break; | 504 if(v_pos!=-1) break; |
501 } | 505 } |
502 if(v_pos==-1 && ds==demuxer->video){ | 506 if(v_pos==-1 && ds==demuxer->video){ |