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");