summaryrefslogtreecommitdiffstats
path: root/mplayer.c
diff options
context:
space:
mode:
authorarpi <arpi@b3059339-0415-0410-9bf9-f77b7e298cf2>2003-01-13 02:42:06 +0000
committerarpi <arpi@b3059339-0415-0410-9bf9-f77b7e298cf2>2003-01-13 02:42:06 +0000
commit1e166db2028c0f27ea32d3c9427f993cc24d85ce (patch)
tree062a78471fa9dfd96dc563945706f4cb0b150539 /mplayer.c
parent57b2503b004ce37b7de9cc62682dcfd58ff2a33a (diff)
downloadmpv-1e166db2028c0f27ea32d3c9427f993cc24d85ce.tar.bz2
mpv-1e166db2028c0f27ea32d3c9427f993cc24d85ce.tar.xz
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> git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@8938 b3059339-0415-0410-9bf9-f77b7e298cf2
Diffstat (limited to 'mplayer.c')
-rw-r--r--mplayer.c56
1 files changed, 56 insertions, 0 deletions
diff --git a/mplayer.c b/mplayer.c
index 589e2fac0a..85d6e02793 100644
--- a/mplayer.c
+++ b/mplayer.c
@@ -585,6 +585,8 @@ static int libmpdemux_was_interrupted(int eof) {
return eof;
}
+#define mp_basename(s) (strrchr(s,'/')==NULL?(char*)s:(strrchr(s,'/')+1))
+
int playtree_add_playlist(play_tree_t* entry)
{
if(!entry) {
@@ -1226,6 +1228,60 @@ if(stream_cache_size>0){
current_module="demux_open";
demuxer=demux_open(stream,file_format,audio_id,video_id,dvdsub_id);
+
+// HACK to get MOV Reference Files working
+
+if (demuxer && demuxer->type==DEMUXER_TYPE_PLAYLIST)
+{
+ unsigned char* playlist_entry;
+ play_tree_t *list = NULL, *entry = NULL;
+
+ current_module="handle_demux_playlist";
+ while (ds_get_packet(demuxer->video,&playlist_entry)>0)
+ {
+ char *temp, *bname;
+
+ mp_msg(MSGT_CPLAYER,MSGL_V,"Adding file %s to element entry\n",playlist_entry);
+
+ bname=mp_basename(playlist_entry);
+ if ((strlen(bname)>10) && !strncmp(bname,"qt",2) && !strncmp(bname+3,"gateQT",6))
+ continue;
+
+ entry = play_tree_new();
+
+ if (filename && !strcmp(mp_basename(playlist_entry),playlist_entry)) // add reference path of current file
+ {
+ temp=malloc((strlen(filename)-strlen(mp_basename(filename))+strlen(playlist_entry)+1)*sizeof(char));
+ if (temp)
+ {
+ strncpy(temp, filename, strlen(filename)-strlen(mp_basename(filename)));
+ temp[strlen(filename)-strlen(mp_basename(filename))]='\0';
+ strcat(temp, playlist_entry);
+ play_tree_add_file(entry,temp);
+ mp_msg(MSGT_CPLAYER,MSGL_V,"Resolving reference to %s\n",temp);
+ free(temp);
+ }
+ }
+ else
+ play_tree_add_file(entry,playlist_entry);
+
+ if(!list)
+ list = entry;
+ else
+ play_tree_append_entry(list,entry);
+ }
+ free_demuxer(demuxer);
+ demuxer = NULL;
+
+ if (list)
+ {
+ entry = play_tree_new();
+ play_tree_set_child(entry,list);
+ eof=playtree_add_playlist(entry);
+ goto goto_next_file;
+ }
+}
+
if(!demuxer)
{
play_tree_t* entry;