diff --git a/input/input.c b/input/input.c index 40cc34ed6b..bdef163782 100644 --- a/input/input.c +++ b/input/input.c @@ -17,6 +17,7 @@ #ifdef MP_DEBUG #include #endif +#include "mp_fifo.h" #include "osdep/getch2.h" #include "osdep/keycodes.h" #include "osdep/timer.h" @@ -1061,15 +1062,14 @@ if(n>0){ } #ifdef HAVE_POSIX_SELECT // No input from this fd - if (!key_fds[i].no_select && !FD_ISSET(key_fds[i].fd, &fds) - && key_fds[i].fd != 0) + if (!key_fds[i].no_select && !FD_ISSET(key_fds[i].fd, &fds)) continue; #endif if(key_fds[i].fd == 0) { // stdin is handled by getch2 - code = getch2(time); + getch2(); + code = mplayer_get_key(0); if(code < 0) code = MP_INPUT_NOTHING; - did_sleep = 1; } else code = ((mp_key_func_t)key_fds[i].read_func)(key_fds[i].fd); diff --git a/mencoder.c b/mencoder.c index 93956e1730..d945646ce8 100644 --- a/mencoder.c +++ b/mencoder.c @@ -225,6 +225,10 @@ int mp_input_check_interrupt(int time) { usec_sleep(time); return 0; } +// Needed by getch2 +void mplayer_put_key(int code) +{ +} #ifdef USE_ASS #include "libass/ass.h" diff --git a/osdep/getch2-win.c b/osdep/getch2-win.c index 002d39d4a6..260c7c3f76 100644 --- a/osdep/getch2-win.c +++ b/osdep/getch2-win.c @@ -9,6 +9,7 @@ #include #include "keycodes.h" #include "input/input.h" +#include "mp_fifo.h" // HACK, stdin is used as something else below #undef stdin @@ -34,13 +35,13 @@ void get_screen_size(){ static HANDLE stdin; static int getch2_status=0; -int getch2(int time){ +static int getch2_internal(void) +{ INPUT_RECORD eventbuffer[128]; DWORD retval; int i=0; if(!getch2_status)return -1; /*check if there are input events*/ - WaitForSingleObject(stdin, time); if(!GetNumberOfConsoleInputEvents(stdin,&retval)) { printf("getch2: can't get number of input events: %i\n",GetLastError()); @@ -118,6 +119,12 @@ int getch2(int time){ return -1; } +void getch2(void) +{ + int r = getch2_internal(); + if (r >= 0) + mplayer_put_key(r); +} void getch2_enable(){ DWORD retval; diff --git a/osdep/getch2.c b/osdep/getch2.c index 0d04de87b5..e204fa4c03 100644 --- a/osdep/getch2.c +++ b/osdep/getch2.c @@ -35,6 +35,7 @@ #include +#include "mp_fifo.h" #include "keycodes.h" #ifdef HAVE_TERMIOS @@ -133,27 +134,19 @@ void get_screen_size(void){ #endif } -int getch2(int time){ +void getch2(void) +{ int len=0; int code=0; int i=0; - while(!getch2_len || (getch2_len==1 && getch2_buf[0]==27)){ - fd_set rfds; - struct timeval tv; int retval; - /* Watch stdin (fd 0) to see when it has input. */ - FD_ZERO(&rfds); FD_SET(0,&rfds); - /* Wait up to 'time' microseconds. */ - tv.tv_sec=time/1000; tv.tv_usec = (time%1000)*1000; - retval=select(1, &rfds, NULL, NULL, &tv); - if(retval<=0) return -1; - /* Data is available now. */ retval=read(0,&getch2_buf[getch2_len],BUF_LEN-getch2_len); - if(retval<1) return -1; + if (retval < 1) + return; getch2_len+=retval; - } + while (getch2_len > 0 && (getch2_len > 1 || getch2_buf[0] != 27)) { /* First find in the TERMCAP database: */ for(i=0;i