diff 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
line wrap: on
line diff
--- a/libmpdemux/demux_mov.c	Mon Jan 13 01:50:20 2003 +0000
+++ b/libmpdemux/demux_mov.c	Mon Jan 13 02:42:06 2003 +0000
@@ -356,6 +356,8 @@
 	      int ref=0;
 	      skipped+=i;
 	      mp_msg(MSGT_DEMUX,MSGL_INFO,"MOV: Reference Media file!!!\n");
+	      //set demuxer type to playlist ...
+	      demuxer->type=DEMUXER_TYPE_PLAYLIST;
 	      while(i>0){
 	          int len=stream_read_dword(demuxer->stream)-8;
 		  int fcc=stream_read_dword(demuxer->stream);
@@ -369,10 +371,21 @@
 		      int tmp=stream_read_dword(demuxer->stream);
 		      int type=stream_read_dword_le(demuxer->stream);
 	              int slen=stream_read_dword(demuxer->stream);
-		      char* s=malloc(slen+1);
-		      stream_read(demuxer->stream,s,slen);
-		      s[slen]=0;
-		      mp_msg(MSGT_DEMUX,MSGL_INFO,"REF: [%.4s] %s\n",&type,s);
+		      //char* s=malloc(slen+1);
+		      //stream_read(demuxer->stream,s,slen);
+		      
+		      //FIXME: also store type & data_rate ?
+		      ds_read_packet(demuxer->video, 
+			demuxer->stream,
+			slen,
+			0,
+			stream_tell(demuxer->stream),
+			0 // no flags 
+		      );
+		      flags|=4;
+		      mp_msg(MSGT_DEMUX,MSGL_V,"Added reference to playlist\n");
+		      //s[slen]=0;
+		      //mp_msg(MSGT_DEMUX,MSGL_INFO,"REF: [%.4s] %s\n",&type,s);
 		      len-=12+slen;i-=12+slen; break;
 		    }
 		  case MOV_FOURCC('r','m','d','r'): {
@@ -434,6 +447,9 @@
     }
     free(priv);
 
+    if (flags==5) // reference & header sent
+        return 1;
+
     if(flags==1)
 	mp_msg(MSGT_DEMUX,MSGL_WARN,"MOV: missing data (mdat) chunk! Maybe broken file...\n");
     else if(flags==2)