Mercurial > mplayer.hg
comparison libmpdemux/demux_mov.c @ 8937:afca652cb0e5
patch adds support for MOV-Reference-Files.
it uses d_video queue to store playlist entries as strz.
It also makes sure, that unnecessary items like qt5gateQT are removed and
that the url/basepath is added to "local files"
by Fabian Franz <FabianFranz@gmx.de>
author | arpi |
---|---|
date | Mon, 13 Jan 2003 02:42:06 +0000 |
parents | c82c8144cef9 |
children | ee0fdf5505c4 |
comparison
equal
deleted
inserted
replaced
8936:7c28736ebf2c | 8937:afca652cb0e5 |
---|---|
354 i = stream_read_dword(demuxer->stream)-8; | 354 i = stream_read_dword(demuxer->stream)-8; |
355 if(stream_read_dword(demuxer->stream)==MOV_FOURCC('r','m','r','a')){ | 355 if(stream_read_dword(demuxer->stream)==MOV_FOURCC('r','m','r','a')){ |
356 int ref=0; | 356 int ref=0; |
357 skipped+=i; | 357 skipped+=i; |
358 mp_msg(MSGT_DEMUX,MSGL_INFO,"MOV: Reference Media file!!!\n"); | 358 mp_msg(MSGT_DEMUX,MSGL_INFO,"MOV: Reference Media file!!!\n"); |
359 //set demuxer type to playlist ... | |
360 demuxer->type=DEMUXER_TYPE_PLAYLIST; | |
359 while(i>0){ | 361 while(i>0){ |
360 int len=stream_read_dword(demuxer->stream)-8; | 362 int len=stream_read_dword(demuxer->stream)-8; |
361 int fcc=stream_read_dword(demuxer->stream); | 363 int fcc=stream_read_dword(demuxer->stream); |
362 if(len<0) break; // EOF!? | 364 if(len<0) break; // EOF!? |
363 i-=8; | 365 i-=8; |
367 continue; | 369 continue; |
368 case MOV_FOURCC('r','d','r','f'): { | 370 case MOV_FOURCC('r','d','r','f'): { |
369 int tmp=stream_read_dword(demuxer->stream); | 371 int tmp=stream_read_dword(demuxer->stream); |
370 int type=stream_read_dword_le(demuxer->stream); | 372 int type=stream_read_dword_le(demuxer->stream); |
371 int slen=stream_read_dword(demuxer->stream); | 373 int slen=stream_read_dword(demuxer->stream); |
372 char* s=malloc(slen+1); | 374 //char* s=malloc(slen+1); |
373 stream_read(demuxer->stream,s,slen); | 375 //stream_read(demuxer->stream,s,slen); |
374 s[slen]=0; | 376 |
375 mp_msg(MSGT_DEMUX,MSGL_INFO,"REF: [%.4s] %s\n",&type,s); | 377 //FIXME: also store type & data_rate ? |
378 ds_read_packet(demuxer->video, | |
379 demuxer->stream, | |
380 slen, | |
381 0, | |
382 stream_tell(demuxer->stream), | |
383 0 // no flags | |
384 ); | |
385 flags|=4; | |
386 mp_msg(MSGT_DEMUX,MSGL_V,"Added reference to playlist\n"); | |
387 //s[slen]=0; | |
388 //mp_msg(MSGT_DEMUX,MSGL_INFO,"REF: [%.4s] %s\n",&type,s); | |
376 len-=12+slen;i-=12+slen; break; | 389 len-=12+slen;i-=12+slen; break; |
377 } | 390 } |
378 case MOV_FOURCC('r','m','d','r'): { | 391 case MOV_FOURCC('r','m','d','r'): { |
379 int flags=stream_read_dword(demuxer->stream); | 392 int flags=stream_read_dword(demuxer->stream); |
380 int rate=stream_read_dword(demuxer->stream); | 393 int rate=stream_read_dword(demuxer->stream); |
431 if(flags==3){ | 444 if(flags==3){ |
432 demuxer->priv=priv; | 445 demuxer->priv=priv; |
433 return 1; | 446 return 1; |
434 } | 447 } |
435 free(priv); | 448 free(priv); |
449 | |
450 if (flags==5) // reference & header sent | |
451 return 1; | |
436 | 452 |
437 if(flags==1) | 453 if(flags==1) |
438 mp_msg(MSGT_DEMUX,MSGL_WARN,"MOV: missing data (mdat) chunk! Maybe broken file...\n"); | 454 mp_msg(MSGT_DEMUX,MSGL_WARN,"MOV: missing data (mdat) chunk! Maybe broken file...\n"); |
439 else if(flags==2) | 455 else if(flags==2) |
440 mp_msg(MSGT_DEMUX,MSGL_WARN,"MOV: missing header (moov/cmov) chunk! Maybe broken file...\n"); | 456 mp_msg(MSGT_DEMUX,MSGL_WARN,"MOV: missing header (moov/cmov) chunk! Maybe broken file...\n"); |