mirror of
https://github.com/mpv-player/mpv.git
synced 2024-09-20 12:02:23 +02:00
Do not loose commands while paused.
git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@13604 b3059339-0415-0410-9bf9-f77b7e298cf2
This commit is contained in:
parent
320e68675a
commit
830b241f3f
@ -1126,7 +1126,7 @@ mp_input_queue_cmd(mp_cmd_t* cmd) {
|
||||
}
|
||||
|
||||
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 @@ mp_input_get_queued_cmd(void) {
|
||||
|
||||
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 @@ mp_input_get_cmd(int time, int paused) {
|
||||
return NULL;
|
||||
}
|
||||
|
||||
if (!from_queue && peek_only)
|
||||
mp_input_queue_cmd(ret);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
@ -1610,7 +1622,7 @@ static int mp_input_print_cmd_list(m_option_t* cfg) {
|
||||
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 @@ mp_input_check_interrupt(int time) {
|
||||
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;
|
||||
}
|
||||
|
@ -195,7 +195,7 @@ mp_input_queue_cmd(mp_cmd_t* cmd);
|
||||
// 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);
|
||||
|
11
mplayer.c
11
mplayer.c
@ -628,7 +628,7 @@ void load_per_file_config (m_config_t* conf, const char *const file)
|
||||
// The function return a new value for eof.
|
||||
static int libmpdemux_was_interrupted(int eof) {
|
||||
mp_cmd_t* cmd;
|
||||
if((cmd = mp_input_get_cmd(0,0)) != NULL) {
|
||||
if((cmd = mp_input_get_cmd(0,0,0)) != NULL) {
|
||||
switch(cmd->id) {
|
||||
case MP_CMD_QUIT:
|
||||
exit_player_with_rc(MSGTR_Exit_quit, (cmd->nargs > 0)? cmd->args[0].v.i : 0);
|
||||
@ -1234,7 +1234,7 @@ if(!noconsolecontrols && !slave_mode){
|
||||
usec_sleep(20000);
|
||||
guiEventHandling();
|
||||
guiGetEvent( guiReDraw,NULL );
|
||||
if ( (cmd = mp_input_get_cmd(0,0)) != NULL) guiGetEvent( guiIEvent,(char *)cmd->id );
|
||||
if ( (cmd = mp_input_get_cmd(0,0,0)) != NULL) guiGetEvent( guiIEvent,(char *)cmd->id );
|
||||
}
|
||||
guiGetEvent( guiSetParameters,NULL );
|
||||
if ( guiIntfStruct.StreamType == STREAMTYPE_STREAM )
|
||||
@ -2468,7 +2468,7 @@ if(auto_quality>0){
|
||||
if (audio_out && sh_audio)
|
||||
audio_out->pause(); // pause audio, keep data if possible
|
||||
|
||||
while( (cmd = mp_input_get_cmd(20,1)) == NULL) {
|
||||
while( (cmd = mp_input_get_cmd(20,1,1)) == NULL) {
|
||||
if(sh_video && video_out && vo_config_count) video_out->check_events();
|
||||
#ifdef HAVE_NEW_GUI
|
||||
if(use_gui){
|
||||
@ -2483,7 +2483,10 @@ if(auto_quality>0){
|
||||
#endif
|
||||
usec_sleep(20000);
|
||||
}
|
||||
if (cmd->id == MP_CMD_PAUSE) {
|
||||
cmd = mp_input_get_cmd(0,1,0);
|
||||
mp_cmd_free(cmd);
|
||||
}
|
||||
osd_function=OSD_PLAY;
|
||||
if (audio_out && sh_audio)
|
||||
audio_out->resume(); // resume audio
|
||||
@ -2548,7 +2551,7 @@ if (stream->type==STREAMTYPE_DVDNAV && dvd_nav_still)
|
||||
{
|
||||
mp_cmd_t* cmd;
|
||||
int brk_cmd = 0;
|
||||
while( !brk_cmd && (cmd = mp_input_get_cmd(0,0)) != NULL) {
|
||||
while( !brk_cmd && (cmd = mp_input_get_cmd(0,0,0)) != NULL) {
|
||||
switch(cmd->id) {
|
||||
case MP_CMD_SEEK : {
|
||||
int v,abs;
|
||||
|
Loading…
Reference in New Issue
Block a user