[Mplayer-cvslog] CVS: main/input input.c, 1.98, 1.99 input.h, 1.46, 1.47

Reimar Döffinger CVS syncmail at mplayerhq.hu
Sun Oct 10 19:39:09 CEST 2004


CVS change done by Reimar Döffinger CVS

Update of /cvsroot/mplayer/main/input
In directory mail:/var2/tmp/cvs-serv8731/input

Modified Files:
	input.c input.h 
Log Message:
Do not loose commands while paused.


Index: input.c
===================================================================
RCS file: /cvsroot/mplayer/main/input/input.c,v
retrieving revision 1.98
retrieving revision 1.99
diff -u -r1.98 -r1.99
--- input.c	15 Sep 2004 14:08:46 -0000	1.98
+++ input.c	10 Oct 2004 17:39:06 -0000	1.99
@@ -1126,7 +1126,7 @@
 }
 
 static mp_cmd_t*
-mp_input_get_queued_cmd(void) {
+mp_input_get_queued_cmd(int peek_only) {
   mp_cmd_t* ret;
 
   if(cmd_queue_length == 0)
@@ -1134,20 +1134,29 @@
 
   ret = cmd_queue[cmd_queue_start];
   
+  if (!peek_only) {  
   cmd_queue_length--;
   cmd_queue_start = (cmd_queue_start + 1) % CMD_QUEUE_SIZE;
+  }
   
   return ret;
 }  
 
+/**
+ * \param peek_only when set, the returned command stays in the queue.
+ * Do not free the returned cmd whe you set this!
+ */
 mp_cmd_t*
-mp_input_get_cmd(int time, int paused) {
+mp_input_get_cmd(int time, int paused, int peek_only) {
   mp_cmd_t* ret = NULL;
   mp_cmd_filter_t* cf;
+  int from_queue;
 
   while(1) {
-    ret = mp_input_get_queued_cmd();
+    from_queue = 1;
+    ret = mp_input_get_queued_cmd(peek_only);
     if(ret) break;
+    from_queue = 0;
     ret = mp_input_read_keys(time,paused);
     if(ret) break;
     ret = mp_input_read_cmds(time);
@@ -1160,6 +1169,9 @@
       return NULL;
   }
 
+  if (!from_queue && peek_only)
+    mp_input_queue_cmd(ret);
+
   return ret;
 }
 
@@ -1610,7 +1622,7 @@
 int
 mp_input_check_interrupt(int time) {
   mp_cmd_t* cmd;
-  if((cmd = mp_input_get_cmd(time,0)) == NULL)
+  if((cmd = mp_input_get_cmd(time,0,1)) == NULL)
     return 0;
   switch(cmd->id) {
   case MP_CMD_QUIT:
@@ -1618,12 +1630,10 @@
   case MP_CMD_PLAY_TREE_UP_STEP:
   case MP_CMD_PLAY_ALT_SRC_STEP:
     // The cmd will be executed when we are back in the main loop
-    if(! mp_input_queue_cmd(cmd)) {
-      mp_msg(MSGT_INPUT,MSGL_ERR,"mpdemux_check_interrupt: can't queue cmd %s\n",cmd->name);
-      mp_cmd_free(cmd);
-    }
     return 1;
   }
+  // remove the cmd from the queue
+  cmd = mp_input_get_cmd(time,0,0);
   mp_cmd_free(cmd);
   return 0;
 }

Index: input.h
===================================================================
RCS file: /cvsroot/mplayer/main/input/input.h,v
retrieving revision 1.46
retrieving revision 1.47
diff -u -r1.46 -r1.47
--- input.h	15 Sep 2004 09:45:34 -0000	1.46
+++ input.h	10 Oct 2004 17:39:06 -0000	1.47
@@ -195,7 +195,7 @@
 // This function retrieves the next available command waiting no more than time msec.
 // If pause is true, the next input will always return a pause command.
 mp_cmd_t*
-mp_input_get_cmd(int time, int paused);
+mp_input_get_cmd(int time, int paused, int peek_only);
 
 mp_cmd_t*
 mp_input_parse_cmd(char* str);




More information about the MPlayer-cvslog mailing list