[MPlayer-dev-eng] [PATCH] -idle , MPlayer idle loop...
Oded Shimon
ods15 at ods15.dyndns.org
Wed Aug 31 19:42:03 CEST 2005
On Sat, Aug 27, 2005 at 07:36:35PM +0300, Oded Shimon wrote:
> KotH can't remember how good is memory is, this never got committed :)
>
> The patch still applies cleanly, the only difference between this patch and
> one sent to ml a few months ago is the line numbers...
>
> For those who don't remember, this patch causes MPlayer to accept the
> option '-idle', and make it NOT quit once it's done playing all the files
> (or if there are no files). You can use only the commands 'loadfile' and
> 'loadlist'. The only big "bug" is that when using -fixed-vo, you're left
> with an ugly completely frozen (and not accepting input!) VO.
Fixed.. The actual picture is obviously still stuck/ugly, because there's
no picture to show, but it accepts keyboard events (can accept 'q'.. that's
just about only use I see for it...)
> Oh, I just realized another "bug", the 'loadfile' and 'loadlist' have
> changed in CVS since this patch, they now accept 2 params.. -idle doesn't
> accept this...
Fixed..
> -idle doesn't imply -slave, but it's really most useful with it.. I
> think...
>
> I'm gonna try to fix the loadfile/loadlist thing and then commit.. comments
> anyone?
Will commit in few days...
- ods15
-------------- next part --------------
Index: cfg-mplayer.h
===================================================================
RCS file: /cvsroot/mplayer/main/cfg-mplayer.h,v
retrieving revision 1.250
diff -u -r1.250 cfg-mplayer.h
--- cfg-mplayer.h 17 Jul 2005 19:40:05 -0000 1.250
+++ cfg-mplayer.h 27 Aug 2005 16:24:30 -0000
@@ -372,6 +372,8 @@
#endif
{"slave", &slave_mode, CONF_TYPE_FLAG,CONF_GLOBAL , 0, 1, NULL},
+ {"idle", &player_idle_mode, CONF_TYPE_FLAG,CONF_GLOBAL , 0, 1, NULL},
+ {"noidle", &player_idle_mode, CONF_TYPE_FLAG,CONF_GLOBAL , 0, 0, NULL},
{"use-stdin", "-use-stdin has been renamed to -noconsolecontrols, use that instead.", CONF_TYPE_PRINT, 0, 0, 0, NULL},
{"key-fifo-size", &key_fifo_size, CONF_TYPE_INT, CONF_RANGE, 2, 65000, NULL},
{"noconsolecontrols", &noconsolecontrols, CONF_TYPE_FLAG, CONF_GLOBAL, 0, 1, NULL},
Index: mplayer.c
===================================================================
RCS file: /cvsroot/mplayer/main/mplayer.c,v
retrieving revision 1.861
diff -u -r1.861 mplayer.c
--- mplayer.c 23 Aug 2005 07:56:29 -0000 1.861
+++ mplayer.c 27 Aug 2005 16:24:35 -0000
@@ -85,6 +85,7 @@
#include "input/input.h"
int slave_mode=0;
+int player_idle_mode=0;
int verbose=0;
int identify=0;
int quiet=0;
@@ -1301,7 +1302,12 @@
}
#endif
- if(!filename){
+ if (player_idle_mode && use_gui) {
+ mp_msg(MSGT_CPLAYER, MSGL_FATAL, MSGTR_NoIdleAndGui);
+ exit_player_with_rc(NULL, 1);
+ }
+
+ if(!filename && !player_idle_mode){
if(!use_gui){
// no file/vcd/dvd -> show HELP:
mp_msg(MSGT_CPLAYER, MSGL_INFO, help_text);
@@ -1529,6 +1535,53 @@
}
}
#endif
+
+while (player_idle_mode && !filename) {
+ play_tree_t * entry = NULL;
+ mp_cmd_t * cmd;
+ while (!(cmd = mp_input_get_cmd(0,1,0))) { // wait for command
+ if (video_out && vo_config_count) video_out->check_events();
+ usec_sleep(20000);
+ }
+ switch (cmd->id) {
+ case MP_CMD_LOADFILE:
+ // prepare a tree entry with the new filename
+ entry = play_tree_new();
+ play_tree_add_file(entry, cmd->args[0].v.s);
+ // actual entering the entry into the main playtree done after switch()
+ break;
+ case MP_CMD_LOADLIST:
+ entry = parse_playlist_file(cmd->args[0].v.s);
+ break;
+ case MP_CMD_QUIT:
+ exit_player_with_rc(MSGTR_Exit_quit, (cmd->nargs > 0)? cmd->args[0].v.i : 0);
+ break;
+ }
+
+ mp_cmd_free(cmd);
+
+ if (entry) { // user entered a command that gave a valid entry
+ if (playtree) // the playtree is always a node with one child. let's clear it
+ play_tree_free_list(playtree->child, 1);
+ else playtree=play_tree_new(); // .. or make a brand new playtree
+
+ if (!playtree) continue; // couldn't make playtree! wait for next command
+
+ play_tree_set_child(playtree, entry);
+
+ playtree_iter = play_tree_iter_new(playtree, mconfig); // make iterator starting at top of tree
+ if (!playtree_iter) continue;
+
+ // find the first real item in the tree
+ if (play_tree_iter_step(playtree_iter,0,0) != PLAY_TREE_ITER_ENTRY) {
+ // no items!
+ play_tree_iter_free(playtree_iter);
+ playtree_iter = NULL;
+ continue; // wait for next command
+ }
+ filename = play_tree_iter_get_file(playtree_iter, 1);
+ }
+}
//---------------------------------------------------------------------------
if(filename) mp_msg(MSGT_CPLAYER,MSGL_INFO,MSGTR_Playing, filename);
@@ -4334,8 +4385,8 @@
}
#endif
-if(use_gui || playtree_iter != NULL){
-
+if(use_gui || playtree_iter != NULL || player_idle_mode){
+ if (!playtree_iter) filename = NULL;
eof = 0;
goto play_next_file;
}
Index: help/help_mp-en.h
===================================================================
RCS file: /cvsroot/mplayer/main/help/help_mp-en.h,v
retrieving revision 1.178
diff -u -r1.178 help_mp-en.h
--- help/help_mp-en.h 28 Jul 2005 09:56:33 -0000 1.178
+++ help/help_mp-en.h 27 Aug 2005 16:24:37 -0000
@@ -161,6 +161,7 @@
#define MSGTR_IncreaseRTCMaxUserFreq "Try adding \"echo %lu > /proc/sys/dev/rtc/max-user-freq\" to your system startup scripts.\n"
#define MSGTR_LinuxRTCInitErrorPieOn "Linux RTC init error in ioctl (rtc_pie_on): %s\n"
#define MSGTR_UsingTimingType "Using %s timing.\n"
+#define MSGTR_NoIdleAndGui "The -idle option cannot be used with GUI MPlayer.\n"
#define MSGTR_MenuInitialized "Menu inited: %s\n"
#define MSGTR_MenuInitFailed "Menu init failed.\n"
#define MSGTR_Getch2InitializedTwice "WARNING: getch2_init called twice!\n"
More information about the MPlayer-dev-eng
mailing list