summaryrefslogtreecommitdiffstats
path: root/mplayer.c
diff options
context:
space:
mode:
authorarpi <arpi@b3059339-0415-0410-9bf9-f77b7e298cf2>2003-01-12 19:41:38 +0000
committerarpi <arpi@b3059339-0415-0410-9bf9-f77b7e298cf2>2003-01-12 19:41:38 +0000
commit89875edb3286108ef4c0afff8b8b62de16af540a (patch)
tree9bc19ab98dcbd4aa9ca7e121f1d41f271d160528 /mplayer.c
parentd31a1e04f4dd6617c0d46c1c76e8efc6509ba9f1 (diff)
downloadmpv-89875edb3286108ef4c0afff8b8b62de16af540a.tar.bz2
mpv-89875edb3286108ef4c0afff8b8b62de16af540a.tar.xz
this patch adds an fallback to playlist (any but the plaintext-list format)
after all demuxers failed. so -playlist is not needed any more! patch by Fabian Franz <FabianFranz@gmx.de>, with some small modifications git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@8926 b3059339-0415-0410-9bf9-f77b7e298cf2
Diffstat (limited to 'mplayer.c')
-rw-r--r--mplayer.c69
1 files changed, 42 insertions, 27 deletions
diff --git a/mplayer.c b/mplayer.c
index 3e3683a119..807fcddaa7 100644
--- a/mplayer.c
+++ b/mplayer.c
@@ -585,6 +585,31 @@ static int libmpdemux_was_interrupted(int eof) {
return eof;
}
+int playtree_add_playlist(play_tree_t* entry)
+{
+ if(!entry) {
+ entry = playtree_iter->tree;
+ if(play_tree_iter_step(playtree_iter,1,0) != PLAY_TREE_ITER_ENTRY) {
+ return PT_NEXT_ENTRY;
+ }
+ if(playtree_iter->tree == entry ) { // Loop with a single file
+ if(play_tree_iter_up_step(playtree_iter,1,0) != PLAY_TREE_ITER_ENTRY) {
+ return PT_NEXT_ENTRY;
+ }
+ }
+ play_tree_remove(entry,1,1);
+ return PT_NEXT_SRC;
+ }
+ play_tree_insert_entry(playtree_iter->tree,entry);
+ play_tree_set_params_from(entry,playtree_iter->tree);
+ entry = playtree_iter->tree;
+ if(play_tree_iter_step(playtree_iter,1,0) != PLAY_TREE_ITER_ENTRY) {
+ return PT_NEXT_ENTRY;
+ }
+ play_tree_remove(entry,1,1);
+ return PT_NEXT_SRC;
+}
+
static int play_tree_step = 1;
/*
@@ -1125,32 +1150,8 @@ if(!use_stdin && !slave_mode){
// Handle playlist
current_module="handle_playlist";
mp_msg(MSGT_CPLAYER,MSGL_V,"Parsing playlist %s...\n",filename);
- entry = parse_playtree(stream);
- if(!entry) {
- entry = playtree_iter->tree;
- if(play_tree_iter_step(playtree_iter,1,0) != PLAY_TREE_ITER_ENTRY) {
- eof = PT_NEXT_ENTRY;
- goto goto_next_file;
- }
- if(playtree_iter->tree == entry ) { // Loop with a single file
- if(play_tree_iter_up_step(playtree_iter,1,0) != PLAY_TREE_ITER_ENTRY) {
- eof = PT_NEXT_ENTRY;
- goto goto_next_file;
- }
- }
- play_tree_remove(entry,1,1);
- eof = PT_NEXT_SRC;
- goto goto_next_file;
- }
- play_tree_insert_entry(playtree_iter->tree,entry);
- play_tree_set_params_from(entry,playtree_iter->tree);
- entry = playtree_iter->tree;
- if(play_tree_iter_step(playtree_iter,1,0) != PLAY_TREE_ITER_ENTRY) {
- eof = PT_NEXT_ENTRY;
- goto goto_next_file;
- }
- play_tree_remove(entry,1,1);
- eof = PT_NEXT_SRC;
+ entry = parse_playtree(stream,0);
+ eof=playtree_add_playlist(entry);
goto goto_next_file;
}
stream->start_pos+=seek_to_byte;
@@ -1223,7 +1224,21 @@ if(stream_cache_size>0){
current_module="demux_open";
demuxer=demux_open(stream,file_format,audio_id,video_id,dvdsub_id);
-if(!demuxer) goto goto_next_file; // exit_player(MSGTR_Exit_error); // ERROR
+if(!demuxer)
+{
+ play_tree_t* entry;
+ // Handle playlist
+ current_module="handle_playlist";
+ mp_msg(MSGT_CPLAYER,MSGL_INFO,"Falling back on trying to parse playlist %s...\n",filename);
+ stream_reset(stream);
+ stream_seek(stream,stream->start_pos);
+ entry = parse_playtree(stream,0);
+ if(!entry)
+ mp_msg(MSGT_DEMUXER,MSGL_ERR,MSGTR_FormatNotRecognized);
+ else
+ eof=playtree_add_playlist(entry);
+ goto goto_next_file;
+}
inited_flags|=INITED_DEMUXER;
current_module="demux_open2";