diff options
author | arpi <arpi@b3059339-0415-0410-9bf9-f77b7e298cf2> | 2003-01-13 02:42:06 +0000 |
---|---|---|
committer | arpi <arpi@b3059339-0415-0410-9bf9-f77b7e298cf2> | 2003-01-13 02:42:06 +0000 |
commit | 1e166db2028c0f27ea32d3c9427f993cc24d85ce (patch) | |
tree | 062a78471fa9dfd96dc563945706f4cb0b150539 /mplayer.c | |
parent | 57b2503b004ce37b7de9cc62682dcfd58ff2a33a (diff) | |
download | mpv-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.c | 56 |
1 files changed, 56 insertions, 0 deletions
@@ -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; |